![2cfe93fe1c40238ef7e3a47916d03ecb.gif](https://i-blog.csdnimg.cn/blog_migrate/8bcfa40947267baefc8fb4097b5b4f79.gif)
文末领取【数据可视化图表选择指南】
数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,可以帮助我们更好的给他人解释现象,做到一图胜千文的说明效果。
常见的数据可视化库有:
matplotlib 是最常见的2维库,可以算作可视化的必备技能库,由于matplotlib是比较底层的库,api很多,代码学起来不太容易。
seaborn 是建构于matplotlib基础上,能满足绝大多数可视化需求。更特殊的需求还是需要学习matplotlib。
pyecharts 上面的两个库都是静态的可视化库,而pyecharts有很好的web兼容性,可以做到可视化的动态效果。
但是在数据科学中,几乎都离不开pandas数据分析库,而pandas可以做:
数据采集 如何批量采集网页表格数据?
数据读取 pd.read_csv/pd.read_excel
数据清洗(预处理) 理解pandas中的apply和map的作用和异同
可视化,兼容matplotlib语法(今天重点)
在本文我们可以学到用pandas做:
导入数据
绘制最简单的图plot
多个y的绘制图
折线图、条形图、饼形图和散点图绘制
统计信息绘图
箱型图
轴坐标刻度
plot更多精细化参数
可视化结果输出保存
准备工作
如果你之前没有学过pandas和matpltolib,我们先安装好这几个库
!pip3 install numpy
!pip3 install pandas
!pip3 install matplotlib
已经安装好,现在我们导入这几个要用到的库。使用的是伦敦天气数据,一开始我们只有12个月的小数据作为例子
#jupyter notebook中需要加这行代码
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#读取天气数据
df = pd.read_csv('data/london2018.csv')
df
![ce44b812ea28c49499c13c779e676d28.png](https://i-blog.csdnimg.cn/blog_migrate/54fc802821a3dbebda0581b728b135ad.jpeg)
plot最简单的图
选择Month作为横坐标,Tmax作为纵坐标,绘图。
大家注意下面两种写法
#写法1
df.plot(x='Month', y='Tmax')
plt.show
![a1dda8f5fcbfe760eaef8b0ea160e412.png](https://i-blog.csdnimg.cn/blog_migrate/6f40688d487380423f3419e837d0e260.jpeg)
横坐标轴参数x传入的是df中的列名Month
纵坐标轴参数y传入的是df中的列名Tmax
折线图
上面的图就是折线图,折线图语法有三种
df.plot(x='Month', y='Tmax')
df.plot(x='Month', y='Tmax', kind='line')
df.plot.line(x='Month', y='Tmax')
df.plot.line(x='Month', y='Tmax')
plt.show
![c61a3a9a9a7ea4c95959d3e59b9aae93.png](https://i-blog.csdnimg.cn/blog_migrate/5ec1e913f3ad30976510cad9a1015a3d.jpeg)
#grid绘制格线
df.plot(x='Month', y='Tmax', kind='line', grid=True)
plt.show
![a1000227a016897cf01e4d8ddcf23f3f.png](https://i-blog.csdnimg.cn/blog_migrate/c9a2d53435b60cd26a7f80e615cb4b0d.jpeg)
多个y值
上面的折线图中只有一条线, 如何将多个y绘制到一个图中
比如Tmax, Tmin
df.plot(x='Month', y=['Tmax', 'Tmin'])
plt.show
![e5aaff7428c877a23ad9a597eece7c61.png](https://i-blog.csdnimg.cn/blog_migrate/406f4018a3d1ac98b7b3b19d9e2e137f.jpeg)
条形图
df.plot(x='Month',
y='Rain',
kind='bar')
#同样还可以这样画
#df.plot.bar(x='Month', y='Rain')
plt.show
![b0af9ef2f20e8174b81768566bf708ce.png](https://i-blog.csdnimg.cn/blog_migrate/4f0563761129374688fb92d1f6c3008c.jpeg)
水平条形图
bar环卫barh,就可以将条形图变为水平条形图
df.plot(x='Month',
y='Rain',
kind='barh')
#同样还可以这样画
#df.plot.bar(x='Month', y='Rain')
plt.show
![81c0c4fa01d5467f9683a1f733b4fe90.png](https://i-blog.csdnimg.cn/blog_migrate/dc7c7518be529d5498793f884f653ebc.jpeg)
多个变量的条形图
df.plot(kind='bar',
x = 'Month',
y=['Tmax', 'Tmin'])
plt.show
![b3c649edca136458b0a514d83f5a48c9.png](https://i-blog.csdnimg.cn/blog_migrate/7e568f922ff8ceb87393540df04dfb45.jpeg)
散点图
df.plot(kind='scatter',
x = 'Month',
y = 'Sun')
plt.show
![6d3ceb8cdd1be107fe26b3c3c3c527a8.png](https://i-blog.csdnimg.cn/blog_migrate/0e401d3678f1b71c4940f9060be5471a.jpeg)
饼形图
df.plot(kind='pie', y='Sun')
plt.show
![93c5c83367d5e6c3f0a13f3a8557b003.png](https://i-blog.csdnimg.cn/blog_migrate/021bc472625c09262a802c2be81b65d4.jpeg)
上图绘制有两个小问题
legend图例不应该显示
月份的显示用数字不太正规
df.index = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
df.plot(kind='pie', y = 'Sun', legend=False)
plt.show
![8a5a1a1ebc3603ea9e6198c188ecfec0.png](https://i-blog.csdnimg.cn/blog_migrate/29fa27eccef35e548d8252cebdc1e3b7.jpeg)
更多数据
一开头的数据只有12条记录(12个月)的数据,现在我们用更大的伦敦天气数据
import pandas as pd
df2 = pd.read_csv('data/londonweather.csv')
df2.head
![3054db21e7701f917fab3e56b154c107.png](https://i-blog.csdnimg.cn/blog_migrate/03fb4cf61e8fc8f474387ea7295fbba6.jpeg)
df2.Rain.describe
count 748.000000
mean 50.408957
std 29.721493
min 0.300000
25% 27.800000
50% 46.100000
75% 68.800000
max 174.800000
Name: Rain, dtype: float64
上面一共有748条记录, 即62年的记录。
箱型图
df2.plot.box(y='Rain')
#df2.plot(y='Rain', kind='box')
plt.show
![d2addec39affdf7579c849f0175e9e10.png](https://i-blog.csdnimg.cn/blog_migrate/ddce3b94d3846cfbaabdfed9fd17a352.jpeg)
直方图
df2.plot(y='Rain', kind='hist')
#df2.plot.hist(y='Rain')
plt.show
![8c20e1a2f864e36c1bf72bb92b4c2526.png](https://i-blog.csdnimg.cn/blog_migrate/fd3c051724e6fcd8738ad07ed09ca68b.jpeg)
纵坐标的刻度可以通过bins设置
df2.plot(y='Rain', kind='hist', bins=[0,25,50,75,100,125,150,175, 200])
#df2.plot.hist(y='Rain')
plt.show
![c054f38778aef1feea9fb8a64740a4fe.png](https://i-blog.csdnimg.cn/blog_migrate/68f7e4064bff6246daac3accdbf038b4.jpeg)
多图并存
df.plot(kind='line',
y=['Tmax', 'Tmin', 'Rain', 'Sun'], #4个变量可视化
subplots=True, #多子图并存
layout=(2, 2), #子图排列2行2列
figsize=(20, 10)) #图布的尺寸
plt.show
![8a0486ff097ffdaae5ace693351f1592.png](https://i-blog.csdnimg.cn/blog_migrate/c41b88877adce16cea43e71351672621.jpeg)
df.plot(kind='bar',
y=['Tmax', 'Tmin', 'Rain', 'Sun'], #4个变量可视化
subplots=True, #多子图并存
layout=(2, 2), #子图排列2行2列
figsize=(20, 10)) #图布的尺寸
plt.show
![b56710dd6661cc3aa5560787e4191bae.png](https://i-blog.csdnimg.cn/blog_migrate/56bf70d5cc08cfc69850591842c4b775.jpeg)
加标题
给可视化起个标题
df.plot(kind='bar',
y=['Tmax', 'Tmin'], #2个变量可视化
subplots=True, #多子图并存
layout=(1, 2), #子图排列1行2列
figsize=(20, 5),#图布的尺寸
) #标题
plt.show
![ec83d06ab6a4d0c1b953d9a8733dacd5.png](https://i-blog.csdnimg.cn/blog_migrate/73d77d097be61fb813f505e56adaf6f1.jpeg)
保存结果
可视化的结果可以存储为图片文件
df.plot(kind='pie', y='Rain', legend=False, figsize=(10, 5), )
plt.savefig('img/pie.png')
plt.show
![c68e05442b23d4b11cdd65124a17c8fb.png](https://i-blog.csdnimg.cn/blog_migrate/332f11510bd615dedba70b163b5bbece.jpeg)
df.plot更多参数
df.plot(x, y, kind, figsize, title, grid, legend, style)
x 只有dataframe对象时,x可用。横坐标
y 同上,纵坐标变量
kind 可视化图的种类,如line,hist, bar, barh, pie, kde, scatter
figsize 画布尺寸
title 标题
grid 是否显示格子线条
legend 是否显示图例
style 图的风格
查看plot参数可以使用help
import pandas as pd
help(pd.DataFrame.plot)
![6bfceca54871380eecb78be7c8b33c4c.png](https://i-blog.csdnimg.cn/blog_migrate/653897f54310bd400be2725539c9b6e9.jpeg)
End.
作者:大邓
来源:大邓和他的Python
本文为转载分享,如侵权请联系后台删除
长按下方海报领取【数据可视化图表选择指南】
Python的另类用法——抽象工厂模式
数据运营怎么做?数据分析如何驱动用户增长?
一篇文章读懂数据分析框架!
![5fe10f67a9995ab9c3114e40664da7aa.png](https://i-blog.csdnimg.cn/blog_migrate/2658027091a3cec9f7d770e40d57dfb4.jpeg)