Итерация по линейной регрессии при выводе графиков в Python (SciPy & MatPlotLib) - PullRequest
1 голос
/ 13 октября 2019

Попытка выполнить итерацию по циклу for, который запускает 3 регрессии на фрейме данных pandas при печати графика линии для каждой переменной.

year = crime_df.iloc[:,0]
violent_crime_rate = crime_df.iloc[:,3]
murder_rate = crime_df.iloc[:,5]
aggravated_assault_rate = crime_df.iloc[:,11]


x_axis = [violentcrimerate, murderrate, aggravatedassaultrate]


for x in x_axis:
    slope, intercept, r_value, p_value, std_err = linregress(year, x)
    fit = slope * year + intercept


    fig, ax = plt.subplots()

    fig.suptitle('x', fontsize=16, fontweight="bold")

    ax.plot(year, x, linewidth=0, marker='o')
    ax.plot(year, fit, 'b--')


    plt.show()

Код создает 3 графика с заголовком 'x' и разными линиями регрессии, но я хотел бы знать, как установить относительные заголовки (и метки) для каждого графика относительно каждой переменной в цикле. Не знаете, как извлечь имена переменных из списка, на который я ссылаюсь. Попытка str(x) в строке заголовка, но это вернуло значения в столбце, а не в заголовке списка.

1 Ответ

0 голосов
/ 13 октября 2019

как то так?

import numpy as np
import matplotlib.pyplot as plt

matrix = np.random.rand(4,12)  # emulate some data
crime_df = pd.DataFrame(matrix)# emulate some data 


year = crime_df.iloc[:,0]
violent_crime_rate = crime_df.iloc[:,3]
murder_rate = crime_df.iloc[:,5]
aggravated_assault_rate = crime_df.iloc[:,11]

names = ['violent_crime_rate','murder_rate','aggravated_assault_rate']

x_axis = [violent_crime_rate, murder_rate, aggravated_assault_rate]

def linregress(year,x):  #emulate some data
    return np.random.rand(5)


for ind, x in enumerate(x_axis):
    slope, intercept, r_value, p_value, std_err = linregress(year, x)
    fit = slope * year + intercept


    fig, ax = plt.subplots()

    fig.suptitle('x:'+str(names[ind]), fontsize=16, fontweight="bold")

    ax.plot(year, x, linewidth=0, marker='o', label = names[ind] + ':1')

    ax.plot(year, fit, 'b--', label = names[ind] + ':2')

    ax.legend()

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