Этот пример показывает, как отсортировать данные о пациентах в списки курильщиков и некурящих на 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")