В этом примере показано, как отсортировать данные о пациентах в списки курильщиков и некурящих в 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 в ваш сеанс Python. Механизм преобразует S
к словарю Python, D
.
D = eng.workspace["S"]
S
имеет поля, которые содержат массивы. Механизм преобразует массивы ячеек в Python list
переменные и числовые массивы к массивам MATLAB. Поэтому D["LastName"]
имеет тип данных list
, и D["Age"]
имеет тип данных matlab.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
содержание
, и 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")