在数据分析领域中,Numpy、Pandas与matplotlibz这三个包用的比较多。其中,numpy通常用于数学计算,比如线性代数中的矩阵运算,在机器学习中非常有用。Pandas是基于numpy的数据分析工具,该工具是为了解决数据分析任务而创建的,它提供的DataFrame数据框可以方便地对表格数据进行分析。而matplotlibz是图形绘制库,专门用于数据分析结果的可视化。今天,主要学习Numpy与Pandas,matplotlibz在学习数据可视化时再总结。
一、Numpy基础:数组和矢量计算
1、Numpy的ndarray:一种多维数组对象
ndarray是一个通用的同构数据多维容器,即其中的所有元素必须是相同类型的。每个数组都有一个shape和一个dtype。
我们先来看Numpy一维数组(array):
1)定义一维数组array
创建数组最简单的办法就是使用array函数。
2)查询数组中的元素
3)查看数据结构和类型
此外,还可以用astype()进行数据类型转换。
Numpy二维数据结构
1)定义二维数组
2)获取元素
3)数轴参数axis
当数组不再是一维时,对数组进行操作时,需要指定为行或列,即axis=1或axis=0
Numpy数组的切片与索引,跟python中列表的功能差不多,但与列表不同的是它具有统计功能和向量化计算。
4)计算统计运算数组运算
数组与数的运算
数组间也支持加减乘除运算,但基本用不到;矩阵运算 np.dot()
2、常用函数
reshape
#生成从 0-14 的 15 个数字,使用 reshape(3,5) 将其构造成一个三行五列的 array。
arr = np.arange(15).reshape(3, 5)
arr
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
zeros
类似地,还有ones,ones_like,zeros_like
#根据指定的形状和dtype创建全0数组
np.zeros ((3,4))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
arange
是python内置函数range的数组版
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
random
生成指定结构的随机数,可以用于生成随机权重
np.random.random((2,3))
array([[ 0.2534773 , 0.81329347, 0.12915192],
[ 0.0753843 , 0.36546139, 0.784775 ]])
二、pandas
1、数据结构
pandas有三种数据结构:Series、DataFrame以及Panel,我们主要学习前两种数据结构。Series
Series是一种类似于一维数组的对象,他由一组数据(各种Numpy数据类型)和与数据相关的标签(即索引)构成。Series的性质和Python中原生的dict差不多,一个key对应一个vaule,而且key必须是唯一的。
DataFrame
DataFrame是一个二维的表结构,可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。
Dataframe数据框的优点在于:
数据框中的每一列的数据类型可以不一样;拥有pandas一维数组series索引的功能,二维表的行和列都有索引值,方便处理表格数据。
DataFrame数据框的创建:
2、胖哒黑魔法—索引
1)建立索引
a.新建数据框时建立索引
如上图所示,所有的数据框默认 都已经拥有流水号格式的索引,因此这里的“建立”索引指的是自定义索引。此时,索引为a,b,c。
b.读入数据时建立索引:index_col
数据列直接提供所引值,因此指明相应的数据列即可。
c.制定某列为索引列:set_index()
df.set_index(
keys:被指定为索引的列名,复合索引用list格式
drop=True:建立索引后是否删除该列
append=False:是否在原索引基础上添加索引,默认是直接替换
inplace=False:是否直接修改原数据框 )
也可将索引还原回变量列:reset_index()
2)修改索引
a.修改索引名称 :本质上和修改列名一样 index.names=[]
b.修改索引值:这里修改的本质是全部替换,索引值是无法直接修改的
import pandas as pd
sales=pd.DataFrame(
{
'购药时间':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],
'社保卡号':['001616528','001616528','0012602828'],
'商品编码':[236701,236701,236701],
'商品名称':['强力VC银翘片','清热解毒口服液','感康'],
'销售数量':[6,1,2],
'应收金额':[82.8,28,16.8],
'实收金额':[69,24.64,15]
},
index=['a','b','c'])
sales.index[1]='d' #报错,Index does not support mutable operations
此时,全部替换,就不会报错
c.强行更新索引
Pandas提供了reindex方法对Series和DataFrame对象进行重新索引,即利用新索引将Series和DataFrame对象的数据进行重排,并创建一个新的对象。重排时不仅会按照新索引对数据进行排序,还将比对新老索引,对数据进行过滤和填充操作。
3)引用索引数据筛选:iloc与loc
a、iloc,意为inter-location,用于根据位置查询值,即按照行列序号进行检索,可以同时指定行列,指定列时,需要先用“,”表明为列序号。
b、loc属性用于根据索引查询值,即按照所给的索引值筛选。
切片功能:
条件筛选
4)层次化索引
层次化索引是pandas的一个重要的功能,它可以在一个轴上有多个(两个以上)索引,有点类似于Excel中的合并单元格。这就表示着,它能够以低维度形式来表示高维度的数据。
我们看个通过层级索引将DataFrame数据转化为Series数据结构的例子:
层次化索引在数据重塑和分组上扮演着重要的角色,在数据处理中我们再详细学习!