Pandas入门篇(三)-------数据可视化篇2(pandas-plot篇)
Pandas 自带的可视化功能通过 plot 方法提供了一种便捷的方式来创建各种类型的图表。plot 方法是基于 Matplotlib 库构建的,因此它继承了 Matplotlib 的强大功能和灵活性,同时简化了绘图过程,使得用户无需深入了解 Matplotlib 的所有细节即可快速创建图表。主要特点和优势:集成性:plot 方法直接集成在 Pandas DataFrame 和 Series 对象
概述
Pandas 自带的可视化功能通过 plot 方法提供了一种便捷的方式来创建各种类型的图表。plot 方法是基于 Matplotlib 库构建的,因此它继承了 Matplotlib 的强大功能和灵活性,同时简化了绘图过程,使得用户无需深入了解 Matplotlib 的所有细节即可快速创建图表。
- 主要特点和优势:
- 集成性:plot 方法直接集成在 Pandas DataFrame 和 Series 对象中,使得用户可以直接从数据 对象创建图表,无需额外转换数据格式。
- 便捷性:通过简单的函数调用和参数设置,用户可以快速生成各种类型的图表,无需编写大量的绘图代码。
- 灵活性:尽管 plot 方法提供了默认的图表样式和设置,但用户仍然可以通过调整参数或使用 Matplotlib 的功能来进一步定制和美化图表。
一、格式
1. 生成pandas.plotting对象来生成图表
格式:
Dataframe[条件].聚合.plot.图形函数
2. 调用plot()函数来生成图表
格式:
Dataframe[条件].聚合.plot(kind = '图表类型',....其他参数)
这两种方法除语法外没有区别,建议使用第一种写法
3.支持的图表类型
plot 方法支持多种图表类型,包括:
- 线图 (line):用于展示数据随时间或其他连续变量的变化趋势。
- 柱状图 (bar):用于比较不同类别的数值数据。
- 水平柱状图 (barh):与柱状图类似,但条形是水平的。
- 直方图 (hist):用于展示数值数据的分布情况。
- 箱线图 (box):用于展示一组数值数据的分布特征,包括最小值、最大值、中位数、四分位数等。
- 面积图 (area):类似于线图,但下方区域被填充颜色,用于强调总量或累积效果。
- 饼图 (pie):用于展示不同类别的占比情况。
- 散点图 (scatter):用于展示两个变量之间的关系。
- 核密度估计图 (kde 或 density):用于展示单变量概率分布的非参数估计。
二、单变量绘图常用图表
导入数据:
import pandas as pd
import pandas as ps
wine = pd.read_csv('/export/data/pandas_data/winemag-data_first150k.csv',index_col=0)
wine
数据样式:
产看数据基本信息
# 查看数据基本信息
wine.info()
1. 柱状图(bar)
使用场景
柱状图主要适用于以下类型的数据:
-
分类数据:柱状图最常用于展示分类数据。
分类数据是按照某种属性或特征将数据分为不同的类别或组。例如,人口统计中的性别、职业、教育程度等,或者产品销售数据中的不同产品类型。柱状图通过柱子的高度来表示每个类别的频数或占比,使得不同类别之间的数据对比一目了然。 -
离散数值数据:除了分类数据,柱状图也可以用于展示离散的数值数据,尤其是当这些数值代表不同的类别或组时。
例如,展示不同年龄段人群的平均收入,或者不同月份的销售额。 -
时间序列数据(按时间分类):虽然线图通常是时间序列数据的首选可视化方式,但在某些情况下,如果时间序列数据是按固定时间间隔(如月份、季度或年份)收集的,并且主要关注每个时间点的数值而非趋势变化,那么柱状图也是一个可行的选择。
例如,展示一年中各个月份的销售数据。 -
排序数据:当需要对分类数据进行排序,并通过可视化来强调这种排序时,柱状图也很适用。
例如,按销售额从高到低排序的产品类别。
需要注意的是,柱状图不适合用于展示连续变化的数值数据或复杂的趋势关系,因为这可能导致图形过于拥挤,难以解读。在这种情况下,线图或散点图可能更为合适。
代码实现
注:若数据处理部分未明白请先学习本专栏中Pandas入门篇(二)中相关内容
# 展示各省红酒种类排名前10的柱状图,figsize为图表大小,fontsize 为字体大小,color代表柱体颜色
wine['province'].value_counts().head(10).plot.bar(figsize=(10,8),fontsize = 20,color=['r','g','b'])
图表展示:
2. 折线图(line)(默认即为折线图)
适用场景
折线图(Line Chart)主要适用于展示随时间或其他连续变量变化的数据趋势。以下是折线图适用的数据类型:
-
时间序列数据:折线图最常用于展示时间序列数据,即数据随时间变化的趋势。例如,股票价格随日期的变化、气温随季节的变化、销售额随月份的变化等。通过连接不同时间点的数据点,折线图可以清晰地揭示数据随时间的变化规律,帮助用户识别趋势、周期性变化或异常值。
-
连续数值数据:除了时间序列数据,折线图也适用于展示其他连续变量之间的数值关系。只要数据点可以按某种顺序(如大小、等级)排列,就可以使用折线图来表示。这种顺序不必是时间,但数据点之间应该存在某种逻辑上的连续性。
-
多组数据的对比:当需要同时展示多组数据随时间或其他连续变量的变化趋势时,折线图非常有用。通过不同颜色的线条或标记,可以区分不同的数据系列,从而比较它们之间的相似性和差异性。
需要注意的是,折线图不适用于展示分类数据或离散数值数据,因为这些数据类型通常更适合使用柱状图或饼图等图表类型。此外,如果数据点过多或变化过于复杂,折线图可能会变得难以解读,此时可能需要考虑使用其他可视化方法或对数据进行简化处理。
代码实现
注:若数据处理部分未明白请先学习本专栏中Pandas入门篇(二)中相关内容
# 统计各分数段红酒数量,grid=True)表示显示网格
wine['points'].value_counts().sort_index().plot.line(figsize=(13,8), color='gray',fontsize = 20,grid=True)
图表展示:
3.面积图(area)
适用场景
面积图是在折线图的基础上,对折线以下的区域进行颜色填充,用于在连续间隔或时间跨度上展示数值。它主要强调数量与时间或其他连续变量的关系,并特别适用于表示趋势和对比关系。因此,面积图主要适用于以下类型的数据:
- 时间序列数据:面积图非常适合展示随时间变化的数据。例如,企业每个月的销售额、网站每日的访问量等。通过面积图,可以清晰地看到数据随时间变化的趋势,以及不同时间段内数据的累积效果。
- 连续数值数据:除了时间序列数据,面积图也适用于展示其他连续变量的数值数据。这些数据可以是连续的、有序的,并且可以通过面积的大小来表示数值的大小。
- 多组数据的对比:当需要同时展示多组数据的变化趋势并进行对比时,面积图是一个很好的选择。通过为不同的数据系列使用不同的颜色或填充模式,可以清晰地看到它们之间的差异和相似之处。
需要注意的是,面积图在展示大量数据时可能会变得复杂和难以解读。因此,在数据点过多或数据变化过于复杂的情况下,可能需要考虑使用其他类型的图表,如折线图或柱状图。
代码实现:
注:若数据处理部分未明白请先学习本专栏中Pandas入门篇(二)中相关内容
import matplotlib as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示汉字
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
wine['points'].value_counts().sort_index().plot.area(figsize=(13,8), color='gray',fontsize = 20,title = '各分数段红酒数量面积图')
图表展示:
4.直方图(hist(bins= n))
适用场景
直方图主要适用于展示连续型变量的分布情况。这类数据通常具有无限多个可能的取值,且取值之间可以连续变化,如人的身高、体重、考试成绩等。通过直方图,我们可以清晰地看到数据的集中趋势、分散程度以及可能存在的异常值。
直方图的基本构造是将连续变量划分为若干组(通常是等宽的),然后统计每组的频数或频率,并以矩形的面积来表示。矩形的宽度表示组距,高度表示频数或频率。这样,整个直方图就展示了数据的分布情况。
在实际应用中,直方图常用于以下几个场景:
- 数据分析与探索:在数据分析的初期阶段,直方图可以帮助我们快速了解数据的分布情况,从而为后续的分析和建模提供基础。
- 质量控制:在工业生产中,直方图可以用来监控产品的质量分布情况,及时发现异常值或生产过程中的问题。
- 统计学研究:在统计学中,直方图常用于展示样本数据的分布情况,并与理论分布进行比较,以检验假设或估计参数。
需要注意的是,直方图虽然能够展示数据的分布情况,但并不能提供关于数据之间关系的信息。因此,在需要分析变量之间关系的情况下,可能需要结合其他类型的图表(如散点图、折线图等)进行综合分析。
代码实现
# 筛选价格 小于 150的, 然后进行: 直方图绘制,bins为划分5个区间
wine[wine['price'] < 150]['price'].plot.hist(bins=10,figsize=(13,8), color='gray',fontsize = 20,title = '价格小于150的红酒数量直方图')
图表展示:
5.饼图(pie)
适用范围
饼图(Pie Chart)主要适用于展示分类数据的占比情况。具体来说,饼图通过将一个完整的圆饼按照各部分所占的比例来划分,每个部分用不同的颜色或纹理表示,从而直观地展示各类别在总体中所占的比例。
饼图适用于以下类型的数据:
分类数据:饼图最适合用于展示分类数据的占比。例如,展示不同产品类型的销售占比、不同部门的员工人数占比、不同地区的客户数量占比等。通过饼图,可以清晰地看到各类别在总体中的相对大小。
百分比数据:当需要展示各类别所占的百分比时,饼图也是一个很好的选择。通过饼图,可以直观地比较不同类别之间的比例关系,从而更容易地识别出占比最大或最小的类别。
需要注意的是,当饼图中的类别过多时,可能会导致饼图变得拥挤且难以解读。在这种情况下,可以考虑使用其他类型的图表(如柱状图或条形图)来展示数据。此外,饼图只展示了各类别的占比,而不能展示数量的具体值,因此在需要展示具体数值时,可能需要结合其他图表或文字说明进行补充。
代码实现
# 展示各省红酒种类排名前10的饼图
wine['province'].value_counts().head(10).plot.pie(figsize=(10,8),fontsize = 20)
图表展示:
三、双变量绘图常用图表
1.散点图(scatter)
适用范围
散点图主要适用于显示和比较数值型数据,尤其是当需要观察两个变量之间的关系时。例如,在科学数据、统计数据和工程数据的分析中,散点图常被用来判断数据是否倾向于使用聚类来做分群,或者是否倾向于使用线性回归来做线性分析。
在散点图中,每个数据点代表两个变量的一个观测值,横轴和纵轴分别代表两个不同的变量。通过观察数据点在图上的分布模式,可以判断这两个变量之间是否存在某种关联,如正相关、负相关或无关等。此外,散点图还能展示数据的疏密程度和变化趋势,从而揭示两个连续变量之间的数量关系。
当有两个变量,且其中一个为分类变量时,散点图可以通过改变点的形状或颜色来区分不同的类别,从而揭示这些变量之间的关系。对于所有的变量都为连续性变量的情况,也可以绘制高维散点图进行分析。
需要注意的是,散点图主要用于显示变量之间的关系和趋势,而不是提供精确的数值。因此,在解读散点图时,应结合具体的数据背景和上下文进行理解。
总的来说,散点图适用于分析两个或多个数值型变量之间的关系,尤其在需要观察数据分布和趋势的情况下。
代码实现
# 绘制评分和价格的散点分布图(随机取100样本绘制)
wine.sample(100).plot.scatter(x ='price',y= 'points' ,figsize=(15,6),fontsize=20)
图表展示:
2. 蜂巢图(hexbin)
适用范围
蜂巢图适用于展示连续型变量的二维分布。这种图表通过将二维平面划分为一系列六边形格子(类似于蜂巢的结构),并统计每个格子内的数据点数量,来揭示数据的分布特征。
蜂巢图尤其适用于以下情况:
- 连续变量的二维关系:当需要观察两个连续变量之间的分布关系时,Hexplot可以提供一个直观且平滑的展示方式。
它不像散点图那样在数据点密集时可能出现重叠,而是通过将数据点聚合到六边形格子中,更清晰地展示数据的整体分布趋势。 - 数据密度可视化:蜂巢图通过颜色的深浅或格子的大小来表示不同区域的数据密度,从而可以快速地识别出数据的聚集区域和稀疏区域。这对于发现数据中的异常值、热点或冷点非常有用。
- 大量数据点的可视化:当数据量非常大时,散点图可能会变得难以解读,因为大量的数据点可能导致视觉上的混乱。而蜂巢图通过将数据点聚合到六边形格子中,可以有效地减少视觉上的复杂性,同时保留数据的分布特征。
需要注意的是,虽然蜂巢图能够揭示数据的分布趋势和密度,但它可能无法准确地表示单个数据点的具体位置。因此,在需要精确了解每个数据点位置的情况下,可能需要结合其他图表类型(如散点图)进行综合分析。
总的来说,蜂巢图适用于展示连续型变量的二维分布,特别是当数据量较大或需要观察数据密度时。
代码实现
# 4. 处理X轴坐标缺失, 属于Bug(新版本已解决), 可以通过调用 matplotlibde api添加x坐标
import matplotlib.pyplot as plt
fig, a1 = plt.subplots(figsize = (12, 8))
# 绘制评分和价格的蜂巢图,gridsize 为设置蜂巢的大小
wine[wine['price']<100].plot.hexbin(x ='price',y= 'points' ,figsize=(15,6),fontsize=20,gridsize = 20, ax=a1)
# 增加x轴刻度
a1.set_xticks([0, 20, 40, 60, 80, 100])
plt.show()
图表展示:
3.堆叠图(bar(stacked=True))
适用范围
堆叠图是一种特殊的图表类型,它通过将多个系列的数据在同个类目轴上(同一X轴位置)进行叠加显示,以展示多系列数据的和或各个数据系列的分量。堆叠图特别适用于以下类型的数据:
- 多个系列数据需要对比:当需要比较两个或多个系列的值时,可以使用堆叠图。它有助于直观地比较各个系列在同一X轴位置上的数据总和或各个数据系列的分量。
- 关注多系列数据的和:如果更关注于多系列数据的和在不同个类目轴上(不同X轴位置)的差异,而非突出各个系列数据之间的差异性,那么堆叠图是一个很好的选择。
- 时间序列数据或分类数据:堆叠图可以用于展示时间序列数据或分类数据的趋势和变化。通过堆叠不同时间段或类别的数据,可以清晰地看到各个系列数据的贡献和变化。
需要注意的是,堆叠图并不适用于所有数据场景。例如,当需要比较各个数据点的绝对值时,堆叠图可能不是最佳选择,因为堆叠会导致数据点的实际值变得不那么直观。此外,对于分类数据的比较,如果更关注各个类别的独立表现而非其累加效果,使用其他类型的图表(如柱状图或饼图)可能更为合适。
代码实现
# 根据葡萄酒种类分组, 找到最常见的五种葡萄酒
# 1. 找到 种类最多的 五种酒 的 名字.
top_5_variety = wine['variety'].value_counts().head().index.to_list()
top_5_variety
# 2. 从数据中取出最常见的五种葡萄酒.
top_5_wine = wine[wine.variety.isin(top_5_variety)]
top_5_wine
# 3. 透视表计数.
wine_counts = top_5_wine.pivot_table(index='points', columns='variety', values='country', aggfunc='count')
wine_counts
# 4. 修改列名, 做不做都行.
# wine_counts.columns = ['Bordeaux-style Red Blend', 'Cabernet Sauvignon', 'Chardonnay','Pinot Noir', 'Red Blend']
# 5. 可视化.
wine_counts.plot.bar(stacked=True, figsize=(16, 8)) # 堆叠图
图表展示:
4.面积堆叠图(area)
适用范围
面积堆叠图(Area Stacked Chart)适合展示具有多个分类或变量,并且需要表现这些分类或变量在总体中的累积量或占比情况的数据。具体来说,它适用于以下几种类型的数据:
- 多分类或变量的累积量或占比:面积堆叠图能够清晰地表示每个分类或变量在总量中所占的比例,并允许用户在不同分类或变量之间进行比较。
这对于展示市场份额、销售分布、成本构成等多分类数据的累积量和占比情况非常有用。 - 时间序列数据:当需要展示多个分类或变量随时间变化的趋势时,面积堆叠图是一个很好的选择。
通过堆叠不同时间段的数据,用户可以直观地看到每个分类或变量在不同时间点的贡献和变化。 - 强调部分与整体关系:面积堆叠图通过展示每个数据系列在总体中的占比,强调了部分与整体的关系。这使得用户能够更容易地理解不同数据系列对整体趋势的贡献和影响。
需要注意的是,当分类或变量的数量过多时,面积堆叠图可能会变得拥挤和难以解读。因此,在选择使用面积堆叠图时,需要确保分类或变量的数量适中,以保证图表的清晰度和可读性。
代码实现
wine_counts.plot.area(figsize=(16, 8))
图表展示:
下篇内容
seaborn可视化
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)