数据分析基础
使用工具Jupyter
基本指令
1.使用?进行查询帮助
下面展示一些 内联代码片
。
len?
#??可以打印函数源码
len??
#tab可以进行代码补全,按住shift,快速按两下tab可查看函数参数提示
ipython的魔术语法
# %run + 脚本目录 ---执行脚本
# %time ---执行一次命令的时间
#%timeit ---平均时间
!dir---查看目录
Numpy基础
导包
#导入相关包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
np.__version__
读取图片
a=plt.imread('C:/Users/Desktop/1111.jpg')
a#a为ndarray类型,可以理解为矩阵
plt.imshow(a)#显示图片用matplotlib.pyplot
创建ndarray
1.使用np.array 由python list 创建
l=[1.0,2,3,4,5]
n=np.array(l)#用列表初始化ndarray
display(l)#列表
display(n)#ndarray
#注意ndarray会自动将内部数据转化为统一格式,优先级:str>float>int
2.使用np的routines函数创建
1)使用np.ones创建
np.ones(shape=(3,4),dtype=np.float32)#三行四列,元素皆为1
2)使用np.zeros创建
np.zeros(shape=(5,6),dtype=np.int16)#五行六列,元素皆为0
3)使用np.full创建
np.full(shape=(3,4),fill_value=9,dtype=np.int16)
4)使用np.eye生成对角线为1的ndarray
np.eye(5,6,k=-2)#k代表对角线上的坐标
对应产生的结果为(k代表对角线偏移量,负数代表左下,正数代表右上)
5) 使用np.linspace 创建ndarray—对某个线段等分,加上retstep返回一个元组
np.linspace(0,100,num=25,endpoint=False,retstep=True)
#endpoint即区间端点是否包含,num表示25等分
6) 使用np.arange创建ndarray
np.arange(0,100,4)
结果如下:
7)使用np.random.randint创建ndarray
np.random.randint(0,200,size=(2,3,4,3))
#各个元素为0-200的随机数
8)正态分布np.random.normal:loc为均值,scale为形状,size为ndarray的形状
np.random.normal(loc=10,scale=3,size=(1000,3))
9)标准正态分布np.random.normal
np.random.randn(2,3,4)
结果如下:
10)利用np.random.random生成0-1左闭右开的随机数
np.random.random(size=(1,2,2))
ndarray的属性
ndim维度,shape形状,size元素的个数,dtype元素类型
可直接用.调用查看,例如
n=np.random.randint(1,3,size=(3,4,5))
n.size
ndarray的基本操作
1.索引
1)先创建一个ndarray
n1=np.random.randint(0,100,size=(3,4,2))
n1
n1显示结果为:
2)进行索引
n1[1,2,0]#结果为97,注意下标从0开始,故结果为97
2.切片
1)正常切片
n1[1:3,0:1]#不同维度的切片用,分隔
结果为:
2)切片反转
#切片技巧
n1[::-1]#对第一个维度反转
n1[:,::-1]#对第二个维度反转
3.变形
先创建一个ndarray
n2=np.random.randint(0,100,size=(4,5))
n2
结果为:
现在进行reshape
n2.reshape(5,4)#要求元素总数一致
结果:
4.级联
级联类似于将两个ndarray进行横向或者纵向拼接
n1=np.random.randint(0,100,size=(4,5))
n2=np.random.randint(0,100,size=(6,5))
display(n1,n2)
np.concatenate((n1,n2),axis=0)#垂直级联
#也可以用np.hstack和np.vstack进行水平和垂直级联,这样就不需要指定axis了
结果:
5.切分
切分和切片很像,不同的是切分返回的是一个list(将ndarray放到一个list中)
n=np.random.randint(0,100,size=(6,6))
n
结果如下:
np.split(n,[2,4],axis=0)#返回一个包含ndarray的列表,[2,4]代表从2,4索引位置切开
#也可以用np.hsplit和np.vsplit进行水平和垂直级联
结果为:
ndarray的聚合操作
聚合操作和数据库的聚合操作类似,基本上就是求和、计数、取平均等等
先创建一个ndarray
n=np.random.ranint(1,10,size=(3,4))
n
1.求和
n.sum()#求所有元素总和
n.sum(axis=0)#求所有行元素总和,返回一个ndarray
n.max(axis=1)#求所有列元素总和,返回一个ndarray
2.笛卡尔积
可使用np.product()进行笛卡尔积
3.NaN说明
NaN refers to Not a Number.
NaN一般用于表示numpy,pandas里面的空数据;
如果数据中存在一个nan,则聚合结果总是nan
n3=np.array([1,2,3,np.nan,4])
n3.sum()#nan
np.nansum(n3)#将nan视为0
ndarray的矩阵操作
1.ndarray的矩阵操作
n=np.random.randint(1,10,size=(3,4))
n
结果为:
n+1#矩阵的每一个元素加一
2.广播机制(broadcast mechanism)
当运算的ndarray的shape不一样的时候,numpy就会启动广播机制,目的是让运算的两个ndarray的shape变成一样,从而可以计算
规则一:为缺失的维度补1
规则二:假定缺失元素用已有值填充
m=np.ones(shape=(2,3))
n=np.arange(3)
display(m,n)
结果为:
m+n
结果为:
array([[1., 2., 3.],
[1., 2., 3.]])
现在详细叙述其机制:
step1:m