勉強したい今日この頃。
とりあえず、今やってる研究の関係で、
5段階でとったアンケートの検証方法について知りたい。
例えば、2つシステムがあって、両者の比較をするなら
同じ質問項目(i.e. 使いやすかったですかー?とか)に
それぞれ答えてもらって、その結果を符号検定すれば済むんだけど。
問題は質問が1回しかない場合なんだよね。
そもそもそういう風に実験をセッティングする事自体に
問題があるのかもしれないけど。。。
とりあえず、今はアンケートの5段階それぞれに1,2,3,4,5と点数をつけて、
本来の平均は3になりますが、
有意水準1%で左片側検定をした結果では…
とか言ってる。
サンプル数は100を超えてるから、
サンプル自体が大標本としては使えるんだけど。。。
果たしてこれは正しいんだろうか??
2009年2月28日土曜日
[Python] 条件付評価式
Python2.5から使用可能な条件付評価式 (Conditional Expressions) 。
とってきたBK Treeのプログラム中にあった。
つまりは一行で書けるif-else構文のこと。(代入限定)
>>> a = 1
>>> a = 2 if a == 1 else 3
>>> a
2
普通の表記だと、以下のようになる。
>>> a = 1
>>> if a == 1:
... a = 2
... else:
... a = 3
>>> a
2
Python2.5をいれているので実行は普通に出来るんだけど
Eclipseの自動構文チェックではエラー扱いになってる。
何でだろう?
Pydevが古いのかな。
そういや、アップデートをエラーのまま放置してる。。。
とってきたBK Treeのプログラム中にあった。
つまりは一行で書けるif-else構文のこと。(代入限定)
>>> a = 1
>>> a = 2 if a == 1 else 3
>>> a
2
普通の表記だと、以下のようになる。
>>> a = 1
>>> if a == 1:
... a = 2
... else:
... a = 3
>>> a
2
Python2.5をいれているので実行は普通に出来るんだけど
Eclipseの自動構文チェックではエラー扱いになってる。
何でだろう?
Pydevが古いのかな。
そういや、アップデートをエラーのまま放置してる。。。
2009年2月27日金曜日
[Python] 標準出力の文字化け対策 in Windows
今まで無視していた標準出力の文字化けを直す。
Windowsの標準出力で文字化けが起こる場合、
基本的にはShift_JIS(cp932)にエンコードすればOK。
ちなみにうちの開発環境はeclipse。
keyword = "図書館戦争"
print keyword.encode('cp932')
[出力]
図書館戦争
無事出力☆
でも、sitecustomize.py、defaultencoding、Eclipseワークスペース、
ソースファイル全てのエンコードにutf-8を設定しているのに
何でこんなことになるんだろう??
答えはWindowsのMS-DOSで解決。
Windowsの標準コードはShift_JISなので、
標準出力についてはそっちに依存してたんだと納得。
C\:> chcp
現在のコード ページ: 932
実際、pythonの標準入力・出力系の文字コードを確認してみると、
cp932であることが確認できた。
>>> sys.stdin.encoding
'cp932'
>>> sys.stdout.encoding
'cp932'
>>> sys.stderr.encoding
'cp932'
内部でどうなっているかは分からないけど、
今後入出力はcp932で行なう事を意識する。
2009年2月26日木曜日
[Python] threadingモジュールを使ってみる
Pythonでスレッドを使う方法は
threadはスレッドの終わりを検知する機能が無い。
=メインメソッドの実行が終わると、実行途中でも中断されてしまう。
(これを無理やり同期取ろうとするとwhile文でチェックし続けるとか
アホなコードになってしまいました。)
threadingではスレッドの実行終了のタイミングまで、実行を一時停止する機能がある。
[使用例]
import threading
import time
class testTreading(threading.Thread):
def run(self):
for i in range(1, 5):
print i
time.sleep(2)
r = registerRelationShip()
r.start()
r.join(1000) #スレッドの終了までの待ち時間
print "end"
[出力]
1
2
3
4
end
実行したい内容はrun()メソッドに書いて、
それをstart()メソッドで実行させる。
join()メソッドでスレッドの終了を待つので、
endが出力されるのは一番最後。
こっちの方が使い勝手良さそうかな。
- threadをimportしてthread.start_new_thread(func, args)にスレッドとして動かした関数を指定。
- スレッド化したいクラスで、threading.Treadを継承する
threadはスレッドの終わりを検知する機能が無い。
=メインメソッドの実行が終わると、実行途中でも中断されてしまう。
(これを無理やり同期取ろうとするとwhile文でチェックし続けるとか
アホなコードになってしまいました。)
threadingではスレッドの実行終了のタイミングまで、実行を一時停止する機能がある。
[使用例]
import threading
import time
class testTreading(threading.Thread):
def run(self):
for i in range(1, 5):
print i
time.sleep(2)
r = registerRelationShip()
r.start()
r.join(1000) #スレッドの終了までの待ち時間
print "end"
[出力]
1
2
3
4
end
実行したい内容はrun()メソッドに書いて、
それをstart()メソッドで実行させる。
join()メソッドでスレッドの終了を待つので、
endが出力されるのは一番最後。
こっちの方が使い勝手良さそうかな。
[Python] __slots__の用法
メモリ節約&実行速度向上のため、__slots__を使ってみる。
__slots__
[コード例]
class test(object):
__slots__ = ['foo', 'bar']
def printFoo():
print self.foo
def setFoo(_foo):
self.foo = _foo
t = test()
t.setFoo(20)
t.printFoo()
t.bar = 30
print t.bar
[出力]
20
30
__slots__
- クラスのアトリビュートの一種
- __slots__にString型で変数名を代入すると、それ以外のインスタンス変数が使えなくなる
[コード例]
class test(object):
__slots__ = ['foo', 'bar']
def printFoo():
print self.foo
def setFoo(_foo):
self.foo = _foo
t = test()
t.setFoo(20)
t.printFoo()
t.bar = 30
print t.bar
[出力]
20
30
- クラス内にメソッドも追加できる
- 書きこみも勿論可☆
登録:
投稿 (Atom)