python数据分析笔记
一、Numpy基础
import numpy as np
nums = np.arange(1000000)
nums_list = list(range(1000000)
%time for i in range(10):nums = nums *2
%time for i in range(10):nums_list = [j*2 for j in nums_list]
- 在pycharm中有语法错误
- 数组和列表是有区别的
1. 数组对象ndarray
常用属性
- ndarray.ndim
数组轴的个数,在python的世界中,轴的个数被称作秩。 - ndarray.shape
数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,它的shape属性将是(n,m),n是行数,m是列数。这个元组的长度显然是秩,(n,m两个数字,长度为2),即维度或者ndim属性。 - ndarray.size
数组元素的总个数,等于shape属性中元组元素n,m的乘积。 - ndarray.dtype
一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型。 - astype
astype:转换数组的数据类型。 - ndarray.itemsize
数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如,一个元素类型为complex32的数组item属性为4(=32/8). - ndarray.data
包含实际数组元素的缓冲区,通常我们不需要使用这个属性,因为我们总是通过索引来使用数组中的元素。
常用方法 | 功能 |
---|---|
ndarray.ndim | 返回int,表示数组的维数 |
ndarray.shape | 返回tuple,表示数组的尺寸,对于n行m列的矩阵,形状为(n,m) |
ndarray.size | 返回int,表示数组的元素总数,等于数组形状的乘积 |
ndarray.dtype | 返回data-type,描述数组中元素的类型 |
ndarray.itemsize | 返回int,表示数组的每个元素的大小(以字节为单位) |
ndarray.item(*args) | 复制数组中的一个元素,并返回 |
ndarray.tolist() | 将数组转换成python标准list |
ndarray.itemset(*args) | 修改数组中某个元素的值 |
ndarray.tostring([order]) | 构建一个包含ndarray的原始字节数据的字节字符串 |
ndarray.tobytes([order]) | 功能同tostring |
ndarray.byteswap(inplace) | 将ndarray中每个元素中的字节进行大小端转换 |
ndarray.copy([order]) | 复制数组并返回(深拷贝) |
ndarray.fill(value) | 使用值value填充数组 |
import numpy as np
arr = np.array([2,4,6,8,10])
arr_two = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(str.format('新创建的一维数组为:{0}',arr))
print(str.format('新创建的二维数组为:\n{0}',arr_two))
新创建的一维数组为:[ 2 4 6 8 10]
新创建的二维数组为:
[[1 2 3]
[4 5 6]
[7 8 9]]
- 其他
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。
资料参考
2.Numpy中的random模块
3.Numpy中数组的访问与形态变换
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
访问一维数组
通过冒号分隔切片参数 start:stop:step 来进行切片操作
- 跟列表的区别在于,数组切片是原始数据的视图,这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上
访问多维数组
变换数组形态
1)改变数组形状
- 利用数组的shape属性
- 利用reshape函数改变数组形状(一般采用reshape)
- .T属性实现数组转置(仅行列转换使用T这个属性)
2)展平数组
- ndarray.ravel()
- ndarray.flatten():返回一份拷贝,不影响原始矩阵(横向展平不传参,纵向展平传参’F’)
3)组合数组
组合形式 | 语法 | 说明 |
---|---|---|
横向组合 | np.hstack((arr1,arr2)) | arr1和arr2行数相同 |
纵向组合 | np.vstack((arr1,arr2)) | arr1和arr2列数相同 |
横纵向组合 | np.concatenate((arr1,arr2),axis = 1) | 控制axis,axis = 1为横向组合, axis = 0为纵向组合 |
4)分割数组
- np.hsplit
- np.vsplit
- np.split
4.简单的统计分析
1)排序
直接排序:
- arr.sort(axis =1)沿横轴排序
- arr.sort(axis =0)沿纵轴排序
间接排序:
- arr.argsort函数返回值为重新排序值的下标
- np.lexsort(a,axis = -1,kind=‘quicksort’,order=None)函数
2)去重数据
np.unique函数
3)重复数据
- np.tile(A,reps)函数
- np.repeat(a,repeats,axis=None)函数
4)数组的集合运算
- intersect1d(x,y)
- union1d(x,y)
- in1d(x,y)
- setdiff1d(x,y)
- setxor1d(x,y)
5.Numpy中通用函数ufunc的运算
参考文献1
参考文献2
通用函数(universal function),是一种能够对数组中所有元素进行操作的函数。
以Num数组作为输出,因此不需要对数组每个元素都操作,比math库中的函数操作效率更高。
- 四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同。
- 比较运算:>、<、==、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果
- 逻辑运算:np.any 函数表示逻辑“or”,np.all 函数表示逻辑“and”。运算结果返回布尔值。
常用的统计函数
6.Numpy中用于数组的文件输入输出
读取二进制文件
读取文本文件(或CSV文件)
- 文件读取
np.savetxt(fname,dtype=float,delimiter=None,unpack=None)
Parameter解释:
fname:待读取的文件,生成器,(字符串形式),也可以是.gz或.bz2的压缩文件。
dtype:表示要读取结果文件的数据类型。可选参数,默认是np.float。
delimiter:分隔字符串,默认是None。
unpack:默认是False。若为True,读取属性分别写入不同变量。 - 文件保存
np.savetxt(fname,array,fmt=’%.18e’,delimiter=None)
Parameter解释:
array:待存入文件的数组。
fmt:写入文件的格式