数据分析

数据分析

numpy

创建数组

  • np.array([1,2,3])
  • np.zeros() #数组的值都是0
  • np.ones() #数组的值都是1
  • np.full((3,5),3.14) #用某个数填满数组
  • np.arange(0,20,2) #从0到20(不包含),步长为2
  • np.linspace(0,1,5) #5个数均匀分配到0~1
  • np.random.random() #在0~1均匀分布的随机数组成的数组
  • np.random.normal(0,1,(3,3)) #均值为0、方差为1的正态分布随机数数组
  • np.random.randint(0,10,(3,3)) #[0,10)之间随机整数数组
  • np.eye(3) #创建一个3*3的单位矩阵
  • np.empty(3) #创建一个由3个整数组成的未初始化的数组,数组的值是内存空间中的任意值

数组属性

  • arr.ndim #数组的维度
  • arr.shape #数组每个维度的大小
  • arr.size #数组的总大小
  • arr.dtype #数组的数据类型
  • arr.itemsize #每个元素字节大小
  • arr.nbytes #数组总字节大小

数组切片

  • arr[:5]
  • arr[5:]
  • arr[::2]
  • arr[1::2]
  • arr[:2,:3] #两行三列
  • arr[:3,::2] #所有行,每隔一列

数组拼接

  • np.concatenate([arr1,arr2]) #沿着第一个轴拼接
  • np.concatenate([arr1,arr2],axis=1) #沿着第二个轴拼接
  • np.vstack([arr1,arr2]) #垂直栈数组
  • np.hstack([arr1,arr2]) #水平栈数组
  • np.dstack([arr1,arr2]) #沿着第三维度拼接数组

数组分裂

  • np.split(arr,[3,5]) #第二个参数为分裂点
  • np.vsplit(arr,[2]) #同上
  • np.hsplit()
  • np.dsplit()

通用函数

  • np.add +
  • np.subtract -
  • np.negative #负数
  • np.multiply *
  • np.divide /
  • np.floor_divide //
  • np.power **
  • np.mod %
  • np.abs #绝对值
  • np.sin
  • np.cos
  • np.tan
  • np.arcsin
  • np.arccos
  • np.arctan
  • np.log
  • np.log2
  • np.log10

聚合函数

  • np.add.reduce #所有元素的和
  • np.add.accumulate #中间结果
  • 子主题 3
  • np.sum | arr.sum
  • np.min | arr.min
  • np.max | np.max
  • np.prod #积
  • np.mean #平均值
  • np.std #标准差
  • np.var #方差
  • np.argmin #最小值的索引
  • np.argmax #最大值的索引
  • np.median #中位数
  • np.any
  • np.all

广播规则

  • 规则一:如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1
  • 规则二:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另外一个数组的形状
  • 规则三:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常

数组排序

  • np.sort(arr) | arr.sort() #快速排序
  • np.argsort() #返回索引值
  • np.partition(arr,3) #部分排序:分隔,比3小的在左边,大的在右边

分支主题 10

pandas

Series

  • pd.Series(data,index=index)
  • pd.Series(5,index=[100,200,300])
  • dp.Series({2:”a”,3:”b”,1:”c”})

DataFrame

  • pd.DataFrame(data,index=[],columns=[])

Index

  • 将Index看做不可变数组
  • 将Index看做有序集合

Series的选择方法

  • 取值是显示索引
  • 切片是隐式索引
  • loc表示取值和切片都是显示索引
  • iloc表示取值和切片都是隐式索引

DataFrame的选择方法

  • ix是iloc和loc混合,容易混淆

运算映射

    • add()
    • sub()/subtract()
    • mul()/multiply()
  • / truediv()/div()/divide()
  • // floordiv()
  • % mod()
  • ** pow()

处理缺失值

  • None:python对象类型的缺失值
  • NaN:数值类型的缺失值 数据同化 特殊的浮点数
  • isnull() 创建一个布尔类型的掩码标签缺失值
  • notnull() 与isnull()操作相反
  • dropna(axis=1/“columns”,how=”any/all”,thresh=3) 返回一个剔除缺失值的数据 thresh用来设置行或列中非缺失值的最小数量
  • fillna(method=”ffill/bfill”,axis=1) 返回一个填充了缺失值的数据副本

层级索引

  • pd.MultiIndex.from_arrays([[‘a’,’a’,’b’,’b’],[1,2,1,2]])
  • pd.MultiIndex.from_tuples([(‘a’,1),(‘a’,2),(‘b’,1),(‘b’,2)])
  • pd.MultiIndex.from_product([[‘a’,’b’],[1,2]])
  • sort_index()
  • stack() 多级索引->二维
  • unstack(level=1) 二维->多级索引

合并数据集

  • pd.concat()

    • 参数

      • verify_integrity=True合并时若有索引重复就会触发异常
      • ignore_index=True合并时会创建一个新的整数索引
      • key=[‘x’,’y’]增加多级索引
      • join=”inner/outer”
      • join_axes=[]设置结果使用的类名
  • append() 和concat()实现效果一致,不过append()为合并后的数据创建一个新对象

  • merge()

    • 类型

      • 一对一
      • 多对一
      • 多对多
    • 参数

      • on
      • left_on/right_on
      • left_index/right_index
      • how=”inner/outer/left/right”
      • suffixes=[]自定义后缀名

累计与分组

  • 累计

    • count()计数项
    • first()、last()第一项和最后一项
    • mean()、median()均值和中位数
    • min()、max()
    • std()、var()标准差和方差
    • mad()均值绝对偏差
    • prod()所有项乘积
    • sum()所有项求和
  • GroupBy:分割、应用、和组合

    • df.groupby(‘key’).sum()
  • 累计、过滤、转换和应用

    • df.groupby(‘key’).aggregate([“min”,np.median,max])
    • df.groupby(‘key’).filter(…)
    • df.groupby(‘key’).transform(lambda x:x - x.mean())
    • apply()可以在每个组上应用任意方法

数据透视表

  • df.pivot_table(value=’’,index=’’,columns=’’)

处理时间序列

  • pd.DatetimeIndex([‘2014-07-04’,’…’,’…’])

  • pd.to_datetime([‘2021-06-24’,’…’,’…’])

  • dates.to_period(‘D’)

  • pd.date_range() 处理时间戳,默认频率是天,freq=’D’

  • pd.period_range() 处理周期

  • pd.timedelta_range() 处理时间间隔

  • pandas频率代码

    • D 天
    • W 周
    • M 月末
    • Q 季末
    • A 年末
    • H 小时
    • T 分钟
    • S 秒
    • L 毫秒
    • U 微秒
    • N 纳秒
    • B 天
    • BM 月末(仅含工昨日)
    • BQ 季末(仅含工昨日)
    • BA 年末(仅含工昨日)
    • BH 小时(工作时间)

matplotlib

两种画图接口

  • matlab风格接口

    • plt.subplot(2,1,1)
  • 面向对象接口

    • fig,ax=plt.subplots(2)
      ax[0].plot()

简易线形图

  • fig=plt.figure() 图形
    ax=plt.axes() 坐标轴
  • x=np.linspace(0,10,1000)
    ax.plot(x,np.sin(x))
  • plt.plot(x,np.sin(x),color=’blue’) 线条颜色
  • plt.plot(x,np.sin(x),linestyle=’-/–/-./:’) 线条风格
  • plt.plot(x,x,’–g’)
  • plt.xlim(-1,11) 坐标轴上下限
    plt.ylim(-1,1)
  • plt.axis([-1,11,-1,1]) 一键设置上下限
  • plt.axis(‘tight’) 按照图形的内容自动收紧坐标轴
  • plt.title() 设置标题
  • plt.xlabel(“x”) 设置x/y轴标签
    plt.ylabel(“…”)
  • plt.plot(x,np.sin(x),label=”x”)
    plt.legend()

简易散点图

  • plt.plot(x,y,’o/./,/x/+/v/^/</>/s/d’)
  • plt.scatter(x,y,maker=’o’,c=colors,s=sizes,alpha=0.3)
    plt.colorbar() 显示颜色条

直方图

  • plt.hist(x)

柱状图

  • plt.bar(x,y,width=1)
  • plt.pie(x,labels=[…])