Hướng dẫn how to convert mat file to excel in python - cách chuyển file mat sang excel trong python

Hàm scipy.io.loadmat tạo ra một từ điển trông giống như thế này:

{'__globals__': [],
 '__header__': 'MATLAB 5.0 MAT-file, Platform: MACI, Created on: Wed Sep 24 16:11:51 2014',
 '__version__': '1.0',
 'a': array([[1, 2, 3]], dtype=uint8),
 'b': array([[4, 5, 6]], dtype=uint8)}

Có vẻ như những gì bạn muốn làm là tạo tệp .csv với các khóa "A", "B", v.v. như tên cột và các mảng tương ứng của chúng dưới dạng dữ liệu được liên kết với mỗi cột. Nếu vậy, tôi khuyên bạn nên sử dụng pandas để tạo một bộ dữ liệu được định dạng độc đáo có thể được xuất sang tệp .csv. Đầu tiên, bạn cần dọn dẹp các thành viên bình luận trong từ điển của bạn (tất cả các khóa bắt đầu bằng "__"). Sau đó, bạn muốn biến từng giá trị mục trong từ điển của mình thành một đối tượng

import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")
0. Từ điển sau đó có thể được biến thành một đối tượng
import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")
1, cũng có thể được lưu dưới dạng tệp .csv. Mã của bạn sẽ trông như thế này:

import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")

Ngôi sao

Nhúng

Bạn thích làm gì?

Chuyển đổi các tệp MAT sang CSV bằng Python, Scipy và Pandas

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

importscipy.io scipy.io
ImpridPandasaspd pandas as pd
mat = scipy.io.loadmat ('file.mat') = scipy.io.loadmat('file.mat')
mat = {k: vfork, vinmat.items () ifk [0]! = '_'} = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.dataframe ({k: pd.series (v [0]) ngã ba, vinmat.iteritems ()}) = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.iteritems()})
data.to_csv ("example.csv").to_csv("example.csv")

Một số lượng lớn các bộ dữ liệu cho khoa học và nghiên cứu dữ liệu, sử dụng các tệp .mat. Trong bài viết này, chúng tôi sẽ học cách làm việc với các tệp .mat trong Python và khám phá chúng một cách chi tiết. .mat files. In this article, we’ll learn to work with .mat files in Python and explore them in detail.

Tại sao chúng ta sử dụng các tệp .mat trong Python?

Mục đích của một tệp .mat có vẻ không rõ ràng ngay lập tức. Nhưng khi làm việc với các bộ dữ liệu lớn, thông tin có trong các tệp này là hoàn toàn quan trọng đối với các dự án khoa học/máy học dữ liệu!.mat file may not seem obvious right off the bat. But when working with large datasets, the information contained within these files is absolutely crucial for data science/machine learning projects!

Điều này là do các tệp .mat chứa siêu dữ liệu của mọi đối tượng/bản ghi trong tập dữ liệu..mat files contain the metadata of every object/record in the dataset.

Mặc dù các tệp không được thiết kế chính xác cho mục đích duy nhất là tạo các chú thích, rất nhiều nhà nghiên cứu sử dụng MATLAB cho nghiên cứu và thu thập dữ liệu của họ, gây ra nhiều chú thích mà chúng tôi sử dụng trong việc học máy để có mặt dưới dạng tệp .mat ..mat files.

Vì vậy, nó rất quan trọng đối với một nhà khoa học dữ liệu để hiểu cách sử dụng các tệp .mat cho các dự án của bạn. Những điều này cũng giúp bạn làm việc tốt hơn với các bộ dữ liệu đào tạo và kiểm tra thay vì làm việc với các tệp CSV thông thường.

Bắt đầu nào!

Theo mặc định, Python không có khả năng đọc các tệp .mat. Chúng ta cần nhập một thư viện biết cách xử lý định dạng tệp.

1. Cài đặt Scipy

Tương tự như cách chúng tôi sử dụng mô -đun CSV để hoạt động với các tệp .csv, chúng tôi sẽ nhập scipy libary để làm việc với các tệp .mat trong Python.

Nếu bạn không có Scipy, bạn có thể sử dụng lệnh PIP để cài đặt cùng một

Bây giờ chúng tôi đã thiết lập SCIPY và sẵn sàng để sử dụng, bước tiếp theo là mở tập lệnh Python của bạn để cuối cùng nhận được dữ liệu cần thiết từ tệp.

2. Nhập mô -đun scipy.io.loadmat

Trong ví dụ này, tôi sẽ sử dụng các chú thích accordion do Caltech cung cấp, trong 101 loại đối tượng.

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

Sau khi thực hiện, in ra các antot sẽ cung cấp cho chúng tôi điều này dưới dạng đầu ra.

{'__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]])}

Bắt đầu, bạn có thể thấy rằng tệp .mat duy nhất này cung cấp thông tin liên quan đến phiên bản MATLAB được sử dụng, nền tảng, ngày tạo của nó và nhiều hơn nữa..mat file provides information regarding the version of MATLAB used, the platform, the date of its creation, and a lot more.

Phần mà chúng ta nên tập trung vào, tuy nhiên,

import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")
2 và
import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")
3.

3. Phân tích cấu trúc tệp .mat

Nếu bạn đã trải qua thông tin liên quan đến các chú thích do Caltech cung cấp, bạn sẽ biết rằng những con số này là những phác thảo của hình ảnh tương ứng trong tập dữ liệu.

Trong một chi tiết hơn một chút, điều này có nghĩa là đối tượng có trong hình 0001, bao gồm các phác thảo này. Xa hơn một chút trong bài viết, chúng tôi sẽ sắp xếp các con số, vì vậy, đừng lo lắng về điều đó.

Phân tích phân tích thông qua cấu trúc tệp này, chúng tôi có thể gán tất cả các giá trị đường viền cho danh sách Python mới.

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

Nếu chúng tôi in ra

import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")
4, chúng tôi sẽ nhận được một mảng 2D đơn giản.

[[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. Sử dụng khung dữ liệu gấu trúc để làm việc với dữ liệu

Bây giờ bạn có thông tin và dữ liệu được truy xuất, bạn sẽ làm việc với nó như thế nào? Tiếp tục sử dụng danh sách? Chắc chắn không phải.

Chúng tôi sử dụng DataFrames làm cấu trúc để làm việc, trong đó nó hoạt động giống như một bảng dữ liệu. Gọn gàng để nhìn vào, và cực kỳ đơn giản để sử dụng.

Bây giờ, để làm việc với DataFrames, chúng tôi sẽ cần nhập một mô -đun khác, gấu trúc.Pandas.

Pandas là một công cụ phân tích dữ liệu nguồn mở, được sử dụng bởi những người đam mê học tập máy và các nhà khoa học dữ liệu trên toàn thế giới. Các hoạt động được cung cấp bởi nó được coi là quan trọng và cơ bản trong rất nhiều ứng dụng khoa học dữ liệu.

Chúng tôi chỉ làm việc với DataFrames trong bài viết này, nhưng, hãy nhớ rằng các cơ hội được cung cấp bởi gấu trúc là rất lớn.

Làm việc với dữ liệu mà chúng tôi đã nhận được ở trên có thể được đơn giản hóa bằng cách sử dụng gấu trúc để xây dựng khung dữ liệu với các hàng và cột cho dữ liệu.

# 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)

Bây giờ, chúng tôi có dữ liệu của chúng tôi trong một khung dữ liệu gọn gàng!

    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

Như bạn có thể thấy, chúng tôi có tọa độ X và Y cho phác thảo hình ảnh trong một khung dữ liệu đơn giản của hai cột.

Điều này sẽ cung cấp cho bạn một số rõ ràng về bản chất của dữ liệu trong tệp.

Quá trình tạo DataFrames cho mỗi tệp .mat là khác nhau, nhưng với kinh nghiệm và thực hành, việc tạo chúng từ các tệp .mat sẽ tự nhiên đến với bạn..mat file is different but, with experience and practice, creating them out of .mat files should come naturally to you.

Đó là tất cả cho bài viết này!

Sự kết luận

Bây giờ bạn đã biết cách làm việc với các tệp .mat trong Python và cách tạo các khung dữ liệu trong gấu trúc với nội dung của nó..mat files in Python, and how to create dataframes in pandas with its content.

Các bước tiếp theo để làm việc với dữ liệu này sẽ là và tạo các mô hình của riêng bạn hoặc sử dụng các mô hình hiện có để đào tạo hoặc kiểm tra bản sao của bạn.

Người giới thiệu

  1. Tài liệu chính thức của Scipy.io
  2. Tài liệu chính thức của Gandas DataFrame

Bạn có thể mở các tệp .mat trong excel không?

Có thể nhập trực tiếp một tệp MAT vào bảng Excel bằng cách sử dụng một trong các cách giải quyết sau: 1) Trình biên dịch MATLAB (trong phiên bản tương tự.MATLAB Compiler( In R2014b and earliear version, MATLAB Builder EX) can be used to create an Excel Add-in which would perform the same.

Bạn có thể mở tệp .mat trong Python không?

Theo mặc định, Python không có khả năng đọc các tệp .mat.Python is not capable of reading . mat files.

Tôi có thể mở tệp mat mà không cần matlab không?

.Các tệp MAT chứa dữ liệu nhị phân, do đó bạn sẽ không thể mở chúng dễ dàng bằng trình xử lý văn bản.Có một số tùy chọn để mở chúng bên ngoài Matlab: Nếu tất cả những gì bạn cần làm là xem các tệp, bạn có thể có được Octave, đây là một triển khai MATLAB miễn phí, nhưng hơi chậm.you could obtain Octave, which is a free, but somewhat slower implementation of MATLAB.

Các tệp .mat HDF5 có phải là HDF5 không?

Phiên bản 7.3 Mat-Files sử dụng định dạng dựa trên HDF5 yêu cầu một số lưu trữ chi phí để mô tả nội dung của tệp.Đối với các mảng ô, mảng cấu trúc hoặc các thùng chứa khác có thể lưu trữ các loại dữ liệu không đồng nhất, phiên bản 7.3 Mat-Files đôi khi lớn hơn phiên bản 7-Files. that requires some overhead storage to describe the contents of the file. For cell arrays, structure arrays, or other containers that can store heterogeneous data types, Version 7.3 MAT-files are sometimes larger than Version 7 MAT-files.