当前位置: 首页 > news >正文

Python数据可视化-Pandas绘图

文章目录

  • 一. Pandas数据可视化简介
  • 二. Pandas 单变量可视化
    • 1. 柱状图
    • 2. 折线图
    • 3. 面积图
    • 4. 直方图
    • 5. 饼图
  • 三. Pandas 双变量可视化
    • 1. 散点图
    • 2. 蜂巢图
    • 3. 堆叠图
    • 4. 折线图

一. Pandas数据可视化简介

pandas库是Python数据分析的核心库
它不仅可以加载和转换数据,还可以做更多的事情:它还可以可视化
pandas绘图API简单易用,是pandas流行的重要原因之一

二. Pandas 单变量可视化

  • 单变量可视化, 包括条形图、折线图、直方图、饼图等
  • 数据使用葡萄酒评论数据集,来自葡萄酒爱好者杂志,包含10个字段,150929行,每一行代表一款葡萄酒
    在这里插入图片描述
  • 加载数据
import pandas as pd
reviews = pd.read_csv('data/winemag-data_first150k.csv',index_col=0)
reviews.head()

在这里插入图片描述

1. 柱状图

条形图是最简单最常用的可视化图表
在下面的案例中,将所有的葡萄酒品牌按照产区分类,看看哪个产区的葡萄酒品种多:

kwargs = dict(figsize=(16, 8),fontsize=20,color = ['r', 'g', 'b', 'y', 'm'])
reviews['province'] .value_counts().head().plot.bar(**kwargs)

在这里插入图片描述
上面的图表说明加利福尼亚生产的葡萄酒比其他省都多
也可以折算成比例, 观察加利福尼亚葡萄酒占总数的百分比

(reviews['province'] .value_counts().head()/len(reviews)).plot.bar(**kwargs)

在这里插入图片描述
在《葡萄酒杂志》(Wine Magazine)评述的葡萄酒中,加利福尼亚生产了近三分之一!

条形图(柱状图)非常灵活:

  • 高度可以代表任何东西,只要它是数字即可
  • 每个条形可以代表任何东西,只要它是一个类别即可。

也可以用来展示《葡萄酒杂志》(Wine Magazine)给出的评分数量的分布情况:

reviews['points'] .value_counts().sort_index().plot.bar(**kwargs)

在这里插入图片描述

2. 折线图

如果要绘制的数据不是类别值,而是连续值比较适合使用折线图

reviews['points'] .value_counts().sort_index().plot.line(**kwargs)

柱状图和折线图区别
柱状图:

  • 简单直观,很容易根据柱子的长短看出值的大小,易于比较各组数据之间的差别

折线图:

  • 易于比较各组数据之间的差别
  • 能比较多组数据在同一个维度上的趋势
  • 每张图上不适合展示太多折线
    在这里插入图片描述

3. 面积图

面积图就是在折线图的基础上,把折线下面的面积填充颜色

reviews['points'] .value_counts().sort_index().plot.area(**kwargs)

当只有一个变量需要制图时,面积图和折线图之间差异不大,在这种情况下,折线图和面积图可以互相替换
在这里插入图片描述

4. 直方图

  • 直方图看起来很像条形图,
  • 直方图是一种特殊的条形图,它可以将数据分成均匀的间隔,并用条形图显示每个间隔中有多少行,
  • 直方图柱子的宽度代表了分组的间距,柱状图柱子宽度没有意义
  • 直方图缺点:将数据分成均匀的间隔区间,所以它们对歪斜的数据的处理不是很好:
  • 没有对价格做任何处理,由于有个别品种的酒价格极高,导致直方图的价格分布发生变化

    reviews['price'].plot.hist()
    

    在这里插入图片描述

  • 数据倾斜:
    当数据在某个维度上分布不均匀,称为数据倾斜
    一共15万条数据,价格高于1500的只有三条
    价格高于500的只有73条数据,说明在价格这个维度上,数据的分布是不均匀的
    直方图适合用来展示没有数据倾斜的数据分布情况,不适合展示数据倾斜的数据

    #查看价格较高的葡萄酒情况
    reviews[reviews['price'] >500]
    #查看数据shape
    reviews.shape # (150930, 10)
    reviews[reviews['price'] >500].shape # (73, 10)
    
  • 评估数据,调整数据

reviews['price'].quantile(0.95)
80.0
reviews[reviews['price']<80]['price'].plot.hist()

在这里插入图片描述

-对葡萄酒的评分不存在数据倾斜的情况,评分数据的分布情况比较适合用直方图展示

reviews['points'].plot.hist()

在这里插入图片描述

5. 饼图

饼图也是一种常见的可视化形式

reviews['province'].value_counts().head(10).plot.pie()

在这里插入图片描述

饼图的缺陷:饼图只适合展示少量分类在整体的占比
如果分类比较多,必然每个分类的面积会比较小,这个时候很难比较两个类别
如果两个类别在饼图中彼此不相邻,很难进行比较
可以使用柱状图图来替换饼图

三. Pandas 双变量可视化

1. 散点图

最简单的两个变量可视化图形是散点图,散点图中的一个点,可以表示两个变量

reviews.plot().scatter(x='price',y='points')

在这里插入图片描述

reviews[reviews['price'] < 100].plot.scatter(x='price', y='points')

在这里插入图片描述
在这里插入图片描述

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轴标签字体
在这里插入图片描述

2. 蜂巢图

hexplot将数据点聚合为六边形,然后根据其内的值为这些六边形上色:

reviews[reviews['price'] < 100].plot.hexbin(x='price', y='points', gridsize=15,figsize=(14,8))

在这里插入图片描述

如果x轴坐标缺失,属于bug,可以通过调用matplotlib的api添加x坐标

fig, axes = plt.subplots(ncols=1, figsize = (12,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中,可以看到《葡萄酒杂志》(Wine Magazine)评论的葡萄酒瓶大多数是87.5分,价格20美元
Hexplot和散点图可以应用于区间变量和/或有序分类变量的组合。

3. 堆叠图

展示两个变量,除了使用散点图,也可以使用堆叠图
堆叠图是将一个变量绘制在另一个变量顶部的图表
接下来通过堆叠图来展示最常见的五种葡萄酒

  • 将葡萄酒种类分组,找到最常见的五种葡萄酒
reviews.groupby(['variety'])['country'].count().sort_values(ascending = False)

在这里插入图片描述

从结果中看出,最受欢迎的葡萄酒是,Chardonnay(霞多丽白葡萄酒),Pinot Noir(黑皮诺),Cabernet Sauvignon(赤霞珠),Red Blend(混酿红葡萄酒) ,Bordeaux-style Red Blend (波尔多风格混合红酒)

  • 从数据中取出最常见的五种葡萄酒
top_5_wine = reviews[reviews.variety.isin([‘Chardonnay’,‘Pinot Noir’,‘Cabernet Sauvignon’,‘Red Blend’,‘Bordeaux-style Red Blend'])]
top_5_index = reviews.groupby(['variety'])['country'].count().sort_values(ascending = False).head().index.to_list()
top_5_index

在这里插入图片描述

top_5_wine = reviews[reviews['variety'].isin(top_5_index)]
top_5_wine

在这里插入图片描述

  • 通过透视表找到每种葡萄酒中,不同评分的数量
#透视表计数
wine_counts = top_5_wine.pivot_table(index = ['points'],columns =['variety'],values='country',aggfunc='count')
wine_counts
#修改列名
wine_counts.columns = ['Bordeaux-style Red Blend','Cabernet Sauvignon','Chardonnay','Pinot Noir','Red Blend']
wine_counts

在这里插入图片描述
从上面的数据中看出,行列分别表示一个类别变量(评分,葡萄酒类别),行列交叉点表示计数,这类数据很适合用堆叠图展示

wine_counts.plot.bar()

在这里插入图片描述

wine_counts.plot.bar(stacked=True)

在这里插入图片描述

上图为堆积柱状图,适合展示少量类别的分类数据
面积堆积图:

wine_counts.plot.area()

在这里插入图片描述

面积堆积图的使用限制:
① 种类较多的数据不适合用堆积图,图中显示的数据有五个种类,比较合适,一般不要超过8个种类
② 堆积图的可解释性(读图)较差

4. 折线图

折线图在双变量可视化时,仍然非常有效

wine_counts.plot.line()

在这里插入图片描述
从上图看出,折线图的读图更容易,更容易对不同类别做对比
例如,在87分的酒中,哪个类别更多?从图中很容易看出,绿色的霞多丽比红色的黑比诺略多


http://www.mrgr.cn/news/82897.html

相关文章:

  • .NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人
  • matlab中高精度计算函数vpa与非厄米矩阵本征值的求解
  • 多模态论文笔记——GLIDE(DALL·E 2模型的核心部件)
  • jenkins入门7 --发送邮件1
  • 在环境冲突情况下调整优先级以解决ROS Catkin构建中缺少模块的问题【ubuntu20.04】
  • [python]验证码识别库-DDDDOCR
  • Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
  • Servlet详解
  • 4.7 数据库:单行子查询和多行子查询
  • python学习笔记—14—函数
  • 【HarmonyOS-ArkTS语言】计算器的实现【合集】
  • 【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
  • MyBatis深入了解
  • 【C++数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
  • 机器学习基础-线性回归和逻辑回归
  • 机器学习基础-卷积的计算
  • 计算机网络与服务器
  • unity学习8:unity的基础操作 和对应shortcut
  • Vue 按键生成多个表单
  • 【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
  • 现代密码学期末重点(备考ing)
  • 常见加密算法附JAVA代码案例
  • 【Javascript Day1】javascript基础
  • 《数据结构》期末考试测试题【中】
  • 最好用的图文识别OCR -- PaddleOCR(1) 快速集成
  • 信息科技伦理与道德2:研究方法