数据就是第一生产力,不以数据基础的决策都是耍流氓都,以下会系统地介绍使用Python进行数据分析的基本模块。介绍的模块主要为六个:numpy、scipy、matplotlib、pandas、scikit-learn、keras
数据分析的含义:使用统计分析方法,从中提取有用的信息,来进行研究、概括、总结等工作
Python具有简洁、开发效率高、运行速度慢、胶水特性的特点,适合用于数据分析工作
数据分析大家族有:
python 科学计算工具:Anaconda
numpy:数据结构基础
scipy:强大的科学计算方法(矩阵分析、信号分析、数理分析…)
matplotlib:丰富的可视化套件(三维图、饼图、可视图等)
pandas:基础数据分析套件(表)
scikit-learn:强大的数据分析建模库(回归分析 、聚类分析)
keras:人工神经网络
一、numpy
官网:http://www.numpy.org/ 有最全面的阅读资料(教程等)
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
——一个强大的N维数组对象 ndarray
——广播功能函数
——整合 C/C++/Fortran 代码的工具
——线性代数、傅里叶变换、随机数生成等功能.
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
1. numpy中的数据类型
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。下表列举了常用 NumPy 基本类型。
bool_——布尔型数据类型(True 或者 False)
int_ ——默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc ——与 C 的 int 类型一样,一般是 int32 或 int 64
intp——用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8——字节(-128 to 127)
int16—— 整数(-32768 to 32767)
int32—— 整数(-2147483648 to 2147483647)
int64 ——整数(-9223372036854775808 to 9223372036854775807)
uint8 ——无符号整数(0 to 255)
uint16—— 无符号整数(0 to 65535)
uint32 ——无符号整数(0 to 4294967295)
uint64 ——无符号整数(0 to 18446744073709551615)
float_—— float64 类型的简写
float16 ——半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32—— 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64—— 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128—— 类型的简写,即 128 位复数
complex64 ——复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 ——复数,表示双 64 位浮点数(实数部分和虚数部分)
2. ndarray(数组对象)
python 中的 list 可以放多种类型,numpy 底层是 C 写的,为了达到运算速度,我们要求他只能装下一种类型,可以定义他只能装的数据类型。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
举例:
import numpy as np #为了便于写代码,后面的numpy都简写成np
a1 = np.array([1,2,3])
a2 = np.array([[1, 2], [3, 4]])
np.array([1, 2, 3,4,5], ndmin = 2)
a4 = np.array([1, 2, 3], dtype = complex)
print(a1,a2,a3,a4)
输出结果 :
>>[1, 2, 3]
>>[[1, 2]
[3, 4]]
>>[[1, 2, 3, 4, 5]]
>>[ 1.+0.j, 2.+0.j, 3.+0.j]
相关方法:
np.shape 显示np数组属性
np.ndim 表示数组维度
np.dtype表示数组元素类型(如:int8,in16,float64等)
np.itemsize表示数组元素所占字节大小,如float64占字节8位
np.size表示数组元素个数
3. 常用数组Array
np.zeros([2, 4]) #全0数组
np.ones([3, 5]) #全1数组
np.random.rand(2, 4) #均匀分布随机数组
np.random.rand() #一个随机数
np.random.randint(1, 10, 5) #在1到10之间生成5个随机数
np.random.randn(2, 3) #标准正态随机数
np.random.choice([2, 3]) #数组中随机选择一个
np.random.beta(2, 3, 5) #beta分布
4. numpy常用操作(operation)
对于二维矩阵而言, sum函数里面的axis是指定行或者列,axis=0的话是按列求和, axis=1是按行求和,如果没有axis参数的话就是全部元素求和,更高维度的矩阵的话axis可以看成指定的是维度
常用array操作1:
#有这样一个数组
lst=numpy.array([[[1,2,3,4],[4,5,6,7]],
[[7,8,9,10],[10,11,12,13]],
[[14,15,16,17],[18,19,20,21]]
])
#这是个3维,arr[3][2][4]数组
#求和:
print(lst.sum()) #结果为252
#如果用了axis这个参数(axis最大值 = 维数-1)
若axis为0:
则sum结果是
[[22 25 28 31]
[32 35 38 41]]
即对lst第一维数组坐标不同,其他维坐标相同的值求和。生成除去了第一维的数组(这里结果是arr[2,4])
若axis为1:
sum结果是:
[[ 5 7 9 11]
[17 19 21 23]
[32 34 36 38]]
是arr[3][4]数组,明显,第二维去掉了,arr[3][4]这个结果数组中,每个数是之前的第二维作为变量求得的和
若axis为2:
sum为:
[[10 22]
[34 46]
[62 78]]
numpy.array生成的数组的max,min方法也有axis这个参数,且也有这个属性。
list.max(axis=0)) # 最外层元素中的最大元素值
list.min(axis=0)) # 最外层元素中的最小元素值
常用array操作2:
list1 = (np.arange(1, 11)) #产生一个1-11(不含11)的等差数列
list2 = (np.arange(1, 11)).reshape([2, 5]) # 变成两行五列数组
np.exp(list) # list 的自然指数
np.exp2(list) # list 的自然指数的平方
np.sqrt(list) # list 的开方
np.square(list) # list 的平方
np.sin(list) # list 的正弦值
np.log(list) # list 的对数值
np.concatenate((list1, list2), axis=dim) #按维度连接,axis 就是维度
np.vstack((list1,list2)) #将两个数组分成两行组成一个数组也就是以行连接,注意传的是个tuple
np.hstack((list1,list2)) #将两个数组相连组成一个一维数组,传的是tup
np.split(list1,n) #将数组 list1 切分成n个子数组
np.copy(list1) #对数组进行拷贝
5. numpy矩阵操作与线性方程组
需要导入模块:
from numpy.linalg import *
基础操作:
np.eye(3) #创建一个3行3列的单位矩阵
inv(array) #求逆矩阵
det(array) #求行列式值
eig(array) #特征向量及特征值
array.transpose() #array矩阵的转置
solve(A, B) #求解AX=B
6. numpy其他应用
生成一元多次函数:
np.poly1d([3,1,3] #返回3x^2+1x+3
皮尔逊相关系数计算:
np.corrcoef([1, 0, 1],[0, 2, 1])
阶跃响应求解:
np.fft.fft(np.array([1,1,1,1,1,1,1,1]))
Numpy基础知识与操作就到这里,接下来我们来一起了解Matplotlib常见用法(点击进入)