暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python数据分析笔记#9.2.2 pandas绘制柱状图

Yuan的学习笔记 2022-03-25
1502



「目录」

绘图和可视化

Plotting and Visualization

  • 9.1 => matplotlib

  • 9.2 => pandas和seaborn绘图

    -------> 线型图

    -------> 柱状图

    -------> 直方图和密度图

    -------> 散布图或点图

    -------> 分面网格(facet grid)和类型数据


柱状图

昨天租了一台Nvidia Tesla A6000,48G的显存,就是要不停续费太烦了。还记得原来第一次租GPU的时候,把在我的GTX1050上跑的seresnext50换到腾讯云的Tesla V100的时候,那个速度起飞的感觉,但现在即使换了48GB显存的A6000还是觉得慢,训练一个模型我得等20多个小时,再集成几个的话,感觉钱包。。。,。

如果机器学习是老中医的话,感觉现在深度学习简直就是炼丹啊,比赛里各种奇技淫巧,而且数据集越来越大,模型越来越大,kaggle和Google Colab的羊毛根本不够薅的

哎,不抱怨了,继续更新pandas的笔记吧。

plot.bar()和plot.barh()会分别绘制水平和垂直的柱状图。

Series和DataFrame的索引将会被用作X轴或Y轴的刻度:

fig, axes = plt.subplots(2, 1)
data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))
data.plot.bar(ax = axes[0], color = 'k', alpha = 0.7)
data.plot.barh(ax = axes[1], color = 'k', alpha = 0.7)

复制

上面的color参数设置柱状图的颜色alpha参数设置透明度

再来看看对于DataFrame,绘制柱状图的效果吧。

df = pd.DataFrame(np.random.rand(6, 4),
                  index=['one''two''three''four''five''six'],
                  columns=pd.Index(['A''B''C''D'], name='Genus'))

df

复制
df.plot.bar()

复制

从上面可以看到,DataFrame会将每一行分成一组,并排显示。

设置stacked=True后可以为DataFrame生成堆积柱状图,这样每一行的值会堆在一起:

df.plot.barh(stacked=True, alpha=0.5)

复制

原书作者准备了一个关于小费的csv数据集,假设想要做一张堆积柱状图来展示每天聚会规模。

tips = pd.read_csv(r'C:\Users\geqiy\Desktop\tips.csv')
tips.head()

复制

head()方法可以显示这个DataFrame的前五行:

接下来用pd.crosstab方法创建一个days和size的交叉表。表的index是聚会的日期,columns是聚会的规模,这样就可以知道对应日期的聚会规模了。

party_counts = pd.crosstab(tips['day'], tips['size'])
party_counts

复制

seaborn的heatmap可以使得这个交叉表更加直观

sns.heatmap(party_counts)

复制

根据上面heatmap,日期上看周六较多,聚会规模size上2人居多。

接下来normalization一下,将size变成百分比,使得各行的和为1。

party_counts.sum(1)

party_pcts = party_counts.div(party_counts.sum(1), axis=0)

party_pcts

复制
party_pcts.plot.bar()

复制

新增一个名为小费比例的列

tips['tip_pct'] = tips['tip'] / (tips['total_bill'] - tips['tip'])
tips.head()

复制
plt.figure()
sns.barplot(x='tip_pct', y='day', data=tips, orient='h')

复制

seaborn的绘制函数使用了data参数,它可以是DataFrame,比如上面的tips。

不知道你发现sns.barplot()和上面DataFrame.plot.bar()不同的地方没有,刚才DataFrame.plot.bar()把每一列分组并排显示,但是seaborn合计了数据,比如这里即使同一天也有多组数据,但柱状图的值是平均值

plt.figure()
sns.barplot(x='tip_pct', y='day', hue='time', data=tips, orient='h')

复制

hue是色值的意思,通过添加hue='time',不同时间点(Dinner和Lunch)用不同颜色区分了开来。


-END-


往期回顾


Pandas绘制线型图




Stay hungry, stay foolish



文章转载自Yuan的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论