10/13
今日考题:
1.说说爬取王者荣耀英雄皮肤图片整体思路
先通过第一层网页找到详情页 然后找到图片所在位置
图片所在位置是背景板 而下面li标签中的链接是动态加载
所以通过背景板观察图片地址
找到规律之后发现刨除固定部分有一个是英雄的编号 和前面详情页地址的一部分一样
通过字符串操作拿到所需部分 然后思考后面的数字是什么
原来是有几个皮肤数字就有几个 在详情页的的别里有皮肤名字通过|隔开并且每个皮肤都带&
通过count字符串中的&拿到数字最后组合出图片地址
2.数据分析的工作流程大致有哪些
需求分析>>>数据采集>>>数据清洗>>>数据分析>>>数据可视化和报告
3.notebook中有哪些常用快捷键
运行当前单元格
ctrl+enter
运行当前单元格,选中下方单元格
shift+enter
大标题
编辑模式写文本 之后命令行模式按数字来控制几级标题
下方/上方新建单元格
命令行模式按b/a
删除单元格
命令行模式连按两下d
撤销对于单元格的操作
命令行下按z
复习巩固
- 数据分析基本概要
是什么
怎么用
前景如何
- 数据分析工作流程
1.需求分析
2.数据采集
3.数据清洗
4.数据分析
5.数据报告
6.数据可视化
- 数据分析三剑客简介
numpy 科学计算
pandas 表格处理
matplotlib 可视化
- ipython和jupyter
ipython
提供更方便的终端代码编辑环境
jupyter
提供一个jupyter分许环境
最核心的就是notebook
- Anaconda软件
内部集成了很多数据分析相关的软件和资料
并且自动下载了数据分析相关的很多很多的模块(包)
- notebook常用操作
命令行与编辑模式切换
>>>编辑模式 鼠标左键点击
>>>命令行模式 键盘esc
crtl+enter 运行当前单元格
shift+enter 运行当前单元格并切换到下方单元格(没有则创建)
编写标题
1.编辑模式下写文本 然后切换到命令行模式按m+数字
2.命令行模式下按m之后按照警号跟文本即可
创建单元格
命令行按b 下方创建
命令行按a 上方创建
创建单元格
命令行连按两个d
撤销删除
命令行模式按z
今日内容概要
科普
很多编程语言对数字精确度不是很敏感
python亦是如此
123.09134434316548
字符串转换之后就变成了
123.1
但是python又可以做人工智能 机器学习 量化交易 数据分析等高精度的工作
内部就是通过相应的模块来实现
三剑客之numpy科学计算库
- numpy简介
- numpy前戏
- numpy数据结构
- numpy数据类型
- numpy其他功能
详细讲解
numpy简介
1.Numpy是高性能科学计算和数据分析的基础包
2.也是pandas等其他数据分析的工具的基础
3.NumPy具有多维数组功能,运算更加高效快速
下载模块
在notebook中如果需要执行pip命令下载模块
只需要在命令行的开头加上一个感叹号即可
!pip3 install numpy
"""
在安装完anaconda之后该软件也会给我们提供一个下载模块的工具
conda使用方式与pip一致
conda install numpy
同理如果在notepad里要用的话加上!
"""
导入
import numpy as np # 起别名方便使用
数组概念
# numpy数组和python中列表很像
"""
notebook单元格左侧如果是星号表示当前单元格正在执行 是数字表示执行完毕
"""
height = [170,173,178,180,183] # 身高
weight = [76,65,70,77,75] # 体重
'''求BMI指数:身体质量指数=体重(KG)/身高(m)的平方'''
BMI = weight/(height/100)**2
# 表面这样运算就行但是列表是一个整体 主任杨直接报错
import random
# 制作数据
h = []
w = []
for i in range(100000000):
h.append(random.randint(153,180))
w.append(random.uniform(51,88))
'''纯python代码实现'''
import time
# for循环计算
start_time = time.time()
for i in range(100000000):
w[i]/(h[i]/100) ** 2
end_time = time.time() - start_time
end_time
# 通过time模块控制时间
'''numpy解决方案'''
import numpy as np
H = np.array(h)
W = np.array(w)
# 数组运算
start_time = time.time()
BMI = W/(H/100)**2
end_time = time.time() - start_time
end_time
多维数组
"""
numpy中同一个数组内所有数据数据类型肯定是一致的
np.array([1,2,False]) >>> array([1, 2, 0])
np.array([1,2,3.1]) >>> array([1.,2.,3.1])
numpy中进行数据操作的时候同一个数组内所有的数据都挨个对应参与操作
a1 = np.array([1,2,3,4])
a2 = np.array([7,8,9,1])
a1 + a2 >>> array([ 8, 10, 12, 5])
a1 * 10 >>> array([10, 20, 30, 40])
"""
# 一维数组
np.array([1,2,3,4])
# 二维数组(矩阵)
np.array([[1,2,3,4],[9,8,7,6]])
数据类型
布尔型 bool_
整型 int_ int8 int16 int32 int64
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
无符号整型 uint8 uint16 uint32 uint64
浮点型 float_ float16 float32 float64
复数型 complex_ complex64 complex128
"""
1.为什么numpy数据类型以数字居多
因为numpy主要用于科学计算 只有数字可以参与计算
2.为什么有些数据类型后面加下划线
因为为了跟python数据类型关键字区分开
"""
常用方法
.T 数组转制(对高维数组使用)
a = np.array([[1,2,3],
[4,5,6]])
a.T
执行结果:
array([[1, 4],
[2, 5],
[3, 6]])
# 相当于行变列 列变行
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
常用方法
"""
如何查看某个方法的使用说明
方式1:在方法后面跟问号执行即可
方式2:写完方法名后先按shift不松开然后按tab就能看到方法
再按一次tab就能 看到整个方法
"""
array() 将列表转换为数组,可选择显式指定dtype
arange() range的numpy版,支持浮点数
np.arange(1,10,2)
np.arange(1.2,10,0.4)
linspace() 类似arange(),第三个参数为数组长度
np.linspace(1,10,20)
# arange是顾头不顾尾 而这个方法是顾头又顾尾,在1到10之间20等分
zeros() 根据指定形状和dtype创建全0数组
np.zeros((3,4))
ones() 根据指定形状和dtype创建全1数组
np.ones((3,4))
empty() 根据指定形状和dtype创建空数组(随机值)
np.empty(10)
eye() 根据指定边长和dtype创建单位矩阵
np.eye(5)
索引和切片
1.针对一维数组 索引和切片操作和python里完全一样
2.间断索引(花式索引)
a[[0,3,4]] # 取 第1 第4 第五个元素
3.布尔值索引(逻辑索引)
a>5 # 一一比对符合条件输出True 不符合为False
a[a>5] # 只有符合条件的才会被取出数组 变成新数组
4.针对二维数组索引与切片有些许复杂 # 重点 但并不难
res[行索引(切片),列索引(切片)]
如果需要获取二维数组的所有行或列元素,那么,对应的行索引或列索引需要用英文 状态的冒号表示
a = np.array([[ 1, 3, 5, 7],
[ 2, 4, 6, 8],
[ 11, 13, 15, 17],
[ 12, 14, 16, 18],
[100, 101, 102, 103]])
在取值的时候首先看行取值和列表取法一样 取完再行即可
比如要取中间的13,15和下面的14,16
第一步a[2:4] # 先切片取值到3,4两行 注意顾头不顾尾
然后找到里面要取的列用逗号加在后面就行
a[2:4,1:3] # 这样就能取到上面想要的结果了
arr1[3,3] # 18
arr1[3,:] # array([12, 14, 16, 18])
arr1[:,1] # array([ 3, 4, 13, 14, 101])
arr1[0:2,1:3] # array([[3,5],[4,6]])
运算符
# 数学运算符 非常基础基础没啥要多说的
+
数组对应元素的加和
-
数组对应元素的差
*
数组对应元素的乘积
/
数组对应元素的商
%
数组对应元素商的余数
//
数组对应元素商的整除数
**
数组对应元素的幂指数
# 比较运算符
>
等价np.greater(arr1,arr2)
判断arr1的元素是否大于arr2的元素
>=
等价np.greater_equal(arr1,arr2)
判断arr1的元素是否大于等于arr2的元素
<
等价np.less(arr1,arr2)
判断arr1的元素是否小于arr2的元素
<=
等价np.less_equal(arr1,arr2)
判断arr1的元素是否小于等于arr2的元素
==
等价np.equal(arr1,arr2)
判断arr1的元素是否等于arr2的元素
!=
等价np.not_equal(arr1,arr2)
判断arr1的元素是否不等于arr2的元素
函数
# 数字处理类常用函数 arr指代数组
np.round(arr)
对各元素四舍五入
np.sqrt(arr)
计算各元素的算术平方根
np.square(arr)
计算各元素的平方值
np.exp(arr)
计算以e为底的指数
np.power(arr, x)
计算各元素x次方, x是个你给的常数
np.log2(arr)
计算以2为底各元素的对数
np.log10(arr)
计算以10为底各元素的对数
np.log(arr)
计算以e为底各元素的对数
# 常用的统计函数
np.min(arr,axis)
按照轴的方向计算最小值
np.max(arr,axis)
按照轴的方向计算最大值
np.mean(arr,axis)
按照轴的方向计算平均值
np.median(arr,axis )
按照轴的方向计算中位数
np.sum(arr,axis)
按照轴的方向计算和
np.std(arr,axis)
按照轴的方向计算标准差
np.var(arr,axis)
按照轴的方向计算方差
'''
axis = 1 为x轴方向即取行进行计算
axis = 0 为y轴方向即取列进行计算
axis可实在是太好用了具体请看下面案例
'''
# 准备一下数据 要求求各行的和 以及各列的平均值
a = np.array([[ 80.5, 60., 40.1, 20., 90.7],
[ 10.5, 30., 50.4, 70.3, 90.],
[ 35.2, 35., 39.8, 39., 31.],
[91.2, 83.4, 85.6, 67.8, 99.]])
# 不用axis参数
Sum = [] # 求和
for row in range(4):
Sum.append(np.sum(arr2[row,:]))
Avg = [] # 求平均
for col in range(5):
Avg.append(np.mean(arr2[:,col]))
# 用axis参数
np.sum(arr2, axis = 1) # 等价于arr2.sum(axis = 1)
np.mean(arr2, axis = 0) # 等价于arr2.mean(axis = 0)
随机数
np.random # 是numpy中random的子模块
np.random.rand 给定形状产生随机数组(0到1之间的数)
np.random.randint(n,size=(x,y))
# 定形状产生随机整数 不超过n
np.random.randint(n, [x, y, z])
# 生成n行 后面数组有几位就几列并且对应位置不超过给定数组中数字的int数组
np.random.choice(x,y)
# x范围内 y个数字的数组
# 后面的例子看一下 去悟
np.random.shuffle
# 与random.shuffle相同 将所有元素随机排序
np.random.uniform
# 给定形状产生随机数组(随机均匀分布)
# 悟以下得
np.random.normal
# 随机正态分布
# 得悟一下
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?