Сортировка и графическое изображение данных MATLAB с Python

Этот пример показывает, как отсортировать данные о пациентах в списки курильщиков и некурящих на Python® и построение графиков показаний артериального давления для пациентов с MATLAB®.

Запустите движок и считайте данные о наборе пациентов в таблицу MATLAB. MATLAB предоставляет выборку файла с разделителем запятыми, patients.dat, который содержит информацию о 100 различных пациентах.

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("T = readtable('patients.dat');",nargout=0)

Система MATLAB readtable функция считывает данные в таблицу. Механизм не поддерживает тип данных таблицы MATLAB. Однако с MATLAB table2struct вы можете преобразовать таблицу в скалярную структуру, которая является типом данных, поддерживаемым механизмом.

eng.eval("S = table2struct(T,'ToScalar',true);",nargout=0)
eng.eval("disp(S)",nargout=0)
                    LastName: {100x1 cell}
                      Gender: {100x1 cell}
                         Age: [100x1 double]
                    Location: {100x1 cell}
                      Height: [100x1 double]
                      Weight: [100x1 double]
                      Smoker: [100x1 double]
                    Systolic: [100x1 double]
                   Diastolic: [100x1 double]
    SelfAssessedHealthStatus: {100x1 cell}

Можно пройти S из рабочего пространства MATLAB в сеанс Python. Механизм преобразует S в словарь Python, D.

D = eng.workspace["S"]

S имеет поля, которые содержат массивы. Механизм преобразует массивы ячеек в Python list переменные и числовые массивы в массивы MATLAB. Поэтому D["LastName"] относится к типу данных list, и D["Age"] относится к типу данных matlab.double.

Отсортируйте показания артериального давления в списки курильщиков и некурящих. В patients.dat, столбец Smoker указал курильщика с логическим 1 (true), и некурящего с логическим 0 (false). Преобразование D["Smoker"] в matlab.logical массив для сортировки.

smoker = matlab.logical(D["Smoker"])

Преобразуйте Diastolic показания и Smoker артериального давления индикаторы в массивы MATLAB 1 на 100 для сортировки.

pressure = D["Diastolic"]
pressure.reshape((1,100))
pressure = pressure[0]
smoker.reshape((1,100))
smoker = smoker[0]

Отсортируйте pressure массив в списки показаний артериального давления для курильщиков и некурящих. Понимание списка Python обеспечивает компактный метод для итерации по последовательностям. С помощью zip Python функция, можно итерировать по нескольким последовательностям в одной for цикл.

sp = [p for (p,s) in zip(pressure,smoker) if s is True]
nsp = [p for (p,s) in zip(pressure,smoker) if s is False]

Отобразите длину sp, показания артериального давления для курильщиков в list.

print(len(sp))
34

Отобразите длину nsp, а list показаний для некурящих.

print(len(nsp))
66

Рассчитать средние показания артериального давления для курильщиков и некурящих. Преобразование sp и nsp в массивы MATLAB перед их передачей в mean MATLAB функция.

sp = matlab.double(sp)
nsp = matlab.double(nsp)
print(eng.mean(sp))
89.9117647059

Отобразите среднее артериальное давление для некурящих.

print(eng.mean(nsp))
79.3787878788

Стройте графики показаний артериального давления для курильщиков и некурящих. Чтобы задать две оси X для графического изображения, вызовите MATLAB linspace функция. Построить график 34 курильщиков и 66 некурящих можно на том же графике поля точек.

sdx = eng.linspace(1.0,34.0,34)
nsdx = eng.linspace(1.0,34.0,66)

Показать контуры осей с box функция.

eng.figure(nargout=0)
eng.hold("on",nargout=0)
eng.box("on",nargout=0)

Вы должны вызвать figure, hold, и box функции с nargout=0, поскольку эти функции не возвращают выходные аргументы.

Постройте график показаний артериального давления для курильщиков и некурящих, и пометьте график. Для многих функций MATLAB механизм может вернуть указатель на графический объект MATLAB. Вы можете хранить указатель на объект MATLAB в переменной Python, но вы не можете манипулировать свойствами объекта в Python. Можно передать объекты MATLAB в качестве входных параметров другим функциям MATLAB.

eng.scatter(sdx,sp,10,'blue')
<matlab.object object at 0x22d1510>

В остальном этом примере присвойте выходной аргумент функций MATLAB h как заполнитель.

h = eng.scatter(nsdx,nsp,10,'red')
h = eng.xlabel("Patient (Anonymized)")
h = eng.ylabel("Diastolic Blood Pressure (mm Hg)")
h = eng.title("Blood Pressure Readings for All Patients")
h = eng.legend("Smokers","Nonsmokers")

Рисуйте линии, показывающие средние показания артериального давления для курильщиков и некурящих.

x = matlab.double([0,35])
y = matlab.double([89.9,89.9])
h = eng.line(x,y,"Color","blue")
h = eng.text(21.0,88.5,"89.9 (Smoker avg.)","Color","blue")
y = matlab.double([79.4,79.4])
h = eng.line(x,y,"Color","red")
h = eng.text(5.0,81.0,"79.4 (Nonsmoker avg.)","Color","red")

См. также

|