带你们爬TIOBE并做成酷炫可视化展示图
本帖最后由 鱼C-小师妹 于 2020-5-12 10:20 编辑本期视频教程:传送门
很多鱼油都应该看过甲鱼哥在 B 站传的这个视频:
传送门
想不想自己也弄一个呢?
想的话,小师妹来教你呦~
接下来的演示,我都是使用 Chrome 不做解释啦。
找数据
数据就用 TIOBE 的吧,在吹水阁每月都有解读,有兴趣的小哥哥可以去围观:2020年04月TIOBE编程语言排行榜 | 【少儿编程语言Scratch要火】
我们先打开 TIOBE 官网(传送门),滚动页面到这里:
右键,检查,找到 network,然后刷新:
这样所有用到的数据就会加载好了。
因为我们直接在网页中看到了数据,看看主页 tiobe-index/ 中有木有数据:
点击,切换到 Response,因为这种数据往往都会写关键字 Date(经验{:10_256:} ),直接 ctrl+F,然后输入 Date:
嘻嘻,果然不出小师妹所料,一下就找到数据啦!
将上图中的数据复制出来确认下:
吼吼,就是我们要哒!
温馨如小师妹,把数据分享出来(防止犯懒,收点鱼币):
处理数据
肉眼看数据,我们其实就需要 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"\", 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 方法来绘图,上代码:
**** Hidden Message *****
等待几十秒左右,然后会自动在浏览器中打开创建好的图。
看到下面这个酷炫的图标就意味着搞定定啦:
基本上就是实现我们要的效果啦,通过调整参数还能继续优化。
欢迎小哥哥们自行发挥,下方留言,很酷炫的,小师妹一定给你评分。
源代码(高鱼币,就是劝退,让你们自己写): 沙发 占楼备用{:10_256:} 等更新 更新完啦{:10_279:} 占楼! 鱼币真高。。。 乘号 发表于 2020-5-9 16:29
鱼币真高。。。
鼓励你们自己敲代码 来学习了~ 6 Twilight6 发表于 2020-5-12 15:07
来学习了~
好好学,记得交作业 .. 感谢教学,小姐姐真可爱 Katana 发表于 2020-5-13 09:40
感谢教学,小姐姐真可爱
不客气嘻嘻 我是来看妹子的 萌新想看赢藏内容{:10_269:} 为什么可视化的那个运行之后会报错啊···ModuleNotFoundError: No module named '_plotly_utils'
求大佬教教孩子{:5_100:} 久川梧月 发表于 2020-5-13 21:31
为什么可视化的那个运行之后会报错啊···ModuleNotFoundError: No module named '_plotly_utils'
求大佬 ...
要安装plotly库的呀 看看 报错了,怎么办
D:\Python\workspace\aa\venv\Scripts\python.exe D:/Python/workspace/aa/test.py
Traceback (most recent call last):
File "D:/Python/workspace/aa/test.py", line 5, in <module>
fig= px.bar(df,
File "D:\Python\workspace\aa\venv\lib\site-packages\plotly\express\_chart_types.py", line 309, in bar
return make_figure(
File "D:\Python\workspace\aa\venv\lib\site-packages\plotly\express\_core.py", line 1431, in make_figure
args, trace_specs, grouped_mappings, sizeref, show_colorbar = infer_config(
File "D:\Python\workspace\aa\venv\lib\site-packages\plotly\express\_core.py", line 1275, in infer_config
args = build_dataframe(args, all_attrables, array_attrables)
File "D:\Python\workspace\aa\venv\lib\site-packages\plotly\express\_core.py", line 1037, in build_dataframe
raise ValueError(err_msg)
ValueError: Value of 'animation_frame' is not the name of a column in 'data_frame'. Expected one of ['Programming', 'DataPer', 'Date'] but received: DATE