数据分析从入门到精通 1.numpy剑客修炼

会在某一瞬间突然明白,有些牢笼是自己给自己的

                                                                  —— 24.5.5

一、数据分析秘笈介绍

1.什么是数据分析

        是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律。使得数据的价值最大化

        案例:
           分析用户的消费行为
                制定促销活动的方案
                制定促销时间和粒康
                计算用户的活跃度
                分析产品的回购力度
           分析广告点击率
                决定投放时间
               制定广告定向人群方案
                决定相关平台的投放
        ……
        数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,以便采取适当的行动

        案例:

                保险公司从大量赔付申请数据中判断哪些为骗保的可能
                支付宝通过从大量的用户消费记录和行为自动调整花呗的额度
                短视频平台通过用户的点击和观看行为数据针对性的给用户推送喜欢的视频

2.为什么学习数据分析

① 有岗位的需求

② 数据竞赛平台。

③ 是Python数据科学的基础

④ 是机器学习课程的基础

3.数据分析实现流程

① 提出问题

② 准备数据

③ 分析数据

④ 获得结论

⑤ 成果可视化

4.内容介绍

① 基础模块使用学习

② 项目实现

③ 金融量化

5.数据分析三剑客

① numpy

pandas⭐

③ matplotlib

二、修炼准备—环境搭建

1.开发环境介绍

—— anaconda

        — 官网:https://www.anaconda.com/

        — 集成环境:集成好了数据分析和机器学习种所需要的全部环境

                — 注意:安装目录不可以有中文和特殊符号

—— jupyter

        — jupyter是anaconda提供的一个基于浏览器的可视化开发工具

—— jupyter的基本使用

        启动:

                在终端中录入:jupyter notebook的指令,按下回车即可

        — 新建:

                — python3:anaconda中的一个源文件(在文件中写代码)

print("一切都会好的")

               — cell有两种模式

                        — code:编写代码

                        — markdown:编写笔记

markdown — 编写笔记:### 笔记注释 用markdown运行即可

        — 快捷键

                — 添加cella或者b

                — 删除cellx

                — 修改cell的模式:

                        — m:修改成markdown

                        — y:修改成code模式

                — 执行cell:shift+enter

                — tab:自动补全代码

                — 打开帮助文档:shift+tab

三、numpy数组三种神秘创建方式

1.numpy模块

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

2.numpy的创建

        ① 使用np.array()创建

        ② 使用plt创建

        ③ 使用nproutines函数创建

 ① 使用np.array()创建

        使用array()创建一个一维数组
# numpy的创建
# 导入numpy包
import numpy as np# 使用array()创建一个一维数组
arr1 = np.array([1,2,3])
print(f"arr1 = {arr1}")

   

        使用array()创建一个多维数组
# numpy的创建
# 导入numpy包
import numpy as np# 使用array()创建一个多维数组
arr2 = np.array([[1,2,3],[4,5,6]])
print(f"arr2={arr2}")

        数组和列表的区别是什么
import numpy as nparr = np.array([1,2,3,'four'])
print(arr)

     

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

数组中存储的数据元素类型必须是统一类型

        优先级:

                字符串 > 浮点型 > 整数

② 使用plt创建

        改变数组元素的数值对图片的影响

        需求:将外部的一张图片读取加载到numpy数组中,尝试改变数组元素的数值查看对原始图片的影响

import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg')
plt.imshow(img_arr)

import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg')
plt.imshow(img_arr)
img_arr = img_arr-100
plt.imshow(img_arr)

      ③ 使用nproutines函数创建

import numpy as np# 三行四列的数组
np.ones(shape=(3,4))
print(np.ones(shape=(3,4)))# 一维的等差数列数组
np.linspace(0,100,num=20)
print(np.linspace(0,100,num=20))# 等差数列
np.arange(10,50,step=2)
print(np.arange(10, 50, step=2))# 0-100范围内五行三列的数组
np.random.randint(0,100,size=(5,3))
print(np.random.randint(0, 100, size=(5, 3)))

四、numpy爆破属性

numpy的常用属性

① shape:数组形状

② ndim:数组维度

③ size:数组元素个数

④ dtype:数组元素类型

import numpy as np# 数组元素0到100随机生成的五行六列的数组
arr = np.random.randint(0,100,size=(5,6))
print(f"arr={arr}")
# 返回数组的形状
print(f"arr.shape={arr.shape}")# 返回数组的维度
print(f"arr.ndim={arr.ndim}")# 返回数组的元素个数
print(f"arr.size={arr.size}")# 返回数组元素的类型
print(f"arr.dtype={arr.dtype}")# 返回数组的数据类型
print(f"type(arr)={type(arr)}\n")# 修改数组的元素类型
arr = np.array([1,2,3])
print(f"arr={arr}")
print(f"arr.dtype={arr.dtype}")
arr=np.array([1,2,3],dtype='int64')
print(f"arr.dtype={arr.dtype}")
arr.dtype='uint8'
print(f"arr.dtype={arr.dtype}")

 五、numpy的索引和切片操作

1.索引操作和列表索引操作同理

# 索引操作
import numpy as np
from matplotlib import pyplot as plt# 五行六列的数组
arr = np.random.randint(1,100,size=(5,6))# 打印数组
print(f"arr={arr}")# 通过索引取出numpy数组中下标为1的行数据
print(f"arr[0]={arr[0]}")# 通过索引取出numpy数组中的多行数据
print(f"arr[[1,2,4]]={arr[[1,2,4]]}")print(plt.imshow(img_arr[66:200, 78:200]))

2.切片操作

        切出前两列数据

        切出前两行数据

        切出前两行的前两列的数据

        数组数据翻转

        练习:将一张图片上下左右进行翻转

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

# 切出arr数组的前两行的数据
print(f"arr[0:2]={arr[0:2]}") # arr行切片# 切出arr数组的前两列的数据
print(f"arr[:, 0:2]={arr[:, 0:2]}")   # arr[行切片,列切片]# 切出arr数组前两行的前两列的数据
print(f"arr[0:2,0:2]={arr[0:2, 0:2]}")# 将数组的行倒置
print(f"arr[::-1]={arr[::-1]}")# 将数组的列倒置
print(f"arr[:,::-1]={arr[:,::-1]}")# 所有元素倒置
print(arr[::-1, ::-1])# 将一张图片进行左右翻转
img_arr = plt.imread('./我始终相信.jpg')
print(f"img_arr.shape={img_arr.shape}")
print(plt.imshow(img_arr))
print(plt.imshow(img_arr[:, ::-1, :]))# 将一张图片上下进行反转
print(plt.imshow(img_arr[::-1, :, :]))# 图片裁剪的功能
print(plt.imshow(img_arr[66:200, 78:200]))

六、统计&聚合&矩阵操作

1.变形操作reshape

# 变形操作reshape
# 五行六列的二维数组
arr = np.random.randint(1,100,size=(5,6))
print(arr)# 将二维的数组变形成一维
print(f"arr.reshape((30,))={arr.reshape((30,))}")# 将一维数组变成多维的
print(f"arr.reshape((6, 5))={arr.reshape((6, 5))}")

2.级联操作

        将多个numpy数组进行横向或者纵向的拼接

axis轴向的理解

        —— 0:列,纵向

        —— 1:行,横向

# 级联操作
# axis轴向的理解
print(f"arr : {arr}")
print(f"arr列拼接为:{np.concatenate((arr,arr),axis=0)}")
print(f"arr行拼接为:{np.concatenate((arr,arr),axis=1)}")

级联只能是同一维度数组操作

问题:

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

# 问题
arr1 = np.random.randint(1,100,size=(3,4))
arr2 = np.random.randint(1,100,size=(2,4))
print(f"arr1和arr2级联结果是:{np.concatenate((arr1,arr2),axis=1)}")

        图片也可以进行横纵拼接

3.常用的聚合操作

①sum        ②max        ③min        ④mean

4.常用的数学函数

NumPy提供了标准的三角函数:sin()、cos()、tan()
numpy.around(a,decimals)函数 返回指定数字的四舍五入值。

  参数说明:

      a: 数组
      decimals:舍入的小数位数。默认值为0。如果为负,整数将四舍五入到小数点左侧的位置

5.常用的统计函数

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,即std = sqrt(5/4),结果为 1.1180339887498949。

方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x-x.mean())**2)。换句话说,标准差是方差的平方根

3.矩阵相关

NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。一个的矩阵是一个由行(row) 列(column)元素排列成的矩形阵列。
numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。

① 单位矩阵

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

示例:

# 矩阵操作
# eye返回一个标准的单位矩阵
np.eye(9)
print(f"np.eye(9)={np.eye(9)}")

② 转置矩阵

        矩阵.T,返回矩阵的转置矩阵

示例:

# 矩阵.T,返回矩阵的转置矩阵
print(f"arr={arr}")
print(f"arr.T={arr.T}")

③ 矩阵相乘

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

示例:

# 矩阵相乘print(f"arr={arr}")
print(f"arr.T={arr.T}")
print(f"arr和arr.T的乘积是{np.dot(arr, arr.T, out=None)}")

在NumPy中,np.dot 函数用于计算两个数组的点积(或矩阵乘法,如果它们是二维的)。out=None  np.dot 函数的一个可选参数,用于指定输出数组。

具体来说,out=None 表示函数将分配一个新的数组来存储结果,并返回这个新数组。但如果你提供了一个数组作为 out 参数的值,np.dot 会尝试将结果存储在这个数组中,而不是创建一个新的数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/688672.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象设计之套路——设计模式

1、总则 面向对象的分析设计编程思想,通过封装、继承、多态把程序的耦合度降低,用设计模式使得程序更加灵活,容易修改,并且易于复用。 让业务逻辑与界面逻辑分开,让它们的耦合度下降,只有分离,…

瑞芯微 rk3588 Linux系统备份还原 StepbyStep

1.系统备份 1.1 将瑞芯微平台嵌入式系统的root ssh 权限开通 step1:sudo vi /etc/ssh/sshd_config step2: 找到PermitRootLogin,把开关打开: PermitRootLogin yes step3:重启ssh服务 sudo systemctl restart sshd 1.2.使用瑞芯微的打包脚本把嵌入式系统系统打包 这…

Taro 快速开始

大家好我是苏麟 , 今天聊聊Trao. 官网 : Taro 介绍 | Taro 文档 (jd.com) 点击快速开始 全局安装 CLI 初始化一个项目 选择配置 : 根据自己需求选择 安装失败先不用管 , 用前端工具打开项目 npm install 安装 , 显示安装失败 怎么解决 ? : 查看报错信息 百度 , 问 AI 工具 运…

【配置】IT-Tools部署

github地址 docker运行如下,记得打开云服务器的9090端口 docker run -d --name it-tools --restart unless-stopped -p 9090:80 corentinth/it-tools:latestip:9090查看,很香大部分工具都有

测试新人常问:如何开始自动化测试,必须知道的10点!

随着互联网技术的发展,无论哪个公司,哪个团队都在谈论自动化测试、动手实现自动化测试,从而让测试显得更加“高大上”。 那么是不是所有的业务都适合自动化?是不是自动化做的越多,效果越好呢?下面就自己一…

WP All Import Pro插件下载 - 一键导入,无限可能

在当今快节奏的数字时代,网站内容的更新和管理是每个网站管理员和开发者的日常工作。但是,传统的手动更新方法不仅耗时,而且容易出错。现在,有了WP All Import Pro,这一切都将改变。 WP All Import Pro 是一款专为Wor…

【IC前端虚拟项目】axi ddr/sram验证组件思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 在完成了所有的utils包括apb_utils之后,就要进行验证环境的整体搭建,因此我们再把验证环境拿出来看一下: 按照由底至顶层的思路,接下主要有五大部分需要我们完成:ram_model、reference_model、env、…

数据库出现死锁的解决方法参考

死锁引起的原因一般是多个用户并发访问数据库导致的问题,或是因为某个进程挂死以后资源未释放导致的。通过onstat –p可查看deadlks项大于0即表示历史总计死锁次数。对于被锁的表进行操作的时候会出现-143 ISAM error: deadlock detected的错误。当其他会话访问此表…

空间复杂度与链表刷题

"一切的一切都是你自己在感应." 本文索引 空间复杂度复杂度实例实例1实例2实例3 链表题目1. 返回倒数第K个节点2. 链表的回文结构3. 相交链表4. 随机链表的复制5. 环形链表 总结: 前言: 本文主要探究空间复杂度与链表题目讲解 更多文章点击主页: 酷酷学!!! 如果此文对…

Leetcode—138. 随机链表的复制【中等】(cend函数)

2024每日刷题(129) Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

mybatis 跨库查询 mysql

跨库,表关联的查询,实现起来很简单: select a.uid from ucenter.user a , database user_profile b where a.uid b.uid;只要在表的前边加上库名即可。 这个是我项目中xml 中的一个例子,项目采用的是springmvc,持久层框架就是my…

ABAP跨client的RFC调用

1、SM59配置连接 2、创建需要调用的函数,ZGET_TM_LIST,开启远程启用模块 3、新建调用程序 DATA:L_MSG TYPE C,LSH(30) TYPE C. DATA:IT_ZSTM_LIST TYPE STANDARD TABLE OF ZSTM_LIST WITH HEADER LINE.CALL FUNCTION ZGET_TM_LIST DESTINATION ZTEST_R…