数据分析之numpy使用

data analysis

什么是数据分析

  • 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律
    • 使得数据的价值最大化
      • 分析用户的消费行为
        • 制定促销活动的方案
        • 制定促销时间和粒度
        • 计算用户的活跃度
        • 分析产品的回购力度
      • 分析广告点击率
        • 决定投放时间
        • 制定广告定向人群方案
        • 决定相关平台的投放
      • ......
  • 数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,以便采取适当的行动
    • 保险公司从大量赔付申请数据中判断哪些为骗保的可能
    • 支付宝通过从大量的用户消费记录和行为自动调整花呗的额度
    • 短视频平台通过用户的点击和观看行为数据针对性的给用户推送喜欢的视频

数据分析实现流程

  • 提出问题
  • 准备数据
  • 分析数据
  • 获得结论
  • 成果可视化

开发环境介绍

  • anaconda
    • 官网:https://www.anaconda.com/
    • 集成环境:集成好了数据分析和机器学习中所需要的全部环境
      • 注意:
        • 安装目录不可以有中文和特殊符号
  • jupyter
    • jupyter就是anaconda提供的一个基于浏览器的可视化开发工具
  • jupyter的基本使用
    • 启动:在终端中录入:jupyter notebook的指令,按下回车
    • 新建:
      • python3:anaconda中的一个源文件
      • cell有两种模式:
        • code:编写代码
        • markdown:编写笔记
    • 快捷键:
      • 添加cell:a或者b
      • 删除:x
      • 修改cell的模式:
        • m:修改成markdown模式
        • y:修改成code模式
      • 执行cell:
        • shift+enter
      • tab:自动补全
      • 代开帮助文档:shift+tab

数据分析三剑客

  • numpy
  • pandas(重点)
  • matplotlib

numpy

  • NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。

numpy的创建

  • 使用np.array()创建
  • 使用plt创建
  • 使用np的routines函数创建

使用numpy创建一位数组

>>> import numpy as np
>>> arr = np.array([1,2,3])
>>> arr
array([1, 2, 3])

使用numpy创建二维数组

>>> arr = np.array([[1,2,3],[4,5,6]])
>>> arr
array([[1, 2, 3],
       [4, 5, 6]])
  • 数组和列表的区别是什么?

    >>> arr = np.array([1,1.27,'regina'])
    >>> arr
    array(['1', '1.27', 'regina'], dtype='<U32')
    
    • 数组中存储的数据元素类型必须是统一类型
    • 优先级:
      • 字符串 > 浮点型 > 整数
  • 将外部的一张图片读取加载到numpy数组中,然后尝试改变数组元素的数值查看对原始图片的影响

    import matplotlib.pyplot as plt
    img_arr = plt.imread('/Users/ivanlee/Desktop/女明星/IMG_1473.JPG')
    plt.imshow(img_arr) #将numpy数组进行可视化展示
    

    image-20221215142941953

如果每一个像素块的值减100

image-20221215145605136

运用函数创建数组

  • zero()
  • ones()
  • linspace()
  • arange()
  • random系列
  • ones

    np.ones(shape(3,4))
    array([[1., 1., 1., 1.],
           [1., 1., 1., 1.],
           [1., 1., 1., 1.]])
    
  • Linspace(): 一维的等差数列的数组

    >>> np.linspace(0,100,num=20)
    array([  0.        ,   5.26315789,  10.52631579,  15.78947368,
            21.05263158,  26.31578947,  31.57894737,  36.84210526,
            42.10526316,  47.36842105,  52.63157895,  57.89473684,
            63.15789474,  68.42105263,  73.68421053,  78.94736842,
            84.21052632,  89.47368421,  94.73684211, 100.        ])
    
  • arange():一维的等差数列

    >>> np.arange(0,50,step=3)
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48])
    
  • Random():返回由size决定的形状数组

    >>> np.random.randint(0,100,size=(3,5))
    array([[88, 56, 60, 56,  9],
           [ 9,  0, 32, 31, 32],
           [78, 10, 21, 78, 98]])
    

numpy的常用属性

  • shape 形状
  • ndim 维度
  • size 总共个数
  • dtype 元素类型

image-20221215151901937

numpy的数据类型

  • array(dtype=?):可以设定数据类型
  • arr.dtype = '?':可以修改数据类型
名称 描述
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 位浮点数(实数部分和虚数部分)

numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。

image-20221215152544146

numpy的索引和切片操作(重点)

  • 索引操作和列表同理

    >>> arr = np.random.randint(1,100,size=(5,6))
    >>> arr
    array([[49, 26,  2, 75, 91, 93],
           [68, 49, 40, 40, 51, 54],
           [39, 49, 16, 93, 45,  2],
           [13, 43, 67, 52,  2, 46],
           [74, 20,  9, 73, 91, 21]])
    >>> arr[1]
    array([68, 49, 40, 40, 51, 54])
    >>> arr[[1,3,4]]
    array([[68, 49, 40, 40, 51, 54],
           [13, 43, 67, 52,  2, 46],
           [74, 20,  9, 73, 91, 21]])
    
  • 切片操作

    • 切出前两行数据

      >>> arr[0:2]
      array([[49, 26,  2, 75, 91, 93],
             [68, 49, 40, 40, 51, 54]])
      
      
    • 切出前两列数据

      >>> arr[:,0:2]
      array([[49, 26],
             [68, 49],
             [39, 49],
             [13, 43],
             [74, 20]])
      
    • 切出前两行的前两列的数据

      >>> arr[0:2,0:2]
      array([[49, 26],
             [68, 49]])
      
    • 数组行翻转

      >>> arr[::-1]
      array([[74, 20,  9, 73, 91, 21],
             [13, 43, 67, 52,  2, 46],
             [39, 49, 16, 93, 45,  2],
             [68, 49, 40, 40, 51, 54],
             [49, 26,  2, 75, 91, 93]])
      
    • 数组列翻转

      >>> arr[::,::-1]
      array([[93, 91, 75,  2, 26, 49],
             [54, 51, 40, 40, 49, 68],
             [ 2, 45, 93, 16, 49, 39],
             [46,  2, 52, 67, 43, 13],
             [21, 91, 73,  9, 20, 74]])
      
    • 练习:将一张图片上下左右进行翻转操作

      import matplotlib.pyplot as plt
      img_arr = plt.imread('/Users/ivanlee/Desktop/女明星/IMG_1473.JPG')
      plt.imshow(img_arr) #将numpy数组进行可视化展示
      

      image-20221215155218979

      image-20221215155300994

    • 练习:将图片进行指定区域的裁剪

      image-20221215155423406

numpy变形

  • reshape操作

    image-20221215160112165

级联操作

- 将多个numpy数组进行横向或者纵向的拼接
  • axis轴向的理解

    • 0:列
    • 1:行

    image-20221215160732348

  • 问题:

    • 级联的两个数组维度一样,但是行列个数不一样会如何?

      答:不一样就无法拼接

  • 对图进行拼接

    arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=0)
    plt.imshow(arr_3)
    

    image-20221215161140845

    arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
    plt.imshow(arr_3)
    

    image-20221215161211392

常用的聚合操作

  • sum,max,min,mean

    image-20221215161630871

常用的数学函数

  • NumPy 提供了标准的三角函数:sin()、cos()、tan()
  • numpy.around(a,decimals) 函数返回指定数字的四舍五入值。
    • 参数说明:
      • a: 数组
      • decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

常用的统计函数

  • numpy.amin() 和 numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值。
  • numpy.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值)。
  • numpy.median() 函数用于计算数组 a 中元素的中位数(中值)
  • 标准差std():标准差是一组数据平均值分散程度的一种度量。
    • 公式:std = sqrt(mean((x - x.mean())**2))
    • 如果数组是 [1,2,3,4],则其平均值为 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],并且其平均值的平方根除以 4,即 sqrt(5/4) ,结果为 1.1180339887498949。
  • 方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根

image-20221215162950711

矩阵相关

  • NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。一个 的矩阵是一个由行(row)列(column)元素排列成的矩形阵列。

  • numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。

eye返回一个标准的单位矩阵

np.eye(6)

image-20221215163306006

T 转置

image-20221215163349710

矩阵相乘

  • numpy.dot(a, b, out=None)
    • a : ndarray 数组
    • b : ndarray 数组

image-20221215163709817

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数据分析之numpy使用 - Python技术站

(0)
上一篇 2023年4月2日 下午4:14
下一篇 2023年4月2日 下午4:14

相关文章

  • phpt文件内容解析

    phpt测试文件说明 phpt文件用于PHP的自动化测试,这是PHP用自己来测试自己的测试数据用例文件。 测试脚本通过执行PHP源码根目录下的run-tests.php,读取phpt文件执行测试。 phpt文件包含 TEST,FILE,EXPECT 等多个段落的文件。在各个段落中,TEST、FILE、EXPECT是基本的段落, 每个测试脚本都必须至少包括这三…

    PHP 2023年4月19日
    00
  • python模拟股票的数据分析

    股票分析 需求:股票分析 使用tushare包获取某股票的历史行情数据。 输出该股票所有收盘比开盘上涨3%以上的日期。 输出该股票所有开盘比前日收盘跌幅超过2%的日期。 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何? import tushare as ts import pandas…

    2023年4月2日
    00
  • django学习_路由

    django2 路由控制器 Route路由,是一种映射关系。路由是把客户端请求的url路径和用户请求的应用程序,这里意指django里面的视图进行绑定映射的一种关系。 请求路径和视图函数不是一一对应的关系 在django中所有的路由最终都被保存到一个叫urlpatterns的文件里,并且该文件必须在主应用下的urls.py里进行声明,这是由setting文件…

    2023年4月2日
    00
  • 爬虫学习1——request使用

    爬虫 什么是爬虫: – 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。 爬虫究竟是合法还是违法的? 在法律中是不被禁止 具有违法风险 善意爬虫 恶意爬虫 爬虫带来的风险可以体现在如下2方面:- 爬虫干扰了被访问网站的正常运营- 爬虫抓取了收到法律保护的特定类型的数据或信息 如何在使用编写爬虫的过程中避免进入局子的厄运呢? – 时常的优化自己…

    2023年3月31日
    00
  • Django_request学习

    Django_request (1)请求方式 这里使用一个接口测试软件postman 可以看到里面有非常多的发起请求的方式,最常用的就是GET和POST请求,但是这些方法无法在网页的url里显示 在学习request参数之前,django框架中首先接到浏览器发来的请求第一站是经过框架自带的wsgi.py文件 “”” WSGI config for djang…

    2023年4月2日
    00
  • django_响应对象

    Django_响应对象 响应对象 响应对象有三种形式: HttpResponse() render() Redirect() (1) HttpResponse() django服务器接收到客户端发来的请求之后,会将提交上来的数据封装成一个HttpResponse对象传给视图函数。视图函数在处理完相关逻辑之后,也需要一个返回响应给浏览器。而这个响应方式,我们必…

    2023年4月2日
    00
  • django学习__1

    Django python网络编程回顾 之前我们介绍过web应用程序和http协议,简单了解过web开发的概念。Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息 处理本次HTTP请求,即完成本次请求的业务逻辑处理 构造并返回处理结果——HTTP响应 import socket server = socket.socket() server.b…

    Python开发 2023年4月2日
    00
  • 数据分析之pandas的使用

    pandas 为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据! 什么是pandas? 首先先来认识pandas中的两个常用…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部