本人最近在读《利用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
'''