经过几周写论文,做实验还有学习python,终于对于数据的处理和应用有了个初步了解,于是尝试着学习python的pandas和numpy包去处理数据。发现python和MATLAB在使用的时候也有着相同点,日后如果要处理其他数据的时候又多了一种方法去解决问题。
首先要知道numpy和pandas其实是有点不同的,numpy储存的时候是用的数组(array)而pandas还可以是数据框,当然仅仅是文字解释并不能直观去理解,所以我做了一些实验和项目去了解这两者的相同和区别
一、 第一个是如何去定义一个Numpy一维数组结构呢?
我们首先得先导入Numpy包
为了后面的使用我把它的名字改为了np,这样就不需要后面输入代码的时候重复去打这么多字母。后面也要用到pandas所以我也顺便导入了进来。
然后我们定义一个一维数组,他由5个偶数组成。
平时还需要对数组进行操作,所以我们会用以下几种方法:
1.查询
通过访问索引值来查询数值
2.切片访问
有时我们需要把一个范围的值都显示出来
在这里要注意1:3并没有到[3]所储存的数据,而是[3]的前一个值的数值在这里把实验结果打印出来会更加直观,在日常使用当中也要注意这里的特殊情况
3.有时我们也想知道数组里面储存的是什么格式的数据
那么我们就可以用dtype来查询
在这里我们可以看到这个数组里面的数据都是整型
4.统计上的计算
往往我们获得一个数据的时候也会进行统计上的计算
一个是平均值一个是标准差,这是我们最常用的计算方法。我们也可以看到python仅仅使用了一句话就能达到我们的要求非常方便
5.向量化计算
假如我们得到了一个数据,现在他储存的数值是以前的四倍,那么我们可以通过向量化计算的方式,把里面的所有数值进行计算
在这里我们也可以看到,numpy的一维数组是可以储存重复元素的!!
二、那么如何使用pandas去定义数组呢?
在这里我们拿到了一个股价数据,然后我们可以用pandas的方法去储存这个数据。
1、建立有索引值的一维数组
通过Series方法建立一个一维数组,但是我们要注意这个比起numpy方法,他多了索引值
在我们的一维数组中,我们用了公司名称建立了索引值,这样更加符合我们平时的工作需要。
2.对数组进行操作
那么既然numpy可以对一维数组进行操作,那pandas可以吗?
答案是肯定的!
describe()方法就很好的解决了这个问题
我们仅仅就能用一句话就能获得pandas一维数组的常用统计数据,非常快捷。
3.查询
我们有时也还需要对pandas里面的一维数组进行查询,那么iloc属性和loc属性就能帮到我们。
但是两者有什么不同呢?iloc是根据位置获取,而loc则是根据索引值
平常假如我们对数组进行了排序操作,我们想要知道第二大的数据是多少,就可以使用iloc(因为 我们往往不知道索引值是多少)
而假如我是腾讯员工,那么loc就能更快的帮助我们锁定腾讯的数据。
4.向量化运算
平时我们可能还需要对向量进行运算,比如我今天进了一堆水果,有多少千克,明天又进了一堆水果,有多少千克,现在需要把今明两天的水果数量相加
我们就可以得到一个新的数组。但是我们会发现如果今天有‘香蕉’明天没有进货‘香蕉’而是‘西瓜’,那么就会出现Na值
这个时候我们需要使用dropna()方法来清除
又或者是用add()给序列填充新的值
三、numpy二维数组定义
日常生活中,一维数组并不能满足我们需求,这个时候我们会需要二维数组
那么numpy定义二维数组也非常方便快捷。
1.查询
那么我们又要如何查询二维数组的值呢?
我们需要遵循一个规则。就是使用[行,列]来查询
比如我要查询[0,2],就是要查询第1行第3列的数据
我们得到了6
假如我们要得到第二行的所有数据呢?
那么就可以使用[1,:]来表示,其中冒号表示所有列的意思
那么[:,0]也同理!我们得到了第一列的所有数据
2.统计运算
假如我们要去运算所有行数据的平均值或者所有列的平均又该如何计算呢?
我们可以使用mean(axis=?)的方法
其中‘?’=0表示对列运算,=1表示对行运算
四、pandas数据框
当然我们生活中处理的数据多种多样,其中就会有更加复杂的数据存在,特别是我们日常生活中的数据,那么用二维数组也会不利于我们操作和查看。
在这里我们就能用到pandas数据框的方法。
我们录入一个药店的购药记录。那么我们可以先定义一个字典,建立几个索引值作为列名,和他们所对应的数组作为行的数据,接着再放入到DataFrame方法
我们可以看到这里显示的表格会更加直观。
这时有个问题,我们多次运算这个方法,会发现列的顺序不断在改变。这是为什么?
因为我们这里的字典是无序的,我们只需要进行有序字典的定义,就能获得一个列名不随便改变的数据框了
1.统计运算
那么我们得到一个好看的数据框总不能中看不中用呀。我们日常还需要对它进行统计和分析
这时我们可以用到mean()方法,这样可以对里面的所有数据进行平均操作
2.查询
或者数据多了起来我们还想要知道某个具体数据的值,只是iloc就可以帮我们锁定我们需要的元素
同时要注意,iloc是按照位置进行查找!
举一反三。loc也能帮助我们根据索引值查找,而且我们平时也更加常用。
我们还可以同时查看几列
但是我们要注意第一行我们非常容易打错,我们应该是要有两个中括号来选出我们要的那几列数据的索引值,如果平时使用错误,会报错,当然我们如果熟用了的话就没有这方面的问题,或者我们也可以通过用互联网查阅的手段来进行查询正确的语法规则。注意:一定要查询官方或者有权威的资料,否则可能会产生误解!!!!
这无论在什么时候都非常有效。
或者我们还可以用loc[:,'***':'*****']来查询某列到某列的所有数据,如下图
还可以通过构建查询条件的方式进行查询
比如我相要查询销售数量大于1的商品
五、更加广泛方法
我们可以发现,如果手动的一个个输入数据太过繁琐,假如我们的购物机保存了这段时间的购买记录,并用EXCEL的方式储存,那么我们可以通过导入数据的方式,把整个EXCEL文件导入进来
在这里我们就可以看到完整的EXCEL文件的数据都成功转为了PANDAS的数据框格式
1.查询
假如我们查询前五个记录,那么head()方法就可以帮到我们了
2.数据类型查询
有时电脑保存或者他人保存的数据格式并不能给我们直接使用到某种方法当中
这样数据格式的查看和改变就极其重要
在这次的论文研究当中,我用一个数据库里面的数据文件,其中的太阳耀斑的数据格式是字符串,这样不能直接进行加减运算,所以导致我的实验结果也出现了问题,
那么pandas如何进行数据类型查询呢?
答案是:dtype属性
有时我们想快捷的知道我们数据究竟有多大,这样就能使用shape来查询
6578表示有6578行数据,7表示他们有7列属性
3.统计运算
我们还需要对拿到的数据进行一个统计运算
那么describe()可以直接生成一个表格帮我们统计我们的数据集
4.选择子集
或者我们有时不需要太多数据,我们可以选择我们数据集的子集
5.有时我们的数据命名也可能有错误
那么rename方法能够帮我们重命名我们的数据
这里要注意inplace=Ture 会改动原来数据框,False则为不会改动,columns要注意有s否则会报错
6. 删除缺失值
当然我们无可避免我们数据是残缺的,假如我们的数据是残缺的话该怎么办呢?
我们可以用dropna方法
来删除缺失值,how='any'是指任何一列中有缺失值就删除。
有时我们会忘记这个参数如何使用
那么我们可以查阅pandas的手册或者资料来了解,死记硬背容易出错,也浪费许多时间。
7.修改数据类型
前面说到有时电脑保存或者他人保存的数据格式并不能给我们直接使用到某种方法当中
这样数据格式的查看和改变就极其重要。
我们可以使用astype('?')来改变我们某一列的数据类型为我们想要的数据类型,这样方便我们的工作
8.修改数据格式
在这个项目中,我们不难发现日期的格式是这样子的
不过我们有时不需要星期四,也不方便我们使用日期进行计算。
那么我们可以先用分割的方法去修改我们的日期格式。把星期四这个不要的部分分割掉。
以此类推
我们可以定义一个函数,通过循环访问的方式把我们数据中的所有日期改变成我们想要的样子
这样可以更加方便我们的计算。
注意!!!如果报错说object 无法split,建议检查有没有缺失值
我们还能通过一些其他方法来改变数据的类型
format='%Y-%m-%d':表示你原始数据的格式,errors='coerce':如果你的原始数据格式不符合要求,那么会被转变为空值。
9.排序操作
ascending=true时表示降序,false表示升序
排序时原始的行序号是记录本来的序号
reset_index可以让他的序号重新排序成0~n的编号
10.对数据进行统计运算
在这里因为都是使用的describe方法我就不一一赘述了
11。异常值清除
我们如果数据集中出现了异常值,比如销售数量<0(现实生活中是不存在的)
那么我们可以用条件检索,然后再把他们删除掉
六、实际操作
通过对前面的两种包的学习,我们不难发现我们并不是所有的方法都会用到,而是用到其中常用的几个方法。比如describe()。比如dtype()
其实熟练使用以上这几种方法已经足够去解决许多问题了。
接下来我会用日常处理数据的流程来解释
正常来说我们会想要去了解一件事情,我们会先提出问题
这是我们的第一步,明确我们数据分析的方向。
接着我们会去获取我们要的数据,那么获取数据的方式有很多种。
在这里我推荐一个我自己查到的可以获取数据并且练手的网站
UCI Machine Learning Repositoryarchive.ics.uci.edu这个网站储存了许多有趣和有用的数据信息,非常方便使用和练手。我们上面是用的EXCEL格式去使用pandas进行数据分析。所以我们可以上网查一查如何把UCI的数据表转化为EXCEL表格
这个时候我们就需要去查阅我们需要的方法,但是要注意:一定要对查阅的信息进行筛选,不要盲目的去套用!我在这周的论文研究和代码学习中就吃了不少苦头
接着我们要去理解数据,看看数据的基本信息
我们可以通读一下数据表格知道他的来源和他的主要内容,也可以用dtype方法和shape()方法去查看数据的类型和大小,如果你使用了我上面推荐的数据库UCI,你可以下载到一个names文件这样可以加快你的速度!
接下来就是数据清洗了,我们拿到数据其实并不能直接使用,因为里面可能会有异常值或者你不需要数据格式,这个时候你可以使用上文提到的方法进行你想要的操作。
如果你完成了所有的前期准备工作,那么恭喜你你可以进行构建模型了
同样以这个药品购买数据举例,我假如要计算业务指标,我可以进行
去获得月均消费次数(总次数/月份数)
还可以获得月均消费金额和客单价
这样一个大概的数据分析流程就结束了!