1 Pandas数据可视化简介¶
- pandas库是Python数据分析的核心库
- 它不仅可以加载和转换数据,还可以做更多的事情:它还可以可视化
- pandas绘图API简单易用,是pandas流行的重要原因之一
2 Pandas 单变量可视化¶
- 单变量可视化, 包括条形图、折线图、直方图、饼图等
- 数据使用葡萄酒评论数据集, 来自葡萄酒爱好者杂志(wineEnthusiast),包含10个字段,150929行,每一行代表一款葡萄酒,
字段名 | 字段描述 |
---|---|
country | 葡萄酒产地(国家) |
description | 对酒的评语(气味,味道,外观,感觉等) |
designation | 用于酿酒的葡萄产自哪个葡萄园 |
points | WineEnthusiast(葡萄酒爱好者杂志)对葡萄酒的评分(1~100) |
price | 价格 |
province | 葡萄酒产地(省/州) |
region_1 | 葡萄种植区_1 |
region_2 | 葡萄种植区_2(有可能为空) |
variety | 用于酿酒的葡萄种类 |
winery | 酿酒厂名 |
- 加载数据
#加载数据
import pandas as pd
reviews = pd.read_csv('data/winemag-data_first150k.csv', index_col=0)
reviews.head(3)
显示结果:
country description designation points price province region_1 region_2 variety winery 0 US This tremendous 100% varietal wine hails from … Martha’s Vineyard 96 235.0 California Napa Valley Napa Cabernet Sauvignon Heitz 1 Spain Ripe aromas of fig, blackberry and cassis are … Carodorum Selección Especial Reserva 96 110.0 Northern Spain Toro NaN Tinta de Toro Bodega Carmen Rodríguez 2 US Mac Watson honors the memory of a wine once ma… Special Selected Late Harvest 96 90.0 California Knights Valley Sonoma Sauvignon Blanc Macauley
2.1 plot.bar 柱状图¶
- 柱状图是最简单最常用的可视化图表。 在下面的案例中,将所有的葡萄酒品牌按照产区分类,看看哪个产区的葡萄酒品种多:
# figsize 画布大小, fontsize 字体大小 color 颜色
reviews['province'].value_counts().head(10).plot.bar(figsize = (16,8),
fontsize=20,
color = ['b','orange','g','r','purple','brown','pink','gray','cyan','y'])
显示结果:
- 上面的图表说明加利福尼亚生产的葡萄酒比其他省都多
- 条形图(柱状图)非常灵活:
- 高度可以代表任何东西,只要它是数字即可
- 每个条形可以代表任何东西,只要它是一个类别即可。
2.2 plot.line 折线图¶
- 如果要绘制的数据不是类别值,而是连续值比较适合使用折线图
reviews['points'].value_counts().sort_index().plot.line()
显示结果:
- 柱状图和折线图区别
- 柱状图:简单直观,很容易根据柱子的长短看出值的大小,易于比较各组数据之间的差别
- 折线图:
- 易于比较各组数据之间的差别
- 能比较多组数据在同一个维度上的趋势
- 每张图上不适合展示太多折线
2.3 plot.hist 直方图¶
reviews['price'].plot.hist()
显示结果:
reviews[reviews['price'] < 200]['price'].plot.hist()
显示结果:
- 在第一个直方图中,没有对价格做任何处理,由于有个别品种的酒价格极高,导致直方图的价格分布发生变化
- 在第二个直方图中,将价格>200的葡萄酒排除了
#查看不同价格葡萄酒
reviews.shape # (150930, 10)
#查看价格大于500的葡萄酒情况
reviews[reviews['price'] >500].shape # (73, 10)
#查看价格大于1500的葡萄酒情况
reviews[reviews['price'] > 1500].shape # (3, 10)
- 数据倾斜:
- 当数据在某个维度上分布不均匀,称为数据倾斜
- 一共15万条数据,价格高于1500的只有三条
- 价格高于500的只有73条数据,说明在价格这个维度上,数据的分布是不均匀的
- 直方图适合用来展示没有数据倾斜的数据分布情况,不适合展示数据倾斜的数据
- 直方图看起来很像条形图。 直方图是一种特殊的条形图,它可以将数据分成均匀的间隔,并用条形图显示每个间隔中有多少行。 直方图柱子的宽度代表了分组的间距,柱状图柱子宽度没有意义
直方图缺点:将数据分成均匀的间隔区间,所以它们对歪斜的数据的处理不是很好
2.5 plot.pie 饼图¶
- 饼图也是一种常见的可视化形式
reviews['province'].value_counts().head(10).plot.pie()
显示结果:
- 饼图的缺陷:饼图只适合展示少量分类在整体的占比
- 如果分类比较多,必然每个分类的面积会比较小,这个时候很难比较两个类别
- 如果两个类别在饼图中彼此不相邻,很难进行比较
- 可以使用柱状图图来替换饼图
3 Pandas 双变量可视化¶
- 在上一小结中,介绍了使用Pandas绘图,理解单个变量在数据中的互相关系,本小节会考察两个变量如何进行可视化
- 数据分析时,我们需要找到变量之间的相互关系,比如一个变量的增加是否与另一个变量有关,数据可视化是找到两个变量的关系的最佳方法
3.1 plot.scatter 散点图¶
- 最简单的两个变量可视化图形是散点图,散点图中的一个点,可以表示两个变量
reviews[reviews['price'] < 100].sample(100).plot.scatter(x='price', y='points',figsize=(14,8),fontsize = 16)
显示结果:
- 修改x轴 y轴标签字体
# 创建绘图区域和坐标轴
fig, axes = plt.subplots(ncols=1, figsize = (20,10))
# 使用pandas 在指定坐标轴内绘图
reviews[reviews['price'] < 100].sample(100).plot.scatter(x='price', y='points',figsize=(14,8),fontsize = 16,ax = axes)
# 通过坐标轴修改x y 标签内容和字体大小
axes.set_xlabel('price',fontdict={'fontsize':16})
显示结果:
- 上图显示了价格和评分之间有一定的相关性:也就是说,价格较高的葡萄酒通常得分更高。
- 请注意,我们必须对数据进行采样,从所有数据中抽取100条数据,如果将全部数据(15万条)都绘制到散点图上,会有很多点重叠在一起,不方便观察
reviews[reviews['price'] < 100].plot.scatter(x='price', y='points',figsize=(12,8))
- 由于散点图的缺点,因此散点图最适合使用相对较小的数据集以及具有大量唯一值的变量。
- 有几种方法可以处理过度绘图。 一:对数据进行采样 二:hexplot(蜂巢图)
3.2 plot.hexplot 蜂巢图¶
- hexplot将数据点聚合为六边形,然后根据其内的值为这些六边形上色,调用matplotlib的api添加x坐标
fig, axes = plt.subplots(ncols=1, figsize = (16,8))
reviews[reviews['price'] < 100].plot.hexbin(x='price', y='points', gridsize=15,ax = axes)
axes.set_xticks([0,20,40,60,80,100])
显示结果:
- 该图中的数据可以和散点图中的数据进行比较,但是hexplot能展示的信息更多
- 从hexplot中,可以看到评论的葡萄酒大多数是87.5分,价格20美元
- hexplot和散点图可以应用于区间变量和/或有序分类变量的组合。
小结¶
- Pandas绘图是对Matplotlib的封装
- Series和DataFrame 都有plot属性,根据不同的图形类型,调用对应的函数