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

Pandas数据分析:快速图表可视化各类操作详解+实例代码(一)

目录

前言

一、基础绘图:plot

二、底图板块

 1.条形图

2.直方图

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢


前言

一般我们做数据挖掘或者是数据分析,再或者是大数据开发提取数据库里面的数据时候,难免只能拿着表格数据左看右看,内心总是希望能够根据自己所想立马生成一张数据可视化的图表来更直观的呈现数据。而当我们想要进行数据可视化的时候,往往需要调用很多的库与函数,还需要数据转换以及大量的代码处理编写。这都是十分繁琐的工作,确实只为了数据可视化我们不需要实现数据可视化的工程编程,这都是数据分析师以及拥有专业的报表工具来做的事情,日常分析的话我们根据自己的需求直接进行快速出图即可,而Pandas正好就带有这个功能,当然还是依赖matplotlib库的,只不过将代码压缩更容易实现。下面就让我们来了解一下如何快速出图。

Pandas数据分析系列专栏已经更新了很久了,基本覆盖到使用pandas处理日常业务以及常规的数据分析方方面面的问题。从基础的数据结构逐步入门到处理各类数据以及专业的pandas常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者大数据开发的朋友推荐订阅专栏,将在第一时间学习到Pandas数据分析最实用常用的知识。此篇博客篇幅较长,涉及到处理文本数据(str/object)等各类操作,值得细读实践一番,我会将Pandas的精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


一、基础绘图:plot

Series和DataFrame上的plot方法只是plt.plot()的简单包装,这里我们用一段实际数据来进行可视化展示:

 这是一段真实地铁通行量特征数据,我们用此数据进行展示:

df_flow['客流量'].plot()

 如果索引由日期组成,则调用gcf().autofmt_xdate()方法可以很好地格式化x轴。

 在DataFrame上,plot()可以方便地用标签绘制所有列:

df_flow_mark[['湿度','风级','降水量']].plot()

 

 可以使用plot()中的x和y关键字绘制一列与另一列的对比,比如我们想要使用星期六的客流量和星期日的客流量作对比:

df_flow_7=df_flow[df_flow['日期']=='星期日'].iloc[:7,:]
df_flow_7.rename(columns={'客流量':'星期日客流量'},inplace=True)
df_flow_6=df_flow[df_flow['日期']=='星期六'].iloc[:7,:]
df_flow_6.rename(columns={'客流量':'星期六客流量'},inplace=True)
df_compare=pd.concat([columns_convert_df(df_flow_7['星期日客流量']),columns_convert_df(df_flow_6['星期六客流量'])],axis=1)
df_compare.plot(x='星期日客流量',y='星期六客流量')

 

二、底图板块

根据Pandas包装后的kind关键字我们梳理一下底图种类:

也可以使用DataFrame.plot方法创建这些其他绘图<kind>而不是提供kind关键字参数。这使得更容易发现绘图方法及其使用的特定参数:

df.plot.area     df.plot.barh     df.plot.density  df.plot.hist     df.plot.line     df.plot.scatter
df.plot.bar      df.plot.box      df.plot.hexbin   df.plot.kde      df.plot.pie

除了这些类型,还有DataFrame.hist()和DataFrame.boxplot()方法,它们使用单独的接口。

最后,pandas中有几个绘图功能。以Series或DataFrame作为参数的绘图。其中包括:

  • Scatter Matrix

  • Andrews Curves

  • Parallel Coordinates

  • Lag Plot

  • Autocorrelation Plot

  • Bootstrap Plot

  • RadViz

分别是:

  • 散射矩阵
  • 安德鲁斯曲线
  • 平行坐标
  • 滞后图
  • 自相关图
  • 引导图
  • 拉德维兹图

绘图也可以用错误条或表格进行装饰。

 1.条形图

df_flow_mark['客流量'].plot(kind='bar')
df_flow_mark['客流量'].plot.bar()

多个标签图表也可以一齐绘出:

df_flow_mark[['风级','降水量']].plot.bar()

 

要生成堆叠条形图,传递stacked=True:

df_flow_mark[['风级','降水量']].plot.bar(stacked=True)

 

长久看这个maatplotlib的默认地图有点疲劳了,我这里换个主题,还是一样的效果不碍事。

要获得水平条形图可以使用barh方法:

df_flow_mark[['风级','降水量']].plot.barh(stacked=True)

 

2.直方图

可以使用DataFrame.plo.hist()和Series.plot.hist()方法绘制直方图.

df4 = pd.DataFrame(
    {
        "a": np.random.randn(1000) + 1,
        "b": np.random.randn(1000),
        "c": np.random.randn(1000) - 1,
    },
    columns=["a", "b", "c"],
)
plt.figure();
df4.plot.hist(alpha=0.5)

 

直方图可以使用stacked=True进行叠加。可以使用bins关键字更改bin大小。

df4.plot.hist(stacked=True, bins=20);

 

可以传递matplotlib hist支持的其他关键字。例如,水平和累积直方图可以通过orientation='horizontal'cumulative=True绘制。

 有关详细信息,可以参阅hist方法和matplotlib hist文档。
现有接口DataFrame.hist,但仍然可以使用hist绘制直方图

plt.figure();
df_flow_mark['风级'].hist();

 

 DataFrame.hist()可以在多个子地块上绘制列的直方图:

plt.figure();
df_flow_mark[['风级','降水量']].diff().hist(color="k", alpha=0.5, bins=50);

 

 可以指定by关键字来绘制分组直方图:

data = pd.Series(np.random.randn(1000))

data.hist(by=np.random.randint(0, 4, 1000), figsize=(6, 4));

 

 此外,还可以在DataFrame.plot.hist()中指定by关键字:

data = pd.DataFrame(
    {
        "a": np.random.choice(["x", "y", "z"], 1000),
        "b": np.random.choice(["e", "f", "g"], 1000),
        "c": np.random.randn(1000),
        "d": np.random.randn(1000) - 1
    }
)
data.plot.hist(by=["a", "b"], figsize=(10, 5));

 

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见

相关文章:

  • mysql的主从创建及mycat的安装
  • OSS存储开放接口规范 和 错误响应
  • 悲观锁、乐观锁和自旋锁
  • RTL8720CM WI-FI+蓝牙,低功耗IoT(物联网)应用 40QFN
  • 程序设计竞赛-过了这个村没这个店
  • C语言实现基于高效率IP路由查找的内容
  • 南大通用GBase8s 常用SQL语句(263)
  • Bootstrap Table 实现 分页选中
  • 嵌入式系统开发笔记89:认识AVR微控制器系统架构
  • GeoPandas安装
  • View-of-Delft数据集文件学习
  • 西门子PLC S7-1200如何实现远程上下载?
  • MySQL的SQL基础(五)
  • 图书巨头BakerTaylor遭勒索软件攻击 系统中断一周仍未恢复
  • 项目实战第三十六讲:基于 Sharding-JDBC 的商品分库⽅案
  • extract-text-webpack-plugin用法
  • Fastjson的基本使用方法大全
  • Java|序列化异常StreamCorruptedException的解决方法
  • Lsb图片隐写
  • Markdown 语法简单说明
  • npx命令介绍
  • Redis中的lru算法实现
  • 基于Android乐音识别(2)
  • 聚类分析——Kmeans
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 探索 JS 中的模块化
  • 小程序开发之路(一)
  • 一个JAVA程序员成长之路分享
  • 移动端解决方案学习记录
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Java总结 - String - 这篇请使劲喷我
  • python最赚钱的4个方向,你最心动的是哪个?
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #define
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (floyd+补集) poj 3275
  • (javascript)再说document.body.scrollTop的使用问题
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (九)信息融合方式简介
  • (六)c52学习之旅-独立按键
  • (十)c52学习之旅-定时器实验
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (十一)图像的罗伯特梯度锐化
  • (一)kafka实战——kafka源码编译启动
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)IOS中获取各种文件的目录路径的方法
  • .form文件_SSM框架文件上传篇
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置