Этот пример показывает, как отсортировать данные о пациентах в списки курильщиков и некурящих в Python® и показаниях кровяного давления графика для пациентов с MATLAB®.
Запустите двигатель и считайте данные о группе пациентов в таблицу MATLAB. MATLAB обеспечивает демонстрационный файл разделенных запятыми значений, patients.dat
, который содержит информацию о 100 различных пациентах.
import matlab.engine eng = matlab.engine.start_matlab() eng.eval("T = readtable('patients.dat');",nargout=0)
Функция readtable
MATLAB считывает данные в таблицу. Механизм не поддерживает тип данных table MATLAB. Однако с функцией table2struct
MATLAB можно преобразовать таблицу в скалярную структуру, которая является типом данных, который действительно поддерживает механизм.
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 workspace в сеанс Python. Механизм преобразовывает S
в словарь Python, D
.
D = eng.workspace["S"]
S
имеет поля, которые содержат массивы. Механизм преобразовывает массивы ячеек в Python переменные list
и числовые массивы к массивам MATLAB. Поэтому D["LastName"]
имеет тип данных list
, и D["Age"]
имеет тип данных matlab.double
'double'.
Сортировка показаний кровяного давления в списки курильщиков и некурящих. В patients.dat
столбец Smoker
указал на курильщика с (TRUE) логической единицей, и некурящий с (FALSE) логическим нолем. Преобразуйте D["Smoker"]
в массив matlab.logical
для сортировки.
smoker = matlab.logical(D["Smoker"])
Преобразуйте показания кровяного давления Diastolic
и индикаторы Smoker
в 1 100 массивы MATLAB для сортировки.
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 для графического изображения, вызовите функцию linspace
MATLAB. Можно построить график этих 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")