python数据可视化(matplotlib,pandas绘图,直⽅图,散点
图,柱状图,折。。。
数据可视化
数据可视化对于数据描述以及探索性分析⾄关重,恰当的统计图表可以更有效的传递数据信息。在 Python 中已经有很多数据可视化⽅⾯的第三⽅程序包,例如:
matplotlib
Chaco
PyX
Bokeh
本节,我们将重点学习 matplotlib 的基础绘图功能以及 pandas 的⾼级可视化功能,这也是现在最为常⽤、最为稳健,同时功能
也⾮常丰富的数据可视化的解决⽅案。
课程⽬标:
熟悉⼏种常⽤的数据可视化展⽰⽅式
掌握散点图、直⽅图、箱线图等图像绘制⽅法
In [1]:
# 导⼊⼀些需要⽤到的包
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
# 配置 pandas
pd.set_option('book_repr_html', False)
pd.set_option('display.max_columns', 20)
pd.set_option('display.max_rows', 25)
Matplotlib 绘图
In [2]:
plt.plot(al(size=100), al(size=100), 'ro')
Out[2]:
[<matplotlib.lines.Line2D at 0x7f27e30e08d0>]
上图绘制了两组来⾃正态分布的随机数的散点图,“ro”是⼀个缩写参数,表⽰⽤“红⾊圆圈”绘图。这种绘图很简单,我们可以进⼀步通过拆分绘图流程来得到更加复杂的图像。
In [3]:
_context(rc={'font.family': 'serif', 'font.weight': 'bold', 'font.size': 8}):
fig = plt.figure(figsize=(6,3))
ax1 = fig.add_subplot(121)
ax1.set_xlabel('some random numbers')
ax1.set_ylabel('more random numbers')
ax1.set_title("Random scatterplot")
plt.plot(al(size=100), al(size=100), 'r.')
ax2 = fig.add_subplot(122)
plt.hist(al(size=100), bins=15)
ax2.set_xlabel('sample')
ax2.set_ylabel('cumulative sum')
ax2.set_title("Normal distrubution")
plt.tight_layout()
plt.savefig("normalvars.png", dpi=150)
fig=plt.figure(figsize=(6,3)),定义⼀个长为6宽为3英⼨的画布
matplotlib中subplot
ax1=fig.add_subplot(121),将画布分为1⾏2列,从左到右从上到下取第1块matplotlib 是⼀个相对初级的绘图包,直接输出的结果布局并不是⼗分美观,但是使⽤者可以通过很多种灵活的⽅式来调试输出的图像。
Pandas 绘图
相对于 matplotlib 来讲,Pandas ⽀持 DataFrame 和 Series 两种⽐较⾼级的数据结构,可以想象得到⽤其绘制出图像的形式。In [4]:
normals = pd.Series(al(size=10))
normals.plot()
Out[4]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27e30f23d0>
可以发现,默认绘制的是折线图,并且有灰⾊的⽹格线。当然,这些都可以修改。
In [5]:
normals.cumsum().plot(grid=False)
Out[5]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27df5a6090>
对于 DataFrame 结构的数据,也可以进⾏类似的操作:
In [6]:
variables = pd.DataFrame({'normal': al(size=100),
'gamma': np.random.gamma(1, size=100),
'poisson': np.random.poisson(size=100)})
variables.cumsum(0).plot()
Out[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27df4aa410>
Pandas 还⽀持这样的操作:利⽤参数“subplots”绘制 DataFrame 中每个序列对应的⼦图In [7]:
variables.cumsum(0).plot(subplots=True)
Out[7]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f27df48c750>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f27df321990>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f27df2a66d0>], dtype=object)
或者,我们也可以绘制双坐标轴,将某些序列⽤次坐标轴展⽰,这样可以展⽰更多细节并且图像中没有过多空⽩。In [8]:
variables.cumsum(0).plot(secondary_y='normal')
Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27df4b4910>
如果你有更多的绘图要求,也可以直接利⽤ matplotlib 的 “subplots” ⽅法,⼿动设置图像位置:
In [9]:
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i,var in enumerate(['normal','gamma','poisson']):
variables[var].cumsum(0).plot(ax=axes[i], title=var)
axes[0].set_ylabel('cumulative sum')
Out[9]:
&Text at 0x7f27deffc3d0>
柱状图
我们常⽤柱状图来展⽰和对⽐可测数据,⽐如计数或流量统计。在 Pandas 中,我们通过设置“plot”⽅法“kind='bar”参数,即可绘制柱状图。 下⾯我们以泰坦尼克数据集为例,进⾏相关绘图说明。
In [10]:
titanic = pd.read_excel("data/titanic.xls", "titanic")
titanic.head()
Out[10]:
pclass  survived                                            name    sex  \
0      1        1                    Allen, Miss. Elisabeth Walton  female
1      1        1                  Allison, Master. Hudson Trevor    male
2      1        0                    Allison, Miss. Helen Loraine  female
3      1        0            Allison, Mr. Hudson Joshua Creighton    male
4      1        0  Allison, Mrs. Hudson J C (Bessie Waldo Daniels)  female
age  sibsp  parch  ticket      fare    cabin embarked boat  body  \
0  29.0000      0      0  24160  211.3375      B5        S    2    NaN
1  0.9167      1
2  113781  151.5500  C22 C26        S  11    NaN
2  2.0000      1      2  113781  151.5500  C22 C26        S  NaN    NaN
3  30.0000      1      2  113781  151.5500  C22 C26        S  NaN  135.0
4  25.0000      1      2  113781  151.5500  C22 C26        S  NaN    NaN
home.dest
0                    St Louis, MO
1  Montreal, PQ / Chesterville, ON
2  Montreal, PQ / Chesterville, ON
3  Montreal, PQ / Chesterville, ON
4  Montreal, PQ / Chesterville, ON
In [11]:
Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27deaecc50>
In [12]:
Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f27deb28250>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。