Pythonで.matファイルを読みこむ方法|scipyを使う方法を紹介する

スポンサーリンク

データサイエンスや研究のための多くのデータセットが、.mat ファイルを利用しています。

この記事では、Pythonで.matファイルを扱う方法を学び、その詳細について探っていきます。

スポンサーリンク

なぜ Python で .mat ファイルを使うのでしょう?

.matファイルの目的は、すぐにはわからないかもしれません。

これは、.mat ファイルが、データセット内のすべてのオブジェクトやレコードのメタデータを含んでいるからです。

このファイルは、アノテーションを作成するためだけに設計されたわけではありませんが、多くの研究者が研究やデータ収集にMATLABを使用しているため、機械学習で使用するアノテーションの多くが.matファイルの形で存在することになるのです。

データサイエンティストにとって、プロジェクトで.matファイルをどのように使用するかを理解することは重要です。

また、通常の CSV ファイルで作業する代わりに、トレーニングやテストのデータセットでより良く作業できるようになります。

さあ、始めましょう

Python で .mat ファイルを読むには?

デフォルトでは、Python は .mat ファイルを読むことができません。


このファイル形式を処理する方法を知っているライブラリをインポートする必要があります。

1. scipy のインストール

CSV モジュールを使って .csv ファイルを扱うのと同じように、Python で .mat ファイルを扱うために scipy ライブラリをインポートします。

scipy をまだ持っていない場合は、pip コマンドを使用して、同じものをインストールすることができます

pip install scipy

scipy をセットアップして使えるようになったので、次のステップでは、ファイルから必要なデータを取得するために、Python スクリプトをオープンします。

2. scipy.io.loadmatモジュールのインポート

この例では、101 Object Categories で Caltech が提供するアコーディオンアノテーションを使用する予定です。

from scipy.io import loadmat
annots = loadmat('annotation_0001.mat')
print(annots)

実行後、アノテーションをプリントアウトすると、以下のような出力が得られます。

{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Tue Dec 14 15:57:03 2004', '__version__': '1.0', '__globals__': [], 'box_coord': array([[  2, 300,   1, 260]], dtype=uint16), 'obj_contour': array([[ 37.16574586,  61.94475138,  89.47697974, 126.92081031,
        169.32044199, 226.03683241, 259.07550645, 258.52486188,
        203.46040516, 177.5801105 , 147.84530387, 117.0092081 ,
          1.37384899,   1.37384899,   7.98158379,   0.82320442,
         16.2412523 ,  31.65930018,  38.81767956,  38.81767956],
       [ 58.59300184,  44.27624309,  23.90239411,   0.77532228,
          2.97790055,  61.34622468, 126.87292818, 214.97605893,
        267.83793738, 270.59116022, 298.67403315, 298.67403315,
        187.99447514,  94.93554328,  90.53038674,  77.31491713,
         62.44751381,  62.99815838,  56.94106814,  56.94106814]])}

まず、この1つの.matファイルから、使用したMATLABのバージョン、プラットフォーム、作成日など、様々な情報を得ることができることがわかります。

しかし、私たちが注目すべきは box_coordobj_contour の部分です。

3. .mat ファイルの構造を解析する

Caltech から提供された Annotations に関する情報を見ていれば、これらの数字がデータセット内の対応する画像の輪郭線であることがわかると思います。

もう少し詳しく説明すると、画像0001に存在する物体は、これらの輪郭線で構成されていることを意味します。

この記事のもう少し後で、番号を整理することになりますが、今は気にしないでください。

このファイル構造を解析して、すべての輪郭値を新しいPythonのリストに代入することができます

con_list = [[element for element in upperElement] for upperElement in annots['obj_contour']]

con_list`を出力すると、単純な2次元配列が得られます。

[[37.16574585635357, 61.94475138121544, 89.47697974217309, 126.92081031307546, 169.32044198895025, 226.03683241252295, 259.0755064456721, 258.52486187845295, 203.4604051565377, 177.58011049723754, 147.84530386740326, 117.0092081031307, 1.3738489871086301, 1.3738489871086301, 7.98158379373848, 0.8232044198894926, 16.24125230202577, 31.65930018416205, 38.81767955801104, 38.81767955801104], [58.59300184162066, 44.27624309392269, 23.90239410681403, 0.7753222836096256, 2.9779005524862328, 61.34622467771641, 126.87292817679563, 214.97605893186008, 267.83793738489874, 270.59116022099454, 298.6740331491713, 298.6740331491713, 187.9944751381216, 94.93554327808477, 90.53038674033152, 77.31491712707185, 62.44751381215474, 62.998158379373876, 56.94106813996319, 56.94106813996319]]

4. Pandasのデータフレームを使用してデータを操作する

さて、情報とデータを取得したところで、どのようにそれを扱うでしょうか?リストを使い続ける?間違いなく違います。

データフレームは、データの表と同じように機能する構造です。

見た目も美しく、使い方も非常にシンプルです。

さて、Dataframeを扱うには、Pandasという別のモジュールをインポートする必要があります。

import pandas as pd

Pandasはオープンソースのデータ解析ツールで、世界中の機械学習愛好家やデータサイエンティストに利用されています。

Pandasが提供する操作は、多くのデータサイエンスアプリケーションで重要かつ基本的なものと考えられています。

この記事ではDataFrameのみを扱いますが、Pandasが提供する機会は計り知れないことを心に留めておいてください。

上記で受け取ったデータを扱うには、pandasを使ってデータの行と列を持つデータフレームを構築することで簡略化することができます

# zip provides us with both the x and y in a tuple.
newData = list(zip(con_list[0], con_list[1]))
columns = ['obj_contour_x', 'obj_contour_y']
df = pd.DataFrame(newData, columns=columns)

これで、データがきちんとしたDataFrameになりましたね

    obj_contour_x  obj_contour_y
0       37.165746      58.593002
1       61.944751      44.276243
2       89.476980      23.902394
3      126.920810       0.775322
4      169.320442       2.977901
5      226.036832      61.346225
6      259.075506     126.872928
7      258.524862     214.976059
8      203.460405     267.837937
9      177.580110     270.591160
10     147.845304     298.674033
11     117.009208     298.674033
12       1.373849     187.994475
13       1.373849      94.935543
14       7.981584      90.530387
15       0.823204      77.314917
16      16.241252      62.447514
17      31.659300      62.998158
18      38.817680      56.941068
19      38.817680      56.941068

このように、画像の輪郭のXとYの座標が2列のシンプルなDataFrameに収まっています。

これで、ファイルのデータがどのようなものであるか、少しは理解できたのではないでしょうか。

.mat ファイルごとに DataFrame を作成するプロセスは異なりますが、経験と練習を積めば、.mat ファイルから DataFrame を作成することは、自然にできるようになるでしょう。

この記事は以上です。

まとめ

Python で .mat ファイルを扱う方法と、その内容を用いて pandas でデータフレームを作成する方法を理解しました。

このデータを扱う次のステップは、あなた自身のモデルを作成するか、データセットのコピーのトレーニングやテストに既存のモデルを使用することです。

タイトルとURLをコピーしました