Python循环仅绘制分类变量

Posted

技术标签:

【中文标题】Python循环仅绘制分类变量【英文标题】:Python-loop to plot only categorical variables 【发布时间】:2019-08-09 03:16:48 【问题描述】:

我有一个包含许多分类变量的数据集,我想在散点图中绘制这些变量,而不必对变量进行编码。 这是我的尝试:

    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 有关。

有没有更简单的方法?

谢谢

【问题讨论】:

一方面,你可以跳过循环,使用pandas内置的select_dtypes函数,即just greatIMO 【参考方案1】:
from pandas.api.types import is_string_dtype
from pandas.api.types import is_numeric_dtype

categorical=[]
for column in df:
    if is_string_dtype(df[column]):
        categorical.append(column)


fig, ax = plt.subplots(2, 4, figsize=(20, 10))
for variable, subplot in zip(categorical, ax.flatten()):
    sns.countplot(df_2[variable], ax=subplot)
    for label in subplot.get_xticklabels():
        label.set_rotation(90)

【讨论】:

df_2需要改成df【参考方案2】:

我建议进行以下更改:

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

此代码生成以下图:

【讨论】:

我现在只得到这个:,但不是实际的图表 如果没有您的数据,很难同时测试所有内容。第二条绘图线也可能需要一些改进。也许还需要调用 plt.show()。 @J.DF ...一定要在最后显示情节:plt.show()(甚至关闭它plt.clf()plt.close())。 谢谢。我看到您已经注释掉了仅包含分类变量的列的 if 语句。但是,这就是我遇到的麻烦。仅绘制分类变量的最佳方法是什么?

以上是关于Python循环仅绘制分类变量的主要内容,如果未能解决你的问题,请参考以下文章

如何计算所有特征与目标变量(二元分类器,python 3)的相关性?

python对多个变量循环赋值

python-基础-基础知识-变量-选择-循环

matplotlib绘制变量写入文件的进度

绘制 R 中分类变量随时间的出现情况

使用分类变量的 Kmeans