【问题标题】:catplot(kind="count") is significantly slower than countplot()catplot(kind="count") 明显慢于 countplot()
【发布时间】:2019-09-18 10:40:12
【问题描述】:

我正在处理一个相当大的数据集(约 40m 行)。我发现如果我直接调用 sns.countplot() ,那么我的可视化绘图会非常快:

%%time 
ax = sns.countplot(x="age_band",data=acme)

但是,如果我使用 catplot(kind="count") 进行相同的可视化,那么执行速度会大大减慢:

%%time
g = sns.catplot(x="age_band",data=acme,kind="count")

有这么大的性能差异的原因吗? catplot() 是否在绘制数据之前对我的数据进行了某种转换?

如果有一个已知的原因,那么它是否扩展到所有图形级函数与轴级函数,例如 sns.scatterplot()sns.relplot(kind= “分散”)等?

我更喜欢使用 catplot(),因为我喜欢它的灵活性和在 FacetGrid 上轻松绘图,但如果要花费更长的时间来实现相同的绘图,那么我将只使用轴级直接起作用。

【问题讨论】:

    标签: python pandas matplotlib seaborn


    【解决方案1】:

    catplotFacetGrid 中存在大量开销,这将确保类别沿网格同步。考虑例如你有一个变量,你沿着网格的列绘制,不是每个年龄组都会出现。您仍然需要显示该非发生年龄组并保持其颜色。因此,相邻的两个计数图不一定构成一个猫图。

    但是,如果您只对单个计数图感兴趣,那么猫图显然是多余的。另一方面,与计数的条形图相比,即使是单个计数图也太过分了。也就是说,

    counts = df["Category"].value_counts().sort_index()
    colors = plt.cm.tab10(np.arange(len(counts)))
    ax = counts.plot.bar(color=colors)
    

    将是两倍的速度

    ax = sns.countplot(x="Category", data=df)
    

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多