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