Я пытаюсь автоматизировать процедуру построения большой матрицы данных. Цель состоит в том, чтобы построить каждый столбец с другим столбцом. Каждый столбец представляет собой переменную. См. также изображение ниже.
F.e: пол против возраста, пол против ИМТ, пол против курения, пол против типа и так далее.
Для ясности я упростил задачу до изображения ниже: введите описание изображения здесь
Сначала я пытался построить каждую комбинацию вручную. Но это довольно трудоемкое упражнение, а не то, что я хочу.
Я также пробовал это (не работает):
variables = ["Sex", "Age", "BMI"]
for variable in variables:
plt.scatter(df.variable, df.variable)
plt.xlabel('variable')
plt.ylabel('variable')
plt.title('variable vs. variable')
plt.show()
Любая помощь приветствуется!
PS: Если бы было бы простым упражнением включить линейную регрессию в комбинацию переменных, это также было бы оценено.
Привет,
Надя






То, что вы закодировали, отображает каждый столбец против самого себя. То, что вы описали, является вложенным циклом. Простое обновление
col_choice = ["Sex", "Age", "BMI"]
for pos, axis1 in enumerate(col_choice): # Pick a first col
for axis2 in enumerate(col_choice[pos+1:]): # Pick a later col
plt.scatter(df.loc[:, axis1], df.loc[:, axis2])
I думать генерирует серию, приемлемую для scatter.
Это помогает? Если вы хотите быть более «питоновским», загляните в itertools.product, чтобы сгенерировать варианты столбцов.
Это потому, что вы указали конкретный (постоянный) столбец, а не брали значение из переменных axis, как указано в моих решениях.
Спасибо, Прюн. Это сработало. Для читателя нужно настроить ось 2, выбрав второй столбец.
Вы можете сделать что-то вроде этого:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Create dummy dataframe, or load your own with pd.read_csv()
columns = ["sex", "age", "BMI", "smoke", "type"]
data = pd.DataFrame(np.array([[1,0,0,1,0], [23,16,94,18,24], [32, 26, 28, 23, 19], [0,1,1,1,0], [1,2,2,2,1]]).T, columns=columns)
x_col = "sex"
y_columns = ["age", "BMI", "smoke"]
for y_col in y_columns:
figure = plt.figure
ax = plt.gca()
ax.scatter(data[x_col], data[y_col])
ax.set_xlabel(x_col)
ax.set_ylabel(y_col)
ax.set_title("{} vs {}".format(x_col, y_col))
plt.legend()
plt.show()
По сути, если ваш набор данных сохранен в виде файла .csv, вы можете загрузить его с помощью панд, используя pd.read_csv(), и использовать имена столбцов в качестве ключей для доступа к соответствующим строкам и повторять это (здесь я создал фиктивный фрейм данных только ради из него).
Что касается части линейной регрессии, вам следует проверить scikit-learn библиотека. Он имеет множество моделей регрессии для множества различных задач, таких как регрессия, классификация и кластеризация.
Неко спасибо за помощь. На данный момент pycharm по какой-то причине не предоставляет графики...
Упс! Извиняюсь; вам нужно получить доступ к столбцу, названному переменной стоимость
axis1... вы знаете, как это сделать?