Как сделать цикл для нескольких графиков рассеяния в Python? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь автоматизировать процедуру построения матрицы большого кадра данных. Цель состоит в том, чтобы построить каждый столбец с другим столбцом. Каждый столбец представляет переменную. Смотрите также изображение ниже.

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: Если это будет простой пример, включающий линейную регрессию для комбинации переменных, это также будет оценено.

Привет

Nadia

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Вы можете сделать что-то вроде этого:

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 . В нем много регрессионных моделей для множества различных задач, таких как регрессия, классификация и кластеризация

0 голосов
/ 10 июля 2019

То, что вы закодировали, строит каждый столбец против себя.То, что вы описали, является вложенным циклом.Простое обновление -

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])

Я думаю , что порождает серию, приемлемую для scatter.

Помогает ли это?Если вы хотите быть более «питоническим», посмотрите на itertools.product, чтобы сгенерировать ваш выбор столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...