鱼C论坛

 找回密码
 立即注册
查看: 24782|回复: 89

[技术交流] 带你们爬TIOBE并做成酷炫可视化展示图

[复制链接]
发表于 2020-4-27 17:35:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 鱼C-小师妹 于 2020-5-12 10:20 编辑

本期视频教程:传送门


很多鱼油都应该看过甲鱼哥在 B 站传的这个视频:


想不想自己也弄一个呢?

想的话,小师妹来教你呦~

接下来的演示,我都是使用 Chrome 不做解释啦。


找数据

数据就用 TIOBE 的吧,在吹水阁每月都有解读,有兴趣的小哥哥可以去围观:2020年04月TIOBE编程语言排行榜 | 【少儿编程语言Scratch要火】

我们先打开 TIOBE 官网(传送门),滚动页面到这里:
Snip20200427_52.png


右键,检查,找到 network,然后刷新:
Snip20200428_58.png


这样所有用到的数据就会加载好了。

因为我们直接在网页中看到了数据,看看主页 tiobe-index/ 中有木有数据:
Snip20200503_71.png


点击,切换到 Response,因为这种数据往往都会写关键字 Date(经验 ),直接 ctrl+F,然后输入 Date:
Snip20200503_72.png


嘻嘻,果然不出小师妹所料,一下就找到数据啦!
Snip20200503_73.png


将上图中的数据复制出来确认下:
Snip20200503_74.png


吼吼,就是我们要哒!

温馨如小师妹,把数据分享出来(防止犯懒,收点鱼币): 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 啦!
Snip20200503_78.png


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 就是你要用到的库,基本所有库,都有镜像。

所以提示库没安装的,你不要问我了阿,问就是一顿打屁屁!

运行完成后,就会在程序目录中发现多了一个文件:
Snip20200503_80.png


里面就是我们要的数据啦:
Snip20200503_81.png



数据可视化

清洗后的数据也有啦,就差最后一步咯:图示

安装完 pandas 和 plotly 库以后。

我们把文件 fishcTiobe.csv 读取到程序中,使用 pandas 来完成数据分析。

读取 csv 成功以后,使用 plotly 的 bar 方法来绘图,上代码:

游客,如果您要查看本帖隐藏内容请回复

等待几十秒左右,然后会自动在浏览器中打开创建好的图。

看到下面这个酷炫的图标就意味着搞定定啦:
Kapture 2020-05-03 at 18.21.12.gif


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

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

源代码(高鱼币,就是劝退,让你们自己写): tiobeFishC.zip (10.77 KB, 下载次数: 39, 售价: 50 鱼币)

评分

参与人数 7荣誉 +22 鱼币 +23 贡献 +21 收起 理由
foxiangzun + 3 + 3 + 3
LuckyTiger66 + 5 + 5 + 3 鱼C有你更精彩^_^
小甲鱼 + 2 + 3 + 3 鱼C有你更精彩^_^
March2615 + 3 + 3 + 3 无条件支持楼主!
不二如是 + 3 + 3 + 3 鱼C有你更精彩^_^
qiuyouzhi + 3 + 3 + 3 无条件支持楼主!
zltzlt + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-27 17:38:34 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-27 17:38:48 | 显示全部楼层
占楼备用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-27 18:55:07 | 显示全部楼层
等更新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-3 18:27:25 | 显示全部楼层
更新完啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-3 19:07:29 From FishC Mobile | 显示全部楼层
占楼!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-9 16:29:14 | 显示全部楼层
鱼币真高。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 10:35:24 | 显示全部楼层
乘号 发表于 2020-5-9 16:29
鱼币真高。。。

鼓励你们自己敲代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 15:07:55 | 显示全部楼层
来学习了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 15:41:07 | 显示全部楼层
6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-12 17:15:28 | 显示全部楼层

好好学,记得交作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 22:16:11 | 显示全部楼层
..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-13 09:40:14 | 显示全部楼层
感谢教学,小姐姐真可爱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 09:43:53 | 显示全部楼层
Katana 发表于 2020-5-13 09:40
感谢教学,小姐姐真可爱


不客气嘻嘻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 19:32:36 | 显示全部楼层
我是来看妹子的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:01:39 | 显示全部楼层
萌新想看赢藏内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:31:35 | 显示全部楼层
为什么可视化的那个运行之后会报错啊···ModuleNotFoundError: No module named '_plotly_utils'
求大佬教教孩子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-14 09:48:12 | 显示全部楼层
久川梧月 发表于 2020-5-13 21:31
为什么可视化的那个运行之后会报错啊···ModuleNotFoundError: No module named '_plotly_utils'
求大佬 ...

要安装plotly库的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 10:06:43 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表