教程为《利用python进行数据分析》,本人已进行基本入门学习,利用此处书对Numpy包及pandans包学习。
Numpy包
一、概念:
ndarray N维数组对象,多维数据容器,所元素必须同类型,包含:
1、 shape: 一个表示各位维度大小的元组(描述从外向里,见后面栗子);
2、 dtype:一个明确数据类型的对象
二、创建ndarray数组
>>import numpy as np #np是惯用名
>>data = [[1,2,3,4],[2,3,4,5]]
>>array = np.array(data)
>>array
array([[1, 2, 3, 4], [2, 3, 4]], dtype=object) #含array标志的numpy数组
>>array.shape
(2L,4L) #最外是两个维度,每个维度里又有四个维度
>>array.dtype
dytpe('int64')
zeros 和ones
>>np.zeros((2,3)) #双括号表示数字必须zeros的第一参数
array([0.,0.,0.],
[0.,0.,0.,])
同理ones创建全为1的数字;np.empty 创建没有任何具体数字的数组
三、ndarray的数据类型
int8 :有符号的8位整型
folat64 : 标准的双精度浮点数,32则为单精度
astype数据类型转换:
>> folat_array = array.astype(np.folat64)
>>folat_array.dtypr
dtype('folat64')
四、数组和标量运算
大小相等的数字之间任何运算会应用到元素级;(栗子略)
五、基本索引和切片
>>arr = np.arange(10)
>>arr[5]
5
>>arr[5:8]
array([5,6,7])
>>arr[5:8]=10
>>arr
arr([1,2,3,4,10,10,10,8,9]) #替换索引的值
对于高维数组,索引由外向内(此处结合shape理解会比较清晰)
>>data = [[1,2,3,4],[2,3,4,5]]
>>array = np.array(data)
>>array[0]
array([1,2,3,4])
>>array[1][3] #务必区别于 array[[1,3]],后者为花式索引
5
>>array[1,3] #括号内的数字个数须小于数组的维数5
切片索引
原理同索引,array[:2]
布尔型索引
要true,不要false
>>data = [[1,2,3,4],[2,3,4,5]]
>>data[([T]RUE,FALSE)] #布尔型数组的长度必须和被索引的轴长度(最外的维度)一致
array([1,2,3,4])
花式索引
利用整数数组进行索引
>> array[[2,3]] #取array第3、4位数组
六、数组转置和轴转换
>>array.T #实现转置
七、通用函数
应用至元素级
>>arr = np.arange(5)
>>np.sqrt (arr) # 利用numpy包中的ufunc,区别于math.sqrt
array([0,1,1.414,1,73,2])
八、利用数组进行数据处理(矢量化数组运算,重要)
矢量化数组运算是numpy包最大优势,比纯python方式简单、并且快;(学过R的知道R语言就是这种方法)
将条件逻辑表述为数组运算
>>xarr = np.array([1.1,1.2,1.3,1.4,1.5])
>>yarr = np.array([2.1,2.2,2.3,2.4,2.5])
>>cond = np.array
cond = np.array([True,False,True,True,False])
根据cond值选取,T选x,F选y
>>result = [(x if c else y)
for x,y,c in zip(xarr,yarr,cond)]
[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]
利用np.where提高速度(记住这个用法)
>>result = np.where(cond,xarr,yarr) #第一个参数为布尔条件,第二个位条件为T执行,第三个条件为F执行
[ 1.1 2.2 1.3 1.4 2.5]
其他栗子:
两组布尔值cond1,cond2,根据4种不同的布尔组合赋予不同的值
np.where(cond1 & cond2,0,np.where(cond1,1,np.where(cond2,2,3)))
数学和统计方法
>>arr = np.random.randn(5,4) #生成正态分布的数据
>>arr.mean()
0.062814911084854597
>>arr.mean(axis=1) #接受一个axis参数,1为行,0为列
array([-1.2833,0.2844,0.6574,0.6745,-0.0187])
用于布尔型数组的方法
>>arr = randn(100)
>>(arr >0 ).sum() #正值的数量,布尔条件放在“函数”前面
44
排序
>>arr.sort(1) #括号内简略了axis=1,按行排序
唯一花以及其他的集合逻辑
>>np.unique(arr) #返回唯一元素的
>>a = [[1,1,5],[7,2,2]]
>>b = np.array(a)
>>np.unique(b)
array([1, 2, 5, 7]) #返回一维的数组
九、用于数组的文件输入输出
np.save和np.load 两个函数
>>arr = np,arange(10)
>>np.save('some_array',arr) #参数为文件名加变量名
>>np.load('some_arry.npy') #参数为文件名
十、线性代数
满足矩阵运算要求的两数组可以直接运算