概述
Pandas绘图
学习目标
- 熟练掌握Pandas数据可视化常用功能
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 柱状图和分类数据
条形图(柱状图)非常灵活:
- 高度可以代表任何东西,只要它是数字即可
- 每个条形可以代表任何东西,只要它是一个类别即可。
- 条形图是最简单最常用的可视化图表。 在下面的案例中,将所有的葡萄酒品牌按照产区分类,看看哪个产区的葡萄酒品种多:
# figsize 绘图区域大小, fontsize 字体大小 color 颜色
text_kwargs = dict(
figsize=(16,8),
fontsize=20,
color=['b','orange','g','r','purple','brown','pink','gray','cyan','y']
)
# 计算省份出现次数,取前10,画图;**text_kwargs表示解包
reviews['province'].value_counts().head(10).plot.bar(**text_kwargs)
- 上面的图表说明加利福尼亚生产的葡萄酒比其他省都多, 也可以折算成比例, 计算加利福尼亚葡萄酒占总数的百分比
# 计算省份出现次数,取前10,再分别除以数据的总数,就得到省份出产葡萄酒的占比
(reviews['province'].value_counts().head(10) / len(reviews)).plot.bar(**text_kwargs)
- 也可以用来展示《葡萄酒杂志》(Wine Magazine)给出的评分数量的分布情况:
# 计算所有不同评分的各自数量,再根据评分进行排序,再画图
reviews['points'].value_counts().sort_index().plot.bar(**text_kwargs)
2.2 折线图
- 如果要绘制的数据不是类别值,而是连续值比较适合使用折线图
reviews['points'].value_counts().sort_index().plot.line()
- 柱状图和折线图区别
- 柱状图:简单直观,很容易根据柱子的长短看出值的大小,易于比较各组数据之间的差别
- 折线图:
- 易于比较各组数据之间的差别
- 能比较多组数据在同一个维度上的趋势
- 每张图上不适合展示太多折线
- 小练习:柱状图或折线图
- 5种不同口味冰激凌,不同口味冰激凌的销售数量。
- 国产轿车不同品牌的月销售数量。
- 学生的考试分数,范围为0-100
2.3 面积图
- 面积图就是在折线图的基础上,把折线下面的面积填充颜色;当只有一个变量需要制图时,面积图和折线图之间差异不大,在这种情况下,折线图和面积图可以互相替换
reviews['points'].value_counts().sort_index().plot.area()
2.4 直方图
# price小于200的所有数据df,取price列的值,画图
reviews[reviews['price'] < 200]['price'].plot.hist()
- 直方图看起来很像条形图。 直方图是一种特殊的条形图,它可以将数据分成均匀的间隔,并用条形图显示每个间隔中有多少行。 直方图柱子的宽度代表了分组的间距,柱状图柱子宽度没有意义。直方图缺点:将数据分成均匀的间隔区间,所以它们对歪斜的数据的处理不是很好:
reviews['price'].plot.hist()
- 在第一个直方图中,将价格>200的葡萄酒排除了
- 在第二个直方图中,没有对价格做任何处理,由于有个别品种的酒价格极高,导致直方图的价格分布发生变化
#查看价格较高的葡萄酒情况
reviews[reviews['price'] > 1500]
显示结果:
country description designation points price province region_1 region_2 variety winery 13318 US The nose on this single-vineyard wine from a s… Roger Rose Vineyard 91 2013.0 California Arroyo Seco Central Coast Chardonnay Blair 34920 France A big, powerful wine that sums up the richness… NaN 99 2300.0 Bordeaux Pauillac NaN Bordeaux-style Red Blend Château Latour 34922 France A massive wine for Margaux, packed with tannin… NaN 98 1900.0 Bordeaux Margaux NaN Bordeaux-style Red Blend Château Margaux
- 数据倾斜:
- 当数据在某个维度上分布不均匀,称为数据倾斜
- 一共15万条数据,价格高于1500的只有三条
- 价格高于500的只有73条数据,说明在价格这个维度上,数据的分布是不均匀的
- 直方图适合用来展示没有数据倾斜的数据分布情况,不适合展示数据倾斜的数据
reviews.shape
显示结果: 共计150930条数据
(150930, 10)
reviews[reviews['price'] >500].shape
显示结果: 价格大于500的数据只有73条
(73, 10)
- 对葡萄就的评分不存在数据倾斜的情况,评分数据的分布情况比较适合用直方图展示
reviews['points'].plot.hist()
2.5 饼图
- 饼图也是一种常见的可视化形式
reviews['province'].value_counts().head(10).plot.pie()
- 饼图的缺陷:饼图只适合展示少量分类在整体的占比
- 如果分类比较多,必然每个分类的面积会比较小,这个时候很难比较两个类别
- 如果两个类别在饼图中彼此不相邻,很难进行比较
- 可以使用柱状图图来替换饼图
3 Pandas 双变量可视化
- 在上一小结中,介绍了使用Pandas绘图,理解单个变量在数据中的互相关系,本小节会考察两个变量如何进行可视化
- 数据分析时,我们需要找到变量之间的相互关系,比如一个变量的增加是否与另一个变量有关,数据可视化是找到两个变量的关系的最佳方法
3.1 散点图
-
最简单的两个变量可视化图形是散点图,散点图中的一个点,可以表示两个变量
# 价格小于100的葡萄酒,随机取样100个数据,评分分布 reviews[reviews['price'] < 100].sample(100).plot.scatter(x='price', y='points')
- 调整图形大小,字体大小,由于pandas的绘图功能是对Matplotlib绘图功能的封装,所以很多参数pandas 和 matplotlib都一样
reviews[reviews['price'] < 100].sample(100).plot.scatter(x='price', y='points', figsize=(14,8), fontsize = 16)
- 修改x轴 y轴标签字体
from matplotlib import pyplot as plt # 创建绘图区域和坐标轴 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) # 通过坐标轴修改标签内容和字体大小 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 hexplot蜂巢图
- hexplot将数据点聚合为六边形,然后根据其内的值为这些六边形上色:
reviews[reviews['price'] < 100].plot.hexbin(x='price', y='points', gridsize=15, figsize=(14,8))
最后
以上就是柔弱诺言为你收集整理的pandas pandas绘图Pandas绘图的全部内容,希望文章能够帮你解决pandas pandas绘图Pandas绘图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复