http://wiki.neurotycho.org/api.php?action=feedcontributions&user=Aihara&feedformat=atom
NeuroTychoWiki - User contributions [en]
2024-03-29T09:43:53Z
User contributions
MediaWiki 1.31.0
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=198
Manual jp
2011-04-02T17:57:12Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード<br />
#インストーラを起動<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
== rpy2 ==<br />
rpy2はpythonから統計解析システムRを利用するためのライブラリです<br />
<br />
# rpy2のサイト http://sourceforge.net/projects/rpy/<br />
##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 をダウンロード<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "C:/neurotycho/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "C:/neurotycho/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。<br />
<br />
== Rとpythonの連携 ==<br />
Rを用いて、ECoGデータに対して短時間高速フーリエ変換を掛ける。<br />
#!/usr/bin/env python<br />
# -*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
from rpy2 import robjects<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/" <br />
<br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
try:<br />
robjects.r["library"]("e1071")<br />
pass<br />
except:<br />
robjects.r["options"](repos="http://cran.md.tsukuba.ac.jp")<br />
robjects.r["install.packages"]("e1071")<br />
robjects.r["library"]("e1071")<br />
mat = load_mat(_indir + "ECoG_ch1.mat")["ECoGData_ch1"][0]<br />
stft = robjects.r["stft"](robjects.FloatVector(mat))<br />
robjects.r["png"]()<br />
robjects.r["plot"](stft)<br />
robjects.r["dev.off"]()<br />
<br />
=== result ===<br />
[[File:Rplot001.png|300px]]<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
睡眠タスクのデータに対して短時間フーリエ変換を適用している。薬品注入前と注入後で、含まれる周波数特性が変わっているのが分かる。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Rplot001.png&diff=197
File:Rplot001.png
2011-04-02T17:54:04Z
<p>Aihara: uploaded a new version of &quot;File:Rplot001.png&quot;</p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Rplot001.png&diff=196
File:Rplot001.png
2011-04-02T17:53:29Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=195
Manual jp
2011-04-02T17:53:02Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード<br />
#インストーラを起動<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
== rpy2 ==<br />
rpy2はpythonから統計解析システムRを利用するためのライブラリです<br />
<br />
# rpy2のサイト http://sourceforge.net/projects/rpy/<br />
##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 をダウンロード<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。<br />
<br />
== Rとpythonの連携 ==<br />
#!/usr/bin/env python<br />
# -*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
from rpy2 import robjects<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100604S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/" <br />
<br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
try:<br />
robjects.r["library"]("e1071")<br />
pass<br />
except:<br />
robjects.r["options"](repos="http://cran.md.tsukuba.ac.jp")<br />
robjects.r["install.packages"]("e1071")<br />
robjects.r["library"]("e1071")<br />
mat = load_mat(_indir + "ECoG_ch1.mat")["ECoGData_ch1"][0]<br />
stft = robjects.r["stft"](robjects.FloatVector(mat))<br />
robjects.r["png"]()<br />
robjects.r["plot"](stft)<br />
robjects.r["dev.off"]()<br />
<br />
=== result ===<br />
[[File:Rplot001.png|300px]]</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=194
Manual jp
2011-03-23T10:54:55Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード<br />
#インストーラを起動<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
== rpy2 ==<br />
rpy2はpythonから統計解析システムRを利用するためのライブラリです<br />
<br />
# rpy2のサイト http://sourceforge.net/projects/rpy/<br />
##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 をダウンロード<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=193
Manual jp
2011-03-23T10:09:47Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード<br />
#インストーラを起動<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=192
Manual jp
2011-03-23T10:09:23Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##リンクをWindows- > base とたどって win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=191
Manual jp
2011-03-23T10:07:24Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##win32用の最新バイナリ http://essrc.hyogo-u.ac.jp/cran/bin/windows/base/R-2.12.2-win.exe をダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:66bc3fff3288311f139a3cedf3e16f5b.png&diff=190
File:66bc3fff3288311f139a3cedf3e16f5b.png
2011-03-23T10:06:02Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=189
Manual jp
2011-03-23T10:04:23Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
### [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは http://essrc.hyogo-u.ac.jp/cran/ を選択<br />
### [[File:66bc3fff3288311f139a3cedf3e16f5b.png]]<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=188
Manual jp
2011-03-23T10:01:45Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページ http://www.r-project.org/ にアクセス<br />
## ミラーを選択 http://cran.r-project.org/mirrors.html<br />
## [[File:c171025a2b9f2a67b5411facef241440.png]]<br />
## ここでは<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:C171025a2b9f2a67b5411facef241440.png&diff=187
File:C171025a2b9f2a67b5411facef241440.png
2011-03-23T09:55:27Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=180
Manual jp
2011-03-10T09:19:14Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
## [[File:0957c2b6da2a4b88b4c3346e6907e88a.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:0957c2b6da2a4b88b4c3346e6907e88a.png&diff=179
File:0957c2b6da2a4b88b4c3346e6907e88a.png
2011-03-10T09:19:00Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=178
Manual jp
2011-03-10T09:16:44Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
## [[File:ef4832e2f1e1c50e3b74d22418088573.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Ef4832e2f1e1c50e3b74d22418088573.png&diff=177
File:Ef4832e2f1e1c50e3b74d22418088573.png
2011-03-10T09:16:27Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=176
Manual jp
2011-03-10T09:15:38Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
## [[File:6565ac7bd7c80351dd69d10141716775.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:6565ac7bd7c80351dd69d10141716775.png&diff=175
File:6565ac7bd7c80351dd69d10141716775.png
2011-03-10T09:15:14Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=174
Manual jp
2011-03-10T09:15:02Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:E90192c6291c17ec0f9f85f467423ea9.png]] <br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:E90192c6291c17ec0f9f85f467423ea9.png&diff=173
File:E90192c6291c17ec0f9f85f467423ea9.png
2011-03-10T09:11:08Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=172
Manual jp
2011-03-10T09:10:31Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:fa9fc519e7179301ef5912e0b07852a7.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:2f6801093ffdd92afc7f98194d3da807.png]] <br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Fa9fc519e7179301ef5912e0b07852a7.png&diff=171
File:Fa9fc519e7179301ef5912e0b07852a7.png
2011-03-10T09:10:07Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=170
Manual jp
2011-03-10T09:09:18Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:ae6fb64750f426c318676dc8f32cfabf.png]]<br />
## [[File:a091db2523f45ee42513dc58f16fd165.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:2f6801093ffdd92afc7f98194d3da807.png]] <br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Ae6fb64750f426c318676dc8f32cfabf.png&diff=169
File:Ae6fb64750f426c318676dc8f32cfabf.png
2011-03-10T09:08:52Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=168
Manual jp
2011-03-10T08:38:40Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a091db2523f45ee42513dc58f16fd165.png]] インストール先は表示されているものをそのままに次へ<br />
## [[File:2f6801093ffdd92afc7f98194d3da807.png]] <br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=167
Manual jp
2011-03-10T08:10:40Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
## ミラーを選択<br />
##win32用の最新バイナリをダウンロード<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
<br />
## [[File:a091db2523f45ee42513dc58f16fd165.png]]<br />
## [[File:2f6801093ffdd92afc7f98194d3da807.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=166
Manual jp
2011-03-10T08:09:48Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
<br />
## [[File:a091db2523f45ee42513dc58f16fd165.png]]<br />
## [[File:2f6801093ffdd92afc7f98194d3da807.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:2f6801093ffdd92afc7f98194d3da807.png&diff=165
File:2f6801093ffdd92afc7f98194d3da807.png
2011-03-10T08:09:24Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=163
Manual jp
2011-03-08T14:05:15Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
<br />
## [[File:a091db2523f45ee42513dc58f16fd165.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:A091db2523f45ee42513dc58f16fd165.png&diff=162
File:A091db2523f45ee42513dc58f16fd165.png
2011-03-08T14:04:22Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=161
Manual jp
2011-03-08T14:04:07Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== R ==<br />
Rはオープンソースの統計解析用のプログラムです。<br />
<br />
#Rのページにアクセス<br />
<br />
#インストーラを起動<br />
##<br />
#インストーラプログラムを以下の手順で進める<br />
<br />
## [[FILE:a091db2523f45ee42513dc58f16fd165.png]]<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=158
Manual jp
2011-03-01T15:27:05Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、その周辺の電極のデータの調査などが重要である。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=157
Manual jp
2011-03-01T11:12:57Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]<br />
<br />
青が90度、緑が180度、赤が360度の時の加算平均信号である。傾きに反応するV1視覚野は電極?であるので、そこの信号を比べてみるなどをすれば面白いかもしれない。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Avg.png&diff=156
File:Avg.png
2011-03-01T11:08:51Z
<p>Aihara: uploaded a new version of &quot;File:Avg.png&quot;</p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=155
Manual jp
2011-03-01T11:07:12Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
id = 123<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
ax.plot(data[7])#傾き360の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=154
Manual jp
2011-03-01T11:02:57Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
脳計測データは多くのノイズを含むため、加算平均を行って、意味のある信号を強化し、ノイズをうちけす必要がある。闇雲に加算するのではなく、同じ刺激を与えた場合の信号だけを、刺激提示のタイミングも揃えて加算する必要がある。<br />
<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
id = 123<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=153
Manual jp
2011-03-01T11:01:06Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。<br />
<br />
== 刺激ごとの加算平均を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt <br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/" <br />
def load_mat(path):<br />
return scipy.io.loadmat(path)<br />
<br />
def is_transit_state(laststate,nowstate,index,dic):<br />
"""<br />
状態が遷移したのかどうかを評価<br />
"""<br />
if laststate==nowstate:<br />
return 0;<br />
else:<br />
if laststate==0:<br />
dic[nowstate].append(index)<br />
else:<br />
dic[laststate].append(index-1)<br />
<br />
def get_event(path):<br />
"""<br />
特定の傾きの画像をサルに提示を開始した時間と終了した時間のペアを作成<br />
"""<br />
event=load_mat(path+"Event.mat")["EventData"][0]<br />
length = len(event)<br />
state=0<br />
dic=defaultdict(list)<br />
for i in range(length):<br />
signal = event[i]<br />
if signal>=650 and signal<=750:<br />
is_transit_state(state,1,i,dic)<br />
state=1<br />
elif signal>=950 and signal<=1050:<br />
is_transit_state(state,2,i,dic)<br />
state=2<br />
elif signal>=1300 and signal<=1400:<br />
is_transit_state(state,3,i,dic)<br />
state=3<br />
elif signal>=1600 and signal<=1700:<br />
is_transit_state(state,4,i,dic)<br />
state=4<br />
elif signal>=1950 and signal<=2050:<br />
is_transit_state(state,5,i,dic)<br />
state=5<br />
elif signal>=2250 and signal<=2350:<br />
is_transit_state(state,6,i,dic)<br />
state=6<br />
elif signal>=2600 and signal<=2700:<br />
is_transit_state(state,7,i,dic)<br />
state=7<br />
elif signal>=2900 and signal<=3000:<br />
is_transit_state(state,8,i,dic)<br />
state=8<br />
else:<br />
is_transit_state(state,0,i,dic)<br />
state=0<br />
for k,v in dic.iteritems():<br />
dic[k]=zip(v[0::2],v[1::2])#提示開始時刻と提示終了時刻のペアを作成<br />
return dic<br />
<br />
def calc_avg_signal(id,event):<br />
"""<br />
傾きごとの実験期間のデータと、対象とする電極を与えて、傾きごとの加算平均信号を計算する<br />
"""<br />
ecog = load_mat(_indir+"ECoG_ch%i.mat" % (id))["ECoGData_ch%i"% (id)][0]<br />
data = []<br />
for j in range(8):<br />
stimuli = event_dic["%i" % (j+1)]<br />
ret = []<br />
for pair in stimuli:<br />
ret.append(ecog[pair[0]:pair[1]][0:1990])<br />
data.append(sum(ret)/len(stimuli)+0.0)<br />
return data<br />
<br />
if __name__=="__main__":<br />
event_dic = get_event(_indir)<br />
id = 123<br />
data = calc_avg_signal(id,event_dic)#123番目の電極における、刺激ごとの加算平均信号を計算<br />
id = 123<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data[1])#傾き90度の時の波形 pythonの配列は0から始まるので一つずれた値で指定する<br />
ax.plot(data[3])#傾き180の時の波形<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:avg.png|300px]]</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:Avg.png&diff=152
File:Avg.png
2011-03-01T11:00:34Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=148
Manual jp
2011-03-01T08:59:50Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png|300px]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=147
Manual jp
2011-03-01T08:59:30Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png|300px]][[File:K2.png|300px]]<br />
<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:K2.png&diff=146
File:K2.png
2011-03-01T08:58:17Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=145
Manual jp
2011-02-28T17:17:33Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png]]<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている。全てのデータでまとめて計算しているためこのデータには余り意味が無いが信号の相関の計算と描画方法のデモである。</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=144
Manual jp
2011-02-28T17:10:50Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#全実験期間中の電極間の相関を求める<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png]]<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=143
Manual jp
2011-02-28T17:10:10Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#電極間の相関<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png]]<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=142
Manual jp
2011-02-28T17:09:29Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#電極間の相関<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png]]<br />
<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=141
Manual jp
2011-02-28T17:09:11Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==<br />
<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
import glob<br />
import re<br />
<br />
_indir = "/Users/aihara/work/neurotycho/workdir/data/20100723S1_VGT_K2_KazuhitoTakenaka-ToruYanagawa_mat_ECoG128-Event3/"<br />
def load_mat(path):<br />
return scipy.io.loadmat(path) <br />
<br />
def load_ecog_mats(path):<br />
"""<br />
特定のディレクトリ以下のECoGデータを全て読み込んで配列に変換<br />
"""<br />
pat = re.compile(r'ch(\d+)\.')<br />
files = glob.glob(path+"*_ch*")<br />
dic={}<br />
for f in files:<br />
result = pat.search(f)<br />
if result:<br />
id = result.group(1)<br />
name = "ECoGData_ch"+id<br />
dic[int(id)] = load_mat(f)[name][0]<br />
ret = []<br />
for k in sorted(dic.keys()):#電極の番号順に並び替え<br />
ret.append(dic[k])<br />
return ret<br />
<br />
if __name__=="__main__":<br />
data = load_ecog_mats(_indir)<br />
correlation_mat = np.corrcoef(data)#電極間の相関<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
cax = ax.imshow(correlation_mat, interpolation='nearest')#二次元の画像として相関関係を描画<br />
cbar = fig.colorbar(cax)<br />
plt.show()<br />
<br />
<br />
<br />
=== result ===<br />
[[File:F200acaa400c60d2d4b02f804d44aa22.png]]<br />
赤や黄色である電極同士は相関が高い。基本的には隣り合っている者どうしの相関が高くなっている</div>
Aihara
http://wiki.neurotycho.org/index.php?title=File:F200acaa400c60d2d4b02f804d44aa22.png&diff=140
File:F200acaa400c60d2d4b02f804d44aa22.png
2011-02-28T17:05:36Z
<p>Aihara: </p>
<hr />
<div></div>
Aihara
http://wiki.neurotycho.org/index.php?title=Main_Page&diff=139
Main Page
2011-02-28T09:48:06Z
<p>Aihara: </p>
<hr />
<div>'''Wiki for Neurotycho.org'''<br />
<br />
Welcome to Wiki.Neurotycho!<br />
<br />
Project Tycho is named after Tycho Brahe. The project aims to share reliable massive neural and behavioral data for understanding brain mechanism. The dataset was recorded and distributed by Laboratory for Adaptive Intelligence, BSI, RIKEN. It is not only for neuroscientists but for everyone who is interested in learning neural mechanism.<br />
<br />
[[File:Ss.png]]<br />
<br />
<br />
CC0<br />
<br />
<br />
== Menu ==<br />
*Manual<br />
** [[Manual|Install Manual for Python and others]]<br />
** [[Manual_jp|Install manual for Python and others in Japanese]]<br />
<br />
<br />
To the extent possible under law, neurotycho.org has waived all copyright and related or neighboring rights to downloadable dataset in Project Tycho. This work is published from: Japan.</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Main_Page&diff=138
Main Page
2011-02-28T09:47:55Z
<p>Aihara: </p>
<hr />
<div>'''Wiki for Neurotycho.org'''<br />
<br />
Welcome to Wiki.Neurotycho!<br />
<br />
Project Tycho is named after Tycho Brahe. The project aims to share reliable massive neural and behavioral data for understanding brain mechanism. The dataset was recorded and distributed by Laboratory for Adaptive Intelligence, BSI, RIKEN. It is not only for neuroscientists but for everyone who is interested in learning neural mechanism.<br />
<br />
[[File:Ss.png]]<br />
<br />
<br />
CC0<br />
<br />
<br />
== Menu ==<br />
*Manual<br />
** [[Manual|Install Manual for Python and others]]<br />
** [[Manual_jp|Install manual for Python and others in japanese]]<br />
<br />
<br />
To the extent possible under law, neurotycho.org has waived all copyright and related or neighboring rights to downloadable dataset in Project Tycho. This work is published from: Japan.</div>
Aihara
http://wiki.neurotycho.org/index.php?title=Manual_jp&diff=137
Manual jp
2011-02-28T09:40:16Z
<p>Aihara: </p>
<hr />
<div>=Windows環境におけるpythonでの解析環境の構築マニュアル =<br />
注意:このマニュアルに書いてあるソフトウェアをインストールする際には、パソコンの管理者権限が必要です。また、windowsに関しては32bit版を想定しております。<br />
<br />
== Python ==<br />
<br />
# http://www.python.org/download/releases/2.6.6/ から、Pythonのバージョン2.6.6の"Windows x86 MSI Installer"をダウンロード<br />
## [[File:0805d491734b39856b5c8e178c9de66e.png]]<br />
# インストーラーを起動<br />
## [[File:c926e6405ff303a6c80625204a5b7a9f.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:743ee27846ed5bd129ed67a12d3bf5de.png]] "Install for all users"を選択して、"Next"ボタンを押す<br />
## [[File:94be0d2c7a90dc5450c1581903b6e2fe.png]] 画面に書かれているものから変更せずにそのまま"Next"ボタンを押す<br />
## [[File:data/050998d9a57e931e46c2c70119982d27.png]] "Next"ボタンを押してインストールを開始する<br />
<br />
== Numpy ==<br />
Numpyはオープンソースのpython用の数値計算用のライブラリです。<br />
<br />
#http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/ から、"numpy-1.5.1-win32-superpack-python2.6.exe"をダウンロード<br />
## File:d9f9e4c26024b18dc4b21b099e7f900d.png]]<br />
# インストーラーを起動<br />
## [[File:347aa09541427e1dcfb7935f86d5c897.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:5df43fd3c06be4c91191e64e21ec4999.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Scipy ==<br />
Scipyはオープンソースのpython用数学、科学、工学のための数値解析モジュールです。<br />
# http://sourceforge.net/projects/scipy/files/scipy/0.8.0/ から、"scipy-0.8.0-win32-superpack-python2.6.exe" をダウンロード<br />
## [[File:b5e1b8069c20d716069c8a3eb221b87a.png]]<br />
# インストーラーを起動<br />
## [[File:55c0bcade8ab3d8a2c51dd08854a2576.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:a2ee9ebb15add7638912245704e55878.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
== Matplotlib ==<br />
Matplotlibはpython用のグラフ描画の為のライブラリです。<br />
<br />
# matplotlibのページ http://matplotlib.sourceforge.net/ にアクセス<br />
# [http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ download] リンクをクリックしてダウンロードページに移動.<br />
## [[File:88d00ceb483579b5c45915a42ad2dbcf.png]]<br />
# "matplotlib-1.0.1.win32-py2.6.exe".をダウンロード<br />
## [[File:b3ac9b2154bafd5809b68f8cdf0ac429.png]]<br />
# インストーラーを起動<br />
## [[File:dea1f1d5e133c39cd9a52559bb8207ab.png]] アイコンをダブルクリックしてインストーラを起動<br />
# インストーラープログラムを以下の手順で進める<br />
## 特に指定が無い画面については、"Next"ボタンを押して先に進めてください。<br />
## [[File:cd94b01550095502721ca4acc5747f28.png]] "Python Version 2.6"を選択して"Next"ボタンを押す<br />
<br />
<br />
= Pythonを用いてneutorychoのデータを扱うSample =<br />
neurotyhcoのデータは、"C:/neurotycho"以下に保存して解凍してあることを前提に進めます。別の場所に保存している場合は、そこを適宜読み替えて進めてください。<br />
== ECoGデータのプロット ==<br />
Sleeping Taskのデータを対象に表示<br />
#!/usr/bin/python<br />
#-*- coding: utf-8 -*-<br />
import numpy as np<br />
import scipy.io<br />
import scipy<br />
import matplotlib<br />
import matplotlib.pyplot as plt<br />
<br />
_indir = "C:/neurotycho/20100604_S1_ST_K2_ToruYanagawa_mat_ECoG128-Event3/"<br />
<br />
def load_mat(path):<br />
"""<br />
loading a matlab data using scipy.io<br />
"""<br />
return scipy.io.loadmat(path)<br />
<br />
if __name__=="__main__":<br />
mat = load_mat(_indir+"ECoG_ch1.mat")#loading ECoG data<br />
data = mat["ECoGData_ch1"][0]<br />
event = load_mat(_indir+"Event.mat")##loading event data<br />
eindex = event["EventIndex"][0]#EventIndex is one-row vector contains indexes when events were occurred in ECoG data.<br />
fig = plt.figure()<br />
ax = fig.add_subplot(111)<br />
ax.plot(data)#plotting ECoGdata<br />
ax.annotate('Inject anesthetic drug',<br />
xy=(eindex[0],data[eindex[0]]),<br />
xytext=(eindex[0]-170000,2000),<br />
arrowprops=dict(facecolor='black', shrink=0.1,),<br />
)<br />
plt.show()<br />
<br />
=== result ===<br />
[[File:ca592b24adff54e62f5e2f7af236e919.png]]<br />
<br />
薬液注入後にECoG波形に明らかな変化があることが分かる。<br />
<br />
== ECoGデータの電極間の相関を求める ==</div>
Aihara