3小时Python 数据分析和可视化

  1. 分解问题

  2. 数据分析

  3. Python实现

  4. 总结经验

01 课程目标

  1. 掌握分解问题的能力
  2. 学会用Python进行数据处理、分析、展示
  3. 总结经验

02 确定目标

问题特点:主观性⟶\longrightarrow⟶​客观性

​ example:

​ 冷不冷?⟶\longrightarrow⟶(数值化)温度、湿度、温度变化、同期变化特点…

界定

​ 简单问题还是复杂问题

​ 简单问题:数据分析

​ 复杂问题:机器学习

03 问题分解

example:赛博朋克香不香?

问题分解:
金钱成本(购买游戏、升级硬件)

​ 时间成本

​ ⋯\cdots⋯

04 代码实现·数据数据收集

  1. 收集哪类用户数据
  2. 收集哪类数据
  3. 主观还是客观数据

example:豆瓣《赛博朋克2077》评分页面

jupyter notebook运行代码

模拟浏览器

HTTP协议(学习后端开发的第一个山坡——协议)

  • 请求行

    GET /xxx.html HTTP/1.1 (CRLG)
    #请求方法 URI   协议版本    换行
    
  • 请求头

    浏览器F12 Request Hearders

  • 请求报文

代码

#获取完整网页 豆瓣评论区,NetWork ctrl+Rimport requests
r=requests.get('https://www.douban.com/game/25931998/comments?state=20$sort=score')#看结果具体信息
print(r.status_code)    ##418   #返回的状态码
print(r.text)#获取请求头
url= 'https://www.douban.com/game/25931998/comments?state=20$sort=score'
my_headers = ('user-agent':'ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36')   #字典
r =requests.get(url,headers=my_headers)print(r.status_code)   ##200
#网页内容
print(r,text)
#获取网页指定内容import requests
url= 'https://www.douban.com/game/25931998/comments?state=20$sort=score'
my_headers = ('user-agent':'ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36')   #字典
r =requests.get(url,headers=my_headers)#r.text网页完整内容。提取有用的数据
#需pip install lxml
#转化为能被XPath匹配的格式
from lxml import etree
selector=etree.HTML(r.text)
#取出对象后继续匹配 Element通过标签区分
#ctrl+F //div任意div
selector.xpath('//div[@class="user-info"]')#获取用户名
username = selector.xpath('//div[@class="user-info"]/a/text()')  #豆瓣中的a标签是用户名
print(username)
len(username) ##20
#获取打星(第二个span标签)
star=selector.xpath('//div[@class="user-info"]/span[2]/@class') #@class获取属性值
print(star)
len(star)       ##<=20
#获取评论
comment=selector.xpath('//span[@class="short"]/text()')
print(comment)
len(comment)##处理星级(用户和星级关联)——小观
temp=selector.xpath('//div[@class="user-info"]') #取得中间结果
#temp[0]    #序列切分
#if not temp[0].xpath('.span[2]/@class'):
#    print('allstar0')#泛化(用户星级一一对应)
for everyElement in temp:username=everyElement.xpath('./a/text()')star=everyElement.xpath('./span[2]/@class')if not star:star=[]star.append("allstar0")print(f"{username}::{star}")
#继续处理评论
temp=selector.xpath('//div[@class="info"]')#迭代每一个元素
for everyElement in temp:username=everyElement.xpath('./a/text()')star=everyElement.xpath('./span[2]/@class')if not star:star=[]star.append("allstar0")comment=everyElement.xpath('./p/span[@class="short"]/text()')game_short=f"{username}::{star}::{comment}=="#保存到文件做持久化存储
#继续处理评论
temp=selector.xpath('//div[@class="info"]')
#以追加写入方式打开文件
with open("./game_short.txt","w+") as f:for everyElement in temp:username=everyElement.xpath('./a/text()')star=everyElement.xpath('./span[2]/@class')if not star:star=[]star.append("allstar0")comment=everyElement.xpath('./p/span[@class="short"]/text()')game_short=f"{username}::{star}::{comment}=="f.write(game_short)#问题的延伸
#1. 怎么翻页?
#2. 怎么确定是最后一页?
#问题延伸的延伸
#1. 怎么让代码更容易被读懂?
#2. 更复杂的需求如何解决?  #更多网站去采集

DAY1

思考:

​ 数据收集中面对了哪些问题?如何解决的?

结论:

  1. 问题需要分解到你能够解决的领域
  2. 协议、框架是开发能力的体现
  3. 基础语法是分解问题的最小单元
  4. 简单的编程语言有助于聚焦问题本身
  5. 语言是思维的工具
  6. 学习哪一种语言不重要

05 数据存储与处理

5.1 数据存储

  • 存储什么介质

  • 存储在什么软件

  • 存储在什么架构

5.2 数据清洗

  • 冗余数据
  • 缺失数据
  • 异常数据

5.3 数据预处理

80%格式 后续处理效率的主要影响因素

10%编码 乱码导致结果误差

10%数据组合和拆分 做到并发和一致性

5.4 正则表达式

应用场景

  1. 验证
  2. 模糊查找
  3. 模式替换

常用元字符

元字符 功能性质
. 除了换行符(\n)以外的单个字符
字符串的开头
$ 字符串的结尾
* *前面多个重复字符,包含0个
+ +前面多个重复字符,不包含0个
?前面字符出现0或1次
{n} 前面字符出现n次,{m,n}表示出现m到n次
\ 转义字符
# 正则表达式
#Python使用re模块进行文本模式匹配
#re是标准库,不需要安装
import re
pattern = 'something'
string = 'something'
prog = re.compile(pattern)
result = prog.match(string)
print(result)   #<re.Match<re.Match object; span=(0, 9), match='something'>
import repattern = 's.*g'
string1='something'
string2='sisviluiog'
string3='shggjdskg'
prog=re.compile(pattern)
result1=prog.match(string1)
result2=prog.match(string2)
result3=prog.match(string3)
print(result1)  #print(result)  #<re.Match<re.Match object; span=(0, 9), match='something'>
print(result2)  #<re.Match object; span=(0, 10), match='sisviluiog'>
print(result3)  #<re.Match object; span=(0, 9), match='shggjdskg'>
#网址正则匹配
re.match('.*@.*.com','123@123.com')
#分组
re.match('(.*)@(.*\.com)','xyz@123.com').group(1) 'xyz'
re.match('(.*)@(.*\.com)','123@123.com').group(1) '123.com'
#用正则表达式的5个常用函数
#re.match()
#re.search()    #返回第一个成功匹配的字符串
#re.findall
#re.sub()
#re.split()
#用正则表达式调整文本内容
with open(''./game_short.txt','r') as f:#读取文本一行comment=f.readline()
print(comment)
#尝试用替换调整文本的内容
import re
temp_comment=re.sub('==','\n',comment)
print(comment) #一行的文件以“==”(不含)分开type(temp_comment)  #str
re.split('==',comment)[0]
re.split('==',comment)[0].split('::')#使用正则表达式处理格式
result=[]
for line in re.split("==",comment):result.append(line.split('::'))
print(result)
#使用正则表达式清洗内容#allstar10→10
temp = re.split('==',comment)[0]
print(temp)#一些[和’是正文里面的内容,需转义,{1,2}表示前面[]里的内容出现一次或两次#每对()为一个分组,\1为第一对()中的内容
re.sub('\[\'allstar([0-9]{1,2})\'\]',r'***\1***',comment)

5.5 数据处理

#提取所有的分数和评论各自放在一个列表中
import re
with open('./game_shory=t.txt','r') as f:comment = f.readline()
star = re.sub('\[\'allstar([0-9]{1,2})\'\].*?==',r'\1',comment)
star_list = re.split(',',star)
print(star_list)
comment_list=[]
comment_line = re.split(r'::',comment)
for line in comment_line:if re.search('==',line):comment_context = re.split('==',line)[0]comment_list.append(re.sub('\[\'(.*)\'\]',comment_context))
print(comment_list)#统计重复分值个数
from collection import Counter
result=Counter(star_list)
print(result)
##注意要补充0个的情况
list1=[ result[i] for i in sorted(result)]
#list1=[]
#for i in sorted(result):
#   list1.append(result[i])#柱状图
from pyecharts.charts import Bar
bar=Bar()  #实例化
bar.add_xaxis(["0分","10分","20分","30分","40分","50分"])
bar.add_yaxis("赛博朋克2077",[result[i] for i insorted(result)])
bar.render_notebook()
#bar.render("mycharts.html")  #渲染成网页#饼图
from pyecharts.charts import Pie
attr=["0分","10分","20分","30分","40分","50分"]
values=[result[i] for i insorted(result)]
pir=Pie()
pie.add("",[z for z in zip(attr.values)])
pie.render_notebook()
#jieba分词
import jieba
my_comment='这东西好'
#分词
seg_list=jieba.cut(my_comment)
print("/".join(seg_list)) ##这/东西/好
#动态添加词组
jieba.add_word('东西好')
seg_list=jieba.cut(my_comment)
print("//".join(seg_list))    ##这//东西好
jieba.del_word('东西好')#提取关键词
import jieba
import jieba.analyse
#关键词筛选#增加停止词
jieba.analyse.set_stop_words("./stop_words.txt")
topK=10
result=','.join(comment_list)
tags=jieba.analyse.extract_tags(result,topK=topK,allowPOS=())
top10=",".join(tags)
print(top10)
tags2=jieba,analyse.extract_tags(result,topK=topK,withWeight=True,allowPOS=('v','vn','n'))    #权重,词性筛选
print(tags2)#生成词云
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
wordcloud = WordCloud()
wordcloud.add("",tags,word_size_range=[20,100],shape=SymbolType.DIAMOND)
wordcloud.render_notebook()

可视化 pyecharts

总结:

  1. 正则表达式可以按照模式灵活匹配
  2. Echarts是通用组件,可以前后端分离
  3. 中文分词要比英文分词考虑的问题更多
  4. 好的词库是分词的关键

结语:
本来想学习一些数据分析的小知识,学习用numpy,pandas,matplotlib来完成吴恩达老师的课程作业的,没想到“错付”了。当然,这个老师讲得也不错,是更全局化的数据分析的梗概,后面加油!

极客时间·3小时Python 数据分析和可视化 学习笔记相关推荐

  1. <极客时间:零基础入门Spark> 学习笔记(持续更新中...)

    看的是极客时间的课,讲得很不错 零基础入门 Spark (geekbang.org) 基础知识 01 Spark:从"大数据的Hello World"开始 准备工作 IDEA安装S ...

  2. [转载] Python数据分析与可视化学习笔记(一)数据分析与可视化概述

    参考链接: Python | 数据分析的数学运算 数据分析与可视化(一) 1.1 数据分析1.1.1 数据.信息与数据分析1.1.2数据分析与数据挖掘的区别1.1.3数据分析的流程 1.2 数据可视化 ...

  3. Python数据分析与可视化学习笔记(一)数据分析与可视化概述

    数据分析与可视化(一) 1.1 数据分析 1.1.1 数据.信息与数据分析 1.1.2数据分析与数据挖掘的区别 1.1.3数据分析的流程 1.2 数据可视化 1.3 数据分析与可视化常用工具 1.4 ...

  4. 【极客时间-SQL必知必会】学习笔记1-了解SQL

    1 | 了解SQL:一门半衰期很长的语言 1. SQL语言的特点 通用性强: SQL语言无处不在,它对不同职位的人来说都有价值. 变化相对较少: SQL语言从诞生到现在,很少变化. 上手相对容易: S ...

  5. 极客时间课程《Python核心技术与实战》课程练习实践

    GitHub - zwdnet/PythonPractice: 极客时间课程<Python核心技术与实战>课程练习实践.极客时间课程<Python核心技术与实战>课程练习实践. ...

  6. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  7. 【算法笔记】极客时间 算法面试通关40讲 笔记  覃超

    [算法笔记]极客时间 算法面试通关40讲 覃超 [算法笔记]极客时间 算法面试通关40讲 覃超 相关链接 在leetcode 上的题号 数组.链表: (堆)栈stack.队列queue 优先队列 哈希 ...

  8. 极客时间《从零开始学大数据》学习总结

    2019-05-22 关键字:无 花了一周多的时间学习了李智慧老师在极客时间上开设的<从零开始学习大数据>课程后感触良多,特意花了一天的时间写了一份总结,算是为我的这份课程的学习告个别. ...

  9. Python爬虫、数据分析、可视化学习笔记(一、梦开始的地方)

    系列文章持续更新中...... 文章目录 一.工具及环境配置 1.Python3.8(官网下载) 2.Pycharm(官网下载) 3.Anaconda(官网下载) 4.环境配置(传送门,感谢前人栽树) ...

最新文章

  1. 赛门铁克开启“容灾即服务”时代
  2. selenium之作用和工作原理
  3. 实现大规模图计算的算法思路
  4. 【转】mysql,mysqli,PDO三种方式连接数据库
  5. 银行不是很喜欢客户分期吗?为何申请信用卡分期被拒绝了?
  6. vba while 结束_Python | 教材纰漏,出现while的无限循环错误
  7. [转载] Python time sleep()方法如何使用?
  8. (2)机器学习_train_test_split
  9. 【学习记录】QT5 的简单界面设计及错误总结
  10. 阿兰图灵和冯诺依曼,谁才是可称得起计算机之父呢?
  11. 详细且通俗讲解轻量级神经网络——MobileNets【V1、V2、V3】
  12. 室内定位之蓝牙定位精度(蓝牙AOA定位)
  13. 苹果系统服务器状态,苹果开发者中心app显示黄色状态详情介绍
  14. 超舒适!超强续航!南卡N2S蓝牙耳机全面评测!
  15. 大漠多线程循环任务自动切换模板判断账号登陆成功
  16. linux如何合并文件
  17. MAB建模规范-Naming Conventions命名规范
  18. 阿里巴巴创始人马云:阿里是幸福指数最高的企业
  19. 堆漏洞挖掘——fastbin attack漏洞
  20. 经典升级,长直播,马上开课 | 第 20 期高级转录组分析和R数据可视化火热报名中!!!...

热门文章

  1. zabbix集成openldap认证
  2. 数学建模-插值与拟合(预测模型)
  3. 硬件工程师的“真实写照”~
  4. Cyrus Beck(参数化)裁剪算法基于opengl实现
  5. 微信小程序拨打客服电话
  6. 2022美国大学生数学建模竞赛(美赛)A题 思路建模
  7. Axure中继器表格的创建
  8. 如何将Excel首列冻结?简单方法!Excel怎样操作把首列冻结?
  9. 内网渗透-SSH隧道
  10. Mil学习之Mapp