十分钟用 Python 绘制了近十年编程语言趋势图

先来个视频体验一下效果,文末还有视频教程

1. 分析

我们需要获取数据,所以第一步需要从tiobe抓取近几年的top编程语言的占比情况,其次存入 csv,最后使用 Python 绘制成表格。

2. 安装包

python3 -m pip install plotly
python3 -m pip install pandas

3. 网页分析

我们进入 https://www.tiobe.com/tiobe-index/ 网站发现他下面有一个趋势图果不其然,我们右键点击查看源文件就能看到他的数据

那么我们就可以使用 request 盘他了,下面是抓取和解析的代码,可以配合 https://regex101.com/ 工具调试正则表达式。

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('programming.csv', 'w', newline='')
writer = csv.DictWriter(f, ['Programming','Percent','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,
   'Percent': value,
   'Date': time
  }
  writer.writerow(temp)
f.close()

运行完成以后你就会发现程序目录多了一个文件 programming.csv这样我们的数据就准备好了

4. 绘图

绘图之前还是需要把文件读取到 Python 程序,这里使用了 pandas 也是非常简单,读取 csv 成功以后,使用 plotly 的 bar 方法来绘图,直接上代码。

import plotly.express as px
import pandas as pd
df = pd.read_csv('programming.csv')
fig = px.bar(df,
             y="Programming",
             x="Percent",
             animation_frame="Date",
             range_x=[0, df.Percent.max()],
             orientation='h',
             text='Percent',
             color="Programming")
fig.update_layout(width=500,
                  height=400,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  showlegend=False)
fig.update_xaxes(title_text= "十年编程语言趋势图(微信订阅号:小猿学Python)")
fig.show()

等待1分钟左右,他会自己创建好图自动打开浏览器进入演示,所以你学会了吗?

如果你想看这个教程的视频版,欢迎点击阅读原文查看。

     精 彩 文 章 

END
来和小伙伴们一起向上生长呀~~~
扫描下方二维码,添加小詹微信,可领取千元大礼包并申请加入 Python学习交流群,群内仅供学术交流,日常互动,如果是想发推文、广告、砍价小程序的敬请绕道!一定记得备注「交流学习」,我会尽快通过好友申请哦!

(添加人数较多,请耐心等待)


(扫码回复 1024  即可领取IT资料包)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值