马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 鱼C-小师妹 于 2020-5-12 10:20 编辑
很多鱼油都应该看过甲鱼哥在 B 站传的这个视频:
想不想自己也弄一个呢?
想的话,小师妹来教你呦~
接下来的演示,我都是使用 Chrome 不做解释啦。
找数据
数据就用 TIOBE 的吧,在吹水阁每月都有解读,有兴趣的小哥哥可以去围观:2020年04月TIOBE编程语言排行榜 | 【少儿编程语言Scratch要火】
我们先打开 TIOBE 官网(传送门),滚动页面到这里:
右键,检查,找到 network,然后刷新:
这样所有用到的数据就会加载好了。
因为我们直接在网页中看到了数据,看看主页 tiobe-index/ 中有木有数据:
点击,切换到 Response,因为这种数据往往都会写关键字 Date(经验 ),直接 ctrl+F,然后输入 Date:
嘻嘻,果然不出小师妹所料,一下就找到数据啦!
将上图中的数据复制出来确认下:
吼吼,就是我们要哒!
温馨如小师妹,把数据分享出来(防止犯懒,收点鱼币):
data.zip
(9.18 KB, 下载次数: 16, 售价: 2 鱼币)
处理数据
肉眼看数据,我们其实就需要 3 个指标:
Programming(函数名),DataPer(数据),Date(日期)
那就用正则表达式来处理呗。
这里小师妹只能说一下大概思路,因为正则很灵活,每个人都会写出不同的匹配方式。
既然需要 3 个指标,其实清洗后的数据就是 3 列。
而现在 series:[] 中数据,都是一个编程语言一个键 name ,然后值都放在键 data 中(时间和对应的数据值)。
Programming 就是键值,但是要为每一项都添加这个值。
data 中数据也要清洗,先要去掉 Date.UTC(),然后 Date 日期格式按照 xxxx-xx-xx 来放。
DataPer 就是每个日期下对应的值,不需要处理,直接提取出来即可。
这里只能默认大家会啦,因为要讲的话,这期视频时长会很长很长..
不会的话(下方留言),小师妹考虑教你们。
其实小甲鱼老师也有讲过正则,有兴趣的可以自行去学习:
如果有的鱼油觉得看视频太慢,小甲鱼老师还准备了文字教程:
数据如何清洗的方向也有啦,接着就要请出 requests 啦!
requests 小师妹不做深入介绍啦,不会的可以看小甲鱼老师写的文字教程:Requests 模块帮助文档(小甲鱼版)
代码直接给大家吧:
import requests
import re
import os
import csv
url = 'https://www.tiobe.com/tiobe-index/'
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
}
#创建本地文件
f = open('fishcTiobe.csv', 'w', newline='')
#分类
writer = csv.DictWriter(f, ['Programming','DataPer','Date'])
writer.writeheader()
response = requests.get(url, headers=headers)
html = response.text
#正则清洗数据
result = ''.join(re.findall(r'series: (.*?)\}\);', html, re.DOTALL))
result = re.findall(r'({.*?})', result, re.DOTALL)
for item in result:
name = ''.join(re.findall(r"{name : '(.*?)'", item, re.DOTALL))
data = re.findall(r"\[Date.UTC(.*?)\]", item, re.DOTALL)
for i in data:
i = i.replace(' ', '')
i = re.sub(r'[()]', '', i)
value = i.split(',')[-1]
time_list = i.split(',')[:3]
time = ""
for index, j in enumerate(time_list):
if index !=0:
if len(j) == 1:
j = '0' + j
if index == 0:
time += j
else:
time += '-' + j
temp = {
'Programming': name,
'DataPer': value,
'Date': time
}
writer.writerow(temp)
#写入本地文件
f.close()
稍微插一下,如果鱼油通过:
python3 -m pip install xxx
安装库时报,可以采取清华的镜像安装:
python -m pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
xxx 就是你要用到的库,基本所有库,都有镜像。
所以提示库没安装的,你不要问我了阿,问就是一顿打屁屁!
运行完成后,就会在程序目录中发现多了一个文件:
里面就是我们要的数据啦:
数据可视化
清洗后的数据也有啦,就差最后一步咯:图示
安装完 pandas 和 plotly 库以后。
我们把文件 fishcTiobe.csv 读取到程序中,使用 pandas 来完成数据分析。
读取 csv 成功以后,使用 plotly 的 bar 方法来绘图,上代码:
等待几十秒左右,然后会自动在浏览器中打开创建好的图。
看到下面这个酷炫的图标就意味着搞定定啦:
基本上就是实现我们要的效果啦,通过调整参数还能继续优化。
欢迎小哥哥们自行发挥,下方留言,很酷炫的,小师妹一定给你评分。
源代码(高鱼币,就是劝退,让你们自己写):
tiobeFishC.zip
(10.77 KB, 下载次数: 39, 售价: 50 鱼币)
|