数据分析3大工具NumPy,Matplotlib,Pandas总结

数据分析3大工具NumPy,Matplotlib,Pandas总结

汇总了所有常用的相关知识点

目录

  • 数据分析3大工具NumPy,Matplotlib,Pandas总结
  • 数据分析常用包学习
    • matplotlib
      • 绘制折现图
      • 绘制散点图
      • 绘制条形图
      • 绘制直方图
    • numpy
      • 创建数组
      • 数组的形状
      • 数组的计算
      • 轴的概念
      • 从文件中读取数据(一般不用,因为pandas模块提供了更好用的API)
      • numpy中的转置
      • 索引和切片
      • 数组的拼接
      • 数组的行列交换
      • ndarray常用函数
      • numpy常用方法
      • numpy生成随机数
      • numpy的注意点copy和view
      • numpy中nan的注意点
      • 数据类型操作
    • pandas
      • pandas介绍
      • 基本操作
      • 运算
      • 画图(一般还是用matplotlib画图)
      • IO操作
      • Pandas高级数据处理

数据分析常用包学习

matplotlib

绘制折现图

  • plt.plot绘制折线图

    • from matplotlib import pyplot as plt
  • 设置图形大小

    • plt.figure(figsize=(width,height),dpi=指定像素)
  • 绘图

    • plt.plot(x,y)
      • x:所有的坐标的x的值
      • y:所有坐标的y的值
  • 调整x(y)轴的刻度

    • plt.xticks()

      • 调整间距

        • 传一个参数(包含数字的可迭代对象),步长合适即可
      • 添加字符串到x/y轴

        • 传入两个参数,分别是两个可迭代对象,数字和字符串最终会一一显示

          plt.xticks(_x[::5], _xtick_labels[::5]  
          
  • 展示

    • plt.show()
  • 保存

    • plt.savefig(“file_path”)
  • 显示中文

    • matplotlib.rc

      • 设置字体为SimHei显示中文  
        plt.rcParams['font.sans-serif'] = 'SimHei'  
        
    • font-manager

      • from matplotlib import font_manager

      • my_font=font_manager.FontProperties(fname=“tf文件路径”)

      • 使用my_font

        • 要显示中文的地方添加fontproperties=my_font

        • 图例中使用prop=my_font接受

          • 有时侯还是没用,可以通过这种形式来定义:

            plt.legend([p3, p5], ['3月', '5月']  
            
  • 一个图中绘制多个图形

    • plt.plot()调用多次

    • 图例

      • 展示当前这个图形到底是谁

        1. plot(label=‘自己’)
        1. plot.legend(loc,prop)
        • Loc表示的是图例的位置
  • 图形的样式

    • color
    • linestyle
    • linewidth
  • 添加图形的描述

    • plt.xlabel()
      • x轴的标签
    • plt.ylabel()
    • plt.title
  • 网格

    • plt.grid(alpha=0.4,linestyle=)
      • alpha:0~1内的小数,指定网格线的透明度
  • 设置坐标轴范围

    • plt.ylim((start,end))
    • plt.xlim((start,end))
  • 设置坐标轴方向(逆向)

    • plt.gca().invert_xaxis()

绘制散点图

  • plt.scatter()绘制散点图

绘制条形图

  • plt.bar
    • 线条粗细通过width来设置
  • plt.barh :绘制横着的条形图
    • 线条粗细由height来设置

绘制直方图

  • plt.hist(原数据,分组个数) 绘制频数直方图
    • 添加参数normed=True可以绘制频率直方图
  • 典型应用场景
    • 统计用户的年龄分布状态
    • 一段时间内用户点击次数的分布状态
    • 用户活跃时间的分布状态
    • 电商平台的产品销售分布状态
  • 组数的计算
    • (最大值-最小值)/组距
    • 组距的选择
      • 根据数据的实际情况选择,一般分为20组左右
    • 最好能够被整除,否则会发生偏移

numpy

创建数组

  • np.arange([start,]stop[,step,],dtype=None)
    • np.arange(10)
    • np.arange(0,10,2)
    • np.arange(0,12,3,dtype=int32)
      • 通过dtype可以指定数组中元素的数据类型
        • 修改数组的数据类型
          • dnarray.astype(np.int32)
        • 修改浮点型的小数位数
          • np.round(ndarray,2) # 小数点后两位
  • np.array
    • np.array([1,2,3,])
    • np.array(range(10))
    • np.array([1,1,0,0,1,0],dtype=bool)
    • np.array([random.random() for i in range(10)]) 使用列表推导式创建数组

数组的形状

  • 查看形状:ndarray.shape
  • 修改形状
    • 指定形状 ndarray.reshape()
      • 参数为(z,x,y)
      • reshape不是原地操作,返回一个新的数组而不对原数组做改变
    • 打平操作 ndarray.flatten()

数组的计算

  • 数组与数组的计算
    • 广播
      • 原则:两个数组的后缘维度的轴长相符或者其中一方的长度为1,则认为它们是广播兼容的
        • t4 = np.arange(27).reshape(3,3,3)
          t5 = np.arange(6).reshape(3,2)
          因为t4的后缘维度是3,t5是的后援维度是2,所以是不符合广播的机制的

        • shape为(3,3,2)的数组可以与(3,2)的数组进行计算

        • 快速理解广播的原则,画图,看三维立体图能不能由另一个二维图形延展得到

  • 数组与数字的计算
    • 数字会与数组中的每一个元素进行数值计算操作

轴的概念

  • 对于二维数组(shape(2,2)),有0轴(横向)和1轴(纵向)
  • 对于三维数组(shape(2,2,2)),有0(数据块轴,即z轴方向),1,2轴(分别对应具体数据块的横轴和纵轴)

从文件中读取数据(一般不用,因为pandas模块提供了更好用的API)

  • np.loadtxt(frame,dtype=np.float,delimiter=None,skiprow=0,usecols=None,unpack=False)
    • 如果unpack=True,而且只有一个列表变量接收解包的结果,那么相当于对原数组进行转置
    • delimiter:指定文件中每行数据的分隔符,不指定会导致每行数据为一个整体的字符串而保存
    • dtype:默认情况下对于较大的数据会将其变为科学计数的方法,可以手动指定其为ndarray的一些常用数据个数

numpy中的转置

  • ndarray.transpose()
  • ndarray.T
  • ndarray.swapaxes(1,0)

索引和切片

  • 切片取值操作,在Python列表的切片操作一样,只是多了一个维度
    • 取行
      • ndarray[2] 取到第三行的数据
      • ndarray[2:]取第3行~最后一行的连续多行数据
      • ndarray[[2,8,10]] 取不连续的多行数据,注意有两个方括号
    • 取列
      • ndarray[:,2] 取到第三列的数据
      • ndarray[:,2:] 取连续的多列
      • nadarray[:,[0,2]] 取不连续的多列
    • 取行+取列
      • ndarray[3,4] 取第三行第四列的标量值# 通过逗号区分轴
      • ndarray[2:4,3:5] 取35行,46列(行列子式),交叉位置
      • ndarray[[0,2],[0,3]] 取多个不相邻的点(0,0)(2,3)
  • 布尔索引来筛选修改数组元素值
    • ndarray<10 会得到一个bool数组,其中对应原数组的位置的元素如果大于10为True,否则为False
    • ndarray[adarray<10] 会得到一个将原来数组中小于10的元素并放到新数组(一维)后返回。
  • numpy的三元运算符np.where()
    • np.where(t<10,0,10) 将数组t中小于10的元素赋值为0,否则赋值为10
  • ndarray.clip 裁剪数组
    • t.clip(10,18) 将数组t中小于10的元素替换为10,大于18的元素替换为18,对NaN元素不作修改

数组的拼接

  • np.vstack((arr1,arr2)) 竖直拼接
  • np.hstack((arr1,arr2)) 水平拼接

数组的行列交换

  • 行交换
    • arr[ [1,2] , :] = arr[ [2,1] , : ]
  • 列交换
    • arr[ :, [1,2]] = arr[ :, [2,1] ]

ndarray常用函数

  • 求和:t.sum(axis=None)
    • axis=0 计算的是行与行间sum的结果
    • axis=1 计算的是列与列之间sum的结果
  • 均值:t.mean(a,axis=None) 受离群点的影响较大
  • 中值:np.median(t,axis=None)
  • 最大值:t.max(axis=None)
  • 最小值:t.min(axis=None)
  • 极值:np.ptp(t,axis=None) 即最大值和最小值之差
  • 标准差:t.std(axis=None)

numpy常用方法

  • 1.获取最大值最小值的位置
    * np.argmax(t,axis=0)
    * np.argmin(t,axis=1)

  • 2.创建一个全0的数组: np.zeros((3,4))

  • 3.创建一个全1的数组:np.ones((3,4))

  • 4.创建一个对角线为1的正方形数组(方阵):np.eye(3)

numpy生成随机数

  • np.random.rand(d0,d1,…dn)
    • 创建d0dn维度的均匀分布的随机数数组,浮点数,范围01
  • np.random.randn(d0,d1,…dn)
    • 创建d0~dn维度的标准正态分布随机数,浮点数
  • np.random.randint(low,high,(shape))
    • 从给定上下限范围选取随机数整数,范围是low,high,形状是shape
  • np.random.uniform(low,high,(size))
    • 产生具有均匀分布的数组,low起始值,high结束值,size形状
  • np.random.normal(loc,scale,(size))
    • 从指定正态分布中随机抽取样本,分布中心是loc(均值),标准差是scale,形状是size
  • np.random.seed(s)
    • 随机数种子,s是给定的种子值。因为计算机生成的是伪随机数,所以通过设定相同的随机数种子每次可以得到相同的随机数

numpy的注意点copy和view

  • a=b 完全不复制,a和b相互影响
  • a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
  • a = b.copy(),复制,a和b互不影响

numpy中nan的注意点

  • 两个nan是不相等的
    • np.nan!=np.nan --> True
  • 判断nan的个数
    • np.count_nonzero(t!=t)
  • 判断某个数字是否为nan
    • np.isnan(t)
  • 把nan替换为0
    • t[np.isnan(t)]=0
  • nan和任何值计算都为nan
    • 所以大多数时候都把nan替换为其所在行(列)的均(中)值

数据类型操作

  • 变量的类型:numpy.ndarray
  • 数据的类型:int8,float32bool等
  • 调整数据类型:ndarray.astype(“int32”)
  • 保留小数
    • python中,round(2,134123,2)
    • numpy中,np.round(ndarray,2)

pandas

pandas介绍

  • 为什么使用Pandas
    • 便捷的数据处理能力
    • 集成了NumPy,Matplotlib
    • 读取文件方便
  • Series
    • 结构:带索引的一维数组
    • 属性
      • index
      • values
  • DataFrame
    • 结构:带索引的二维数组
      • DataFrame的单独的行和列本质上都是Series
    • 属性
      • shape:形状
      • index:索引(即row key)
      • columns
      • values
      • T 转置
      • dtype
    • 常用方法
      • head(n)
      • tail(n)
      • describe() 快速综合统计结果:计数,均值,标准差std等
      • info() 相关信息概述,包括行列数,索引,类型等
    • 索引设置
      • 修改指定行索引:df.index=list(“abc”)
      • 重设索引:df2 = df1.reindex([“one”,“two”,“xxx”])
        • reindex–非原地操作,相当于从df1取了index==one和two的所在行赋值给df2,其中xxx在df1中没有找到该索引,所以用NaN填充xxx索引所在行
      • 设置索引:df.set_index()
        • 把当前DataFrame的某一列作为索引,创建一个新DataFrame返回
    • 注意事项
      • 在pandas里面取行或者取列的注意事项
        • 方括号内写数字,表示取行,对行进行操作
        • 写字符串,表示的是取列索引,对列进行操作
  • Panel 带Multiindex的DataFrame

基本操作

  • 索引操作
    • 直接索引(先列后行)
    • df.loc 按名字获取索引
    • df.iloc 按数字(坐标)进行索引
    • df.ix 组合索引
    • 复合索引
      • 从复合索引中取值
        • 在DataFrame的复合索引取值,需要使用loc来告诉pandas我们是通过index来取值
          • df.loc[“a”].loc[“b”]
        • 在Series的复合索引取值,直接在括号中写索引就可以了
          • s1[“a”][“b”]
          • s1[“a”,“b”]
      • 从里层索引开始选择
        • df.swaplevel():交换里外层索引的位置
  • 赋值操作
  • 排序
    • 内容sort_values()
    • 索引sort_index()

运算

  • 算术运算
  • 逻辑运算
    • 逻辑运算符
      • 与&
      • 或|
    • 布尔索引
      • df[df[“Count_Person_Name”]>800] 获取人名使用次数大于800的数据
    • 函数
      • query("")
      • isin()
  • 统计运算
    • 获取综合统计指标
      • df.describe()
    • 具体统计指标
      • min max std 注意axis的设置
      • idmax, idmin(argmax,argmin)
    • 累计统计指标
      • cum()
  • 自定义运算
    • df.apply(func,axis=)

画图(一般还是用matplotlib画图)

  • df.plot()
  • sr.plot()

IO操作

  • csv
    • pd.read_csv(file_path)
      • usecols
      • names
    • df/sr.to_csv(file_path)
      • columns
      • index
      • header
      • mode
  • hdf5
    • pd.read_hdf(path,key=)
    • df.to_csv(path,key=)
  • json
    • pd.read_json(path)
      • records
      • lines
    • df.to_csv(path)
      • records
      • lines

Pandas高级数据处理

  • 缺失值处理
    • 缺失值是NaN类型
      • 判断是否存在np.nan缺失值
        • pd.isnull(df).any()
        • pd.notnull(df).all()
      • 两种思路
        • 删除df.dropna()
        • 替换 sr/df.fillna(value,inplace=) inplace=true,则原地操作
    • 缺失值是其他默认符号
      • 替换df.replace(to_replace="?",value=np.nan)
      • 按照处理nan的步骤
  • 数据离散化
    • 分组
      • 自动分组pd.qcut(data,bins)
      • 自定义分组pd.cut(data,bins)
    • 转换
      • pd.get_dummies(分好组的数据,predix=)
    • 把字符串离散化
        1. 获取字符串的去重后列表(unique,set)
        1. 构造全为0的数组,columns为字符串的列表
        1. 给全为0的数组赋值,遍历
  • 合并
    • 按方向合并
      • pd.concat((a,b),axis=)
    • 按索引index合并
      • join:默认情况下他是把行索引相同的数据合并到一起
        • df1.join(df2)
    • 按列columns合并
      • merge:按照指定的列把数据按照一定的方式合并到一起
        • df1.merge(df2,how=“inner”,on=[索引列表]) 内连接
        • df1.merge(df2,how=“outter”,on=[索引列表]) 并集
        • df1.merge(df2,how=“left”,on=[索引列表]) 以df1为准,即左外连接
        • df1.merge(df2,how=“right”,on=[索引列表]) 以df2为准,即右外连接
        • df1.merge(df2,left_on=“a”,right_on=“b”,how=“right”)
  • 交叉表与透视表
    • pd.crosstab(value1,value2)
    • pd.pivot_table([字段],index=)
  • 分组与聚合
    • dataframe.groupby(by=[分组键]).聚合函数()
      • df.groupby(by="") 得到groupby对象
        • 能够调用聚合方法
        • 能够遍历
      • df.groupby(by=“Country”).mean()
      • df.groupby(by=“Country”).count()
      • df.groupby(by=[“Country”,“City”]).count() 带复合索引的DataFrame
    • series.groupby(sr).聚合函数

你可能感兴趣的:(python,数据分析,numpy,机器学习)