2011年4月2日土曜日

PythonでLIBSVMを使う

導入方法
1.ここからLIBSVMのzipファイルもしくはtar.gzファイルをダウンロードし適当なディレクトリに解凍。(最新版3.1)
2.解凍したフォルダに移動し、makeコマンド実行。以下のファイルができるはず。
 svm.o
 svm-train.exe
 svm-predict.exe
 svm-scale.exe
3.解凍したフォルダの中のpythonフォルダに移動し、makeコマンド実行。以下のファイルができるはず。
 libsvm.so.2

使用例
適当に学習させてみる.
svmtest.py
from svm import *
from svmutil import *

prob = svm_problem([1,-1], [[1,0,1], [-1,0,-1]]) #訓練データ
param = svm_parameter('-t 1 -c 3') #SVMのパラメータ設定
m = svm_train(prob, param) #学習
#新しいクラスに対する予測
p_labels, p_acc, p_vals = svm_predict([1,-1], [[2,1,2],[-3,-2,-10]], m)
print p_labels #予測結果
実行.
>>> python svmtest.py
*
optimization finished, #iter = 1
nu = 0.166667
obj = -0.500000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 2
Accuracy = 100% (2/2) (classification)
[1.0, -1.0]

パラメタの設定
オプション説明デフォルト値
-s SVMの種類.以下を設定.
0 -- C-SVC
1 -- nu-SVC
2 -- one-class SVM
3 -- epsilon-SVR
4 -- nu-SVR
0
-t カーネルの種類.以下を設定.
0 -- 線形カーネル(ただの内積): K(u,v) = uTv
1 -- 多項式カーネル: K(u,v) = (&gamma uTv + r)d
2 -- 動径基底関数カーネル: K(u,v) = exp(-&gamma |u-v|2)
3 -- シグモイドカーネル: K(u,v) = tanh(&gamma uTv + r)
4 -- training_set_fileに記述したカーネル
2
-d 多項式カーネルのパラメタd. 3
-g 多項式,動径基底関数,シグモイドカーネルのパラメタ&gamma. 1/n
n:特徴ベクトルの次元
-r 多項式,シグモイドカーネルのパラメタr. 0
-c C-SVC,epsilon-SVR,nu-SVRで使用するパラメタC. 1
-n nu-SVC,one-class SVM,nu-SVRで使用するパラメタnu. 0.5
-p epsilon-SVRのパラメタ&epsilon. 0.1
-m 使用キャッシュサイズ.単位はMB. 100
-e 終了基準. 0.001
-h shrinking heuristicsを使う場合は1,使わない場合は0. 1
-b 確率推定付きのSVC/SVRモデルを作成する場合は1,しない場合は0. 0
-wi C-SVCにおけるクラスiのパラメタCの重み.(weight*C) 1
-v n-分割交差検定(n-fold cross validation)モード. -
-q quiet mode (no outputs) -

2011年2月5日土曜日

PythonでSQLite - カラムの新規追加

SQLiteのDBのテーブルにカラムを新規追加する.既にあれば何もしない.
from sqlite3 import dbapi2 as sqlite

dbname = "test.db" #DBファイルの名前
tablename = "personae" #テーブルの名前
colname = "sp" #新しく追加するカラムの名前
con = sqlite.connect(dbname)
#カラムの存在確認
cur = con.execute("PRAGMA table_info('%s')" % tablename)
res = cur.fetchall()
i = 0
while i < len(res):
    if res[i][1] == colname: break
    i += 1
if i == len(res): #存在してないので作る
    cur = con.execute("ALTER TABLE %s ADD COLUMN %s INTEGER" % (tablename,colname))
    con.commit()
con.close()

2011年2月3日木曜日

PythonでSQLite - テーブルの新規作成

SQLiteのDBにテーブルを新規作成する.既にテーブルがあれば何もしない.
from sqlite3 import dbapi2 as sqlite

dbname = "test.db" #DBファイルの名前
tablename = "personae" #テーブルの名前
con = sqlite.connect(dbname)
#テーブルの存在確認
cur = con.execute("SELECT * FROM sqlite_master WHERE type='table' and name='%s'" % tablename)
if cur.fetchone() == None: #存在してないので作る
    con.execute("CREATE TABLE %s(id INTEGER, name TEXT, hp INTEGER, mp INTEGER)" % tablename)
    con.commit()
con.close()

2010年10月23日土曜日

テストツールSahiでスクリーンショット取得

Webアプリケーションの自動テストツールSahiでスクリーンショットを取得する関数.(スクリーン全体を取得する)
function takeSnapshot(filepath) {
   try {
      var robot = new java.awt.Robot();
      var toolkit = new java.awt.Toolkit.getDefaultToolkit();
      var screenSize = toolkit.getScreenSize();
      var screenRect = new java.awt.Rectangle(0, 0, screenSize.width, screenSize.height);
      var image = robot.createScreenCapture(screenRect);
      var file = new java.io.File(filepath);
      javax.imageio.ImageIO.write(image, "png", file);
   } catch (e) {
      print(e);
   }
}

保存ファイルを指定してスクリーンショットを取得する.
var filepath = "C:/home/hy/sahi/userdata/scripts/snapshot1.png";
takeSnapshot(filepath);

テストツールSahiでテスト自動化

Webアプリケーションの自動テストツールSahi.インドの会社Tyto Softwareが開発したオープンソースツール(Apache License 2.0).SahiはOS,ブラウザから独立して動作するため,様々な環境でテスト可能.


インストール

ここからダウンロードし,適当な場所に解凍する.(Sahi V3 (2010-08-20))


起動

解凍したフォルダのbinフォルダに移動し, sahi.batを実行.



ブラウザ設定

Sahiはプロキシサーバとして動作するため,ブラウザのプロキシ設定を変更する.
(FireFoxの場合)
ツール → オプション → 詳細 → ネットワーク → 接続設定
「手動でプロキシを設定する」を選択
HTTPプロキシに「localhost」,ポートに「9999」を設定
(IE,Chromeの場合)
インターネットのプロパティ → 接続 → LANの設定
「LANにプロキシサーバを設定する」を選択
アドレスに「localhost」,ポートに「9999」を設定


ユーザ操作の記録

①ブラウザ上でAlt(またはCtrl+Alt)を押しながらダブルクリックし,Sahiのコントローラウィンドウを立ち上げ, Script Nameにスクリプトファイル名を入力,Recordボタンを押下し,ブラウザ上のユーザ操作の記録を開始.
②ブラウザ上で入力,ボタン押下等の操作を行うと記録される.
③html要素の値の比較をスクリプトに追加したい場合は,まずCtrl押しながらhtml要素の上にマウスポインタをかざし,Append to Scriptボタンを押下.






④Stopボタンを押下して記録を終了. スクリプトはjavascriptに似たSahi独自のスクリプトで記述される.
スクリプト例:
_setValue(_textbox("q"), "医龍");
_click(_submit("Google 検索"));
_click(_link("医龍-Team Medical Dragon- - Wikipedia"));
_assertExists(_heading1("医龍-Team Medical Dragon-"));
_assert(_isVisible(_heading1("医龍-Team Medical Dragon-")));
_assertEqual("医龍-Team Medical Dragon-", _getText(_heading1("医龍-Team Medical Dragon-")));
_assertContainsText("医龍-Team Medical Dragon-", _heading1("医龍-Team Medical Dragon-"));


テスト実行

スクリプトを実行する場合は,SahiコントローラのPlaybackタブから,スクリプトファイルとスタートURLを入力し,Setボタン,Playボタンを押下する.すると,テストが自動で実行される.






実行結果は,View Logsから見れる.





Sahiでできないこと

Sahiはフレーム,インラインフレームのページに対応してない.

2010年10月13日水曜日

テストツールwatirのインストール

Webアプリケーションの自動テストツールwatirをwindows7にインストールする。
watirのHPはここ
最新版はwatir 1.6.6。

1.rubyのインストール。
  ここからダウンロードしてインストールする。


2.watirのHPによると、次はwatirをインストールをするためにコマンドプロンプトから以下のコマンドを実行する。
gem update --system
gem install watir
が、以下のエラーが出る。
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 302
そこで、RubyGemsを最新のものに更新する。
ここからダウンロードし、ファイルを解凍、解凍したフォルダからコマンドプロンプトで ruby setup.rb を実行する。


3.今度こそ以下のコマンドを実行し、watirをインストールする。
gem update --system
gem install watir


4.インストールを確認する。ここからテストケースのサンプル(Google検索のテストケース)をダウンロードして、コマンドプロンプトから ruby google_search.rb を実行してみる。IEの起動、検索フォームに文字入力、検索ボタンクリック、検索結果ページの表示、が自動的に行われる。


5.firefox、chrome上で自動化できるようにする。
firefoxの場合は、firefox用プラグインを導入する。このページの "Windows plugin for Firefox x.x" から導入する。テストケースには、require とブラウザオブジェクトの生成を以下のように記述する。
require "firewatir"

browser = FireWatir::Firefox.new

chromeの場合は、watir-webdriverを導入する。以下のコマンドでインストール。
gem install watir-webdriver
テストケースには、require とブラウザオブジェクトの生成を以下のように記述する。
require "watir-webdriver"

browser = Watir::Browser.new(:chrome)

使い方は、 Watir API Reference 参照。

2010年9月19日日曜日

BeautifulSoup - Python HTML/XMLパーサの導入

導入方法
1.ここからBeautifulSoup.pyをダウンロード
2.作業フォルダ or C:\cygwin\lib\python2.6に配置(前提:Cygwin環境)

使用例
Googleのページを取ってきて表示
>>> from BeautifulSoup import BeautifulSoup
>>> from urllib import urlopen
>>> soup=BeautifulSoup(urlopen('http://www.google.co.jp/'))
>>> soup.prettify()
<!doctype html>\n<html>\n <head>\n <meta http-equiv="content-type" content="text/html; charset=utf-8" />\n <title>\n Google\n </title>
・・・
タイトルタグを取得して表示
>>> soup.head.title
<title>Google</title>
<a>タグを取得して、一番目を表示
>>> links=soup('a')
>>> links[0]
<a onclick="gbar.qs(this)" href="http://www.google.co.jp/imghp?hl=ja&tab=wi" class="gb1">画像</a>
一番目の<a>タグのhref属性に記載されたリンク先urlと,<a>タグのテキストコンテンツを表示
>>> links[0].get('href')
u'http://www.google.co.jp/imghp?hl=ja&tab=wi'
>>> links[0].contents[0]
u'\u753b\u50cf'

詳しい使用方法はここ

2010年9月8日水曜日

CygwinにPython Imaging Library (PIL)をインストール

1.ここからPython Imaging Library 1.1.7 Source Kit をダウンロード

2.解凍し、解凍したフォルダに移動
 cd Imaging-1.1.7

3.以下を実行してインストール
 ① rebase -b 0x1000000000 /bin/tk84.dll
 ② python setup.py build_ext -i
 ③ python setup.py install
 ※上記①の意味は分からないが、これを実行しなければエラーになる

4.Cygwinを再起動し、以下を実行してエラーが出なければインストール成功
 ① python
 ② import PIL

使い方はここ

2010年8月29日日曜日

xyzzyのpythonモード設定

1:ダウンロード → ここ
2:解凍
3:etcフォルダ下のpyをxyzzy\etcフォルダにコピー
4:site-lispフォルダ下のpy-mode.lをxyzzy\site-lispフォルダにコピー
5:py-mode.lをバイトコンパイル(M-x byte-compile-file)
6:siteinit.lに以下を追加
   (load-library "py-mode")
   (push '("\\.py$" . py-mode) *auto-mode-alist*)
7:再起動(CtrlとShiftを押しながら起動)