python工具之pandas、numpy、scipy使用

标签:
pandascutconcatdataframeloc |
分类: 大数据处理 |
三者区别:
1、pandas:提供了数据结构和数据分析的工具
2、numpy:主要用于数值计算,包括sin、cos、exp等,同时提供N维数据对象
3、scipy:基于numpy,提供了一个在python中做科学计算的工具集,也就是说它是更上一个层次的库
-----------------------------------pandas篇-------------------------------------------------
1、数据填充
df.Age = df.Age.fillna(-0.5)
当df的Age出现Nan时用-0.5进行填充
2、数据快速分组
test_data = [3,30,30,56,54,78]
bins = (0,20,40,60,80)
group_names = ['青少年','壮年','中年','老年']
categories = pd.cut(test_data,bins,labels=group_names)
print(categories)
结果为:[青少年, 壮年, 壮年, 中年, 中年, 老年]
3、数据融合
train_data =
pd.read_csv('D:\\workspace\\kaggle\\titanic\\data\\train.csv')
test_data =
pd.read_csv('D:\\workspace\\kaggle\\titanic\\data\\test.csv')
train_data_new = train_data[['Age','Pclass']].head(5)
print(train_data_new)
print("----------------------------")
test_data_new = test_data[['Age','Pclass']].head(5)
print(test_data_new)
print("----------------------------")
data_concat = pd.concat([train_data_new,
test_data_new])
print(data_concat)
结果为:
0 22.0
3
1 38.0
1
2 26.0
3
3 35.0
1
4 35.0
3
----------------------------
0 34.5
3
1 47.0
3
2 62.0
2
3 27.0
3
4 22.0
3
----------------------------
0 22.0
3
1 38.0
1
2 26.0
3
3 35.0
1
4 35.0
3
0 34.5
3
1 47.0
3
2 62.0
2
3 27.0
3
4 22.0
3
4、数据组织方式
aa = {'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]}
bb = pd.DataFrame(aa)
print(bb)
结果为:
0 1
3
2
1 2
4
3
2 3
5
4
记忆方法:在dict中指定column_name和column_value,然后展示excel一样的效果。注意:column_value的个数需要一致,否则会报错
5、使用标签选取数据
df.loc[行标签,列标签]
df.loc['a':'b']#选取ab两行数据
df.loc[:,'one']#选取one列的数据
6、获取每一列的数据类型
df.dtypes可得到如下图:
-----------------------------------numpy篇-------------------------------------------------
1、数组对象及创建函数
1.1 shape,dtype:对象属性,分别表示维度信息以及元素类型
matrix = np.array([[1,2,3],[4,5.,6]])
print(matrix.shape,matrix.dtype)
结果为:
(2, 3) float64
1.2 array:转化为数组
1.3 zeros/ones/empty/eye:分别创建全零的/全1的/空的/单位矩阵
matrix1 = np.zeros(10)
print(matrix1)
结果为:
[ 0. 0.
0. 0. 0.
0. 0. 0.
0. 0.]
matrix2 = np.zeros((2,4))
print(matrix2)
结果为:
[[ 0. 0.
0. 0.]
matrix3 = np.ones(10)
print(matrix3)
结果为:
[ 1. 1.
1. 1. 1.
1. 1. 1.
1. 1.]
matrix4 = np.ones((2,3))
print(matrix4)
结果为:
[[ 1. 1.
1.]
matrix5 = np.eye(3)
print(matrix5)
结果为:
[[ 1. 0.
0.]
matrix6 = np.empty(5)
print(matrix6, matrix6.shape)
结果为:
[ 0. 0.
0. 0. 0.]
(5,)
matrix7 = np.empty((2,3))
print(matrix7, matrix7.shape)
结果为:
[[ 0. 0. 0.]
1.4 arange:创建等差数组
arr1 = np.arange(10)
print(arr1)
结果为:[0 1 2 3 4 5 6 7 8 9]
arr2 = np.arange(1,9)
print(arr2)
结果为:[1 2 3 4 5 6 7 8]
arr3 = np.arange(1,2,0.1),第3个参数为步长
print(arr3)
结果为:[ 1. 1.1 1.2
1.3 1.4 1.5
1.6 1.7 1.8
1.9]
1.5 reshape:给予数组新的形状
arr = np.arange(9).reshape(3,3)
print(arr)
结果为:
[[0 1 2]
2、数组操作
需要掌握的函数如下:
2.1 数组相乘(每个元素相乘)
arr1 = np.array([1,2,3])
arr2 = np.array([1,2,3])
arr3 = arr1 * arr2
print(arr3)
结果为:[1,4,9]
2.2 transpose/T属性:数组转置
arr1 = np.arange(9).reshape(3,3)
arr2 = np.transpose(arr1)
print(arr2)
print(arr1.T)
结果为:
[[0 3 6]
[[0 3 6]
2.3 np.where:条件逻辑表达式(对每个元素进行判断)
arr1 = np.arange(9).reshape(3,3)
arr2 = np.where(arr1<5,
0,arr1)
print(arr2)
结果为:
[[0 0 0]
2.4 数组统计
2.4.1 sum:取和
arr1 = np.arange(9).reshape(3,3)
print(arr1)
print(arr1.sum())
print(arr1.sum(0))
print(arr1.sum(1))
结果为:
[[0 1 2]
36
[ 9 12 15]
[ 3 12 21]
2.4.2 mean:取平均数
arr1 = np.arange(9).reshape(3,3)
print(arr1)
print(arr1.mean())
print(arr1.mean(0))
print(arr1.mean(1))
结果为:
[[0 1 2]
4.0
[ 3. 4. 5.]
[ 1. 4. 7.]
3、通用函数:
需要掌握的函数如下:
3.1 np.log1p
说明:log1p(x)计算log(1+x)的值。这是由于浮点数的精度有限,无法很精确地表示十分接近1的实数。例如无法用浮点数表示“1
+ 1e-20”的值,因此“log(1+1e-20)”的值为0,而当使用log1p()时,则可以很精确地计算。
4、线性代数相关
一定要掌握的函数罗列如下:
4.1 diag:创建对角矩阵
matrix1 = np.diag((1,2,3))
print(matrix1)
结果为:
[[1 0 0]
4.2 dot:矩阵相乘
matrix1 = np.diag((1,2,3))
matrix2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
matrix3 = np.dot(matrix1,
matrix2)
print(matrix3)
结果为:
[[ 1 2 3]
4.3 trace:矩阵的迹(该值等于对角线上元素之和,同时也是所有特征值相加之和)
matrix = np.arange(1,10).reshape(3,3)
print(matrix)
print(np.trace(matrix))
结果为:
[[1 2 3]
15
4.4 det:行列式值
matrix = np.array([[1,2],[3,4]])
print(np.linalg.det(matrix))
结果为:
-2.0
4.5 eig:矩阵的特征值和特征向量
matrix = np.array([[1,2],[3,4]])
w,v = np.linalg.eig(matrix)
print(w)
print(v)
结果为:
[-0.37228132 5.37228132]
[[-0.82456484 -0.41597356]
4.6 inv:矩阵的逆
matrix = np.array([[1,2],[3,4]])
print(np.linalg.inv(matrix))
结果为:
[[-2. 1. ]
4.7 qr:矩阵QR分解(A=QR,Q为正交矩阵,R为上三角矩阵)
matrix = np.array([[1,2],[3,4]])
w,v = np.linalg.qr(matrix)
print(w)
print(v)
结果为:
[[-0.31622777 -0.9486833 ]
[[-3.16227766 -4.42718872]
4.8 svd:矩阵SVD分解
matrix = np.array([[1,2,3],[4,5,6]])
u,sigma,v = np.linalg.svd(matrix)
print(u)
print(sigma)
print(v)
结果为:
[[-0.3863177 -0.92236578]
[ 9.508032
0.77286964]
[[-0.42866713 -0.56630692 -0.7039467 ]
4.9 线性代数总结
5、随机数生成
5.1 shuffle:对一个序列就地随机排列
arr = np.arange(10)
np.random.shuffle(arr)
print(arr)
结果为:
[5 9 2 4 1 7 6 3 0 8]
5.2 rand:产生元素值为0-1的随机数的数组
arr = np.random.rand(5)
print(arr)
结果为:
[ 0.3390826 0.6166693
0.8745457 0.41493562 0.1104939
]
5.3 randint:随机生成给定范围内的数
arr = np.random.randint(2,5)
print(arr)
arr2 = np.random.randint(2,10,4)
//第3个参数表示个数
print(arr2)
结果为:
2
[4 2 7 5]
5.4 randn:生成正态分布(平均值为0,标准差为1)的样本值
arr = np.random.randn(2,3)
print(arr)
结果为:
[[-0.50115011 0.9219796
0.22311155]
5.5 normal:产生正态分布的样本值(randn只是normal其中的一种情况)
mu,sigma = 10, 1
var = np.random.normal(mu,
sigma, 100)
print(var)
结果为:
[ 10.22221175 9.18561715
10.73016912 10.54514165
10.67503307
5.6 uniform:产生均匀分布的样本值
var = np.random.uniform(0,10,5)
print(var)
结果为:
[ 1.98785923 9.54337698
0.83408531 2.72365482
8.76923795]
-----------------------------------scipy篇-------------------------------------------------
1、偏度scipy.stats.skew
说明:表征概率分布密度曲线相对于平均值不对称程度的特征数,直观看来就是密度函数曲线尾部的相对长度。具体参考:http://baike.baidu.com/link?url=PA487jrIwKBkj7si92vwYzQD9tSfnbG6oDBWieocXcoGqJI2vce92z6uNiXletp6QivbZI1qzURlKS5vSYQ0pU_KkS6bjE5qKCkX_IJ-RIO
上面分别为正偏态、正态、负偏态。
from scipy.stats import skew
x = [1,2,4]
y = skew(x)
计算结果为:0.38