zoukankan      html  css  js  c++  java
  • <数据分析>Numpy和pandas学习

    0.前言

    • NumPy是什么?Numerical Python(数值型Python)
      • 一个开源的Python科学计算库
    • 使用NumPy可以干什么?
      • 可以使用数组和矩阵
      • 一些数学函数
        • 线性代数运算
        • 傅里叶变换
        • 随机数的生成  
    • NumPy的由来:1995年提出--2001年启动---2005正式整合--2006年发布1.0版本。
    • 为什么使用NumPy?可以直接操作数组和矩阵,编写起来更轻松,且数学函数众多。
    • NumPy中数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构(如嵌套的list容器),只是通用性没有原生的Python容器好。
    • NumPy的大部分代码都是用C语言写成的,这使得NumPy比纯Python代码高效得多。
    • 局限性:Jython运行在Java虚拟机上,无法调用NumPy,因为大部分NumPy模块是用C语言实现的。
    • 支持的数据类型
      •   

    1.科学计算工具Numpy

    • 例子1:向量加法(数学上的一位数组)
      • 题目:向量a是0-n的整数的平方、向量b是0-n的整数的立方---->n=3  a:0、1、4   b:0、1、8
      • python的写法
        • def pythonsum(n):
              a = [i for i in range(n)]
              b = [i for i in range(n)]
              c = []
              for i in range(len(a)):
                  a[i] = i ** 2
                  b[i] = i ** 3
                  c.append(a[i] + b[i])
              return c
          
          
          c = pythonsum(1000)
          print(c)
      • Numpy的写法

        • import numpy as np
          
          
          def numpysum(n):
              a = np.arange(n) ** 2
              b = np.arange(n) ** 3
              c = a + b
              return c
          
          
          c2 = numpysum(1000)
    • 1、ndarray 多维数组(N Dimension Array)

      • ndarray的下标从0开始,且数组里的所有元素必须是相同类型

      • ndarray拥有的属性

        • ndim属性:维度个数

        • shape属性:维度大小
        • dtype属性:数据类型    

      • 例子:ndarray随机创建用来生成随机数据
        • # 1.导入numpy,别名np
          import numpy as np
          
          # 2.生成指定维度大小的随机多维浮点型数据(3行4列)
          arr = np.random.rand(3, 4)
          # <class 'numpy.ndarray'>
          print(arr, type(arr))
          # 3.生成指定维度大小(3行4列)的随机多维整型数据(二维),randint()可以指定区间(-1, 5)
          arr1 = np.random.randint(-1, 5, size=(3, 4))  # 'size='可省略
          print(arr1, type(arr1))
          # 4.生成指定维度大小(3行4列)的随机多维浮点型数据(二维),uniform()可以指定区间(-1, 5)
          arr2 = np.random.uniform(-1, 5, size=(3, 4))
          print(arr2, type(arr2))
          # 5.三个属性:维度个数、维度大小、数据类型
          print(
              '维度个数(几维):', arr.ndim,
              '维度大小(几行几列):', arr.shape,
              '数据类型:', arr.dtype,
          )
    • ndarray的序列创建

      • import numpy as np
        
        # 1.np.array(collection)
        # collection 为 序列型对象(list)、嵌套序列对象(list of list)。
        lis = range(10)
        lis_lis = [range(10), range(10)]
        arr = np.array(lis)
        arr_arr = np.array(lis_lis)
        print(arr, arr_arr, type(arr), type(arr_arr))
        print(arr.ndim, arr.shape)
        print(arr_arr.ndim, arr_arr.shape)
        # 2.np.zeros 指定大小的全0数组。注意:第一个参数是元组,用来指定大小,如(3, 4)。
        lis1 = np.zeros((3, 4))
        print(lis1)
        # 3.np.ones() 指定大小的全1数组。注意:第一个参数是元组,用来指定大小,如(3, 4)。
        lis2 = np.ones((3, 4))
        print(lis2)
        # 4.np.empty()  初始化数组,不是总是返回全0,有时返回的是未初始的随机值(内存里的随机值)。
        # np.empty 指定数据类型
        lis3 = np.empty((3, 4), int)
        print(lis3)
        # 5.np.arange() 和 reshape()
        # arange() 类似 python 的 range() ,创建一个一维 ndarray 数组。
        lis4 = np.arange(15)
        print(lis4)
        # reshape() 将重新调整数组的维数。
        lis5 = lis4.reshape(3, 5)
        print(lis5)
        lis6 = lis4.reshape(1, 3, 5)
        print(lis6)
        # 6.ndarray的数据类型 dtype参数和astype方法
        # 初始化3行4列数组,数据类型为float64
        lis7 = np.zeros((3, 4), dtype=np.float64)
        print(lis7)
        # astype转换数据类型,将已有的数组的数据类型转换为int32
        lis8 = lis7.astype(np.int32)
        print(lis8)
    • ndarray的矩阵运算

      • import numpy as np
        
        # 1.矢量运算:相同大小的数组间运算应用在元素上
        # 数组内元素相乘
        lis = np.array([[1, 2, 3],
                        [4, 5, 6]])
        # 表示所有元素按索引对应相乘
        lis1 = lis * lis
        print(lis1)
        
        # 矩阵相加
        lis2 = lis + lis
        print(lis2)
        
        # 2.矢量和标量运算:"广播" - 将标量"广播"到各个元素
        # 1除以lis内每个元素
        lis3 = 1. / lis
        # 2乘以lis内每个元素
        lis4 = 2. * lis
        print(lis3)
        print(lis4)
        
        # 3.ndarray的索引与切片
        #  一维数组的索引和切片,同list
        
        lis5 = np.arange(10)
        print(lis5[2:5])
        
        # 多维数组的索引和切片
        
        lis6 = np.arange(12).reshape(3, 4)
        print(lis6[1])
        print(lis6[0:2, 2:])  # 逗号前面代表维度,逗号后面代表每个维度的切片
        print(lis6[:, 1:3])
        
        # 条件索引
        # 注意,多个条件组合要使用 & | 连接,而不是Python的 and or。
        lis7 = np.random.rand(3, 3)
        year_lis7 = np.array([[2000, 2001, 2000],
                              [2005, 2002, 2009],
                              [2001, 2003, 2010]])
        is_year_after_2005 = year_lis7 >= 2005  # 如果满足条件就返回True,反之False
        print(is_year_after_2005)
        filterd_arr = year_lis7[is_year_after_2005]
        # 直接写条件也一样
        filterd_arr1 = year_lis7[year_lis7 >= 2005]
        
        print(filterd_arr)
        print(filterd_arr1)
        
        # 多个条件
        filterd_arr2 = year_lis7[(year_lis7 <= 2005) & (year_lis7 % 2 == 0)]
        print(filterd_arr2)
        
        # 4.ndarray的维数转换:数组的转置
        # 二维数组直接使用转换函数:transpose()
        lis8 = np.random.rand(2, 3)
        print(lis8)
        print(lis8.transpose())
        # 多维
        lis9 = np.random.rand(2, 3, 4) # 2x3x4 数组,2对应0,3对应1,4对应3
        print(lis9)
        print(lis9.transpose((1, 0, 2))) # 根据维度编号,转为为 3x2x4 数组
    • ndarray的元素处理

      • import numpy as np
        
        # 1.元素计算函数
        # randn()返回具有标准正态分布的序列
        lis = np.random.randn(2, 3)
        print(lis)
        
        # 向上取整
        print(np.ceil(lis))
        # 向下取整
        print(np.floor(lis))
        # 四舍五入 -0.5 变成 -1
        print(np.rint(lis))
        # 判断元素是否不是一个数字:是数字False 不是Ture  Not a Number
        print(np.isnan(lis))
        # 元素相乘:对应元素相乘
        print(np.multiply(lis, lis))
        # 元素相除
        print(np.divide(lis, lis))
        # 元素的绝对值
        print(np.abs(lis))
        # 元素操作的三元运算符  三元运算符,x if condition else y
        print(np.where(lis > 0, 1, -1))
        
        # 2.元素统计函数
        # 所有元素的平均值
        print(np.mean(lis))
        # 所有元素的和
        print(np.sum(lis))
        # 按照行统计
        print(np.sum(lis, axis=1))
        # 按照列统计
        print(np.sum(lis, axis=0))
        # 所有元素的最大值和最小值
        print(np.max(lis))
        print(np.min(lis))
        # 所有元素的标准差和方差
        print(np.std(lis))
        print(np.var(lis))
        # 最大下标索引和最小下标索引
        print(np.argmax(lis))
        print(np.argmin(lis))
        # 返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,
        print(np.cumsum(lis))
        print(np.cumprod(lis))
        
        # 3.元素判断函数
        # 至少有一个元素满足返回Ture,  OR
        print(np.any(lis > 0))
        # 所有元素满足才返回Ture, AND
        print(np.all(lis > 0))
        
        # 4.元素去重排序函数
        # 找到唯一值并返回排序结果
        arr = np.array([[1, 2, 1], [2, 3, 4]])
        print(arr)
        
        print(np.unique(arr))

    02.数据分析工具Pandas 

    • 什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis)。
      • Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构 和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。 

    • Pandas能做什么?
      • 一个强大的分析和操作大型结构化数据集所需的工具集

      • 基础是NumPy,提供了高性能矩阵的运算

      • 提供了大量能够快速便捷地处理数据的函数和方法

      • 应用于数据挖掘,数据分析

      • 提供数据清洗功能

    • Pandas的数据结构
      • Pandas有两个数据结构:Series 和 DataFrame

      • Series 类似链表,索引在前,数据在后

        •   

                  

                       

  • 相关阅读:
    01 React快速入门(一)——使用循环时对于‘key’报错处理
    01 div实现浮动效果
    17 制作热力图
    16 ArcGIS Server 10.6.1发布影像服务
    虚拟机上有关于Apache服务基于主机名@4域名访问网页
    虚拟机上有关于Apache服务基于IP地址@3IP访问网站
    Apache有关个人用户主页以及强制访问安全系统功能介绍@2
    Apache服务的安装以及服务文件参数内容的配置 @1
    WVware虚拟机linux环境下使用ssh服务以安全密钥的形式远程控制服务(本地客户端登录远程服务端)
    WVware虚拟机linux环境下RAID5 五块磁盘操作管理实例
  • 原文地址:https://www.cnblogs.com/shuimohei/p/13523132.html
Copyright © 2011-2022 走看看