Python数据分析基础技术之Numpy

30 篇文章 8 订阅

数据就是第一生产力,不以数据基础的决策都是耍流氓都,以下会系统地介绍使用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常见用法(点击进入

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值