Python实战-20年内编程语言排名动态图(超详细,附源码)
编程语言排名滚动效果实现。
工具
Python3
pyecharts
requests
正则表达式
数据获取
数据来源:
https://www.tiobe.com/tiobe-index/
这家网站上记录了每年每种语言的排名情况
获取数据的代码如下图:
res = requests.get(self.url).text
通过requests模块访问网站URL实时获取数据。
数据解析
当加载完网站数据时即可发现我们所需数据部分
这里直接附上操作解析数据代码,主要通过正则表达式处理
def deal_data_html(self): date_list = list() return_data = [] names = [] res = requests.get(self.url).text content = \'\'.join(re.findall(r\'series: (.*?)\}\);\', res, re.DOTALL)) content = re.findall(r\'({.*?})\', content, re.DOTALL) for line in content: name = \'\'.join(re.findall(r"{name : \'(.*?)\'", line)) names.append(name) data = re.findall(r"\[Date.UTC(.*?)\]", line) for i_data in data: i_data = re.sub(r\'[()]\', "", i_data) value = i_data.split(\',\')[-1].strip() date = \'-\'.join(map(lambda x: x.strip(), i_data.split(\',\')[:-1])) if name == "Java": date_list.append(date) return_data.append({date: {name: value}}) # print(return_data) # 赋值初始化 msg_dict = {i: {j: 0 for j in names}for i in date_list} # print(msg_dict) # 给字典赋实际值 for k, v in msg_dict.items(): for i in return_data: for i_k, i_v in i.items(): if k == i_k: v.update(i_v) # print(msg_dict)
效果图
接下来就是关键效果图输出了,这里采用了Pyecharts模块包。具体如下图所示。
实现代码:
@staticmethod def line_bar(msg_dict): t1 = Timeline().add_schema(play_interval=200) for date, msg in msg_dict.items(): bar = ( Bar() .add_xaxis([\'C\', \'Java\', \'Python\', \'C++\', \'C#\', \'Visual Basic\', \'JavaScript\', \'PHP\', \'SQL\', \'Assembly language\']) .add_yaxis("语言热门度", [msg[key] for key in msg.keys()], label_opts=opts.LabelOpts(position="right")) .reversal_axis() .set_global_opts(title_opts=opts.TitleOpts("20年编程语言排名 {}".format(date)), legend_opts=opts.LegendOpts(is_show=False) ) ) t1.add(bar, date) t1.render("20年编程语言排名.html")
源码请前往原文获取:
https://mp.weixin.qq.com/s?__biz=Mzg3OTExODI3OA==&mid=2247483927&idx=1&sn=87547f528b852527378cc9ed8116f48a&chksm=cf0810bef87f99a8133096d962807b91bdb9f99e9f1227c22ccbf8449b6053a740490686811b&token=1106491029&lang=zh_CN#rd