人人都能学会数据分析-笔记

人工智能39

第01周 走进数据分析

1-1 互联网数据分析通用课程-导学

课程导学

随着互联网的发展,任何岗位都离不开数据分析

  • 互联网 => 数据 => 价值
  • 用户 => 网上购物 => 评价、购买量、价格
  • 产品 => 设计与优化 => 跟踪用户行为、监测数据
  • 运营 => 成交量 => 数据指标、有效营销手段

数据分析师,必须掌握的技能

硬技能 => 硬性数据处理和分析工具的使用
=> 电子表格 Excel
=> 数据库操作语言 SQL
=> 可视化面板 Tableau
=> 大数据处理分析 Python
软技能 => 对事物的认知方式、经验积累

人人都能学会数据分析-笔记

  • A的价格比B的价格高
  • A的波动大于B,波动大风险就大
  • 行情下跌 vs 事件关系

课程优势

普适性
运营、产品、市场或者销售
数据分析的硬技能
互联网行业经验
=> 细分行业、企业、商业模式
运营策略、思维模型、业务指标
实战性
真实的数据、案例
第一阶段:大数据人才需求分析、销售情况分析
第二阶段:用户行为、用户画像、营销渠道分析、留存转化
从0到1
目标确定=>数据获取=>数据清洗=>数据探索=>洞察结论=>数据报告

期待你和我一起,用数据解析世界

1-2 从互联网数据分析说起

什么是互联网数据分析

互联网:

  • 信息传输的一种载体
  • 通过电子化的方式留存信息
  • 与传统线下基于实物的传输方式相对应

纸币、硬币

人人都能学会数据分析-笔记

数字货币

人人都能学会数据分析-笔记

数据分析:
对数据的规律进行总结、提炼
决策

互联网 数据分析岗人才需求 => 线上 线下
招聘信息 => 统计职位数 => 同类比较

数据 => 生产材料

章节回顾

  • 互联网 => 线上的传输方式
  • 数据分析 => 利用数据规律进行决策
  • 互联网数据分析 => 对基于线上产生的数据进行分析

课后作业

以下哪个是基于互联网的数据分析:
A. 统计某产品线下调研结果
B. 分析某课程线上引流效果

2-1 什么是数据

从认识数据开始

认识数据

  • 数据分类
  • 统计指标
  • 分布形态
  • 数据分析流程
  • 常用数据分析工具

什么是数据

  • 数据是对事物的描述和记录

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

数据的特性

根据计量层次,进一步对数据进行分类
黄瓜、番茄、森林、书本,无法计算比较,计量层次低
1,2,3,4,5,这些数据可以计算比较,那么计量层次就高

定类数据

颜色:红色、白色、黄色
性别:男性、女性
职位:数据产品经理、数据运营、市场营销运营
按照类别属性进行分类,各类别之间是平等并列关系
这种数据不带数量信息,并且不能在各类别间进行排序
主要数值运算,计算每一类别中的项目的频数和频率

定序数据

受教育程度:小学、初中、高中、大学、硕士、博士
季度:春、夏、秋、冬
等级:合格、良好、优秀
定序数据之间可以进行排序、比较优劣
通过将编码进行排序,可以表示之间的高低差异

定距数据

温度:20、50、100
成绩:50、65、70、100
年龄:8、25、40、60
具有一定单位的实际测量值
定距数据的精确性比定类数据和定序数据更高
可以计算出各变量之间的实际差距(加、减)

定比数据

利润:10万、20万、30万
薪酬:3000、6000、9000、12000
用户数:210、3500、49000
可以比较大小,进行加、减、乘、除运算
定距尺度中,0表示数值,定比尺度中,0表示"没有"
定比数据中是存在绝对零点的,而定距数据不存在

定性、定量数据

定性数据(定类数据、定序数据)
是一组表示事物性质、规定事物类别的文字表述型
定类数据(定距数据、定比数据)
指以数量形式存在着的属性,并因此可以对其进行

数据矩阵/二维数据表

人人都能学会数据分析-笔记

  • 数据属性、维度
  • 观测值、记录

章节回顾

什么是数据
数据的类型
定类数据 => 定性数据
定序数据 => 定性数据
定距数据 => 定量数据
定比数据 => 定量数据
数据矩阵是怎么组成的

课后作业

对应的是什么数据类型

人人都能学会数据分析-笔记

定性:姓名、性别、职业
定量:用户标识、年龄、薪酬

2-2 什么是统计指标

为什么要学习统计指标

人人都能学会数据分析-笔记

  • 技能
  • 薪酬水平
  • 工作年限
  • 业务背景

人人都能学会数据分析-笔记

  • 汇总
  • 处理
  • 计算

什么是统计指标

  • 体现总体数量特征的概念和数值
  • 根据数据分析的目的不同,统计指标也会变化

房屋设计:建筑面积、竣工面积、技术装备率
提升用户转化率:网站浏览量、着陆页、跳失率
选择理财产品:往期业绩、风险系数、年化收益

总量指标

GDP(国内生产总值)
总人口 => 总和(SUM)
销售总额

  • 特定条件下的总规模、总水平或工作总量
  • 是一种最基本的统计指标

平均指标

用一个数字显示其一般水平
=> 集中趋势指标

相对指标

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 两个有联系的现象数值相比得到的比率
  • 描述的是相对关系,而不是总体情况

比例、比率、倍数

人人都能学会数据分析-笔记

  • 比例 = 各数据/总比 %
  • 1:2:3:...:10:11:12
  • 比率 = 数据项:数据项
  • 年末/年初 = 12
  • 倍数 突出上升、增长幅度

环比、同比

近2个月的销售情况?

人人都能学会数据分析-笔记

环比增长率:
(本期数-上期数)/上期数*100%
(12000-11000)/11000 = 9.09%

人人都能学会数据分析-笔记

  • 同比增长率:
  • (本期数-同期数)/同期数*100%
  • (3450-2300)/2300 = 50%

环比更注重短期的涨幅表现
同比更注重长期的

章节回顾

  • 总量指标:描述总体估摸的
  • 相对指标:部分与整体关系
  • 平均指标(集中趋势):数据一般水平

课后作业

人人都能学会数据分析-笔记

1、今年销售总额
2、每月占总销售的比例
3、平均每月销售额
人人都能学会数据分析-笔记

2-3 统计指标:集中趋势

集中趋势指标的特点

哪个营销渠道引流效果最佳?
什么岗位的薪酬水平最高? => 平均值
哪个产品最受欢迎?
...... => 初步结论

什么是集中趋势指标

  • 用于体现数据一般水平的指标
  • 最快速了解样本数据的概况
  • 最常用的集中趋势指标就是平均值

平均值

人人都能学会数据分析-笔记

  • = 所有数据相加/数据的个数
  • 加和:151100
  • 平均值:16789
  • 去除异常值:10762
  • 差异:6026
  • 具有一定误导性,对异常数不敏感

中位数

人人都能学会数据分析-笔记

  • 按顺序排列后,居于中间位置的数
  • 奇数:位于(n+1)/2位置的数
  • 偶数:最中间的两位数相加/2
  • 更具有代表性

众数

人人都能学会数据分析-笔记

  • 出现次数最多的数值
  • 反应的是局部特征、密集度
  • 众数可以有多个

章节回顾

人人都能学会数据分析-笔记

  • 平均值:黄线
  • 中位数:绿线
  • 众数:蓝线

课后作业

人人都能学会数据分析-笔记

1、计算平均值、中位数、众数
2、哪一组薪酬水平更高

人人都能学会数据分析-笔记

2-9 本章小结

数据的基本特征

什么是数据

  • 数据类型
  • 集中趋势 分布形态
  • 离散趋势 异常值

数据分析有哪些内容

数据分析流程

人人都能学会数据分析-笔记

数据分析技能

人人都能学会数据分析-笔记

2-4 统计指标:离散趋势

什么是离散趋势指标

人人都能学会数据分析-笔记

  • A(蓝线):10.22 ~ 10.88
  • B(橙线):10.22 ~ 11.43
  • 股票B比股票A更离散

体现内部差异度的指标

  • 极差
  • 平均差
  • 标准差

极差

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 相距最远的两个点之间的距离
  • 极差 = 最大值 - 最小值 = 1.55
  • 数据内部最大的差异情况

人人都能学会数据分析-笔记

平均差

  • 一组数据与平均值差异

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 数据项与平均值的差距越大
  • 数据越分散,反之越集中

人人都能学会数据分析-笔记

  • 股东回购、政策利好、供需失衡
  • 事件驱动型的数据,在样本量较小的时候,容易导致误差
  • 对离散值更敏感

标准差

人人都能学会数据分析-笔记

  • 优化过的更能代表离散程度的指标

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 更直观的了解差异程度
  • 最常用的离散指标

章节回顾

人人都能学会数据分析-笔记

  • 极差
  • 平均差
  • 标准差

课后作业

人人都能学会数据分析-笔记

  • 1、计算极差、平均差、标准差
  • 2、判断哪只股票的风险更高
  • 提示:标准差越大,风险越高

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 极差:MAX(A2:A10)-MIN(A2:A10)
  • 平均差:AVEDEV(A2:A10)
  • 标准差:STDEVP(A2:A10)
  • 平均值:AVERAGE(A2:A10)

2-5 统计指标:分布形态

什么是分布形态

数据 => 点线面

人人都能学会数据分析-笔记

数据相关的工作
企业对工作经验有什么要求

  • 应届毕业生
  • 经验1年以下、经验1-3年
  • 经验3-5年、经验5-10
  • 经验不限

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 平均值: 红线
  • 中位数
  • 众数
  • 极差
  • 平均差
  • 标准差

数据分析岗位 vs 大数据开发

人人都能学会数据分析-笔记

高度 => 一般水平:均值
宽度 => 离散程度

人人都能学会数据分析-笔记

分布形态的具体体现

人人都能学会数据分析-笔记

章节回顾

  • 分布形态:图表化后呈现出来的形态
  • 常见形态:左偏分布、右偏分布、正态分布

课后作业

1、判断数据样本的分布形态
2、计算均值、中位数以及众数,能发现什么规律吗

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

2-6 识别异常值

为什么要学习异常值

人人都能学会数据分析-笔记

  • =所有数据相加/数据的个数
  • 加和:151100
  • 平均值:16789 差异:6026
  • 去除异常值:10762
  • 具有一定误导性,对异常数不敏感

什么是异常值

人人都能学会数据分析-笔记

  • 与平均值偏差极大或极小的值
  • 也叫离群点
  • 取决于分析的业务对象
  • 周期性产业

如何识别异常值

人人都能学会数据分析-笔记

观察检测值与整体数据的差异度

  • 计算与平均值的倍数
  • 更多检测方法:Tableau、Python

异常值的附加信息

基金业绩走势

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

章节回顾

  • 异常值的基本定义
  • 如何识别异常值
  • 异常值的附加价值

课后作业

人人都能学会数据分析-笔记

1、是否存在异常值
2、你是如何检测的
3、分析下可能的成因,
提示:旅游业为周期性行业
* 海南三亚交易额数据,单位:亿元

人人都能学会数据分析-笔记

2-7 处理异常值

异常值的处理

检测/识别 => 判定 => 处理

判定异常值

  1. 错误记录:修改正确

人人都能学会数据分析-笔记

  1. 错误添加:删除

人人都能学会数据分析-笔记

  1. 正确、真实
    3.1 是否反映特殊事件:修改、调整
    3.2 周期性数据:不做处理

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

处理异常值

  1. 错误数据
    填充空值
    填充样本平均值

人人都能学会数据分析-笔记

  1. 正确、真实,需要做调整的数据
    根据实际情况调整:数值*需调整比率

人人都能学会数据分析-笔记

章节回顾

检测/识别:与总体差异度
判定:是否需要处理
处理:调整方式

课后作业

人人都能学会数据分析-笔记

  1. 标红数据是否为异常值
  2. 猜测产生的原因
  3. 假设当天分红导致净值下跌3%,如何调整数值使其恢复正常水平

人人都能学会数据分析-笔记

2-8 数据分析流程

数据分析的流程

  • 目标确定
  • 数据获取
  • 数据清洗
  • 数据整理
  • 描述分析
  • 洞察结论
  • 撰写报告

目标确定

  • 解决什么问题?达到什么目的?
  • 描述性分析:针对现有情况分析
  • 预测性分析:基于现状,预测未来情况

描述性分析

人人都能学会数据分析-笔记

预测性分析

人人都能学会数据分析-笔记

数据获取

字段设计

  • 平均销售额、销售总额、增减幅度
  • 基础数据:订单号、交易日期、交易金额

数据提取

  • 销售管理软件,导入导出
  • 互联网企业,使用SQL从数据库提取

数据清洗

异常值:异常值的识别、判定、处理
空白值、无效值、重复值 => 修正、平均值填补、删除

数据整理

人人都能学会数据分析-笔记

格式化:日期的处理、行列格式化
指标计算:基础的计算,如平均值、总额

描述分析

数据描述

  • 数据的基本情况
  • 数据总数、时间跨度、数据来源等

指标统计

  • 分析实际情况的数据指标
  • 变化、分布、对比、预测

变化:随着时间变动而增减近期销售额表现

人人都能学会数据分析-笔记

分布:不同层次上的表现,地域分布、人群分布

人人都能学会数据分析-笔记

对比:数据项之间的对比、产品线对比、用户数对比
人人都能学会数据分析-笔记

预测:根据现有的增减幅度预测未来销售额

人人都能学会数据分析-笔记

洞察结论

  • 数据报告的核心
  • 体现数据分析能力

人人都能学会数据分析-笔记

撰写报告

  • 报告背景
  • 业务现状
  • 报告目的
  • 解决什么问题
  • 数据基本情况
  • 数据可信度
  • 可视化图表
  • 数据的可理解程度
  • 策略选择
  • 提出解决方案

章节回顾

  • 目标确定
  • 数据获取
  • 数据清洗
  • 数据整理
  • 描述分析
  • 洞察结论
  • 撰写报告

课后作业

人人都能学会数据分析-笔记

分析过去4周的支出情况
1. 需要哪些数据
2. 计算哪些指标

人人都能学会数据分析-笔记

第02周 Excel从入门到表格分析

1-1 Excel基本功能

招聘需求分析

人人都能学会数据分析-笔记

数据分析岗位招聘信息 => 数据分析岗位需求分析报告

Excel电子表格

预处理数据样本:清洗、提取、整合
Excel电子表格
电子:存储形式,通过电子设备存储

  • 增删改查
  • 可视化图表
  • 透视表、自动化报表
  • 打印、数据自动填充

基本功能 人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

Excel常用功能

  1. 预处理
    文本函数
    重复数据的处理
    拆分列数据
    数据排序与筛选

  2. 统计和分析
    数学函数:SUM、AVERAGE
    逻辑函数:OR、NOT
    条件聚合函数:COUNTIF、SUMIF
    LOOKUP引用函数

3.

数据透视表:Pivot Table
认识图表类型
制作可视化图表

章节回顾

7个基础功能板块
常用功能介绍

人人都能学会数据分析-笔记

课后作业

人人都能学会数据分析-笔记

  1. 公式的分类有哪些
  2. 你最常用的函数有哪些

  3. 公式的分类

  4. 自动求和

  5. 财务
  6. 逻辑
  7. 文本
  8. 日期和时间
  9. 查找和引用
  10. 数学和三角函数
  11. 其他函数

  12. 最常用的函数

  13. 数学函数

1-2 文本函数

什么是函数

计算过去4周的平均支出?

人人都能学会数据分析-笔记

什么是文本函数

对文本进行提取、查找、转换、更新的函数

人人都能学会数据分析-笔记

"文本合并"函数:CONCATENATE

文本函数的应用

人人都能学会数据分析-笔记

实战演练

1、MID函数

人人都能学会数据分析-笔记

双击第一个单元格右下角十字+,列数据自动填充

人人都能学会数据分析-笔记

2、SUBSTITUE函数

人人都能学会数据分析-笔记

3、FIND函数

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

章节回顾

文本函数:是对文本类数据进行处理

  • mid:提取文本
  • substitue:替换文本
  • find:验证文本

人人都能学会数据分析-笔记

课后作业

人人都能学会数据分析-笔记

去除以下字符:

  • 经验
  • 职位描述:
  • 岗位描述:
  • 工作职责:

人人都能学会数据分析-笔记

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B2,"工作职责:",""),"岗位职责:",""),"职位描述:","")

=MID(C2,3,6)

1-3 数学函数

什么是数学函数

  • 文本:文本函数,清洗、格式化
  • 数值:数学函数、统计计算

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

注意:

  • 1.STDEV:用途:估算样本的标准偏差。它不计算文本值和逻辑值(如 TRUE 和 FALSE)。它反映了数据相对于平均值(mean)的离散程度。
  • 2.STDEVA :基于样本估算标准偏差。标准偏差反映数值相对于平均值 (mean) 的离散程度。文本值和逻辑值(如 TRUE 和 FALSE)也将计算在内。
  • 3.STDEVP:用途:返回整个样本总体的标准偏差。它反映了样本总体相对于平均值(mean)的离散程度。

简单说函数stdev的根号里面的分母是n-1,而stdevp是n,如果是抽样当然用stdev。
在十个数据的标准偏差如果是总体时就用STDEVP,如果是样本是就用STDEV。
至于STDEVA与STDEV差不多,只不过它可以把逻辑值当数值处理。

章节回顾

  • 数学函数:是对数值类数据进行计算
  • 基本功能:数学换算、统计、类型转换
  • 计算集中趋势、离散趋势

课后作业

人人都能学会数据分析-笔记

计算集中趋势指标:平均值、中位数、众数

人人都能学会数据分析-笔记

1-4 处理重复数据

数据预处理的重要性

清洗、格式化、去重、排序、基础计算 >=50%
数据准确性
统计结果与结论

数据预处理的内容

数据的清理

  • 缺失值
  • 离群值/异常值
  • 重复值

数据的合并、汇总

  • 删除、均值填充

如何定位重复数据

人人都能学会数据分析-笔记

针对海量数据,如何快速定位?

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

选择单列或这个文本,进行去重处理,结果不是想要的。

人人都能学会数据分析-笔记

清除规则

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

章节回顾

  • 预处理流程:数据清洗、整合
  • 定位重复项:开始菜单-单元格规则,单列重复项、手动
  • 去除重复项:数据菜单-去除重复项,多列重复项、自动

课后作业

人人都能学会数据分析-笔记

    1. 去重招聘信息
    1. 回答去重后的行数

人人都能学会数据分析-笔记

1-5 拆分列数据

为什么要拆分列数据

人人都能学会数据分析-笔记

实例演练

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

点击【下一步】,再点击【完成】

人人都能学会数据分析-笔记

将所有列都去重处理,再放在同一列,然后进行去重处理即可

如何拆分列数据

导入数据时的分列

  • 数据 - 导入格式 => CSV
  • 最常用的数据格式,可读性,便利性
  • 爬虫,最常用的存储方式

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

章节回顾

拆分列数据

    1. 现有数据
    1. 导入数据

人人都能学会数据分析-笔记

课后作业

人人都能学会数据分析-笔记

  1. 拆分类别数据
  2. 对拆分后的数据去重
  3. 统计标签个数:81

1-6 数据排序和筛选

为什么要排序

人人都能学会数据分析-笔记

单位招聘需求量
薪资范畴
工作经验要求
× 理性认识
√ 排序

如何对数据进行排序

根据工作经验排序,选中所有,【排序和筛选】-【自定义排序】-【工作经验】

人人都能学会数据分析-笔记

将"经验1年以下"改成"经验0-1年"
将"经验应届毕业生"改成"经验0 经验应届毕业生"

【排序和筛选】-【筛选】,选中"数据分析师"

人人都能学会数据分析-笔记

章节回顾

  • 排序:形成更直观的认识
  • 筛选:快速提取数据,且不影响原有数据

课后作业

人人都能学会数据分析-笔记

  1. 薪资区间从小到大排序
  2. 筛选出薪资10k-20k,地点上海,工作经验1-3年的数据

人人都能学会数据分析-笔记

2-1 逻辑函数

数据预处理

  • 函数的概念,基本使用方法:文本函数+数学函数
  • 清洗、预处理:去重、分列,排序与筛选

什么是逻辑函数

人人都能学会数据分析-笔记

  • 正在下雨:TRUE真
  • 没有下雨:FALSE假
  • 能明确用[是否]或[真假]这样的逻辑值来回答

什么是逻辑值

真假:TRUE FALSE 1 0, 一种计算机语言
逻辑值的运算:与运算 AND、或运算OR、非运算NOT

逻辑运算:与、或、非
交集
1 && 1 = 1
1 && 0 = 0
0 && 0 = 0

并集
1 || 1 = 1
1 || 0 = 1
0 || 0 = 0

求反
!0 = 1
!1 = 0

逻辑函数的基本功能

人人都能学会数据分析-笔记

根据发布时间确定上下午

人人都能学会数据分析-笔记

=IF(INT(LEFT(O5,2))<10,"早上",if(int(left(o5,2))<12,"上午","下午")) =if(int(left(o5,2))<12,"上午","下午")< code></10,"早上",if(int(left(o5,2))<12,"上午","下午"))>

章节回顾

  • 对推论进行真假判断的函数
  • IF函数:对不同的判断结果进行数值匹配

课后作业

人人都能学会数据分析-笔记

判断岗位是否为数据分析师
1)是,输出"目标岗位"
2)不是,输出空值""

人人都能学会数据分析-笔记

=IF(COUNTIF(A2,"*&#x5F00;&#x53D1;*"),"&#x5F00;&#x53D1;&#x5C97;","&#x975E;&#x5F00;&#x53D1;&#x5C97;")
=IF(A2="&#x6570;&#x636E;&#x5206;&#x6790;&#x5E08;","&#x76EE;&#x6807;&#x5C97;&#x4F4D;","")

2-2 条件聚合函数

什么是条件聚合函数

人人都能学会数据分析-笔记

职位需求总数:SUM函数
一二三线城市职位需求总数:?

人人都能学会数据分析-笔记

SUM函数:点选符合标准的城市
缺点:

  • 太慢,每次都需要点选
  • 不灵活,不能随原始数据变化

SUMIF(S)条件聚合函数:在公式中写死条件,原始数据顺序随意

=SUMIFS(E:E,D:D,{"&#x5317;&#x4EAC;","&#x4E0A;&#x6D77;","&#x5E7F;&#x5DDE;","&#x6DF1;&#x5733;"})

如何使用条件聚合函数

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

章节回顾

条件聚合函数:对符合特定条件的数据项进行统计;数学函数 + 逻辑函数
SUMIF(S):针对符合条件的数据项 求和
COUNTIF(S):针对符合条件的数据项 计次

课后作业

人人都能学会数据分析-笔记

  1. 对招聘岗位进行去重处理
  2. 统计每一类岗位出现的总次数
  3. 统计 开发工程师与非开发工程师的职位总数

人人都能学会数据分析-笔记

&#x7EDF;&#x8BA1;&#x9891;&#x7387;&#xFF1A;=COUNTIF(C:C,E2)
&#x5F00;&#x53D1;&#x7C7B;&#x5C97;&#x4F4D;&#xFF1A;=COUNTIF(C:C,"*&#x5F00;&#x53D1;&#x5DE5;&#x7A0B;&#x5E08;*")

2-5 认识图表

为什么要可视化数据

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

异常数据?
特殊现象?

人人都能学会数据分析-笔记

  • 人对图形比文字更敏感
  • 逐步发展、广泛使用

图表类型

对比分析:数据项之间的大小关系, 比较型图表

人人都能学会数据分析-笔记

职位需求量与城市划分类型存在相关性?

  • 两组数据的相关性分析
  • 散点图

人人都能学会数据分析-笔记

变量A随着变量B增加
正相关
关系型图表
城市划分:GDP从小到大

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

章节回顾

可视化数据的重要性:更有助于理解
图表类型

  • 折线图:基于时间的变化
  • 直方图:比较类别数据的大小
  • 散点图:变量间的相关性
  • 饼图、堆积图:部分与整体的比例关系

课后作业

  1. 高频能力要求
  2. 近5年职位需求分析
  3. 行业类型与平均薪酬
  4. 数据洞察

人人都能学会数据分析-笔记

2-3 查找与引用函数

什么是查找与引用函数

人人都能学会数据分析-笔记

VLOOKUP函数

人人都能学会数据分析-笔记

  • MAX(数据区域)
  • *VLOOKUP(..)

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

  • 消耗人工
  • Excel自动化:设定函数、自动化提取

如何使用VLOOKUP函数

2-8 本章小结

如何使用Excel进行数据分析

  1. 预处理

  2. 文本函数

  3. 数学函数
  4. 去重功能
  5. 列拆分

  6. 汇总与统计

  7. 逻辑函数

  8. 条件聚合函数
  9. 查找与引用函数
  10. 数据透视表

  11. 可视化

  12. 选择图表

  13. 创建图表

数据分析人才需求报告
数据洞察:数据报告

章节预告

  • 数据提取工具:SQL
  • 数据可视化面板:Tableau
  • 大数据处理与分析语言:Python
  • 2D绘图库:Matplotlib

第06周 Python实现网络爬虫

1-1 什么是爬虫

电影 => 电影评分网站 => 抓取网站信息

人人都能学会数据分析-笔记

爬取信息

为什么要爬虫

人人都能学会数据分析-笔记

推荐观看指数 = 评分0.2 + 导演0.2 + 演员0.2 + 评价分数0.4 + 剧情偏好

Python如何实现爬虫

定位目标网址:url
获取网页信息:Requests库
提取目标信息:网页结构,BeautifulSoup库

章节回顾

爬虫是什么:利用技术手段实现网页信息的抓取
为什么要爬虫:获取以及处理信息的效率倍增
如何实现:Requests库,访问并获取网页信息
BeautifulSoup库,解析并提取信息

课后作业

  1. 访问网页并获取网页信息,可以使用的Python库?
  2. 解析网页结构并提取目标信息,可以使用的Python库?

    1. request库
    1. beautifulsoup库

1-2 Requests库入门

Requests 提供哪些功能

  • 官网文档
  • 实例代码,功能说明
  • 应用过程中遇到问题
  • 搜索解决方案

在百度里搜【requests官方中文文档】,选择【快速入手】

https://docs.python-requests.org/zh_CN/latest/user/quickstart.html

人人都能学会数据分析-笔记

https://html5-editor.net/ &#xA0;# &#x53EF;&#x5C06;html&#x4EE3;&#x7801;&#x653E;&#x5165;&#x6B64;&#x7F51;&#x7AD9;&#x67E5;&#x770B;&#x7F51;&#x9875;&#x663E;&#x793A;&#x60C5;&#x51B5;

Request库入门.py

# &#x5BFC;&#x5165;&#x6A21;&#x5757;
# &#x9700;&#x8981;&#x5B89;&#x88C5;Requests&#x5E93;&#xFF0C;&#x53EF;&#x901A;&#x8FC7;anaconda&#x5B89;&#x88C5; &#x6216; pip install requests
import requests

# https://movie.douban.com/

# &#x5B9A;&#x4E49;url
url_douban_movie = 'https://movie.douban.com/'  # &#x6CE8;&#x610F;&#xFF1A;http&#x548C;https&#x4E00;&#x5B9A;&#x8981;&#x6DFB;&#x52A0;
# headers &#x5728;requests&#x5165;&#x624B;&#x6587;&#x6863;&#x4E2D;&#x641C;&#x7D22;headers
headers = {'user-agent': 'my-app/0.0.1'}

# &#x8BBF;&#x95EE;&#x3001;&#x5E76;&#x83B7;&#x53D6;&#x7F51;&#x9875;&#x4FE1;&#x606F;
# response &#x54CD;&#x5E94; request &#x8BF7;&#x6C42;
# response_douban_movie = requests.get(url=url_douban_movie)    # &#x6B64;&#x65F6;&#x6253;&#x5370;&#x9875;&#x9762;&#x5185;&#x5BB9;&#x4E3A;&#x7A7A;&#xFF0C;&#x7F51;&#x7AD9;&#x6709;&#x53CD;&#x722C;&#x866B;&#x673A;&#x5236;&#xFF0C;&#x52A0;&#x4E0A;headers&#x53C2;&#x6570;&#x4F2A;&#x88C5;&#x6210;&#x6D4F;&#x89C8;&#x5668;&#x8BF7;&#x6C42;
response_douban_movie = requests.get(url=url_douban_movie, headers=headers)
# print(response_douban_movie.text) # &#x6253;&#x5370;&#x54CD;&#x5E94;&#x5185;&#x5BB9;&#xFF0C;&#x6B64;&#x65F6;&#x4E3A;&#x9875;&#x9762;html&#x4EE3;&#x7801;&#xFF0C;&#x53EF;&#x590D;&#x5236;html&#x4EE3;&#x7801;&#x4FDD;&#x5B58;&#x5230;&#x6587;&#x4EF6;test.html
# https://html5-editor.net/  &#x53EF;&#x5C06;html&#x4EE3;&#x7801;&#x653E;&#x5165;&#x6B64;&#x7F51;&#x7AD9;&#x67E5;&#x770B;&#x7F51;&#x9875;&#x663E;&#x793A;&#x60C5;&#x51B5;

# XX&#x7535;&#x5F71;&#x4E3B;&#x9875;
url2 = "https://movie.douban.com/subject/34961898/"
# url2 = "https://movie.douban.com/subject/34961898/?tag=&#x70ED;&#x95E8;&from=gaia"
response2 = requests.get(url=url2, headers=headers)
# print(response2.text)

# &#x767E;&#x5EA6;&#x767E;&#x79D1;
url3 = "https://baike.baidu.com"
response3 = requests.get(url=url3, headers=headers)
# print(response3.text)

章节回顾

基本功能:

  • 与网站简历连接
  • 抓取网站内容
  • 实现登录认证

代码编写

  • 豆瓣电影主页
  • 单个电影页面
  • 百度百科(图片加载)

课后作业

抓取豆瓣电影《楚门的世界》的网页信息:https://movie.douban.com/subject/1292064/

# &#x695A;&#x95E8;&#x7684;&#x4E16;&#x754C;
import requests

headers = {'user-agent': 'my-app/0.0.1'}
url = "https://movie.douban.com/subject/1292064/"
response = requests.get(url,headers=headers)
print(response.text)

1-3 认识HTML网页结构

为什么要了解网页结构

人人都能学会数据分析-笔记

https://movie.douban.com/subject/1292064/
打开页面
快捷键 F12/Ctrl+Shift+I,打开开发者工具
Elements板,最左边小箭头,可用于查看页面元素,可临时修改页面内容

人人都能学会数据分析-笔记

HTML网页结构

<!DOCTYPE html>
<html>
<head>&#x6807;&#x9898;</head>
<body>
<div>&#x7535;&#x5F71;&#x7B80;&#x4ECB;
    <img src="http://xxx.com" name="&#x7535;&#x5F71;&#x5C01;&#x9762;">
</div>
<div id="features">&#x7279;&#x8272;&#x4ECB;&#x7ECD;</div>
<div>&#x5F71;&#x8BC4;
    <p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x6BB5;&#x843D;
        <span>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x91CD;&#x70B9;</span>
    </p>
    <p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x6BB5;&#x843D;
        <span>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x91CD;&#x70B9;</span>
    </p>
    <p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x6BB5;&#x843D;
        <span>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x91CD;&#x70B9;</span>
    </p>
</div>
<div>&#x76F8;&#x5173;&#x63A8;&#x8350;</div>
</body>
</html>

章节回顾

认识网页结构:通过网页标签定位数据
定位标识符:浏览器开发者工具,目标信息的标签、标识
网页的基本结构

人人都能学会数据分析-笔记

课后作业

改写电影页面《楚门的世界》:
1.将名字改为《真实的世界》
2.将简介改为:"感人至深的爱情故事"
3.将电影封面改为任意网络图片(替换图片链接)

人人都能学会数据分析-笔记人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

1-4 BeautifulSoup库入门

BeautifulSoup 有哪些功能

  • 官网文档
  • 实例代码,功能说明
  • 应用过程中遇到问题
  • 搜索解决方案

在百度里搜【BeatuifulSoup 官方文档】,选择【快速入手】

https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

人人都能学会数据分析-笔记

人人都能学会数据分析-笔记

安装命令:

pip install beautifulsoup4

BeatifulSoup库入门.py

import requests
from bs4 import BeautifulSoup

# &#x83B7;&#x53D6;&#x7F51;&#x9875;&#x5168;&#x90E8;&#x4FE1;&#x606F;
url = "https://movie.douban.com/subject/1292064/"
headers = {'user-agent': 'my-app/0.0.1'}
response = requests.get(url=url,headers=headers)
# print(response.text)

# print("\n"+("-"*50))  # print("\n--------------------------")

# &#x89E3;&#x6790;&#x7F51;&#x9875;
soup = BeautifulSoup(response.text, 'html.parser')
# print(soup.prettify())    # &#x6309;&#x7167;&#x6807;&#x51C6;&#x7684;&#x7F29;&#x8FDB;&#x683C;&#x5F0F;&#x7684;&#x7ED3;&#x6784;&#x8F93;&#x51FA;
# soup = soup.prettify()

# &#x67E5;&#x770B;  Beautiful Soup &#x6587;&#x6863;&#x3010;&#x6307;&#x5B9A;&#x6587;&#x6863;&#x89E3;&#x6790;&#x5668;&#x3011;
# &#x63D0;&#x53D6;&#x76EE;&#x6807;&#x6D88;&#x606F;
# print(soup.title) # &#x63D0;&#x53D6;title&#x6807;&#x7B7E;
# print(soup.title.text) # &#x63D0;&#x53D6;title&#x6807;&#x7B7E;&#x5185;&#x5BB9;
print(soup.title.string) # &#x6807;&#x9898;
# print(soup.find_all(property="v:summary"))    # property="v:summary"
print(soup.find_all(property="v:summary")[0].text)

人人都能学会数据分析-笔记

章节回顾

基本功能:匹配目标标签、提取信息
代码编写:

soup = BeautifulSoup(html)
soup.prettify()
soup.find(tag=value)

课后作业

  1. 美化获取到的网页数据
  2. 提取标签文本
  3. 提取短评部分的所有文本

人人都能学会数据分析-笔记

2-1 获取目标信息

Python阶段目标

  • 分析电影数据
  • 电影总量、评分情况、国家分布、题材偏好
  • 获取数据、预处理、计算分析、可视化

获取数据-电影简介

人人都能学会数据分析-笔记

获取目标信息.py

import requests
from bs4 import BeautifulSoup

def get_list(soup_list):
"""
        &#x6E05;&#x6D17;&#x89E3;&#x6790;&#x540E;&#x7684;&#x7F51;&#x9875;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x4EE5;&#x5217;&#x8868;&#x5F62;&#x5F0F;&#x8FD4;&#x56DE;
        :params soup_list&#xFF1A; bs_list
        :return: list
"""
    list = []
    for ele in soup_list:
        list.append(ele.string)
    return list

# &#x8BBF;&#x95EE;&#x7F51;&#x9875;&#x3001;&#x83B7;&#x53D6;&#x4FE1;&#x606F;
url = "https://movie.douban.com/subject/1292064/"
headers = {'user-agent': 'my-app/0.0.1'}
response = requests.get(url=url,headers=headers)

# &#x83B7;&#x53D6;&#x76EE;&#x6807;&#x4FE1;&#x606F;
soup = BeautifulSoup(response.text,'html.parser')
# print(soup.prettify())

# &#x5B58;&#x50A8;&#x5BB9;&#x5668;
movie_info = {}

# &#x7535;&#x5F71;&#x540D;&#x79F0;
# property="v:itemreviewed"
# movie_name = soup.find(property="v:itemreviewed")
movie_info['title'] = soup.find(property="v:itemreviewed").string
# print(movie_name)

# &#x7B80;&#x4ECB;&#x90E8;&#x5206;
movie_info['director'] = soup.find(rel="v:directedBy").string  #&#x5BFC;&#x6F14;
movie_info['writer'] = soup.find_all(class_="attrs")[1].string  # &#x7F16;&#x5267;

# actlist = soup.find_all(rel="v:starring")

# for &#x904D;&#x5386;&#x6570;&#x636E;&#x9879;&#xFF0C;.string&#x83B7;&#x53D6;&#x76EE;&#x6807;&#x4FE1;&#x606F;
# act_list = []
# for ele in soup.find_all(rel="v:starring"):
#   act_list.append(ele.string)
# # print(act_list)
# actors = act_list # &#x6F14;&#x5458;&#x5217;&#x8868;

movie_info['actors'] = get_list(soup.find_all(rel="v:starring"))  # &#x6F14;&#x5458;&#x5217;&#x8868;
movie_info['genre'] = get_list(soup.find_all(property="v:genre"))  # &#x7C7B;&#x578B;
movie_info['language'] = soup.find(text="&#x8BED;&#x8A00;:").next_element.strip()  # &#x8BED;&#x8A00;
movie_info['release_date'] = soup.find(property="v:initialReleaseDate").string  # &#x4E0A;&#x6620;&#x65E5;&#x671F;
movie_info['runtime'] = soup.find(property="v:runtime").string  # &#x7247;&#x957F;

# &#x8BC4;&#x5206;&#x90E8;&#x5206;
movie_info['average'] = soup.find(property="v:average").string
movie_info['votes'] = soup.find(property="v:votes").string

# print(movie_info)

# for k,ele in movie_info.items():
#   print(k,': ',ele)

for key in movie_info:
    print(key, ': ', movie_info.get(key))

章节回顾

Python阶段目标

  • 电影信息的抓取、存储
  • 预处理、计算分析、可视化

提取电影信息

人人都能学会数据分析-笔记

课后作业

提取电影基础数据

人人都能学会数据分析-笔记

2-2 连续获取多个页面信息

为什么要实现连续抓取

一部电影:电影单链
大量数据:

人人都能学会数据分析-笔记

电影链接 => 访问链接,获取基础数据 => 提取数据、页面跳转?

连续获取多个页面信息.py

import requests
from bs4 import BeautifulSoup

# &#x8BBF;&#x95EE;top250&#x4E3B;&#x9875;&#xFF1B;&#x8BBF;&#x95EE;&#x9875;&#x9762;&#x3001;&#x83B7;&#x53D6;&#x4FE1;&#x606F;
# base_url = "https://movie.douban.com/top250"
headers = {'user-agent': 'my-app/0.0.1'}

# &#x8DF3;&#x8F6C;&#x9875;&#x9762; ?start=225&filter=
# &#x5148;&#x8BBF;&#x95EE;url&#x94FE;&#x63A5;&#xFF0C;&#x52A0;&#x4E0A;&#x53C2;&#x6570;0,25,50,75~225
page = 0
max_page = 225  # start&#x53C2;&#x6570;&#x5BF9;&#x5E94;&#x7684;&#x503C;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x7B2C;10&#x9875;&#x5BF9;&#x5E94;&#x7684;start&#x503C;

movie_links = []
movie_names = []
while page<=max_page: # 访问页面 url="https://movie.douban.com/top250?start=" + page.__str__() "&filter="
    response = requests.get(url=url,headers=headers)

    # &#x5B9E;&#x73B0;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x4FE1;&#x606F;&#x7684;&#x6293;&#x53D6;: &#x7535;&#x5F71;&#x5355;&#x94FE;
    soup = BeautifulSoup(response.text,'html.parser')
    # print(soup.find_all(class_=" hd")) for ele in soup.find_all(class_="hd" ): print(ele.find(class_="title" ).string) print(ele.find('a',href="True).attrs['href'])" beautifulsoup如何获取到href movie_names.append(ele.find(class_="title" movie_links.append(ele.find('a',href="True).attrs['href'])" 修改start参数 page 验证数据正确性 print(url) 浏览所有抓取到的信息 name,link zip(movie_names,movie_links): print(name, ': ', link) movie_links="[]" movie_names="[]" base_url="https://movie.douban.com/top250" start range(0,250,25): "?start=" + start.__str__() + " &filter="
#   response = requests.get(url=url,headers=headers)
#   soup = BeautifulSoup(response.text,'html.parser')

#   for title in soup.find_all(class_=" hd"): movie_names.append(title.find(class_="title" movie_links.append(title.find('a',href="True).attrs['href'])" movie_name,movie_link print(movie_name, movie_link)< code></=max_page:>

章节回顾

为什么要连续抓取

  • 大数据的需求
  • 自动化的手段快速获取数据

如何实现连续抓取

  • 理清跳转页面的逻辑
  • URL参数控制显示页面

代码编写

  • 跳转页面、抓取链接

课后作业

抓取TOP250所有高分电影链接

人人都能学会数据分析-笔记

2-3 整合爬虫功能函数

函数

  • 获取网页信息
  • 获取电影链接
  • 爬取电影信息

人人都能学会数据分析-笔记

  • 随意组合、按序执行:检索麻烦、多次改动
  • 变量、函数:结构化、灵活更新

整合爬虫功能函数.py

import requests
from bs4 import BeautifulSoup

headers = {'user-agent': 'my-app/0.0.1'}
movie_links = []
movie_names = []

def get_list(soup_list):
"""
        &#x6E05;&#x6D17;&#x89E3;&#x6790;&#x540E;&#x7684;&#x7F51;&#x9875;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x4EE5;&#x5217;&#x8868;&#x5F62;&#x5F0F;&#x8FD4;&#x56DE;
        :params soup_list&#xFF1A; bs_list
        :return: list
"""
    list = []
    for ele in soup_list:
        list.append(ele.string)
    return list

# 1. &#x8BBF;&#x95EE;&#x4E3B;&#x9875;&#x9762;&#xFF0C;&#x5E76;&#x4E14;&#x5B8C;&#x6210;&#x9875;&#x9762;&#x8DF3;&#x8F6C;
def get_page(page_link):
    page = 0
    max_page = 225  # start&#x53C2;&#x6570;&#x5BF9;&#x5E94;&#x7684;&#x503C;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x7B2C;10&#x9875;&#x5BF9;&#x5E94;&#x7684;start&#x503C;

    while page<=max_page: # 访问页面 url="page_link" + "?start=" + page.__str__() + " &filter="
        response = requests.get(url=url,headers=headers)
        get_links(response)

        # &#x4FEE;&#x6539;start&#x53C2;&#x6570;
        page += 25
        # print(url)

# 2. &#x6293;&#x53D6;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x6240;&#x6709;&#x7684;&#x7535;&#x5F71;&#x94FE;&#x63A5;
def get_links(response):
    # &#x5B9E;&#x73B0;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x4FE1;&#x606F;&#x7684;&#x6293;&#x53D6;: &#x7535;&#x5F71;&#x5355;&#x94FE;
    soup = BeautifulSoup(response.text,'html.parser')
    for ele in soup.find_all(class_=" hd"): movie_names.append(ele.find(class_="title" ).string) movie_links.append(ele.find('a',href="True).attrs['href'])" 3. 根据电影链接,获取基本信息、评分信息 def get_infos(url): 访问网页、获取信息 response="requests.get(url=url,headers=headers)" 获取目标信息 soup="BeautifulSoup(response.text,'html.parser')" 存储容器 movie_info="{}" movie_info['title']="soup.find(property="v:itemreviewed").string" try: 简介部分 movie_info['director']="soup.find(rel="v:directedBy").string" #导演 movie_info['writer']="soup.find_all(class_="attrs")[1].string" 编剧 writer="soup.find_all(class_="attrs")" if len(writer)>1:
        #   movie_info['writer'] = soup.find_all(class_="attrs")[1].string
        # else:
        #   movie_info['writer'] = ""
        movie_info['writer'] = soup.find_all(class_="attrs")[1].string if len(writer)>1 else ""

        movie_info['actors'] = get_list(soup.find_all(rel="v:starring"))  # &#x6F14;&#x5458;&#x5217;&#x8868;
        movie_info['genre'] = get_list(soup.find_all(property="v:genre"))  # &#x7C7B;&#x578B;
        movie_info['language'] = soup.find(text="&#x8BED;&#x8A00;:").next_element.strip()  # &#x8BED;&#x8A00;
        movie_info['release_date'] = soup.find(property="v:initialReleaseDate").string  # &#x4E0A;&#x6620;&#x65E5;&#x671F;
        movie_info['runtime'] = soup.find(property="v:runtime").string  # &#x7247;&#x957F;

        # &#x8BC4;&#x5206;&#x90E8;&#x5206;
        movie_info['average'] = soup.find(property="v:average").string
        movie_info['votes'] = soup.find(property="v:votes").string
    except AttributeError:
        print("&#x7535;&#x5F71;&#x5DF2;&#x4E0B;&#x67B6;")

    for key in movie_info:
        print(key, ': ', movie_info.get(key))
    print('*'*100)

    # return movie_info

# &#x83B7;&#x53D6;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x4FE1;&#x606F; > &#x8C03;&#x7528;&#x4E86;&#x83B7;&#x53D6;&#x9875;&#x9762;&#x6240;&#x6709;&#x7535;&#x5F71;&#x94FE;&#x63A5; > for&#x5FAA;&#x73AF;&#xFF0C;&#x8C03;&#x7528;&#x83B7;&#x53D6;&#x4FE1;&#x606F;&#x7684;&#x529F;&#x80FD;
if __name__ == '__main__':
    # &#x8C03;&#x7528;&#x529F;&#x80FD;1.&#x5B9E;&#x73B0;&#x9875;&#x9762;&#x7684;&#x8BBF;&#x95EE;
    get_page(page_link="https://movie.douban.com/top250")
    # &#x6D4B;&#x8BD5;
    # get_infos("https://movie.douban.com/subject/26430107/")
    # exit()

    # &#x83B7;&#x53D6;&#x6240;&#x6709;&#x94FE;&#x63A5;
    # &#x6D4F;&#x89C8;&#x6240;&#x6709;&#x6293;&#x53D6;&#x5230;&#x7684;&#x4FE1;&#x606F;
    for name,link in zip(movie_names,movie_links):
        print(name, ': ', link)
        get_infos(link)</=max_page:>

章节回顾

  • 为什么要函数化:结构化、改动方便、随意调用
  • 如何函数化:def定义、功能拆分为函数
  • 代码编写:跳转页面、抓取链接、抓取信息

获取网页信息
获取电影链接
爬取电影信息

课后作业

抓取TOP250所有高分电影信息

人人都能学会数据分析-笔记

2-4 数据存储与代码优化

import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {'user-agent': 'my-app/0.0.1'}
movie_links = []
movie_names = []
all_infos = []

def get_list(soup_list):
"""
        &#x6E05;&#x6D17;&#x89E3;&#x6790;&#x540E;&#x7684;&#x7F51;&#x9875;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x4EE5;&#x5217;&#x8868;&#x5F62;&#x5F0F;&#x8FD4;&#x56DE;
        :params soup_list&#xFF1A; bs_list
        :return: list
"""
    list = []
    for ele in soup_list:
        list.append(ele.string)
    return list

# 1. &#x8BBF;&#x95EE;&#x4E3B;&#x9875;&#x9762;&#xFF0C;&#x5E76;&#x4E14;&#x5B8C;&#x6210;&#x9875;&#x9762;&#x8DF3;&#x8F6C;
def get_page(page_link):
    # page = 0
    page = 200
    max_page = 225  # start&#x53C2;&#x6570;&#x5BF9;&#x5E94;&#x7684;&#x503C;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x7B2C;10&#x9875;&#x5BF9;&#x5E94;&#x7684;start&#x503C;

    while page<=max_page: # 访问页面 url="page_link" + "?start=" + page.__str__() + " &filter="
        response = requests.get(url=url,headers=headers)
        get_links(response)

        # &#x4FEE;&#x6539;start&#x53C2;&#x6570;
        page += 25
        # print(url)

# 2. &#x6293;&#x53D6;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x6240;&#x6709;&#x7684;&#x7535;&#x5F71;&#x94FE;&#x63A5;
def get_links(response):
    # &#x5B9E;&#x73B0;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x4FE1;&#x606F;&#x7684;&#x6293;&#x53D6;: &#x7535;&#x5F71;&#x5355;&#x94FE;
    soup = BeautifulSoup(response.text,'html.parser')
    for ele in soup.find_all(class_=" hd"): movie_names.append(ele.find(class_="title" ).string) movie_links.append(ele.find('a',href="True).attrs['href'])" 3. 根据电影链接,获取基本信息、评分信息 def get_infos(url): 访问网页、获取信息 response="requests.get(url=url,headers=headers)" 获取目标信息 soup="BeautifulSoup(response.text,'html.parser')" 存储容器 movie_info="{}" movie_info['title']="soup.find(property="v:itemreviewed").string" try: 简介部分 movie_info['director']="soup.find(rel="v:directedBy").string" #导演 movie_info['writer']="soup.find_all(class_="attrs")[1].string" 编剧 writer="soup.find_all(class_="attrs")" if len(writer)>1:
        #   movie_info['writer'] = soup.find_all(class_="attrs")[1].string
        # else:
        #   movie_info['writer'] = ""
        # movie_info['writer'] = soup.find_all(class_="attrs")[1].string if len(writer)>1 else ""
        movie_info['writer'] = get_list(soup.find_all(class_="attrs")[1].find_all('a')) if len(writer)>1 else ""

        movie_info['actors'] = get_list(soup.find_all(rel="v:starring"))  # &#x6F14;&#x5458;&#x5217;&#x8868;
        movie_info['genre'] = get_list(soup.find_all(property="v:genre"))  # &#x7C7B;&#x578B;
        movie_info['language'] = soup.find(text="&#x8BED;&#x8A00;:").next_element.strip()  # &#x8BED;&#x8A00;
        movie_info['release_date'] = soup.find(property="v:initialReleaseDate").string  # &#x4E0A;&#x6620;&#x65E5;&#x671F;
        movie_info['runtime'] = soup.find(property="v:runtime").string  # &#x7247;&#x957F;

        # &#x8BC4;&#x5206;&#x90E8;&#x5206;
        movie_info['average'] = soup.find(property="v:average").string
        movie_info['votes'] = soup.find(property="v:votes").string
        movie_info['link'] = url  # &#x94FE;&#x63A5;
    except AttributeError:
        print("&#x7535;&#x5F71;&#x5DF2;&#x4E0B;&#x67B6;")

    # for key in movie_info:
    #   print(key, ': ', movie_info.get(key))
    # print('*'*100)

    # &#x7535;&#x5F71;&#x4FE1;&#x606F;&#x5B58;&#x5230;&#x5217;&#x8868;&#x4E2D;
    all_infos.append(movie_info)
    # return movie_info

# &#x83B7;&#x53D6;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x4FE1;&#x606F; > &#x8C03;&#x7528;&#x4E86;&#x83B7;&#x53D6;&#x9875;&#x9762;&#x6240;&#x6709;&#x7535;&#x5F71;&#x94FE;&#x63A5; > for&#x5FAA;&#x73AF;&#xFF0C;&#x8C03;&#x7528;&#x83B7;&#x53D6;&#x4FE1;&#x606F;&#x7684;&#x529F;&#x80FD;
if __name__ == '__main__':
    # &#x8C03;&#x7528;&#x529F;&#x80FD;1.&#x5B9E;&#x73B0;&#x9875;&#x9762;&#x7684;&#x8BBF;&#x95EE;
    get_page(page_link="https://movie.douban.com/top250")
    # &#x6D4B;&#x8BD5;
    # get_infos("https://movie.douban.com/subject/26430107/")
    # exit()

    # &#x83B7;&#x53D6;&#x6240;&#x6709;&#x94FE;&#x63A5;
    # &#x6D4F;&#x89C8;&#x6240;&#x6709;&#x6293;&#x53D6;&#x5230;&#x7684;&#x4FE1;&#x606F;
    for name,link in zip(movie_names,movie_links):
        print(name, ': ', link)
        get_infos(link)

    # print(all_infos)
    # &#x5C06;&#x7535;&#x5F71;&#x4FE1;&#x606F;&#x8F6C;&#x4E3A;&#x4E8C;&#x7EF4;&#x8868;&#xFF0C;&#x5E76;&#x5B58;&#x5230;&#x7535;&#x5B50;&#x8868;&#x683C;&#x4E2D;
    data = pd.DataFrame(all_infos)
    data.to_excel("250&#x90E8;&#x9AD8;&#x5206;&#x7535;&#x5F71;.xlsx")</=max_page:>

章节回顾

list数据容器

  • 存储多条电影数据

pandas库

  • DataFrame转换为二维表
  • to_excel存储为电子表格

课后作业

将250部电影信息存储为Excel电子表格

人人都能学会数据分析-笔记

Original: https://blog.csdn.net/mysteryflower/article/details/122923116
Author: mysteryflower
Title: 人人都能学会数据分析-笔记



相关阅读

Title: TensorFlow GPU最完整的安装方法

自己这几天更换电脑,再加上前次旧电脑学习,安装了好几次TensorFlow,每次都遇到了一些问题,经常缺一些文件,在网上下载文件还很慢,走了不少弯路,特将完整的安装方法记录如下,以便后续使用,也供同行参考。

TensorFlow的学习需要有专门的Nvida的GPU显卡的电脑,GPU的显存最好在4G以上,我以前那台电脑只有1G显示只能学习一些非常初级模型,稍微复杂的模型就无法运行。对于没有GPU独显的同学,可以使用百度的AI Studio,上面提供免费的GPU服务器,每天可以免费使用8小时,并且直接安装好百度的PaddlePaddle,系统已经配置好,也可以快速学习人工智能。

一、了解显卡性能及支持的CUDA版本

可以在终端界面,通过nvidia-smi命令查看你的也显卡信息,查看你的电脑是上否有支持CUDA的显卡及相应的型号、显存。
人人都能学会数据分析-笔记
也可以在控制面板中找NVIDIA Control Panel程序,升级Windows 11后发现控制面板中没有NVIDIA的控制面板了,可以在开启程序中通过查找找到。
人人都能学会数据分析-笔记
在NVIDIA控制面板中,通过帮助查单–>系统信息–>组件,找到如下图所示NVCUDA64.dll程序所对应的版本,就是你计算机上CUDA能支持的版本,后续在下载CUDA时一定要与此相匹配,避免兼容性和莫名其妙的问题出现。我的笔记本是新的,显卡是Geforce Rtx 3060,安装的CUDA驱动程序是11.2版本,后续要查找与之对应的CUDA、CUDNN、Tensorflow-GPU版本进行安装,否则会出现不匹配的情况。人人都能学会数据分析-笔记

; 二、确定TensorFlow与Python版本

在TensorFlow官网的安装指南给出了TensorFlow、Python、CUDA对应的版本,我在前期学习中,由于安装版本问题,走了不少弯路。具体请参阅。人人都能学会数据分析-笔记
根据前面查询到的CUDA版本11.2,我决定尽可能安装高一些版本的工具,以减少后续组件升级的工作量,因此我确定安装cudnn 8.1,python 3.9,tensorflow 2.6作这台新电脑的研究环境。对于python和tensorflow可以不同项目使用不同的版本,自己后续可以根据项目需要进行调整,但需要尽可能在上图官方已经测试的版本中选择,否则可能出一些兼容性问题。

三、安装CUDA及cuDNN

1、CUDA及cuDNN下载

CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。

cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。

CUDA看作是一个工作台,cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。

CUDA下载链接为:https://developer.nvidia.com/cuda-toolkit-archive,找到第一章信息对应的板版本。如下图所示,没有对应的Windows11版本,可以用Windows 10对应的版本可以安装和使用。文件比较大,请使用迅雷等下载工具下载,否则容易下载失败。另下载注意使用Local全部下载,后续查找缺少的Dll文件需要。人人都能学会数据分析-笔记
cuDNN的下载需要注册一下Nvidia开发帐号才能下载,下载地址为:https://developer.nvidia.com/cudnn。根据网站提示,先用邮箱注册一个开发者帐号,登录后出来下载下载页面,根据第二章确定的cuDNN版本,从归档历史库下载你计算机匹配的cuDNN版本。人人都能学会数据分析-笔记
2、CUDA安装

安装cuda时,第一次会让设置临时解压目录,第二次会让设置安装目录;临时解压路径,建议默认即可,也可以自定义。安装结束后,临时解压文件夹会自动删除。

安装目录,可以使用默认路径,也可以使用指定路径,关注一下安装路径,后续需要手工将几个程序所在路径加到系统环境变量的path参数中,以便于python程序调用。人人都能学会数据分析-笔记
CUDA安装过程比较简单,安装完后,将下面几个目录加到系统环境变量的path参数中,以使用python程序调用对应的程序和dll库。

CUDA文件比较大,如果你的计算机硬盘空间足够,建议用自定义选项,全部安装,避免少文件。我的计算机是SSD硬盘,空间不大,采用的是基本安装,在使用时发现少很多文件,刚开始是到网上DLL库上找并下载使用,发现存在文件不全且版本不对应情况,通过修改文件名勉强可以使用,但可能存在兼容性问题。人人都能学会数据分析-笔记
后面用winrar打开CUDA安装exe文件,可以通过查找功能找到缺少的文件,解压后放在cuda安装目录的bin文件目录下即可。红线文件是CUDA缺少的文件,绿线文件是下一步cuDNN解压拷贝的文件。人人都能学会数据分析-笔记
3、cuDNN安装

cuDNN是一些动态库文件,用解压缩软件打开,直接解压到前面一条CUDA的安装路径即可,解压后注意确认好文件的路径。此外,注意文件版本,与第2章找到的对应表对应。人人都能学会数据分析-笔记

四、Python安装

1、Python文件下载

Python下载网站:https://www.python.org/downloads/。Python下载文件不是很好找,容易跳乱,各版的下载导航连接在页面下部,参见下图。人人都能学会数据分析-笔记
同样,下载文件也是在页面下部,根据自己需要的版本、操作系统找到对应的安装文件,Python安装文件不大,下载很快。人人都能学会数据分析-笔记
2、Python安装

Python安装时,注意先将下面的增加Python 3.9到path勾选上,避免后续手工添加,另外建议用自定义安装,将python安装到一个简单、短一点的目录,后续经常要用到。人人都能学会数据分析-笔记
将python安装到C:\python目录, 同时将install for all users选项选中。人人都能学会数据分析-笔记
python安装成功后,可以在CMD终端下,用python命令进入,检查版本以及是否可用。

五、TensorFlow安装

先在Pycharm中建立一个项目,如果你使用的是其它开发工具,在你对应工具中创建项目。我这儿直接使用的是Virtualenv虚拟环境,使用要简单一些,前面使用过Anaconda,没有感觉到太大优势,问题还不少,这次就直接使用Pycharm的虚拟环境,感觉要简单一些。人人都能学会数据分析-笔记
注意选择Python解释器,如果你计算机上有多个python要选择与项目兼容的版本。

TensorFlow可以在具体项目中用pip安装,也可以用pycharm的工具安装,注意选择你电脑显卡能支持与兼容的版本,根据第二章,我选择的是2.6版本。人人都能学会数据分析-笔记
注意安装的是tensorflow-gpu,选择指定的版本,此处选择的是2.6.0,我试过用最新的2.7.0不兼容,无法使用。当前你也可以根据项目前期使用的版本选择对应的TensorFlow版本。此外还要注意对应的python、cuda版本,都要匹配才能正常使用。人人都能学会数据分析-笔记
TensorFlow安装的包比较多,速度比较慢,建议提前将pip.ini、pycharm的更新仓库都改为国内镜像:(https://pypi.tuna.tsinghua.edu.cn/simple/)。人人都能学会数据分析-笔记

六、TensorFlow及GPU验证

在项目中创建一个测试文件test.py,以下几行代码即可。

import tensorflow as tf
if tf.test.gpu_device_name():
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
else:
    print("Please install GPU version of TF")

运行test.py如下所述,系统提示运行成功,并显示出GPU的型号,计算能力,我的显卡计算能力为8.6,感觉性能应该还不错,后面根据程序实际的计算性能再发分享报告。

C:\Users\86139\PycharmProjects\test3\venv\Scripts\python.exe C:/Users/86139/PycharmProjects/test3/test.py
2021-11-13 19:50:40.703464: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.

Default GPU Device: /device:GPU:0
2021-11-13 19:50:42.588444: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Created device /device:GPU:0 with 3495 MB memory:  -> device: 0, name: GeForce RTX 3060 Laptop GPU, pci bus id: 0000:01:00.0, compute capability: 8.6
2021-11-13 19:50:42.589427: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Created device /device:GPU:0 with 3495 MB memory:  -> device: 0, name: GeForce RTX 3060 Laptop GPU, pci bus id: 0000:01:00.0, compute capability: 8.6
Process finished with exit code 0

通过安装上述工具,你可以在自己的电脑上进行人工智能的基础学习和研究。

[En]

Through the installation of the above tools, you can do basic learning and research on artificial intelligence on your own computer.

Original: https://blog.csdn.net/wujize/article/details/121329897
Author: 海盐老伍
Title: TensorFlow GPU最完整的安装方法

相关文章
怎么才能在手机上把语音转成文字啊? 人工智能

怎么才能在手机上把语音转成文字啊?

语音转文字是生活中经常遇到的问题,借助的录音快速几率会议、课堂、讲座等重要场景内容,通过语音转文字工具快速整理成文本。既能避免重要内容被遗忘,也能提高工作、学习效率。说实话,市场上不缺乏优秀的语音转文...
python+OpenCv笔记(十一):中值滤波 人工智能

python+OpenCv笔记(十一):中值滤波

中值滤波: 原理: 中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值。 应用: 中值滤波对椒盐噪声来说尤其有用,因为它不依赖于邻域内那些与典型值差别很大的值...
YOLOv6:又快又准的目标检测框架开源啦 人工智能

YOLOv6:又快又准的目标检测框架开源啦

近日,美团视觉智能部研发了一款致力于工业应用的目标检测框架 YOLOv6,能够同时专注于检测的精度和推理效率。在研发过程中,视觉智能部不断进行了探索和优化,同时吸取借鉴了学术界和工业界的一些前沿进展和...