‘壹’ 彩色折线散点图python怎么指定数据
一、导包
二、绘制简单折线
1、在利用pandas模块进行操作前,可以先引入这个模块,如下:
2、读取Excel文件的两种方式:
三、pandas操作Excel的行列
1、读取指定的单行,数据会存在列表里面
2、读取指定的多行,数据会存在嵌套的列表里面
3、读取指定的行列
4、读取指定的多行多列值
5、获取所有行的指定列
6、获取行号并打印输出
7、获取列名并打印输出
8、获取指定行数的值
四、pandas处理Excel数据成为字典
五、绘制简单折线图
六、绘制简单散点图
使用scatter绘制散点图并设置其样式
1、绘制单个点,使用函数scatter,并向它传递x,y坐标,并可使用参数s指定点的大小
2、绘制一系列点,向scatter传递两个分别包含x值和y值的列表
3、设置坐标轴的取值范围:函数axis()要求提供四个值,x,y坐标轴的最大值和最小值
4、使用参数edgecolor在函数scatter中设置数据点的轮廓
5、向scatter传递参数c,指定要使用的颜色
6、使用颜色映射
7、自动保存图表:使用函数plt.savefig()
8、设置绘图窗口尺寸
9、实例程序
‘贰’ Python数据分析: 初识Pandas,理解Pandas实现和原理
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
01 重要的前言
这段时间和一些做数据分析的同学闲聊,我发现数据分析技能入门阶段存在一个普遍性的问题,很多凭着兴趣入坑的同学,都能够很快熟悉Python基础语法,然后不约而同的一头扎进《利用Python进行数据分析》这本经典之中,硬着头皮啃完之后,好像自己什么都会了一点,然而实际操作起来既不知从何操起,又漏洞百出。
至于原因嘛,理解不够,实践不够是两条老牌的拦路虎,只能靠自己来克服。还有一个非常有意思且经常被忽视的因素——陷入举三反一的懵逼状态。
什么意思呢?假如我是个旱鸭子,想去学游泳,教练很认真的给我剖析了蛙泳的动作,扶着我的腰让我在水里划拉了5分钟,接着马上给我讲解了蝶泳,又是划拉了5分钟,然后又硬塞给我潜泳的姿势,依然是划拉5分钟。最后,教练一下子把我丢进踩不到底的泳池,给我呐喊助威。
作为一个还没入门的旱鸭子,教练倾囊授了我3种游泳技巧,让我分别实践了5分钟。这样做的结果就是我哪一种游泳技巧也没学会,只学会了喝水。当一个初学者一开始就陷入针对单个问题的多种解决方法,而每一种方法的实践又浅尝辄止,在面对具体问题时往往会手忙脚乱。
拿Pandas来说,它的多种构造方式,多种索引方式以及类似效果的多种实现方法,很容易把初学者打入举三反一的懵逼状态。所以,尽量避开这个坑也是我写Pandas基础系列的初衷,希望通过梳理和精简知识点的方式,给需要的同学一些启发。目前暂定整个基础系列分为4篇,基础篇过后便是有趣的实战篇。
下面开始进入正题(我真是太唠叨了)。
02 Pandas简介
江湖上流传着这么一句话——分析不识潘大师(PANDAS),纵是老手也枉然。
Pandas是基于Numpy的专业数据分析工具,可以灵活高效的处理各种数据集,也是我们后期分析案例的神器。它提供了两种类型的数据结构,分别是DataFrame和Series,我们可以简单粗暴的把DataFrame理解为Excel里面的一张表,而Series就是表中的某一列,后面学习和用到的所有Pandas骚操作,都是基于这些表和列进行的操作(关于Pandas和Excel的形象关系,这里推荐我的好朋友张俊红写的《对比EXCEL,轻松学习Python数据分析》)。
这里有一点需要强调,Pandas和Excel、SQL相比,只是调用和处理数据的方式变了,核心都是对源数据进行一系列的处理,在正式处理之前,更重要的是谋定而后动,明确分析的意义,理清分析思路之后再处理和分析数据,往往事半功倍。
03 创建、读取和存储
1、创建
在Pandas中我们想要构造下面这一张表应该如何操作呢?
别忘了,第一步一定是先导入我们的库——import pandas as pd
构造DataFrame最常用的方式是字典+列表,语句很简单,先是字典外括,然后依次打出每一列标题及其对应的列值(此处一定要用列表),这里列的顺序并不重要:
左边是jupyter notebook中dataframe的样子,如果对应到excel中,他就是右边表格的样子,通过改变columns,index和values的值来控制数据。
PS,如果我们在创建时不指定index,系统会自动生成从0开始的索引。
2、 读取
更多时候,我们是把相关文件数据直接读进PANDAS中进行操作,这里介绍两种非常接近的读取方式,一种是CSV格式的文件,一种是EXCEL格式(.xlsx和xls后缀)的文件。
读取csv文件:
engine是使用的分析引擎,读取csv文件一般指定python避免中文和编码造成的报错。而读取Excel文件,则是一样的味道:
非常easy,其实read_csv和read_excel还有一些参数,比如header、sep、names等,大家可以做额外了解。实践中数据源的格式一般都是比较规整的,更多情况是直接读取。
3、存储
存储起来一样非常简单粗暴且相似:
04 快速认识数据
这里以我们的案例数据为例,迅速熟悉查看N行,数据格式概览以及基础统计数据。
1、查看数据,掐头看尾
很多时候我们想要对数据内容做一个总览,用df.head()函数直接可以查看默认的前5行,与之对应,df.tail()就可以查看数据尾部的5行数据,这两个参数内可以传入一个数值来控制查看的行数,例如df.head(10)表示查看前10行数据。
2、 格式查看
df.info()帮助我们一步摸清各列数据的类型,以及缺失情况:
从上面直接可以知道数据集的行列数,数据集的大小,每一列的数据类型,以及有多少条非空数据。
3、统计信息概览
快速计算数值型数据的关键统计指标,像平均数、中位数、标准差等等。
我们本来有5列数据,为什么返回结果只有两列?那是因为这个操作只针对数值型的列。其中count是统计每一列的有多少个非空数值,mean、std、min、max对应的分别是该列的均值、标准差、最小值和最大值,25%、50%、75%对应的则是分位数。
05 列的基本处理方式
这里,我们采用SQL四大法宝的逻辑来简单梳理针对列的基本处理方式——增、删、选、改。
温馨提示:使用Pandas时,尽量避免用行或者EXCEL操作单元格的思维来处理数据,要逐渐养成一种列向思维,每一列是同宗同源,处理起来是嗖嗖的快。
1、增
增加一列,用df[‘新列名’] = 新列值的形式,在原数据基础上赋值即可:
2、删:
我们用drop函数制定删除对应的列,axis = 1表示针对列的操作,inplace为True,则直接在源数据上进行修改,否则源数据会保持原样。
3、选:
想要选取某一列怎么办?df[‘列名’]即可:
选取多列呢?需要用列表来传递:df[[‘第一列’,‘第二列’,‘第三列’…]]
4、 改:
好事多磨,复杂的针对特定条件和行列的筛选、修改,放在后面结合案例细讲,这里只讲一下最简单的更改:df[‘旧列名’] = 某个值或者某列值,就完成了对原列数值的修改。
06 常用数据类型及操作
1、字符串
字符串类型是最常用的格式之一了,Pandas中字符串的操作和原生字符串操作几乎一毛一样,唯一不同的是需要在操作前加上".str"。
小Z温馨提示:我们最初用df2.info()查看数据类型时,非数值型的列都返回的是object格式,和str类型深层机制上的区别就不展开了,在常规实际应用中,我们可以先理解为object对应的就是str格式,int64对应的就是int格式,float64对应的就是float格式即可。
在案例数据中,我们发现来源明细那一列,可能是系统导出的历史遗留问题,每一个字符串前面都有一个“-”符号,又丑又无用,所以把他给拿掉:
一般来说清洗之后的列是要替换掉原来列的:
2、 数值型
数值型数据,常见的操作是计算,分为与单个值的运算,长度相等列的运算。
以案例数据为例,源数据访客数我们是知道的,现在想把所有渠道的访客都加上10000,怎么操作呢?
只需要选中访客数所在列,然后加上10000即可,pandas自动将10000和每一行数值相加,针对单个值的其他运算(减乘除)也是如此。
列之间的运算语句也非常简洁。源数据是包含了访客数、转化率和客单价,而实际工作中我们对每个渠道贡献的销售额更感兴趣。(销售额 = 访客数 X 转化率 X 客单价)
对应操作语句:df[‘销售额’] = df[‘访客数’] * df[‘转化率’] * df[‘客单价’]
但为什么疯狂报错?
导致报错的原因,是数值型数据和非数值型数据相互计算导致的。PANDAS把带“%”符号的转化率识别成字符串类型,我们需要先拿掉百分号,再将这一列转化为浮点型数据:
要注意的是,这样操作,把9.98%变成了9.98,所以我们还需要让支付转化率除以100,来还原百分数的真实数值:
然后,再用三个指标相乘计算销售额:
3、时间类型
PANDAS中时间序列相关的水非常深,这里只对日常中最基础的时间格式进行讲解,对时间序列感兴趣的同学可以自行查阅相关资料,深入了解。
以案例数据为例,我们这些渠道数据,是在2019年8月2日提取的,后面可能涉及到其他日期的渠道数据,所以需要加一列时间予以区分,在EXCEL中常用的时间格式是’2019-8-3’或者’2019/8/3’,我们用PANDAS来实现一下:
在实际业务中,一些时候PANDAS会把文件中日期格式的字段读取为字符串格式,这里我们先把字符串’2019-8-3’赋值给新增的日期列,然后用to_datetime()函数将字符串类型转换成时间格式:
转换成时间格式(这里是datetime64)之后,我们可以用处理时间的思路高效处理这些数据,比如,我现在想知道提取数据这一天离年末还有多少天(‘2019-12-31’),直接做减法(该函数接受时间格式的字符串序列,也接受单个字符串):
‘叁’ Python其实很简单 第十九章 Pandas之Series与DataFrame
19.1安装Anaconda
Anaconda是Python的一个开源发行版本,它预装了丰富的第三方库,而且主要面向科学计算和数据分析,使用起来要比原版的Python更省时省力。
Anaconda官方下载网址为:https://www.continuum.io/downloads。下载和安装的方法很简单,若有问题可以在网上搜索相关内容学习解决。
安装Anaconda之后,就会发现在Anaconda目录下同时安装了Jupyter Notebook、Spyder等工具,我们接下来主要使用Spyder进行开发。关于Spyder的使用方法非常简单,大家也可以去网上搜索学习。
虽然Anaconda已经预装了很多常用的包,但有时我们也需要自己安装一些包。可以在开始菜单中选择“Anaconda Anaconda Prompt”命令,在命令行输入conda install ( 代表包名)即可安装,也可以输入pip install 。
19.2数据分析包Pandas
Pandas是Python的一个数据分析包,Anaconda安装时已经附带安装了Pandas包。
Pandas数据结构有三种:Series(一维数组)、DataFrame(二维数组)和Panel(三维数组),其中最常用的是前两种数据结构。
19.2.1 Series
Series(序列)用于存储一行或一列数据,以及与之相关的索引的集合。
语法格式如下:
Series([数据1,数据2,......], index=[索引1,索引2,......])
例:
from pandas import Series
s=Series(['张三','李四','王五'],index=[1,2,3])
print(s)
输出结果如下:
1 张三
2 李四
3 王五
dtype: object
上面建立序列时指定了索引,若不指定,则默认的索引值从0开始。如下:
s=Series(['张三','李四','王五'])
输出结果为:
0 张三
1 李四
2 王五
dtype: object
索引值也可以为字符串。如下:
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
print(s)
输出结果为:
A 张三
B 李四
C 王五
dtype: object
1、访问序列
(1)可以通过索引访问序列,如:
from pandas import Series
s=Series(['张三','李四','王五'])
print(s)
print(s[0])
print(s[1:])
运行结果如下:
0 张三
1 李四
2 王五
dtype: object #print(s)输出
张三 #print(s[0])输出
1 李四
2 王五
dtype: object #print(s[1:])输出
(2)通过值获取索引值
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
print(s.index[s.values=='李四'])
运行结果:
Index(['B'], dtype='object')
(3)判断值是否存在
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
f='李四' in s.values
print(f)
运行结果:
True
(4)定位获取
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
print(s[[0,2,1]])
运行结果:
A 张三
C 王五
B 李四
dtype: object
2、修改序列
(1)追加序列,如:
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
s1=Series(['孙六'],index=['D'])
s=s.append(s1)
print(s)
运行结果:
A 张三
B 李四
C 王五
D 孙六
dtype: object
(2)修改序列的值
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s[1]='李飞'
print(s)
运行结果:
A 张三
B 李飞
C 王五
D 孙六
dtype: object
不知道索引,仅知道要修改的值,也可通过值查找到索引后,再修改序列的值。如:
s[s.index[s.values=='李四']]='李飞'
这样也可以将“李四”修改为“李飞。
(3)修改索引
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s.index=[0,1,2,3]
print(s)
运行结果:
0 张三
1 李四
2 王五
3 孙六
dtype: object
(4)删除元素
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s=s.drop('A')
print(s)
运行结果:
B 李四
C 王五
D 孙六
dtype: object
(5)重新排序
可以按照索引排序,使用sort_index(ascending=True)方法对index进行排序操作。
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s=s.sort_index(ascending=False) # ascending=False表示按降序排列
print(s)
运行结果:
D 孙六
C 王五
B 李四
A 张三
dtype: object
(6)重置索引
重置索引可以使用reindex()。如果index列表中的元素多于序列的值,可用fill_value=0这样的语句填充。
s=s.reindex(['D','C','B','A'])
如果index列表中的元素多于序列的值,可用fill_value=0这样的语句填充。
s=s.reindex(['D','C','B','A'], fill_value=0)
19.2.2 DataFrame
DataFrame(数据框架)用于存储多行和多列的数据集合。它是Series的容器,类似于Excel中二维表格。
定义一个DataFrame的语法格式如下:
df=DataFrame({列名1 : 序列1,列名2 : 序列2,.......列名n : 序列n}, index=序列 )
例如,有如下二维表:
姓名
性别
年龄
张三
男
18
李四
女
19
王五
男
17
保存到DataFrame中可以用如下方法:
from pandas import Series
from pandas import DataFrame
name=Series(['张三','李四','王五'])
sex=Series(['男','女','男'])
age=Series([18,19,17])
df=DataFrame({'姓名':name,'性别':sex,'年龄':age})
print(df)
运行结果:
姓名 性别 年龄
0 张三 男 18
1 李四 女 19
2 王五 男 17
从上例可以看出,虽然我们省缺了索引,但系统自动添加了从0开始的索引值。
19.3 DataFrame的基本操作
1、访问方式
(1)获取行
print(df[1:2]) # 获取第1行的值
输出结果:
姓名 性别 年龄
1 李四 女 19
print(df[1:3]) #获取第1行到第2行的值
输出结果:
姓名 性别 年龄
1 李四 女 19
2 王五 男 17
(2)获取列
print(df['姓名']) #获取“姓名”列的值
输出结果:
0 张三
1 李四
2 王五
Name: 姓名, dtype: object
另一种方法:
print(df[df.columns[0:1]]) #先按照索引号获取列名,再按照列名读取
输出结果和上面的方法完全一致。
还有一种情况,是获取唯一值,即将列内的重复值中多余的删除,仅留下互不相同的值。所用的到方法是unique()。
sex1=Series(df['性别'].unique())
print(sex1)
输出结果:
0 男
1 女
dtype: object
(3)获取指定位置的值
print(df.at[1,'姓名']) # 格式为变量名.at[行号,列名]
输出结果:
李四
(4)获取块的值
print(df.iloc[0:2,1:3]) # 格式为变量名.iloc[行号1:行号2, 列号1:列号2]
输出结果:
性别 年龄
0 男 18
1 女 19
print(df.iloc[:,1:2]) #获取“性别”列的值
运行结果:
性别
0 男
1 女
2 男
2、修改、删除、增加行和列
(1)修改列名
print(df.columns)
df.columns=['name','sex','age']
print(df.columns)
输出结果:
Index(['姓名', '性别', '年龄'], dtype='object')
Index(['name', 'sex', 'age'], dtype='object')
可见,列名已经由“姓名、性别、年龄”修改为“age、sex、age”了。但这种修改必须把全部列名都一一列举,不能有遗漏,否则就会出错。如:
df.columns=['name','sex']
此时会报错:ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements。
(2)修改行索引
df.index=[1,2,3]
(3)删除行
df.drop(1,axis=0) # axis=0表示行轴,也可以省略
(4)删除列
df.drop(‘性别’,axis=1) # axis=0表示列轴
也可以使用另一种方法:
del df['性别']
(5)增加列
df['电话']=[',',']
print(df)
运行结果:
姓名 性别 年龄 电话
0 张三 男 18 1111111
1 李四 女 19 2222222
2 王五 男 17 3333333
(6)增加行
df.loc[len(df)]=['孙六','男',ཐ']
(7)追加
from pandas import Series
from pandas import DataFrame
name=Series(['张三','李四','王五'])
sex=Series(['男','女','男'])
age=Series([18,19,17])
df=DataFrame({'姓名':name,'性别':sex,'年龄':age}) # 建立DataFrame,变量名为df
name1=Series(['孙六','候七'])
sex1=Series(['男','女'])
age1=Series([19,17])
df1=DataFrame({'姓名':name1,'性别':sex1,'年龄':age1})
# 建立DataFrame,变量名为df1
df=df.append(df1,ignore_index=True)
# 将对df1追加到df后面,参数ignore_index=True表示重新索引
print(df)
运行结果:
姓名 性别 年龄
0 张三 男 18
1 李四 女 19
2 王五 男 17
3 孙六 男 19
4 候七 女 17
‘肆’ pandas绘图不显示
可以显示啊,不能显示的图形是坐标超出范围了,你可以在PicDRAW上查看坐标!
把图片控件的AutoReDraw设为True可以显示 Form_Load()
中的图形,以及以后来窗体刷新时图形不丢失。
‘伍’ 如何使用Python绘制饼图
我们在运用Python制作各种图形的时候,经常需要绘制饼图。那么如何用Python绘制饼图呢?下面我给大家分享演示一下。
Pycharm
首先我们需要在Excel文件中准备好饼图的数据,如下图所示
接下来我们打开Pycharm,新建Python文件,导入Python的pandas库,利用pandas将Excel数据加载到缓存中,如下图所示
然后我们在导入pyplot库,运用pyplot库的pie进行饼图的绘制,如下图所示
接着运行程序以后我们就可以看到一张如下图所示的饼图了,但是四周的名称和Excel中的还是不太一样,接下来修改四周的名称
我们在运用pandas库加载Excel数据文件的时候加上index_col属性即可,如下图所示
这次在运行程序我们就可以看到饼图四周的名称和Excel中的一样了,如下图所示
接着我们在运用pyplot中的title和ylable设置饼图的标题和Y坐标轴的名称,如下图所示
最后运行文件就可以看到下面这个信息比较齐全的饼图了,如下图所示,到这里用Python绘制饼图就结束了
‘陆’ 用Python画图
今天开始琢磨用Python画图,没使用之前是一脸懵的,我使用的开发环境是Pycharm,这个输出的是一行行命令,这个图画在哪里呢?
搜索之后发现,它会弹出一个对话框,然后就开始画了,比如下图
第一个常用的库是Turtle,它是Python语言中一个很流行的绘制图像的函数库,这个词的意思就是乌龟,你可以想象下一个小乌龟在一个x和y轴的平面坐标系里,从原点开始根据指令控制,爬行出来就是绘制的图形了。
它最常用的指令就是旋转和移动,比如画个圆,就是绕着圆心移动;再比如上图这个怎么画呢,其实主要就两个命令:
turtle.forward(200)
turtle.left(170)
第一个命令是移动200个单位并画出来轨迹
第二个命令是画笔顺时针转170度,注意此时并没有移动,只是转角度
然后呢? 循环重复就画出来这个图了
好玩吧。
有需要仔细研究的可以看下这篇文章 https://blog.csdn.net/zengxiantao1994/article/details/76588580 ,这个牛人最后用这个库画个移动的钟表,太赞了。
Turtle虽好玩,但是我想要的是我给定数据,然后让它画图,这里就找到另一个常用的画图的库了。
Matplotlib是python最着名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。其中,matplotlib的pyplot模块一般是最常用的,可以方便用户快速绘制二维图表。
使用起来也挺简单,
首先import matplotlib.pyplot as plt 导入画图的图。
然后给定x和y,用这个命令plt.plot(x, y)就能画图了,接着用plt.show()就可以把图形展示出来。
接着就是各种完善,比如加标题,设定x轴和y轴标签,范围,颜色,网格等等,在 https://blog.csdn.net/guoziqing506/article/details/78975150 这篇文章里介绍的很详细。
现在互联网的好处就是你需要什么内容,基本上都能搜索出来,而且还是免费的。
我为什么要研究这个呢?当然是为了用,比如我把比特币的曲线自己画出来可好?
假设现在有个数据csv文件,一列是日期,另一列是比特币的价格,那用这个命令画下:
这两列数据读到pandas中,日期为df['time']列,比特币价格为df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下图:
自己画的是不是很香,哈哈!
然后呢,我在上篇文章 https://www.jianshu.com/p/d4013d8a73de 中介绍过求Ahr999指数,那可不可以也放到这张图中呢?不就是加一条命令嘛
plt.plot(df['time'], df['Ahr999'])
图形如下:
但是,Ahr999指数怎么就一条线不动啊, 原来两个Y轴不一致,显示出来太怪了,需要用多Y轴,问题来了。
继续谷歌一下,把第二个Y轴放右边就行了,不过呢得使用多图,重新绘制
fig = plt.figure() # 多图
ax1 = fig.add_subplot(111)
ax1.plot(df['time'], df['ini'], label="BTC price") # 绘制第一个图比特币价格
ax1.set_ylabel('BTC price') # 加上标签
# 第二个直接对称就行了
ax2 = ax1.twinx()# 在右边增加一个Y轴
ax2.plot(df['time'], df['Ahr999'], 'r', label="ahr999") # 绘制第二个图Ahr999指数,红色
ax2.set_ylim([0, 50])# 设定第二个Y轴范围
ax2.set_ylabel('ahr999')
plt.grid(color="k", linestyle=":")# 网格
fig.legend(loc="center")#图例
plt.show()
跑起来看看效果,虽然丑了点,但终于跑通了。
这样就可以把所有指数都绘制到一张图中,等等,三个甚至多个Y轴怎么加?这又是一个问题,留给爱思考爱学习的你。
有了自己的数据,建立自己的各个指数,然后再放到图形界面中,同时针对异常情况再自动进行提醒,比如要抄底了,要卖出了,用程序做出自己的晴雨表。
‘柒’ 如何使用Python的Pandas库绘制折线图
我们经常会使用Python的Pandas绘制各种数据图形,那么如何使用它绘制折线图呢?下面我给大家分享一下。
Pycharm
首先我们需要打开Excel软件准备需要的数据,这里多准备几列数据,一列就是一条折线,如下图所示
然后我们打开Pycharm软件,新建Python文件,导入Pandas库,接着将Excel中的数据读取进数据集缓存,如下图所示
接下来我们利用plot方法绘制折线图,如下图所示,这里只添加了一列标题
运行文件以后我们就可以看到折线图显示出来了,但是比较的简单,下面我们逐渐的丰富它
然后在plot方法中将excel里面的多列标题都添加进来,如下图所示
这次在运行文件的时候我们就可以看到折线图上有多条线了,如下图所示
接下来我们在为折线图设置标题,X,Y坐标轴的内容,如下图所示
然后通过plot方法下面的area方法对折线图的空白区域进行叠加填充,如下图所示
最后我们运行完善好后的文件,就可以看到如下图所示的折线图了,到此我们的折线图绘制也就完成了
‘捌’ Python pandas用法
在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。
使用下面格式约定,引入pandas包:
pandas有两个主要数据结构:Series和DataFrame。
Series是一种类似于一维数组的对象,它由 一组数据 (各种NumPy数据类型)以及一组与之相关的 数据标签(即索引) 组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。
pd.Series(list,index=[ ]) ,第二个参数是Series中数据的索引,可以省略。
Series类型索引、切片、运算的操作类似于ndarray,同样的类似Python字典类型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之间的主要区别在于Series之间的操作会根据索引自动对齐数据。
DataFrame是一个表格型的数据类型,每列值类型可以不同,是最常用的pandas对象。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index为指定的列、行索引,并按照顺序排列。
如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值:
数据索引 :Series和DataFrame的索引是Index类型,Index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、操作实现自动化对齐。索引类型index的常用方法:
重新索引 :能够改变、重排Series和DataFrame索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, ) :index/columns为新的行列自定义索引;fill_value为用于填充缺失位置的值;method为填充方法,ffill当前值向前填充,bfill向后填充;limit为最大填充量; 默认True,生成新的对象,False时,新旧相等不复制。
删除指定索引 :默认返回的是一个新对象。
.drop() :能够删除Series和DataFrame指定行或列索引。
删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。
如果删除的是列索引,需要增加axis=1或axis='columns'作为参数。
增加inplace=True作为参数,可以就地修改对象,不会返回新的对象。
在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,表5-4进行了总结
适用于Series和DataFrame的基本统计分析函数 :传入axis='columns'或axis=1将会按行进行运算。
.describe() :针对各列的多个统计汇总,用统计学指标快速描述数据的概要。
.sum() :计算各列数据的和
.count() :非NaN值的数量
.mean( )/.median() :计算数据的算术平均值、算术中位数
.var()/.std() :计算数据的方差、标准差
.corr()/.cov() :计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。
.corrwith() :利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算),传入一个DataFrame则会计算按列名配对的相关系数。
.min()/.max() :计算数据的最小值、最大值
.diff() :计算一阶差分,对时间序列很有效
.mode() :计算众数,返回频数最高的那(几)个
.mean() :计算均值
.quantile() :计算分位数(0到1)
.isin() :用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中数据的子集
适用于Series的基本统计分析函数,DataFrame[列名]返回的是一个Series类型。
.unique() :返回一个Series中的唯一值组成的数组。
.value_counts() :计算一个Series中各值出现的频率。
.argmin()/.argmax() :计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin()/.idxmax() :计算数据最大值、最小值所在位置的索引(自定义索引)
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv()、read_table()、to_csv()是用得最多的。
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。
在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值)。
替换值
.replace(old, new) :用新的数据替换老的数据,如果希望一次性替换多个值,old和new可以是列表。默认会返回一个新的对象,传入inplace=True可以对现有对象进行就地修改。
删除重复数据
利用函数或字典进行数据转换
df.head():查询数据的前五行
df.tail():查询数据的末尾5行
pandas.cut()
pandas.qcut() 基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。
pandas.date_range() 返回一个时间索引
df.apply() 沿相应轴应用函数
Series.value_counts() 返回不同数据的计数值
df.aggregate()
df.reset_index() 重新设置index,参数drop = True时会丢弃原来的索引,设置新的从0开始的索引。常与groupby()一起用
numpy.zeros()
‘玖’ 如何利用Python中的Pandas库绘制柱形图
我们利用Python的Pandas库可以绘制很多图形,那么如何绘制柱形图呢?下面我给大家分享演示一下。
Pycharm
首先我们打开Excel文件,准备要生成柱形图的数据表,如下图所示
接下来在Python文件中导入pandas库,然后将Excel文件加载到缓存对象中,如下图所示
然后我们导入matplotlib下面的pyplot库,如下图所示,导入以后给它起一个别名
接下来我们通过pandas库下面的bar来设置柱形图的X,Y坐标轴,如下图所示
然后通过pyplot的show方法将柱形图进行展示出来,如下图所示
接下来运行程序以后我们就看到柱形图生成出来了,如下图所示
然后如果我们想将柱形图中的数据排序的话可以利用sort_values实现,如下图所示
最后运行排序好后的程序,我们就可以看到柱形图中的数据已经排序好了,如下图所示
‘拾’ python(pandas模块)
Pandas是Python的一个数据分析包,最初由AQR Capital
Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的Pydata开发team继续开发和维护,属于PyData项目的一部分,pandas最初被作为金融数据分析工具而开发出来,因此pandas为时间序列分析提供了很好的支持。
Pandas的名称来自于面板数据和python数据分析。panel
data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
Pandas数据结构:
Series:一维数组,与numpy中的一维array类似。二者与Python基本的数据结构list相近,Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在series中。
Time-series:以时间为索引的series。
DataFrame:二维的表格型数据结构,很多功能与R中的data.frame类似,可以将DataFrame理解为Series的容器。
Panel :三维的数组,可以理解为DataFrame的容器。
Panel4D:是像Panel一样的4维数据容器。
PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。