web-dev-qa-db-ja.com

matlabデータファイルをpandas DataFrame

matlab.mat(matlab formated data)ファイルをPanda DataFrameに変換する標準的な方法はありますか?

scipy.ioを使用することで回避策が可能であることは承知していますが、それを行う簡単な方法があるかどうか疑問に思っています。

13
Ramon Martinez

私は2つの方法を見つけました:scipyまたはmat4py。

  1. mat4py

MATファイルからデータを読み込む

関数loadmatは、MATファイルに格納されているすべての変数を単純なPythonデータ構造にロードします。Pythonのdictおよびlistオブジェクトのみを使用します。数値およびセル配列は、行順にネストされたリストに変換されます。結果として得られるデータ構造は、JSON形式と互換性のある単純な型で構成されています。

例:MATファイルをPythonデータ構造にロードします:

data = loadmat('datafile.mat')

から:

https://pypi.python.org/pypi/mat4py/0.1.

  1. Scipy:

例:

import numpy as np
from scipy.io import loadmat  # this is the SciPy module that loads mat-files
import matplotlib.pyplot as plt
from datetime import datetime, date, time
import pandas as pd

mat = loadmat('measured_data.mat')  # load mat-file
mdata = mat['measuredData']  # variable in mat file
mdtype = mdata.dtype  # dtypes of structures are "unsized objects"
# * SciPy reads in structures as structured NumPy arrays of dtype object
# * The size of the array is the size of the structure array, not the number
#   elements in any particular field. The shape defaults to 2-dimensional.
# * For convenience make a dictionary of the data using the names from dtypes
# * Since the structure has only one element, but is 2-D, index it at [0, 0]
ndata = {n: mdata[n][0, 0] for n in mdtype.names}
# Reconstruct the columns of the data table from just the time series
# Use the number of intervals to test if a field is a column or metadata
columns = [n for n, v in ndata.iteritems() if v.size == ndata['numIntervals']]
# now make a data frame, setting the time stamps as the index
df = pd.DataFrame(np.concatenate([ndata[c] for c in columns], axis=1),
                  index=[datetime(*ts) for ts in ndata['timestamps']],
                  columns=columns)

から:

http://poquitopicante.blogspot.fr/2014/05/loading-matlab-mat-file-into-pandas.html

  1. 最後に、PyHogsを使用できますが、まだscipyを使用できます。

複雑な読み取り.matファイル。

このノートブックは、Matlab .matファイルを読み取り、データをループ(データの単純なプロット)で使用可能な辞書に変換する例を示しています。

http://pyhogs.github.io/reading-mat-files.html

22
Destrif

これを行う方法:
scipyについて述べたように

import scipy.io as sio
test = sio.loadmat('test.mat')

matlab engine の使用:

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
6
SerialDev