本文结构:
一、Matplotlib绘图基础及中文乱码解决
二、如何利用pandas绘图?
三、如何利用notebook制作分析报告?
图形在我们日常生活中无处不在。如果没有可视化,就是一些数字罗列,那就跟文字信息没什么差异了,同样让人难以理解,觉得枯燥。所以说,数据的可视化非常重要。
Matplotlib 是Python中著名的一个2D绘图库,通过 Matplotlib,我们可以快速绘制图表。很多其他的绘图包也是由它封装而成。
其中常用到的是它的pyplot,由于刚入门学习,本文主要学习pyplot。
一、数据可视化基础知识
1.图形的选择
盘点数据分析中的图表类型(我们主要掌握其中基本常用的几种):数据观:数据分析图表使用指南(上)zhuanlan.zhihu.com数据观:数据分析图表使用指南(下)zhuanlan.zhihu.com
2.matplotlib绘图基础
2.1 画板、画纸的概念画画用的画板和画纸
我们知道画画时需要画板和画纸。在matplotlib中也是一个道理。
图形在画板(figure)中绘制完成,而画板又由不同的画纸(axes)构成,具体的图形构建时要指明画板和画纸,否则默认一画板一画纸。
2.2 可视化图中的刻度表示:可视化图中的刻度表示
一图了解Matplotlib绘图的组成元素:图片来源于网络
二、如何使用绘图包Matplotlib?
绘图前准备工作:
首先,在使用先你需要在conda中安装包,输入命令:conda install matplotlib
进而使用import导入该绘图包:
#导入matplotlib的pyplot模块
import matplotlib.pyplot as plt
下面我们就可以开始绘制图形啦。
折线图绘制:
'''画图基本三步骤:第1步:定义x和y坐标轴上的点第2步:使用plot绘制线条第3步:显示图形'''
#第1步:
#x坐标轴上点的数值
x=[1, 2, 3, 4]
#y坐标轴上点的数值
y=[1, 4, 9, 16]
#第2步:使用plot绘制线条
#第1个参数是x的坐标值,第2个参数是y的坐标值
plt.plot(x,y)
#第3步:显示图形
plt.show()
得到图形:
以上给出的就是画图基本三步骤。现在试着在基本步骤上给上折线图增加一些属性。
'''color:线条颜色,值r表示红色(red)marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值dashed表示用虚线连接各点'''
plt.plot(x, y, color='r',marker='o',linestyle='dashed')
'''axis:坐标轴范围语法为axis[xmin, xmax, ymin, ymax],也就是axis[x轴最小值, x轴最大值, y轴最小值, y轴最大值]'''
plt.axis([0, 6, 0, 20])
plt.show()
得到图形:
关于图形属性的设置,不需要记住全部,在用到时可对应查看官方文档进行设置即可:matplotlib.lines.Line2D - Matplotlib 3.2.1 documentationmatplotlib.org
在上面的绘图中,我们传入的参数是一个列表。如果在以后的绘图中只限定于参数时列表,这会给我们的分析工作造成不便。一般,我们传入的是numpy的数组。实际上,所有参入的值内部都会转换为numpy的数组。
下面我们尝试绘制包含多条线的图形。
import numpy as np
# arange用于生成一个等差数组,arange([start, ]stop, [step, ]
t = np.arange(0, 5, 0.2) # 0开始 5结束 间隔为0.2的等差数组
t
#结果为:
array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ,
2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2,
4.4, 4.6, 4.8])
'''下面使用数组同时绘制多个线性'''
#线条1
x1=y1=t
#线条2
x2=x1
y2=t**2 # 运算符**,表示幂 - 返回x的y次幂,这里是t的2次方
#线条3
x3=x1
y3=t**3 # t的3次方
#使用plot绘制线条(借助List)
linesList=plt.plot(x1, y1,
x2, y2,
x3, y3 )
#用setp方法同时设置多个线条的属性
plt.setp(linesList, color='r')
plt.show()
print('返回的数据类型',type(linesList))
print('数据大小:',len(linesList))
#结果为:
返回的数据类型
数据大小: 3
得到图形:
光看图,我们不知道它描述的是哪个变量之间的关系。我们接着学给图形加上文本标签和注释。
'''添加文本:1.绘制图形2.添加:x、y轴标签;标题;注释'''
x=[1, 2, 3, 4]
y=[1, 4, 9, 16]
plt.plot(x,y)
plt.xlabel('x坐标轴')
plt.ylabel('y坐标轴')
plt.title('标题')
'''添加注释:xy:箭头注释中箭头所在位置,xytext:注释文本所在位置,arrowprops在xy和xytext之间绘制箭头,shrink表示注释点与注释文本之间的图标距离'''
plt.annotate('我是注释', xy=(2,5), xytext=(2, 10),
arrowprops=dict(facecolor='black', shrink=0.01)
)
plt.show()
得到图形:
我们看到,虽然有显示,但是显示的是中文乱码。
出现乱码原因:matplotlib 初始化加载时配置文件中没有加入中文字体,因此我们需要给它制定一个可用的中文字体。
如何一次解决绘图中文乱码问题?
1.找到配置文件matplotlib
#找到 matplotlib 加载的配置文件路径
import matplotlib
matplotlib.matplotlib_fname()
2.下载中文字体
根据自己的电脑系统下载对应的中文字体-复制到fonts文件下ttf中-最后双击安装
3.修改配置文件
在修改前我们先将配置文件备份(备份为matplotlibrc.bak),进而利用Notepad打开原文件进行修改编辑。
主要修改操作:利用Notepad打开matplotlibrc- 去掉#font.family前的#号-去掉#font.sans-serif前的#号并在后面后加"SimHei,"- 去掉#axes.unicode_minus前的#号并修改True为Flase
修改前:
修改后:
4.删除缓存目录
最后,找到C:\Users\你的用户名文件夹下的.matplotlib缓存文件夹,将这个缓存文件夹删除,再重启jupyter notebook即可,使新配置的文件生效。
现在我们重新运行下代码,来看下乱码问题是否解决:修改后图形
下面我们进一步学习,怎么使用多个画板、多个画纸来绘制多个图呢?以一个画板4张画纸(2*2)为例:
#创建画板1
fig = plt.figure(1) # 参数1代表画板1 不写参数,默认1
#第2步:创建画纸(子图)
'''subplot()方法里面传入的三个数字前两个数字代表要生成几行几列的子图矩阵,第三个数字代表选中的子图位置subplot(211)生成一个2行1列的子图矩阵,当前是第一个子图'''
#创建4张画纸(2*2)
#选择画纸1
#等价于ax1=fig.add_subplot(211)
ax1=plt.subplot(2,2,1) # 不指定的话默认子图subplot(111)
#在画纸上绘图
plt.plot([1, 2, 3])
#选择画纸2
ax2=plt.subplot(2,2,2)
#在画纸2上绘图
plt.plot([4, 5, 6])
import numpy as np
# arange用于生成一个等差数组,arange([start, ]stop, [step, ]
t = np.arange(0, 5, 0.2) # 0开始 5结束 间隔为0.2的等差数组
#选择画纸3
ax3=plt.subplot(2,2,3)
#在画纸2上绘图
plt.plot(t,t ** 2)
#选择画纸4
ax4=plt.subplot(2,2,4)
#在画纸2上绘图
plt.plot(t,t ** 3)
plt.show()
得到图形:
P: 如果没有指明画板figure()和子图subplot,会默认创建一个画板figure(1) 和一个子图subplot(111)。
三、如何使用Pandas绘图?
实际应用中我们使用的数据分析包Pandas,它有自己的绘图工具,它是在Matplotlib基础之上封装而成。这部分我们就一起学习如何利用Pandas的绘图功能。
下面将通过股票数据的可视化来学习这部分。具体详见:Daxuya:GAFATA股票数据可视化浅析zhuanlan.zhihu.com
四、如何用Notebook制作数据分析报告?
数据分析报告的形成就好比我们写论文的过程,需要进行以下几个步骤:
1.提出问题- 2.理解数据- 3.数据清洗- 4.构建模型- 5.模型评估- 6.方案实施
数据分析报告的展现可以用文档报告,也可以是PPT展示。下面主要学习使用Notebook中的Markdown功能实现文档报告和用notebook中的幻灯片创建。
4.1 Notebook中的Markdown功能
具体详见:Daxuya:Markdown常用基本语法及目录插件安装zhuanlan.zhihu.com
4.2 Notebook实现幻灯片创建
notebook不仅可以创建文本,还可以创建幻灯片!
幻灯片的创建与运行显示:View- Cell Toolbar- 幻灯片选项可以显示幻灯片菜单。
2. 在cell中,可以选择相应的类型。
其中,幻灯片表示一页的开始,子幻灯片会从前一张幻灯片的下方出现,而碎片会先处于隐藏状态,然后以动画的形式浮出在前一张(子)幻灯片内,其他的设置则会从演示中隐形。
3. 若不想类型显示在cell中,选择View- Cell Toolbar- None则可以隐藏和退出幻灯片。
4. 运行幻灯片
拿我之前学习Python基础的文件(Python基础学习.ipynb)为例,对其进行幻灯片创建:
在anocanda prompt中输入“jupyter nbconvert 当前notebook的文件路径 --to slides --post serve”,即会在当前文件夹下生成html文件,提供访问。
效果展示:
本文其实包含了三大块(matplotlib绘图基础、Pandas绘图、数据分析报告制作),每一块都值得好好学习。虽然花了前后几天的时间完成了这部分学习,但不等于学过就是学会,由于断断续续的学习,前后的知识点会出现衔接不上,后面要结合前面的知识点都串一串,内化为自己的。后边要把这块知识点整合到思维导图里边,方便之后自己的回顾和查找。