工具
Python3.6.5
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")