Difference between revisions of "Manual jp"
| (9 intermediate revisions by 4 users not shown) | |||
| Line 57: | Line 57: | ||
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択 | ## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択 | ||
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]] | ### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]] | ||
| − | ## | + | ##リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード |
#インストーラを起動 | #インストーラを起動 | ||
| − | |||
#インストーラプログラムを以下の手順で進める | #インストーラプログラムを以下の手順で進める | ||
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。 | ## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。 | ||
| Line 68: | Line 67: | ||
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]] | ## [[File:ef4832e2f1e1c50e3b74d22418088573.png]] | ||
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]] | ## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]] | ||
| + | |||
| + | == rpy2 == | ||
| + | rpy2はpythonから統計解析システムRを利用するためのライブラリです | ||
| + | |||
| + | # rpy2のサイト http://sourceforge.net/projects/rpy/ | ||
| + | ##python2.6用のwindows用バイナリファイル http://sourceforge.net/projects/rpy/files/rpy2/2.0.x/rpy2-2.0.8.win32-py2.6.msi/download?use_mirror=jaist をダウンロード | ||
| + | #インストーラプログラムを以下の手順で進める | ||
| + | ## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。 | ||
= Pythonを用いてneutorychoのデータを扱うSample = | = Pythonを用いてneutorychoのデータを扱うSample = | ||
| Line 120: | Line 127: | ||
import re | import re | ||
| − | _indir = " | + | _indir = "C:/neurotycho/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" |
def load_mat(path): | def load_mat(path): | ||
return scipy.io.loadmat(path) | return scipy.io.loadmat(path) | ||
| Line 171: | Line 178: | ||
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
| − | _indir = " | + | _indir = "C:/neurotycho/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" |
def load_mat(path): | def load_mat(path): | ||
return scipy.io.loadmat(path) | return scipy.io.loadmat(path) | ||
| Line 257: | Line 264: | ||
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。 | 青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。 | ||
| + | |||
| + | == Rとpythonの連携 == | ||
| + | Rを用いて、ECoGデータに対して短時間高速フーリエ変換を掛ける。 | ||
| + | #!/usr/bin/env python | ||
| + | # -*- coding: utf-8 -*- | ||
| + | import numpy as np | ||
| + | import scipy.io | ||
| + | from rpy2 import robjects | ||
| + | import scipy | ||
| + | import matplotlib | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | _indir = "C:/neurotycho/20100604S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/" | ||
| + | |||
| + | def load_mat(path): | ||
| + | return scipy.io.loadmat(path) | ||
| + | |||
| + | if __name__=="__main__": | ||
| + | try: | ||
| + | robjects.r["library"]("e1071") | ||
| + | pass | ||
| + | except: | ||
| + | robjects.r["options"](repos="http://cran.md.tsukuba.ac.jp") | ||
| + | robjects.r["install.packages"]("e1071") | ||
| + | robjects.r["library"]("e1071") | ||
| + | mat = load_mat(_indir + "ECoG_ch1.mat")["ECoGData_ch1"][0] | ||
| + | stft = robjects.r["stft"](robjects.FloatVector(mat)) | ||
| + | robjects.r["png"]() | ||
| + | robjects.r["plot"](stft) | ||
| + | robjects.r["dev.off"]() | ||
| + | |||
| + | === result === | ||
| + | [[File:Rplot001.png|300px]] | ||
| + | [[File:ca592b24adff54e62f5e2f7af236e919.png|300px]] | ||
| + | |||
| + | 睡眠タスクのデータに対して短時間フーリエ変換を適用している。薬品注入前と注入後で、含まれる周波数特性が変わっているのが分かる。 | ||
Latest revision as of 14:29, 20 November 2011
Contents
Windows環境におけるpythonでの解析環境の構築マニュアル[edit]
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。
Python[edit]
- http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード
- インストーラーを起動
- インストーラープログラムを以下の手順で進める
- 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。
"Install for all users"を選択して、"Next"ボタンを押す
画面に書かれているものから変更せずにそのまま"Next"ボタンを押す- File:Data/050998d9a57e931e46c2c70119982d27.png "Next"ボタンを押してインストールを開始する
Numpy[edit]
Numpyはオープンソースのpython用の数値計算用のライブラリです。
- http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード
- File:d9f9e4c26024b18dc4b21b099e7f900d.png]]
- インストーラーを起動
- インストーラープログラムを以下の手順で進める
Scipy[edit]
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。
- http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード
- インストーラーを起動
- インストーラープログラムを以下の手順で進める
Matplotlib[edit]
Matplotlibはpython用のグラフ描画の為のライブラリです。
- matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス
- download リンクをクリックしてダウンロードページに移動.
- "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード
- インストーラーを起動
- インストーラープログラムを以下の手順で進める
R[edit]
Rはオープンソースの統計解析用のプログラムです。
- Rのページ http://www.r-project.org/ にアクセス
- ミラーを選択 http://cran.r-project.org/mirrors.html
- ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択
- リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード
- インストーラを起動
- インストーラプログラムを以下の手順で進める
rpy2[edit]
rpy2はpythonから統計解析システムRを利用するためのライブラリです
- rpy2のサイト http://sourceforge.net/projects/rpy/
- python2.6用のwindows用バイナリファイル http://sourceforge.net/projects/rpy/files/rpy2/2.0.x/rpy2-2.0.8.win32-py2.6.msi/download?use_mirror=jaist をダウンロード
- インストーラプログラムを以下の手順で進める
- 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。
Pythonを用いてneutorychoのデータを扱うSample[edit]
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。
ECoGデータのプロット[edit]
Sleeping Taskのデータを対象に表示
#!/usr/bin/python
#-*- coding: utf-8 -*-
import numpy as np
import scipy.io
import scipy
import matplotlib
import matplotlib.pyplot as plt
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"
def load_mat(path):
"""
loading a matlab data using scipy.io
"""
return scipy.io.loadmat(path)
if __name__=="__main__":
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data
data = mat["ECoGData_ch1"][0]
event = load_mat(_indir+"Event.mat")##loading event data
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(data)#plotting ECoGdata
ax.annotate('Inject anesthetic drug',
xy=(eindex[0],data[eindex[0]]),
xytext=(eindex[0]-170000,2000),
arrowprops=dict(facecolor='black', shrink=0.1,),
)
plt.show()
result[edit]
薬液注入後にECoG波形に明らかな変化があることが分かる。
ECoGデータの電極間の相関を求める[edit]
#!/usr/bin/python
#-*- coding: utf-8 -*-
import numpy as np
import scipy.io
import matplotlib
import matplotlib.pyplot as plt
import glob
import re
_indir = "C:/neurotycho/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"
def load_mat(path):
return scipy.io.loadmat(path)
def load_ecog_mats(path):
"""
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換
"""
pat = re.compile(r'ch(\d+)\.')
files = glob.glob(path+"*_ch*")
dic={}
for f in files:
result = pat.search(f)
if result:
id = result.group(1)
name = "ECoGData_ch"+id
dic[int(id)] = load_mat(f)[name][0]
ret = []
for k in sorted(dic.keys()):#電極の番号順に並び替え
ret.append(dic[k])
return ret
if __name__=="__main__":
data = load_ecog_mats(_indir)
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画
cbar = fig.colorbar(cax)
plt.show()
result[edit]
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。
刺激ごとの加算平均を求める[edit]
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。
#!/usr/bin/python
#-*- coding: utf-8 -*-
import numpy as np
import scipy.io
import scipy
import matplotlib
import matplotlib.pyplot as plt
_indir = "C:/neurotycho/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"
def load_mat(path):
return scipy.io.loadmat(path)
def is_transit_state(laststate,nowstate,index,dic):
"""
状態が遷移したのかどうかを評価
"""
if laststate==nowstate:
return 0;
else:
if laststate==0:
dic[nowstate].append(index)
else:
dic[laststate].append(index-1)
def get_event(path):
"""
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成
"""
event=load_mat(path+"Event.mat")["EventData"][0]
length = len(event)
state=0
dic=defaultdict(list)
for i in range(length):
signal = event[i]
if signal>=650 and signal<=750:
is_transit_state(state,1,i,dic)
state=1
elif signal>=950 and signal<=1050:
is_transit_state(state,2,i,dic)
state=2
elif signal>=1300 and signal<=1400:
is_transit_state(state,3,i,dic)
state=3
elif signal>=1600 and signal<=1700:
is_transit_state(state,4,i,dic)
state=4
elif signal>=1950 and signal<=2050:
is_transit_state(state,5,i,dic)
state=5
elif signal>=2250 and signal<=2350:
is_transit_state(state,6,i,dic)
state=6
elif signal>=2600 and signal<=2700:
is_transit_state(state,7,i,dic)
state=7
elif signal>=2900 and signal<=3000:
is_transit_state(state,8,i,dic)
state=8
else:
is_transit_state(state,0,i,dic)
state=0
for k,v in dic.iteritems():
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成
return dic
def calc_avg_signal(id,event):
"""
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する
"""
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]
data = []
for j in range(8):
stimuli = event_dic["%i" % (j+1)]
ret = []
for pair in stimuli:
ret.append(ecog[pair[0]:pair[1]][0:1990])
data.append(sum(ret)/len(stimuli)+0.0)
return data
if __name__=="__main__":
event_dic = get_event(_indir)
id = 123
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する
ax.plot(data[3])#傾き180の時の波形
ax.plot(data[7])#傾き360の時の波形
plt.show()
result[edit]
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。
Rとpythonの連携[edit]
Rを用いて、ECoGデータに対して短時間高速フーリエ変換を掛ける。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import scipy.io
from rpy2 import robjects
import scipy
import matplotlib
import matplotlib.pyplot as plt
_indir = "C:/neurotycho/20100604S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"
def load_mat(path):
return scipy.io.loadmat(path)
if __name__=="__main__":
try:
robjects.r["library"]("e1071")
pass
except:
robjects.r["options"](repos="http://cran.md.tsukuba.ac.jp")
robjects.r["install.packages"]("e1071")
robjects.r["library"]("e1071")
mat = load_mat(_indir + "ECoG_ch1.mat")["ECoGData_ch1"][0]
stft = robjects.r["stft"](robjects.FloatVector(mat))
robjects.r["png"]()
robjects.r["plot"](stft)
robjects.r["dev.off"]()
result[edit]
睡眠タスクのデータに対して短時間フーリエ変換を適用している。薬品注入前と注入後で、含まれる周波数特性が変わっているのが分かる。



















