从0开始学python数据分析的知识总结,先从三剑客Numpy,pandas,matplotlib数据库的基础知识总结起。
创建多维数组
import numpy as np
data1 = [5,7,9,20] #列表
arr1 = np.array(data1)
arr1
array([ 5, 7, 9, 20])
data2 = ([5,7,9,20]) #元组
arr2 = np.array(data2)
arr2
array([ 5, 7, 9, 20])
data3 = [[1,2,3,4],[5,6,7,8]]#多维数组
arr3 = np.array(data3)
arr3
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr3.shape # ndarray的shape是维度大小的元组
(2, 4)
arr3.dtype #dtype是解释说明ndarray数据类型的对象
dtype('int32')
zeros函数(可以创建指定长度或形状全为0 的数组)
np.zeros(8)
array([0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
ones函数(可以创建指定长度或形状的全1数组)
np.ones(4)
array([1., 1., 1., 1.])
np.ones(4)
array([1., 1., 1., 1.])
#empty函数(可以创建一个没有具体值得数值【即垃圾值】)
np.empty((2,2,2))
array([[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]])
arange函数(类似于python的内置函数range,但是arange函数主要用于创建数组)
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#函数 使用说明
#arange 类似于内置的range函数,用于创建数组
#ones 创建指定长度或者形状的全1数组
#ones_like 以另一个数组为参考,根据其形状和dtype创建全1数组
#zeros、zeros_like 类似于ones、one_like,创建全0数组
#empty、empty_like 同上,创建没有具体值的数
#eye、identity 创建正方形的N*N单位矩阵
arr3
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr5 = np.ones_like(arr3)
arr5
array([[1, 1, 1, 1],
[1, 1, 1, 1]])
#ndarray对象属性
#属性 使用说明
#.ndim 秩,即数据轴的个数
#.shape 数组的维度
#.size 元素的总个数
#.dtype 数据类型
#.timesize 数组中每个元素的字节大小
data = [[2,4,5],[3,5,7]]
arr = np.array(data)
arr
array([[2, 4, 5],
[3, 5, 7]])
arr.ndim #数组的维度
2
arr.size #元素的总个数
6
arr.itemsize #数组中每个元素的字节大小
4
arr.dtype #数组类型
dtype('int32')
ndarray数据类型
arr1 = np.arange(5)
arr1
array([0, 1, 2, 3, 4])
arr1.dtype
dtype('int32')
arr2 = np.arange(5,dtype='float64')
arr2
array([0., 1., 2., 3., 4.])
arr2.dtype
dtype('float64')
对于创建好的ndarray,可通过astype方法进行数据类型的转换
arr1 = np.arange(6)
arr1
array([0, 1, 2, 3, 4, 5])
arr1.dtype
dtype('int32')
arr2 = arr1.astype(np.float64)
arr2
array([0., 1., 2., 3., 4., 5.])
arr2.dtype
dtype('float64')
arr3 = arr1.astype('string_')
arr3
array([b'0', b'1', b'2', b'3', b'4', b'5'], dtype='|S11')
arr3.dtype
dtype('S11')
2.1.4数组变换
1.数组重塑(通过reshape方法改变其数据维度、与reshape相反的方法是数据散开(ravel)数据或扁平化(flatten))
arr = np.arange(10).reshape((5,2))
arr
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
arr.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
arr.flatten()
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
2.数组合并
concatenate 方法通过指定轴方向,将多个数组合并在一起
arr1 = np.arange(12).reshape(3,4)
arr1
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr2 = np.arange(12,24).reshape(3,4)
arr2
array([[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
np.concatenate([arr1,arr2],axis = 0)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
np.concatenate([arr1,arr2],axis = 1)
array([[ 0, 1, 2, 3, 12, 13, 14, 15],
[ 4, 5, 6, 7, 16, 17, 18, 19],
[ 8, 9, 10, 11, 20, 21, 22, 23]])
#关于axis,官方的解释:轴用来为超过一维数组定义的属性,二维数组拥有俩个轴:第0轴沿着行的方向垂直向下,第1轴沿着列的方向水平延伸。
#即:1表示横轴方向从左到右;0表示纵轴,方向从上到下。当axis =1时,数组变化是横轴的,体现出列的增加或减少。
#反之,当axis = 0时,数组的变化是纵向的,体现的是列的增加或减少。
#此外,Numpy中提供了几个比较简单易懂的方法,也可以进行数组合并,如:vstack和hstack
np.vstack((arr1,arr2))
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
np.hstack((arr1,arr2))
array([[ 0, 1, 2, 3, 12, 13, 14, 15],
[ 4, 5, 6, 7, 16, 17, 18, 19],
[ 8, 9, 10, 11, 20, 21, 22, 23]])
3.数组拆分(通过split方法可以将数组拆分为多个数组)
arr = np.arange(12).reshape((6,2))
arr
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])
np.split(arr,[2,4])
[array([[0, 1],
[2, 3]]),
array([[4, 5],
[6, 7]]),
array([[ 8, 9],
[10, 11]])]
数组转置(可以通过transpose方法进行转置或者数组具有T属性,可用于数组转置)
arr = np.arange(12).reshape(3,4)
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr.transpose((1,0))
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
arr.T
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
ndarray的swapaxes方法用于轴对换
arr = np.arange(16).reshape((2,2,4))
arr
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
arr.swapaxes(1,2)
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
2.1.5 NumPy的随机函数(在numpy.random模块中,提供了多种随机数生成函数)
arr = np.random.randint(100,200,size=(5,4)) #生成整数随机数
arr
array([[100, 137, 132, 198],
[107, 139, 129, 184],
[107, 126, 134, 157],
[174, 104, 173, 104],
[113, 195, 185, 149]])
arr = np.random.normal(4,5,size = (3,5)) #生成平均数为0,标准差为1 的正态分布函数
arr
array([[ 1.17890328e+01, 4.59669137e+00, 5.20738189e+00,
7.56425644e+00, 8.63886606e+00],
[ 5.58127214e+00, -1.17285694e-02, 4.44473479e+00,
2.44976774e+00, 4.88036600e+00],
[-1.95245217e+00, -5.20274334e+00, -1.33826275e+00,
3.13325980e+00, 4.81799253e+00]])
arr = np.random.normal(4,5,size = (3,5)) #通过normal函数生成指定均值和标准差的正态分布的数组。
arr
array([[-1.94533147, 3.23929235, 14.83890278, -3.54117721, 3.7082561 ],
[ 3.18057709, 4.90052895, 2.03134648, 9.4999035 , -4.63137523],
[-0.22708587, 3.88939542, 7.28873611, 2.82866186, 2.66774828]])
#以下为部分numpy.randpm模块中的随机数函数
# 函数 使用说明
# rand 产生均匀分布的样本值
# randint 给定范围内取随机整数
# randn 产生正态分布的样本值
# seed 随机数种子
# permutation 对一个序列随机排序,不改变原数组
# shuffle 对一个序列随机排序,改变原数组
# uniform(low,high,size) 产生均匀分布的数组,low表示起始值,high表示结束值,size表示形状
# normal(loc,scale,size) 产生具有正态分布的数组,loc表示均值,scale表示标准差
# poisson(lam,size) 产生具有泊松分布的数组,lam表示随机事件fashenglv
arr = np.random.randint(100,200,size = (5,4))
arr
array([[158, 162, 135, 184],
[127, 133, 108, 163],
[195, 149, 167, 185],
[175, 137, 106, 155],
[174, 138, 112, 144]])
np.random.permutation(arr)
array([[158, 162, 135, 184],
[127, 133, 108, 163],
[174, 138, 112, 144],
[195, 149, 167, 185],
[175, 137, 106, 155]])
arr
array([[158, 162, 135, 184],
[127, 133, 108, 163],
[195, 149, 167, 185],
[175, 137, 106, 155],
[174, 138, 112, 144]])
np.random.shuffle(arr)
arr
array([[127, 133, 108, 163],
[174, 138, 112, 144],
[195, 149, 167, 185],
[158, 162, 135, 184],
[175, 137, 106, 155]])
后续会继续更新详解4个小节的NumPy库的基础知识,完成NumPy数据库知识总结后续会继续总结三剑客后俩位pandas库和matplotlib库的知识总结,喜欢的朋友点个关注吧!