Сортировка и Графическое изображение данных 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)

Функция 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, 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")

Смотрите также

|