开发者学堂课程【Python 常用数据科学库:pandas 绘图操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/546/detail/7494
pandas 绘图操作
内容介绍
一、绘制折线图
二、绘制柱形图
三、绘制直方图
四、绘制散点图
一、绘制折线图
1、本节要讲在 pandas 当中怎么样进行绘图的操作。matplotilb inline 可以当成是一个魔法指令,一会要在 notebook 当中去进行很多个图和很多的可视化展示,它就相当于是完成这个事,这样就能够在 notebook 当中去画图了。
2、首先还是把 pandas 给导进来,然后执行一下,把 numpy 导进来,接下来先来画第一个图。pandas 当中有 Series 结构,把 Series 调进来,先构造出来一个随机数据,有一些值就可以了,然后指定一个索引,索引等于 np.arange,在0~100之间,10个一蹦,这就是现在的一个数据
%matplotlib inline
import pandas as pd
import numpy as np
s = pd Series(np.random.randn(10), index = np. arange(0,100,10))
s.plot
直接执行这样一个命令, s 点 polt 一下,这相当于直接要去画这个图了。这就是当前得出来一个结果,现在画出来虽然说是一个比较奇怪的图,不知道这图表示什么含义,只是说明一下,对于 pandas、data 或者是 Series 的结构来说,都可以直接点plot 一下把这个图画出来,这样就画出来一个最基本的图,上面构造出来的图就是一个折线图,随便构造十个点, x 轴它是有这样一个取值范围,构造了一个二维的数据,再把这个二维数据,拿到这个图当中就得到这样一个结果。
3、构造一个DataFrame,看一下DataFrame画出的图跟有Series什么区别。
df = pd. DataFrame (np.random.randn(10, 4).cumsum(0),
index = np.arange 0,100,10)
columns['A','B','C','D']
df.head()
先看一下这组数据,就是随便一个数据。对于 Series,它好像是其中的某一列,但是对于一个 DataFrame 来说,它里面有很多列,这个时候如果直接点plot一下,ABCD都画出来了,也就是说在这里把每一列的数据都给画出来了,这个就是最基本的一个折线图该怎么去画。
二、绘制柱形图
1、这个折线图画完之后,还有一些叫做柱形图,条形图。先把子图结构构造出来,子图结构之后会单独去讲,在这里先把子图给画出来。指定一个Serise结构,在这里还是 data 数据等于 pandas 点 Serise, Serise 里随便传进来一些值,暂时写个16,然后指定一个 index 值等于 abcdefghijklmnop,这就是一个 data 数据,data 数据指定完之后,可以plot一下,现在要画两个图,一个图是横着画,一个图纵着画,需要指定一个轴,轴等于画的第一个图 axes,所以是零,第二个图的轴值为1,然后在这里要指定一个 kind 值等于 bar
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2,1)
data = pd Series(np. random randn(16),index=list('abcdefghijklmnop'))
data.plot(ax = axes[0],kind='bar')
data.plot(ax = axes[1],kind='barh')
先来执行一下,十几个数据都构造出来了,在画图的时候,data 它是 Serise 结构,.plot 结构是进行画图的,ax=axes[0] 这里画的就是指定子图画在一个什么位置,subplots 后面的2,1说明要画的一个子图它是两行一列的。就是说第一个图咱画的在什么位置,第二个图它又在什么位置,可以分别指定这样一个位置。当 plot 的时候,原来只有 plot 就完事了也没传参,在这里 kind 值等于 bar,这个时候得到的就是一个柱状图了。现在这个柱状图不光能竖着画还能横着画,也就是这个柱状图想竖着画就竖着画,想横着画就横着画,竖着画一个是bar,横着画是barh。这个就是用.plot 里的 kind 属性去构造当前画的图的一个基本形状。
2、再来构造一个数据,刚才是 Serise 结构,这次构造一个 DataFrame 结构,先head 一下看长什么样子。
df = pd.DataFrame (np.random.rand(6, 4)
index = ['one',' two' ,'three','four','five','six'],
columns=pd.Index(['A','B','C','D'],name=‘Genue')
df.head()
执行得到一个结果,有几列数据和一些属性。接下来看一下,对于这些属性来说,想再画一个图,直接去 plot 一下,里面只传进了一个 kind 等于 bar,再来看下结果,也是能够把这个图画出来, 123456都有,这里有不同颜色的, 123456每一个列里都有 ABCD 四个可选值吧,四个可选值的颜色是不同的, 这个就是说用 pandas 先画了的一个柱状图。
三、绘制直方图
1、在这个 panda 当中,除了柱状图,还有其它图。讲一下一个直方图,先把小数据给加进来,csv 直接读进来,然后 head 一下
tips = pd.read_csv('tips.csv')tips. head
执行看一下长什么样子,这就是当前一个结果是一个数据,对于这样的一个数据来说,想绘制一个直方图,需要指定想绘制哪个属性的直方图。
2、对于当前 DataFrame 里,它的某一个属性,比如说 total_bill 所有的账单总额,然后用它去点 plot 一下,选择其中的一个属性,plot 里指定一个 kind 值,kind 值就是等于一个直方图,然后直方图当中还要选指定一个 bins 值,比如说指定成50
tips.total_bill.plot(kind='hist',bins=50)
再执行一下,这样就画出一个图。对于某一个属性来说,画了大概50个 bins。然后每一个值就是账单当中具体的值了,相当于是把空间进行了一个压缩,压缩了50个小区,在这50个小区当中画了这样的一个直方图。这里画一个图还是比较简单的,可以用 pandas 直接帮展示出来。
四、绘制散点图
1、还有一些散点图,散点图的画法跟这个是差不多的。还是先把数据读进来macro=pd.read_csv(‘macrodata.csv’),数据有了之后,直接画这样一个散点图可以了。对于当前的一个数据,有这样一个操作叫做 scatter_matrix,这里需要传进来当前的 DataFrame 数据,还可以指定一个颜色,然后还可以指定它的透明度,就是散点图当中还有透明度这个概念
pd.scatter_matrix(macro, color='k',alpha=0.3)
执行一下,这个会画出来一个非常大的一个图,这个就是散点图的一个矩阵,看一下就是这个散点图的矩阵是长什么样子的。
2、因为要画的图比较多,所以说画起来可能会稍微慢一点。这样画出来维度太多了也太乱,还是选择某几列去画,要不然可能画的太多了。指定一个 data,取3列数据,现在就是一个 data 数据了
data = macro [ quarter','realgdp','realcons']
这样就把数据拿到手了,数据拿到手之后,再对数据执行同样的一个画图操作。这里可以用 matplotilb 画,但是用 matplotilb 画会稍微麻烦一些,所以先用 pandas 去画,data 中直接去调 plot,可以直接把散点图拿过来,大部分情况下它是一个二维的,二维当中可以取其中两位数据,用这两位数据画一个散点图
data = macro[['quarter','realgdp', 'realcons']]
data.plot.scatter('quarter','realgdp')
执行一下, 散点图给画出来了。
3、在 pandas 当中,还提供这样一个操作,在散点图当中,有 matrix 模块,可以把 data 数据给传进 matrix 里,对于当前这个数据来说,可以指定颜色,还有一个alpha 值是透明程度,给它指定成0.3
pd.scatter_matrix(data,color='g',alpha=0.3)
然后来看一下画出的结果
在非主对角线上,主对角线是自身和自身的关系,自身和自身关系用不着散点图,所以说自身和自身本身就是一个直方图。然后非自身之间,每两个属性在一起它都是两个不同的维度,这样就可以得到一个非常简单的散点图来表示所有特征之间的关系,但是不要加的太多,数据的维度如果太大画就很难看清,这就是可能会遇到的一个小问题。
4、这个就是简单介绍一下,怎么样用 pandas 绘制一些最简单的图表,其实无非就是 Series 或者 DataFrame 当中直接 .plot 一下传进来一个 kind 值,想换什么值就可以把这个值很轻松的计算出来。