鱼C-小师妹 发表于 2020-4-27 17:35:49

带你们爬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 *****
等待几十秒左右,然后会自动在浏览器中打开创建好的图。

看到下面这个酷炫的图标就意味着搞定定啦:


基本上就是实现我们要的效果啦,通过调整参数还能继续优化。

欢迎小哥哥们自行发挥,下方留言,很酷炫的,小师妹一定给你评分。

源代码(高鱼币,就是劝退,让你们自己写):

qiuyouzhi 发表于 2020-4-27 17:38:34

沙发

zltzlt 发表于 2020-4-27 17:38:48

占楼备用{:10_256:}

March2615 发表于 2020-4-27 18:55:07

等更新

不二如是 发表于 2020-5-3 18:27:25

更新完啦{:10_279:}

_2_ 发表于 2020-5-3 19:07:29

占楼!

乘号 发表于 2020-5-9 16:29:14

鱼币真高。。。

鱼C-小师妹 发表于 2020-5-11 10:35:24

乘号 发表于 2020-5-9 16:29
鱼币真高。。。

鼓励你们自己敲代码

Twilight6 发表于 2020-5-12 15:07:55

来学习了~

萧易天 发表于 2020-5-12 15:41:07

6

鱼C-小师妹 发表于 2020-5-12 17:15:28

Twilight6 发表于 2020-5-12 15:07
来学习了~

好好学,记得交作业

Easier 发表于 2020-5-12 22:16:11

..

Katana 发表于 2020-5-13 09:40:14

感谢教学,小姐姐真可爱

鱼C-小师妹 发表于 2020-5-13 09:43:53

Katana 发表于 2020-5-13 09:40
感谢教学,小姐姐真可爱

不客气嘻嘻

均昊山 发表于 2020-5-13 19:32:36

我是来看妹子的

久川梧月 发表于 2020-5-13 21:01:39

萌新想看赢藏内容{:10_269:}

久川梧月 发表于 2020-5-13 21:31:35

为什么可视化的那个运行之后会报错啊···ModuleNotFoundError: No module named '_plotly_utils'
求大佬教教孩子{:5_100:}

鱼C-小师妹 发表于 2020-5-14 09:48:12

久川梧月 发表于 2020-5-13 21:31
为什么可视化的那个运行之后会报错啊···ModuleNotFoundError: No module named '_plotly_utils'
求大佬 ...

要安装plotly库的呀

大风包子 发表于 2020-5-14 10:06:43

看看

15241134721 发表于 2020-5-14 13:05:12

报错了,怎么办
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
页: [1] 2 3 4 5
查看完整版本: 带你们爬TIOBE并做成酷炫可视化展示图