Python数据分析(一)Numpy
NumPy,Pandas和 Matplotlib
“工欲善其事,必先利其器。” Numpy ,pandas 和 Matplotlib 被称为Python数据分析的三剑客模块。首先我们来讲讲安装问题,推荐直接傻瓜式安装Anaconda,里面封装了大量的第三方库,其中就包括了我们的三剑客模块。推荐到清华大学开源镜像站下载。
-
NumPy是一个科学计算库,提供了矩阵运算的功能,一般用它提供一个 Ndarray 对象 。(注:python文件名不要模块名重复,不然创建数组对象时会出现问题:比如说文件名为 numpy.py 这时文件名和numpy冲突
报错:AttributeError: module ‘numpy’ has no attribute ‘array’)1.定向生成数组对象
import numpy as np #创建多维数组对象 arr1=np.array([1,2,3,4,5])
> arr2=np.array([[1,2,3,4,5],[6,7,8,9,0]]) #打印维度 print(arr2.shape)
> print(arr1.shape) #输出结果如下:(2, 5) (5,) 多维数组维度(行,列)
#打印数组的数据类型
print(arr1.dtype)
print(arr2.dtype)
#输出:int64 int64
#打印数组元素的个数
print(arr2.size)
#输出:10
#格式转换
arr2.shape=5,2
arr1.shape=5,1
print(arr2.shape)
print(arr1.shape)
#输出:(5, 2) (5, 1)
2.自动生成数组
#使用arange函数创建一定范围内的等差一维数组
arr4=np.arange(1,2,0.1)
print(arr4)
#输出:[1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]
#使用linspace函数通过指定开始值,终值和元素个数创建一维数组
arr3=np.linspace(0,1,15)
print(arr3)
'''输出:[0. 0.07142857 0.14285714 0.21428571 0.28571429 0.35714286
0.42857143 0.5 0.57142857 0.64285714 0.71428571 0.78571429
0.85714286 0.92857143 1. ]'''
#使用logspace函数生成等比数列
arr5=np.logspace(0,10,5)
print(arr5)
'''输出:[1.00000000e+00 3.16227766e+02 1.00000000e+05 3.16227766e+07
1.00000000e+10]'''
#使用zeros函数生成0向量
print(np.zeros((3,4)))
'''输出:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]'''
#使用ones函数生成全是1的数组
print(np.ones((2,3)))
'''out:
[[1. 1. 1.]
[1. 1. 1.]]'''
#使用eye函数创建主对角线上全是1的数组
print(print(np.eye(4)))
'''out:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]'''
#使用diag函数指定主对角线值,list形式传值
print(np.diag([1,2,3,4,5]))
'''out:
[[1 0 0 0 0]
[0 2 0 0 0]
[0 0 3 0 0]
[0 0 0 4 0]
[0 0 0 0 5]]'''
3.随机生成数组
import numpy as np
#ramdom函数随机生成数组,reshape函数规定其为25行4列
print(np.random.random(100).reshape(25,4))
''' 部分输出:
[[0.41779031 0.31529555 0.17766244 0.72547036]
[0.95439412 0.80383632 0.41866361 0.17071668]
......
[0.06610952 0.87488625 0.85913323 0.13361665]
[0.64676173 0.31024695 0.04490706 0.23985548]]
‘''
#服从均匀分布
print(np.random.rand(5,5))
'''输出:
[[0.42083652 0.98716543 0.9742623 0.9402266 0.70753504]
[0.60180081 0.77633264 0.08107967 0.80593841 0.65563986]
[0.93934732 0.79088117 0.42302721 0.58801814 0.09153276]
[0.42432187 0.48180108 0.08489092 0.0856836 0.60130952]
[0.25887204 0.09300781 0.71942068 0.86411773 0.35567047]]
'''
#服从正态分布
print(np.random.randn(5,5))
'''输出:
[[ 1.27285675 1.45503025 0.27600984 -0.32931654 -0.78800697]
[-0.4268439 -2.16412776 -0.18753525 0.05182456 -2.13253747]
[-2.12798807 0.77489968 -0.09857475 0.7274294 -0.01992541]
[-0.96002384 0.38462981 0.60109209 1.27692944 -0.14912962]
[ 0.17716558 -1.31903088 -0.33830463 -0.0716197 1.71571588]]
'''
#给定区间生成随机数
print(np.random.randint(1,10,size=[3,3]))
'''输出:
[[7 1 4]
[8 3 5]
[5 3 1]]
'''
4.索引和切片
一维数组:
import numpy as np
arr0=np.arange(10)#[0 1 2 3 4 5 6 7 8 9]
print(arr0[2])#打印第三个数
print(arr0[2:6])#切片包括arr0[2]但是不包括arr0[6]
print(arr0[:4])#表示从arr0[0]开始,到指定arr0[3]
print(arr0[-1])#表示最后一个元素
#判断运输算
equal_to_one=(arr0==1)#返回布尔值[False True False False False False False False False False]
print(arr0[equal_to_one])#[1]
#取判断运算(&和 |)
equal_to_one_and_two=(arr0==1)&(arr0==2)
print(arr0[equal_to_one_and_two])#[] 不存在一个数,既等于1又等于2
equal_to_one_or_two=(arr0==1)|(arr0==2)
print(arr0[equal_to_one_or_two])#[1 2]
n维数组
arra=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,4)
'''[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(arra[:,3])#取第4列元素
print(arra[0,1:3])#取第0行,第1和第2列元素
print(arra[1:,1:])#取第1,2行,1,2,3列元素
print(arra.ravel())#展平数组,默认横向[ 1 2 3 4 5 6 7 8 9 10 11 12]
print(arra.flatten())#横向展平数组[ 1 2 3 4 5 6 7 8 9 10 11 12]
print(arra.flatten('F'))#纵向展平数组[ 1 5 9 2 6 10 3 7 11 4 8 12]
arra2=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,4)
print(np.hstack((arra,arra2)))
'''
[[ 1 2 3 4 1 2 3 4]
[ 5 6 7 8 5 6 7 8]
[ 9 10 11 12 9 10 11 12]]
'''
print(np.vstack((arra,arra2)))
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(np.hsplit(arra2,2))
'''
[array([[ 1, 2],
[ 5, 6],
[ 9, 10]]), array([[ 3, 4],
[ 7, 8],
[11, 12]])]
'''
print(np.vsplit(arra2,3))
'''[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]'''
5.赋值*
import numpy as np
a=np.arange(12)
b=a
b.shape=3,4
print(a.shape)
print(id(a))
print(id(b))
输出
(3, 4)
4557363120
4557363120
‘=’赋值开辟同一块储存单元,通俗来说就是名字不一样,但就是一个东西
‘view()函数’开辟不同的储存单元,但是数据共同
‘copy()函数’仅用于初始化,完全不同的两个东西
6.操作文件(不打算整理后面pandas详细介绍)
7.排序
大致介绍
1.a.sort() 对元素排序
直接进行排序,默认为升序
括号中可以传参数,axis=1表示横向排序,axis=0表示纵向排序
2. a.argsort() 对下标排序 操作基本一致
8.常用统计函数