本人最近在读《利用python进行数据分析》一书,将上面的知识点进行总结一下,以后每天都更新一下;
每天进步一点点
数学名词:
数学和统计方法 mean 算数平均数 std 标准差 var 方差 自由度 在统计学中,自由度(degree of freedom, df)指的是计算某一统计量时,取值不受限制的变量个数。通常df=n-k。其中n为样本数量, k为被限制的条件数或变量个数,或计算某一统计量时用到其它独立统计量的个数。自由度通常用于抽样分布中。
随机变量 随机事件的发生的数值 期望值(数学期望;算数平均数) 随机事件的发生的平均值μ 方差 方差是实际值与期望值之差平方的平均值,σ^2 标准差 标准差是方差算术平方根。 正态分布 若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置, 其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
# -*- coding: utf-8 -*- import numpy as np #ndarray是一种多维数组对象 data=([[0.123,-0.32324,-0.8454],[0.43242,0.45322,0.765]]) #1.转换为多维数组 也就是矩阵 data=np.array(data) print(data) # [[ 0.123 -0.32324 -0.8454 ] # [ 0.43242 0.45322 0.765 ]] #2.多维数组的运算 print(data*10) # [[ 1.23 -3.2324 -8.454 ] # [ 4.3242 4.5322 7.65 ]] print(data+data) # [[ 0.246 -0.64648 -1.6908 ] # [ 0.86484 0.90644 1.53 ]] #3.获取维度的数组 print(data.shape) #(2, 3) 说明是一个2行三列的矩阵 #4.创建一个多维数组 data=[6,6.5,7,0,1] data=np.array(data) print (data)#[6. 6.5 7. 0. 1. ] #5.获取维度 print(data.ndim)#1 #6.创建一个二维数组 data2=np.array([[1,2,3,4],[5,6,7,8]]) print(data2.ndim)#2 print(data2.shape)#(2, 4) #7.获取数组的数据类型 print(data.dtype)#float64 print(data2.dtype)#int32 #8.返回全是0的数组 print(np.zeros((2,3,2))) # [[[0. 0.] # [0. 0.] # [0. 0.]] # # [[0. 0.] # [0. 0.] # [0. 0.]]] #9.返回都是1的数组 print(np.ones((2,3))) # [[1. 1. 1.] # [1. 1. 1.]] #10.初始化的垃圾数据 print(np.empty((2,3,3))) #11.ndarray的数据类型 data=np.array([1,2,3],dtype=np.float64) print(data.dtype)#float64 设定数据类型 #转换数据类型 data=np.array([1,23,4]) print(data.dtype)#int32 data=data.astype(np.float64) print(data.dtype)#float64 #浮点型转换为整形 data=np.array([1.23,31.42,3124.1231]) data=data.astype(np.int32) print(data)#[ 1 31 3124] #字符串转换 data=np.array(['1.2','2.3','3.4']) data=data.astype(np.float64) print(data)#[1.2 2.3 3.4] #当两个数组进行计算的时候,可以这样 data=np.array([1,2,3]) print(data.dtype)#int32 asdata=np.array([0.2,0.34,0.78],dtype=np.float64) data=data.astype(asdata.dtype) print(data.dtype)#float64
# -*- coding: utf-8 -*- import numpy as np ''' 数组与矢量的运算 ''' arr=np.array([[1,2,3],[4,5,6]]) #乘 print(arr*arr) # [[ 1 4 9] # [16 25 36]] #减 print(arr-arr) # [[0 0 0] # [0 0 0]] #除 print(1/arr) # [[1. 0.5 0.33333333] # [0.25 0.2 0.16666667]] #根号1/2 print(arr**0.5) # [[1. 1.41421356 1.73205081] # [2. 2.23606798 2.44948974]] ''' 基本的索引和切片 广播,数组不会复制,更改后会传播到所有的区域 ''' arr=np.arange(10) print(arr)#[0 1 2 3 4 5 6 7 8 9] arr[5:8]=12 print(arr)#[ 0 1 2 3 4 12 12 12 8 9] arr2=arr[5:8] arr2[1]=1000 print(arr)#[ 0 1 2 3 4 12 1000 12 8 9] arr2[:]=10 print(arr)#[ 0 1 2 3 4 10 10 10 8 9] ''' 多维数组 ''' arr=np.array([[1,2,3],[4,5,6],[7,8,9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr[1,1])#5,第二行,第二列 arr=np.array([[[1,2,3],[4,5,6]],[[6,7,8],[9,10,11]]]) print(arr) # [[[ 1 2 3] # [ 4 5 6]] # # [[ 6 7 8] # [ 9 10 11]]] print(arr[1,1,1])#10 #先复制一份 arrCopy=arr[0].copy() arr[0]=0 print(print(arr)) # [[[ 0 0 0] # [ 0 0 0]] # # [[ 6 7 8] # [ 9 10 11]]] #复制广播将不生效 arr[0]=arrCopy print(arr) # [[[ 1 2 3] # [ 4 5 6]] # # [[ 6 7 8] # [ 9 10 11]]] ''' 多维的切片索引 ''' arr=np.array([[1,2,3],[4,5,6],[7,8,9]]) #这里可以把':'看成一个轴 print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr[:2])#获取第三行之前的两行,切记不含二行之前 # [[1 2 3] # [4 5 6]] print(arr[1:,:2])#二行之后,包含二行,三列之前,不含三列 # [[4 5] # [7 8]] print(arr[1,:2])#这就时第二行,第三列之前的数据 #[4 5] print(arr[:,:1])#二列之前 # [[1] # [4] # [7]] ''' 难点:布尔型索引 ''' ''' 随机变量 随机事件的发生的数值 期望值(数学期望;算数平均数) 随机事件的发生的平均值μ 方差 方差是实际值与期望值之差平方的平均值,σ^2 标准差 标准差是方差算术平方根。 正态分布 若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置, 其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。 ''' #生成一些正太分布的随机数据 data=np.random.rand(7,4) print(data) # [[0.27756743 0.92553217 0.4376027 0.65185527] # [0.04030365 0.71891506 0.47290026 0.99950573] # [0.11455701 0.12167461 0.18145921 0.72137363] # [0.11932886 0.49777938 0.90794486 0.76765448] # [0.77329391 0.75949706 0.53619447 0.64690519] # [0.75853935 0.01169816 0.33512101 0.23201947] # [0.18895293 0.9876868 0.32563939 0.29345237]] names=np.array(['bob','joe','will','bob','will','joe','joe']) print(names) ''' 假设每个名字对应data数组的一行,而我们想要选择对应名字的bob的所有行 names和字符bob产生一个bulr的数组 ''' print(names=='bob')#[ True False False True False False False] print(data[names=='bob'])#获取第一行和第四行的数据 # [[0.77523105 0.27947329 0.89289972 0.20312933] # [0.46598067 0.14252597 0.42223596 0.34001168]] #组合使用获取切片数组,切去第三列后的数据 print(data[names=='bob',2:]) # [[0.89289972 0.20312933] # [0.42223596 0.34001168]] #设置!= print(data[names!='bob']) # [[0.04343977 0.58110752 0.88324083 0.72230267] # [0.43153165 0.14525111 0.07471861 0.8670083 ] # [0.9430179 0.00522972 0.05577508 0.63539824] # [0.81805448 0.21117292 0.21641448 0.13514152] # [0.38560434 0.89964309 0.19432445 0.46441979]] #使用&;| print(data[(names=='bob')|(names=='will')])#将正态分布的随机数,与现实数组条件结合,获取符合条件的正太分布数组 # [[0.59044687 0.62773976 0.29894288 0.36165262] # [0.31079013 0.54218564 0.12210727 0.29568336] # [0.86252657 0.15201418 0.43072984 0.09584376] # [0.99046536 0.57384598 0.44314855 0.50062777]] #给正太分布的随机数条件赋值 data[names=='joe']=7 print(data) # # [[0.3180116 0.13789919 0.57195362 0.29129141] # [7. 7. 7. 7. ] # [0.76172475 0.21645219 0.50425208 0.69248336] # [0.99019745 0.9510665 0.53139824 0.39900776] # [0.95121219 0.27315496 0.68358304 0.52597268] # [7. 7. 7. 7. ] # [7. 7. 7. 7. ]] ''' 花式索引 利用整数的数组进行索引 ''' arr=np.empty((8,4)) for i in range(8): arr[i]=i print(arr) # [[0. 0. 0. 0.] # [1. 1. 1. 1.] # [2. 2. 2. 2.] # [3. 3. 3. 3.] # [4. 4. 4. 4.] # [5. 5. 5. 5.] # [6. 6. 6. 6.] # [7. 7. 7. 7.]] #获取第5行,第三行,第一行,第七行 arr[[]] print(arr[[4,3,0,6]]) # [[4. 4. 4. 4.] # [3. 3. 3. 3.] # [0. 0. 0. 0.] # [6. 6. 6. 6.]] #获取第一行和最后一行 print(arr[[-7,-1]]) # [[1. 1. 1. 1.] # [7. 7. 7. 7.]] #重组矩阵 data=np.arange(32).reshape((8,4)) print(data) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12 13 14 15] # [16 17 18 19] # [20 21 22 23] # [24 25 26 27] # [28 29 30 31]] print(data[[1,5,7,2]]) # [[ 4 5 6 7] # [20 21 22 23] # [28 29 30 31] # [ 8 9 10 11]] print(data[[1,5,7,2],[3,2,1,0]])#[ 7 22 29 8] 获取的(1,3);(5,2);(7,1);(2,0)的数据 #获取行数据 print(data[[1,5,7,2]][:,[3,2,1,0]]) # [[ 7 6 5 4] # [23 22 21 20] # [31 30 29 28] # [11 10 9 8]] ''' 矩阵的转置和轴对称 ''' data=np.arange(15).reshape((3,5)) print(data) # [[ 0 1 2 3 4] # [ 5 6 7 8 9] # [10 11 12 13 14]] #转置 arr.T data_T=data.T print(data_T) # [[ 0 5 10] # [ 1 6 11] # [ 2 7 12] # [ 3 8 13] # [ 4 9 14]] #多维数组的转置 data=np.arange(16).reshape(2,2,4) print(data) # [[[ 0 1 2 3] # [ 4 5 6 7]] # # [[ 8 9 10 11] # [12 13 14 15]]] print(data.swapaxes(1,2)) # [[[ 0 4] # [ 1 5] # [ 2 6] # [ 3 7]] # # [[ 8 12] # [ 9 13] # [10 14] # [11 15]]] ''' 通用函数 ''' arr = np.arange(10) arr_sq=np.sqrt(arr) print(arr_sq)#0到九的平方根 # [0. 1. 1.41421356 1.73205081 2. 2.23606798 # 2.44948974 2.64575131 2.82842712 3. ] #e^x 自然数的x方 arr_exp=np.exp(arr) print(arr_exp) # [1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01 # 5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03 # 2.98095799e+03 8.10308393e+03] x=np.random.randn(8) y=np.random.randn(8) print(x) # [ 0.28447634 1.41080785 1.128851 0.78103467 0.13571358 -0.14375638 # -1.19790873 1.6918698 ] print(y) # [-0.26475371 0.77568501 -0.02374226 -0.23221057 1.46470355 -0.79920626 # -0.37125551 1.45384419] print(np.maximum(x,y))#获取元素组比较大的值 # [ 0.28447634 1.41080785 1.128851 0.78103467 1.46470355 -0.14375638 # -0.37125551 1.6918698 ] ''' 将条件逻辑表述为数组运算 ''' 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([True,False,True,True,False]) #cond为True时,选择xarr,当cond为False时,选择yarr print(np.where(cond,xarr,yarr))#[1.1 2.2 1.3 1.4 2.5] #根据where的设置条件赋值 arr=np.random.randn(4,4) print(arr) # [[ 0.42744786 -0.20437107 -0.8747506 -0.6353212 ] # [ 0.9812888 -0.1808243 -0.25737532 -0.73141064] # [-0.11373206 -1.07405382 -0.4166717 0.37265772] # [ 1.00973141 0.56554992 0.9458617 -0.09481286]] #大于0的为2,小于0的-2 arr1=np.where(arr>0,2,-2) print(arr1) # [[ 2 -2 -2 -2] # [ 2 -2 -2 -2] # [-2 -2 -2 2] # [ 2 2 2 -2]] #大于0的为2,小于0的不变 arr2=np.where(arr>0,2,arr) print(arr2) # [[ 2. -0.20437107 -0.8747506 -0.6353212 ] # [ 2. -0.1808243 -0.25737532 -0.73141064] # [-0.11373206 -1.07405382 -0.4166717 2. ] # [ 2. 2. 2. -0.09481286]] #复杂的逻辑处理 cond2=[] # result=[] # n=10 # for i in range(n): # if cond[i] and cond2[i]: # result.append(0) # elif cond[i]: # result.append(1) # elif cond2[i]: # result.append(2) # else: # result.append(3) #这个用where计算 #np.where(cond & cond2,0,np.where(cond,1,np.where(cond2,2,3))) ''' 数学和统计方法 mean 算数平均数 std 标准差 var 方差 自由度 在统计学中,自由度(degree of freedom, df)指的是计算某一统计量时,取值不受限制的变量个数。通常df=n-k。其中n为样本数量, k为被限制的条件数或变量个数,或计算某一统计量时用到其它独立统计量的个数。自由度通常用于抽样分布中。 cumsum 所有元素的累积和 cumprod 所有元素的累积积 ''' #算数平均数 data=np.arange(9).reshape((3,3)) print(data) # [[0 1 2] # [3 4 5] # [6 7 8]] print(np.mean(data))#36/9=4 #累计和 print(data.cumsum(0)) # [[ 0 1 2] # [ 3 5 7] # [ 9 12 15]] #累计积 print(data.cumprod(1)) # [[ 0 0 0] # [ 3 12 60] # [ 6 42 336]] ''' 用于blur类型的数组的方法 ''' arr=np.random.randn(100) print((arr>0).sum())#True的就计数 #43 #any()的方法 all()方法 bools=np.array([True,False,True]) print(bools.any())#True 是否存在True print(bools.all())#false 是否都是True ''' 排序 ''' data=np.random.randn(2,3) print(data) # [[ 4.15943673e-01 -6.69555355e-04 -2.29676098e+00] # [-2.96074407e-01 7.18820563e-01 -2.00999876e+00]] data.sort() print(data) # [[-2.29676098e+00 -6.69555355e-04 4.15943673e-01] # [-2.00999876e+00 -2.96074407e-01 7.18820563e-01]] ''' 唯一化及其他的集合逻辑 ''' data=np.array(['1','2','3','4','1']) print(np.unique(data)) #['1' '2' '3' '4'] #成员资格,返回blur类型 print(np.in1d(data,['1','2']))#[ True True False False True] ''' 交集 intersc1d 并集 union1d 差集 setdiff1d '''