Python-цикл для отображения только категориальных переменных - PullRequest
1 голос
/ 18 марта 2019

У меня есть набор данных, который содержит много категориальных переменных, которые я хотел бы вывести на графике рассеяния без необходимости кодировать переменные.Это моя попытка:

    fig = plt.figure(figsize=(18, 9))

    for column in df:

     if df[column].dtype != np.int64 and df[column].dtype != np.float64:

        ca = df.plot.scatter(x=df[column],y= df['log_prices'], ax = 

        fig.add_subplot(2,3,df[column]+1))

        plt.plot(df.iloc[:,df[column]].values, sm.OLS(df.iloc
        [:,df['log_prices'].values,sm.add_constant(df.iloc[:,df[column]].values)).fit().fittedvalues,'r-')

Это ошибка, которую я получаю в данный момент:

     ----> 5             ca = df.plot.scatter(x=df[column],y=df['log_prices'], ax = fig.add_subplot(2,3,df_061[column]+1))

         cannot concatenate 'str' and 'int' objects

Это явно связано с log_prices.

Есть ли более простой способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 18 марта 2019

Рекомендую внести следующие изменения:

ca = df.plot.scatter(x = column, y = 'log_prices', ax = fig.add_subplot(2, 3, df[column] + 1))

При использовании метода df.plot() необходимо указывать имена столбцов для аргументов x и y, а не для фактических данных. Данные уже находятся в df, поэтому вам просто нужно указать столбцы для использования.

Вот частичная репликация вашего кода с использованием примеров данных:

import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10,5), columns = ['A','B','C','D','E'])

fig = plt.figure(figsize=(18, 9))

idx = 0

for column in df:

#    if df[column].dtype != np.int64 and df[column].dtype != np.float64:
    idx += 1
    ca = df.plot.scatter(x = column, y = 'A', ax = fig.add_subplot(2,3,idx))

#    plt.plot(df.iloc[:,df[column]].values, sm.OLS(df.iloc[:,df['log_prices'].values,sm.add_constant(df.iloc[:,df[column]].values)).fit().fittedvalues,'r-')

Этот код создает следующий график: Subplots

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