引言
numpy和pandas是数据分析中常用的对大量数据处理的库,使用起来十分方便。pandas底层技术也是numpy。numpy以高性能著称,底层用c++搭建,对数据矩阵的运算十分迅速。
数据分析中数据处理的一般流程
数据收集的方法
1,网络爬虫
2,公开数据集(kaggle)
3, 其它途径收集的数据
数据预处理
1,归一化:使数据看起来是一样的。
2,二值化:设置标准值,将数据集分成两个部分,一般用于图像处理。
3,维度变化
4,去重:去掉重复的数据。
5,无效数据过滤:在数据集中有些符号,无用的字符需要过滤除去。
安装numpy
windows系统:命令行中输入:pip install numpy
mac 系统: 命令行中输入: pip3 install numpy
在anaconda环境中直接导入即可,不需要安装。
numpy的基础用法
1,创建一个ndarray形的数组
data = np.array([1,2,3,4,5])
print(data)
结果如下:[1 2 3 4 5]
2,创建一个二维的数组
data = np.array([[1,2,3],[4,5,6]])#注意这里是列表嵌套,两个列表用一个大的列表封装
print(data)#输出数据
print(data.ndim)#判断data的维度
print(data.shape)#输出多少行多少列
结果如下
[[1 2 3] [4 5 6]] (2, 3) 2
3,创建一个全是0或1的数组
data1=np.zeros(10)#一维全是0
print(data1)
data2=np.zeros((2,5))#二维2行5列的0数组
print(data2)
data3 = np.ones(10)#一维全是1
print(data3)
data4 = np.ones((2,5))#二维2行5列的1数组
print(data4)
结果如下:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
4,获取数组中的某一个数字
data = np.arange(10)
print(data[5])
data = np.array([[1,2,3],[4,5,6]])
print(data[0,1])
print(data[0][1])
5
2
2
5,数组切片
有时候遇到我们将数组切片后的副本拷贝出来修改的时候,原来的数组也被修改了,这时候相当于data_list是data的引用。
data=np.arange(10)
data_list=data[3:6]
print(data_list)
print(data)
data_list[2]=100
print(data)
结果如下
[3 4 5]
[0 1 2 3 4 5 6 7 8 9]
[ 0 1 2 3 4 100 6 7 8 9]
这时候,我们可以采用copy方法对data中的数据进行拷贝来使原来的数据不被改变。
data=np.arange(10)
data_list=data[3:6].copy()
print(data_list)
print(data)
data_list[2]=100
print(data)
print(data_list)
结果如下:
[3 4 5]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[ 3 4 100]
copy函数虽然有这个好处,但是新的数据也需要储存,这时候会适当降低效率,故最好不要随便的使用copy函数。
6变化数据的维度
下面的代码将0-9的数组转化为了5行2列的二维数组。
data = np.arange(10)
print(data)
print(data.reshape(5,2))#如果reshape(2,4)格式不对则报错
结果如下:
[0 1 2 3 4 5 6 7 8 9]
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
7矩阵的转置
矩阵的转置就是行列互换。
data = np.arange(10)
print(data.reshape(5,2).T)
结果如下:
[[0 2 4 6 8]
[1 3 5 7 9]]
8数组元素的计算
这里使用取平方根来进行演示
data = np.arange(10)
print(np.sqrt(data))
结果如下:
[0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
还有许多常用的运算方法如下图
ceil函数
data =np.array([2.1,4.2,6.3,8.4,10.1])
print(np.ceil(data))
[ 3. 5. 7. 9. 11.]
where函数
在0-9中选出大于2的元素,如果大于2则输出该元素的值,如果小于2则输出0
data = np.arange(10).reshape([2,5])
print(np.where(data>2,data,0))
结果如下:
[[0 0 0 3 4]
[5 6 7 8 9]]
around函数
around函数主要用于四舍五入,但可以调节精度,decimals默认为0
data = np.array([1.2,2.6,3.7,4.8,1.4,5.3])
print(np.around(data,decimals=1))#保留一位小数
print(np.around(data,decimals=0))#保留整数
print(np.around(data,decimals=-1))#整数部分第一位四舍五入
结果如下:
[1.2 2.6 3.7 4.8 1.4 5.3]
[1. 3. 4. 5. 1. 5.]
[ 0. 0. 0. 0. 0. 10.]
9两个数组之间的计算方法
data1=np.array([1,3,5,7])
data2=np.array([2,4,6,8])
print(np.power(data1,data2))#计算data1的data2次方
print(np.multiply(data1,data2))#计算两个数组的元素相乘,不是矩阵相乘
print(np.fmax(data1,data2))#计算两个数组中各个位置上元素较大的那个元素
print(np.fmin(data1,data2))#计算两个数组中各个位置上元素较小的那个元素
结果如下:
[ 1 81 15625 5764801]
[ 2 12 30 56]
[2 4 6 8]
[1 3 5 7]
当然若要得到公共元素,可以将list转化为set使用交符号&即可。
10数组中的统计方法
data=np.arange(10)
print(np.sum(data))#求和
print(np.mean(data))#求平均数
print(np.std(data))#求标准差
print(data.max())#求最大值
print(data.min())#求最小值
print(data.argmax())#求最大值位置
print(data.argmin())#求最小值位置
print(np.median(data))#求中位数
print(np.var(data))#求方差
结果如下:
45
4.5
2.8722813232690143
9
0
9
0
4.5
8.25
11矩阵的运算
矩阵中的加减运算基本和数组类似,这里主要是说矩阵的乘积运算
只有data1的行数等于data2的列数才可以相乘
data1=np.array([[1,3,5],[7,9,11]])
data2=np.array([[2,4],[6,8],[10,12]])
print(np.dot(data1,data2))
结果如下:
[[ 70 88]
[178 232]]