BCI--Python-EEGツールライブラリMNE

Python-EEGツールライブラリMNE

1つは、環境構成###

MNE-python ####をインストールします

shell

pip install -U mne

テスト####

python

import mne
from mne.datasets import sample
import matplotlib.pyplot as plt

# サンプルのストレージアドレス。次の構文は、ネットワークからデータセットを取得するためのものです。
# data_path = sample.data_path()
# fifファイルの保存アドレス
fname ='F:/data/MNE-sample-data/MEG/sample/sample_audvis_raw.fif'"""
上記のアドレスにファイルが存在する場合は、ローカルファイルを直接ロードします。
存在しない場合は、変更したデータをオンラインでダウンロードします
"""
raw = mne.io.read_raw_fif(fname)"""
場合:
10をゲット-20秒以内の良好なMEGデータ

# タイプに応じてそれらの良いMEG信号を選択してください(良好なMEG信号、設定により除外="bads") channel,
結果は、チャネルに対応するインデックスです
"""

picks = mne.pick_types(raw.info, meg=True, exclude='bads')
t_idx = raw.time_as_index([10.,20.])
data, times = raw[picks, t_idx[0]:t_idx[1]]
plt.plot(times,data.T)
plt.title("Sample channels")
plt.show()

2.MNEのRawデータ構造とその使用法の概要###

**Rawオブジェクトは主に連続データを格納するために使用され、コアデータはn_channelsとtimesであり、Infoオブジェクトも含まれています。 ****

1、 生データを開く####

python

# pythonライブラリを紹介します
import mne
from mne.datasets import sample
import matplotlib.pyplot as plt

# サンプルのストレージアドレス、以下はネットワークアドレスからのダウンロードです
# data_path = sample.data_path()

# ローカルデータ、fifファイルストレージアドレスを開きます
fname = data_path +'/MEG/sample/sample_audvis_raw.fif'"""
上記のアドレスにファイルが存在する場合は、ローカルファイルを直接ロードします。
存在しない場合は、変更したデータをオンラインでダウンロードします
"""
raw = mne.io.read_raw_fif(fname)

python

# 通常、生データへのアクセス方法は次のとおりです。
data, times = raw[picks, time_slice]

# picks:条件に応じて選択された指標です。
# time_slice:タイムスライス

# すべてのデータを未加工で取得するには、次の2つの方法を使用できます。
data,times=raw[:]
data,times=raw[:,:]

2、 sfreq:サンプリング周波数####

python

"""
sfreq:サンプリング周波数

rawは、選択したチャネルと期間のデータと時点を返します。
データと時間にそれぞれ値を割り当てます(つまり、生のオブジェクトは2つの配列を返します)
"""
sfreq=raw.info['sfreq']
data,times=raw[:5,int(sfreq*1):int(sfreq*3)]
plt.plot(times,data.T)
plt.title("Sample channels")

3、 各チャネルのパワースペクトル密度をプロットします####

python

raw.plot_psd()
plt.show()

4、 SSPベクトルを描画する####

python

raw.plot_projs_topomap()
plt.show()

5、 チャネルスペクトログラムをトポグラフィとして描画します####

python

raw.plot_psd_topo()
plt.show()

6、 電極位置を描画します####

python

raw.plot_sensors()
plt.show()

3つ目は、MNEがRawオブジェクトを最初から作成する###

1、 簡単な紹介####

**実際のプロセスでは、Rawオブジェクトを作成するためにデータを最初から作成する必要がある場合があります。 **メソッド: mne.io.RawArrayクラスを介して手動でRawを作成します

注:mne.io.RawArrayを使用してRawオブジェクトを作成する場合、そのコンストラクターはマトリックスオブジェクトと情報オブジェクトのみを受け入れます。

データ対応単位:

Rawオブジェクトを作成するときは、2種類のデータを準備する必要があります。1つはデータデータ、もう1つは情報データです。

データデータは2次元データであり、形状は (n_channels、n_times)です。

2、 パッキングデータ####

python

"""
サイズが5x1000の2次元ランダムデータを生成します
ここで、5は5チャネルを表し、1000は時間を表します
"""
data = np.random.randn(5,1000)"""
情報構造を作成する,
内容は次のとおりです。チャネル名とチャネルタイプ
サンプリング周波数をに設定します:sfreq=100"""
info = mne.create_info(
 ch_names=['MEG1','MEG2','EEG1','EEG2','EOG'],
 ch_types=['grad','grad','eeg','eeg','eog'],
 sfreq=100)

custom_raw = mne.io.RawArray(data,info)

3、 グラフを拡大縮小する####

python

"""
グラフを拡大縮小する

実際のEEGの場合/MEGデータの場合、さまざまなスケール係数を使用する必要があります。
チャネルeeg、grad、およびeogのデータを2分の1に減らします
"""

scalings ={'eeg':2,'grad':2,'eog':2}

# scalings ='auto'自動ズームを設定する

custom_raw.plot(n_channels=5,
    scalings=scalings,
    title='Data from arrays',
    show=True,
    block=True)
plt.show()

第四に、MNEエポック###のデータ構造

継続的なEEG信号から特定の時間枠を抽出します。これらの時間枠はエポックと呼ぶことができます。

1、 エポックオブジェクトを作成するには、次の3つの方法があります。####

2、 fifファイルを読み取ってエポックオブジェクトを作成します####

python

ステップ:
1 )fifファイルを読み取り、生のオブジェクトを作成します;2)イベントオブジェクトを作成します。
3 )エポックオブジェクトを作成します。
4 )エポックをオーバーレイして、誘発されたオブジェクトを取得します。
5 )誘発されたドロー。

import mne
from mne import io
from mne.datasets import sample

# ウェブからダウンロード
data_path = sample.data_path()

raw_fname = data_path +'/MEG/sample/sample_audvis_filt-0-40_raw.fif'
event_fname = data_path +'/MEG/sample/sample_audvis_filt-0-40_raw-eve.fif'
event_id, tmin, tmax =1,-0.2,0.5

# fifファイルを読む,生のオブジェクトを作成する
raw = io.read_raw_fif(raw_fname)
# イベントを含むfifファイルを読み取り、イベントオブジェクトを作成します
events = mne.read_events(event_fname)"""
 チャネルを選択:EEG + MEG - bad channels 
"""
raw.info['bads']+=['MEG 2443','EEG 053']  # bads +2 more
picks = mne.pick_types(raw.info, meg=True, eeg=False, stim=True, eog=True,
      exclude='bads')

# エポックデータを読む
epochs = mne.Epochs(raw, events, event_id, tmin, tmax, proj=True,
     picks=picks, baseline=(None,0), preload=True,
     reject=dict(grad=4000e-13, mag=4e-12, eog=150e-6))"""
誘発反応を得るための平均エポックデータ
"""
evoked = epochs.average()

evoked.plot(time_unit='s')
plt.show()

3、 エポックオブジェクトを最初から作成する####

エポックオブジェクトは、継続的なデータを期間のコレクションとして表す方法です

方法: mne.EpochsArrayを使用してEpochsオブジェクトを作成します。作成時にnumpy配列を直接作成できます。配列の形状は(n_epochs、n_chans、n_times) である必要があります。

データ対応単位:

最初のステップ:データのビルド#####

python

ステップ1:データを作成する

サイズが10x5x200の3次元配列を作成します。配列内のデータは、ランダムな数値です。
一次元データ表現:10エポック
2次元データ表現:5チャネル
3次元のデータ:エポックあたり2秒

# サンプリング周波数
sfreq =100
data = np.random.randn(10,5, sfreq *2)

# 情報構造を作成する
info = mne.create_info(
 ch_names=['MEG1','MEG2','EEG1','EEG2','EOG'],
 ch_types=['grad','grad','eeg','eeg','eog'],
 sfreq=sfreq
)
ステップ2:イベントを作成する#####

python

エポックオブジェクトを作成するときは、"events"アレイ、

イベント(event)ある種の波形を記述します(症状)の出発点は、形のトリプレットです(n_events,3):
要素の最初の列の整数で記述されたイベントの開始サンプリングポイント。
2番目の列の要素は、現在のイベントソースの刺激チャネルに対応します。(stimulus channel)以前の値(previous value),ほとんどの場合、この値は0です。
要素の3番目の列は、イベントのIDを表します。

events = np.array([[0,0,1],[1,0,2],[2,0,1],[3,0,2],[4,0,1],[5,0,2],[6,0,1],[7,0,2],[8,0,1],[9,0,2],])

python

イベントのIDを設定します

dictの場合は、これらのキーを使用して、後で関連するイベントにアクセスできます。例:dict(聴覚=1.ビジョン=3)
intの場合、idがstringのdictが作成されます。
リストの場合、リスト内で指定されたIDを持つすべてのイベントが使用されます。
そうでない場合は、すべてのイベントが一緒に使用され、イベントID整数に対応する文字列整数名でdictが作成されます。

# イベントIDを作成し、笑顔または眉をひそめる
event_id =dict(smiling=1, frowning=2)"""
tmin:イベントが開始するまでの時間(指定されていない場合、デフォルトは0)"""
# イベントの前の時間をに設定します-0.1s
tmin =-0.1
ステップ3:エポックオブジェクトを作成する#####

python

"""
mneを使用する.EpochsArrayはエポックオブジェクトを作成します
"""
custom_epochs = mne.EpochsArray(data, info, events, tmin, event_id)print(custom_epochs)
# ドロー
_ = custom_epochs['smiling'].average().plot(time_unit='s')

4、 エポックオブジェクトを表示する####

**epochsオブジェクトはmne.io.Rawオブジェクトに似ており、info属性とevent属性もあります。 ****

エポックのイベント関連情報は、次の2つの方法で表示できます

python

print(epochs.events[:3])print(epochs.event_id)print(epochs[1:5])print(epochs['Auditory/Right'])

# 検索する
print(epochs['Right'])print(epochs['Right','Left'])

5、 エポック平均オーバーレイ####

**Evokedオブジェクトは、 mne.Epochs.average()メソッドを呼び出すことで返すことができ、average()メソッドはパラメーターを介して必要なチャネルを指定できます。 ****

python

ev_right = epochs['Right'].average()
ev_left = epochs['Left'].average()

f, axs = plt.subplots(3,2, figsize=(10,5))
_ = f.suptitle('Left / Right auditory', fontsize=20)
_ = ev_left.plot(axes=axs[:,0], show=False, time_unit='s')
_ = ev_right.plot(axes=axs[:,1], show=False, time_unit='s')
plt.tight_layout()

6、 エポックオブジェクトのメタデータ(メタデータ)####

mneの metadataプロパティを使用して関連データを保存すると特に便利な場合があります。メタデータは pandas.DataFrameを使用してデータをカプセル化します。各行はエポックに対応し、各列はエポックのメタデータ属性に対応します。列には、文字列、整数、または浮動小数点数が含まれている必要があります。

7、 エポック[データ視覚化](https://cloud.tencent.com/product/yuntu?from=10680)####

mne.Epochs.plot()は、キーワード block = Trueと組み合わせて使用すると、手動で拒否できるインタラクティブなブラウザを提供します。これにより、ブラウザウィンドウが閉じられるまでスクリプトが実行されなくなります。

python

"""
そのようなデータがローカルにない場合は、データをロードします,
ネットワークからダウンロード
"""
data_path = op.join(mne.datasets.sample.data_path(),'MEG','sample')

raw = mne.io.read_raw_fif(
 op.join(data_path,'sample_audvis_filt-0-40_raw.fif'), preload=True)
# イベントIDを設定する
event_id ={'auditory/left':1,'auditory/right':2,'visual/left':3,'visual/right':4,'smiley':5,'button':32}
events = mne.find_events(raw)
epochs = mne.Epochs(raw, events, event_id=event_id, tmin=-0.2, tmax=.5,
     preload=True)

python

# エポックを描く
epochs.plot(block=True)
plt.show()

**上部の数字は、エポックのイベントIDを表します。一番下の数字は、各エポックの実行番号です。 ****

5、誘発された構造###

**誘発電位(EP **)誘発電位または誘発反応とは、人間または他の動物の神経系、特に点滅や純粋なトーンなどの刺激後の脳の特定の部分から記録された電位の特定のパターンを指します。さまざまな形態と種類の刺激は、さまざまな種類の可能性を生み出します。

誘発電位の振幅はしばしば低く、1マイクロボルト未満から数マイクロボルトの範囲ですが、EEGは数十マイクロボルト、EMGはミリボルト、ECGは通常20ミリボルトに近いです。 EEG、ECG、EMG、環境ノイズなどの生物学的信号のコンテキストでこれらの低振幅電位を解決するには、通常、信号を平均化する必要があります。 **信号は刺激にタイムロックされ、ほとんどのノイズはランダムに生成されるため、繰り返される応答に応答することでノイズを平均化できます。 ****

誘発電位(誘発)構造は、主に実験中の平均データを格納するために使用されます。MNEでは、誘発オブジェクトの作成では通常、「mne.Epochs.average()」を使用してエポックデータを平均します。

Recommended Posts

BCI--Python-EEGツールライブラリMNE