Python爬取近十年TIOBE程式語言熱度數據並可視化

2020-11-06 地表嘴強程式設計師

本文介紹如何利用requests+正則表達式爬取TIOBE程式語言熱度數據,並使用openpyxl寫入數據與pyecharts時間輪播圖進行可視化。

一、數據獲取

我們需要爬取的目標url為https://www.tiobe.com/tiobe-index/打開之後如下

分析網頁原始碼可以找到想要的數據,利用正則表達式提取出想要的數據,並保存到Excel中,便於後續數據處理和可視化。

完整爬蟲代碼如下,其中大多數語句都給出了詳細注釋,感興趣的讀者可以進一步研究。

# -*- coding: UTF-8 -*- """ @File    :spider.py @Author  :葉庭雲 @CSDN    :https://yetingyun.blog.csdn.net/ """ import requests import re import openpyxl import logging  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s') headers = {     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" }  wb = openpyxl.Workbook()    # 創建工作簿對象 sheet = wb.active           # 獲取活動的工作表 # 程式語言   時間    熱度 sheet.append(['Programing', 'Date', 'data_per'])  url = 'https://www.tiobe.com/tiobe-index/' rep = requests.get(url, headers=headers).text  # 正則匹配提取數據 data = re.findall('{name : (.*?),data : (.*?)}', rep) programing = [eval(k[0]) for k in data]     # 程式語言 dates = [i[1] for i in data]  # 正則表達式處理 提取出想要的數據 for x in range(len(dates)):     name = programing[x]     datas = re.findall(r'\[Date.UTC(.*?)\]', dates[x], re.DOTALL)     for m in datas:         date1 = re.findall(r'\d+', m)       # 正則提取出數字         date2 = '-'.join(date1[:3])         # 拼接得到時間         data_per = '.'.join(date1[-2:])     # 得到熱度數據         sheet.append([name, date2, data_per])         logging.info([name, date2, data_per])  wb.save('language_data.xlsx') 

最終運行效果如下:

可以看到成功提取出想要的數據,並保存到Excel,在jupyter notebook 環境中查看數據:

二、 數據可視化

本節使用pyecharts繪製時間輪播圖數據可視化,展示現在熱度排 Top10 的程式語言 2009-2019 年每年的平均熱度變化。

# -*- coding: UTF-8 -*- """ @File    :輪播圖.py @Author  :葉庭雲 @CSDN    :https://yetingyun.blog.csdn.net/ """  import pandas as pd import xlrd import pyecharts.options as opts from pyecharts.charts import Timeline, Bar from pyecharts.globals import CurrentConfig   CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'  # 提取程式語言名字 name = list(pd.read_excel('language_data.xlsx')['Programing'].drop_duplicates())  data = xlrd.open_workbook('language_data.xlsx') table = data.sheets()[0]  dic1 = {k: [] for k in name} # 各程式語言對應每年裡不同時間的熱度 for i in range(1, table.nrows):  x = table.row_values(i)  dic1[x[0]].append((x[1], x[2]))  # 與程式語言順序對應  每年程式語言對應的不同時間的熱度 data_per = {k: [[] for x in range(10)] for k in range(2001, 2021)} print(data_per)  count = 0 for k, v in dic1.items():  for j in v:   # v (時間,熱度)  熱度數據添加進各年對應的列表裡   data_per[int(j[0][:4])][count].append(eval(j[1]))  # 一年裡各程式語言不同時間時的熱度  對應起來  count += 1  # print(data_per) data_per1 = {k: [] for k in list(data_per.keys())}  for k, v in list(data_per.items()):  for x in v:   if len(x) == 0:                  # 這一年裡該語言沒有熱度數據    data_per1[k].append(0)   else:    avg = sum(x) / len(x)    data_per1[k].append(avg)     # 這一年裡的平均熱度  # 得到TOBIE現在排Top20的程式語言從2001年開始每年的平均熱度 print(data_per1)   def get_year_overlap_chart(year) -> Bar:  sum_info = [(m, n) for m, n in zip(name, data_per1[year])]  # 程式語言按每年平均熱度排序  sum_info.sort(key=lambda z: z[1], reverse=True)  name_ = [m[0] for m in sum_info]  datas = [m[1] for m in sum_info]  # 每根柱子的顏色列表  colors = ['#00BFFF', '#0000CD', '#000000', '#008000', '#FF1493', '#FFD700', '#FF4500', '#00FA9A', '#191970',      '#9932CC']  x = []  for i in range(10):   x.append(    opts.BarItem(     name=name_[i],     value=datas[i],     itemstyle_opts=opts.ItemStyleOpts(color=colors[i])   # 設置每根柱子的顏色    )   )  # 繪製柱形圖  bar = Bar()  bar.add_xaxis(name_)  bar.add_yaxis(series_name='熱度', yaxis_data=x, is_selected=True,                   label_opts=opts.LabelOpts(is_show=False))  bar.set_global_opts(title_opts=opts.TitleOpts(       title="2009-2019程式語言熱度"),       tooltip_opts=opts.TooltipOpts(       is_show=True, trigger="axis", axis_pointer_type="shadow"),                   xaxis_opts=opts.AxisOpts(name='程式語言'), yaxis_opts=opts.AxisOpts(name='熱度'),  )  return bar  # 生成時間軸的圖 timeline = Timeline(init_opts=opts.InitOpts(width="1200px", height="600px")) for y in range(2009, 2020):  timeline.add(get_year_overlap_chart(y), time_point=str(y))  timeline.add_schema(is_auto_play=True, play_interval=1000) timeline.render("language_2009_2019.html") 

運行效果如下,可以看到雖然Python越來越火熱,但Java穩坐程式語言熱度排行榜第一!(此處一位PHP程式設計師拍桌)

三、補充

本節對有時候pyecharts繪製的圖形渲染在網頁上無法加載js文件的問題進行說明。

根據網站資源引用說明:pyecharts 使用的所有靜態資源文件存放於pyecharts-assets項目中

默認掛載在 https://assets.pyecharts.org/assets/,因為默認優先從遠程引用資源,這就導致有的時候無法加載 js 文件,圖表顯示不出來。

解決辦法:下載所需 js 文件到本地,修改資源引用地址,Github地址:https://github.com/pyecharts/pyecharts-assets看網站的介紹,pyecharts 提供了更改全局 HOST 的快捷方式。

from pyecharts.globals import CurrentConfig  CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/' # 本地保存 js 資源的路徑 

PS:如有需要Python學習資料的小夥伴可以加點擊下方連結自行獲取

python免費學習資料以及群交流解答後臺私信小編01即可

相關焦點

  • TIOBE 12月程式語言排行榜:Python有望第四次成為年度語言
    回顧過去一年,程式語言領域百花齊放。在 TIOBE 近日發布的 12 月最新排行榜中,Python 和 Java 你追我趕,Python 漲幅佔優,預計有望成為有史以來四度奪得「年度程式語言」稱號的程式語言!
  • TIOBE 12 月程式語言:Python 有望第四次成為年度語言
    回顧過去一年,程式語言領域百花齊放。在 TIOBE 近日發布的12月最新排行榜中,Python 和 Java 你追我趕,Python 漲幅佔優,預計有望成為有史以來四度奪得「年度程式語言」稱號的程式語言!
  • TIOBE 12 月程式語言:Python 有望第四次成為年度語言!
    回顧過去一年,程式語言領域百花齊放。在 TIOBE 近日發布的 12 月最新排行榜中,Python 和 Java 你追我趕,Python 漲幅佔優,預計有望成為有史以來四度奪得「年度程式語言」稱號的程式語言!
  • 超過C++、壓制 Java 與 C,Python 拔得 TIOBE 年度程式語言!
    作者 | 屠敏如同兩個月前,TIOBE 程式語言社區於官網預料的那般,2018 年的年度程式語言終將在一眾老牌程式語言如 Java、C、C++、Python、Visual Basic .NET 中誕生。近日,TIOBE 排行榜官方正式宣布,時隔 8 年後:Python 再一次贏得了「年度程式語言」的稱號!意外嗎?不意外!
  • Python 摘得TIOBE 2020年度程式語言
    Python 摘得TIOBE 2020年度程式語言 TIOBE 最新發布了 1 月程式語言排行榜,揭曉了 2020 年度比較受歡迎的程式語言,其中,Python 以 2.01% 的正增長榮獲 2020 年度 TIOBE 程式語言獎!
  • 二十年程式語言風雲,看Python如何一步步往上爬!
    作者 | 周蘿蔔 來源 | 蘿蔔大雜燴年終歲尾了,程式語言也要決出這一年的最佳語言了,會是誰呢,從 TIOBE 上來看,Java、C 和 Python 基本鎖定了前三的位置,Java 江湖老大的地位,還是無人能撼動呢。下面先來一張 TIOBE 網站的走勢圖,鎮樓(這是個暴露年齡的詞語)!
  • 2020年5月TIOBE編程排行榜:C語言奪冠,Python仍在前三!
    Python毋庸置疑排名靠前,得益於AI,在此次榜單中排第三,數據科學領域的 Python 和 R,每個人都試圖(從數據中)尋找該病毒的解毒劑。R語言處在第十的位置,看來疫情對某些程式語言的發展也起到了一定的推動作用。
  • 爬取拉勾網數據並進行數據可視化
    ,待爬取的python工程師職位信息如下:,所以我們在爬取的過程中會加上頭信息,頭信息也是我們通過分析網頁獲取到的,通過網頁分析我們知道該請求的頭信息,以及請求的信息和請求的方式是POST請求,這樣我們就可以該url請求拿到我們想的數據做進一步處理
  • TIOBE 8 月程式語言排行榜:Python 奮力追趕 C,Swift 下跌
    就程式語言範疇,日前,知名的 TIOBE 程式語言社區最新發布 8 月的程式語言排行榜,在此,希望能夠給技術人提供一些最新的趨勢參考。Objective-C 有所上漲、Swift 跌落!相比 7 月榜單,本月程式語言的排名並未有太大波動,而正因此,TIOBE 官方也將 8 月程式語言排行榜戲謔為「Silly season」。
  • Python爬取股票信息,並實現可視化數據
    前言截止2019年年底我國股票投資者數量為15975.24萬戶, 如此多的股民熱衷於炒股,首先拋開炒股技術不說, 那麼多股票數據是不是非常難找, 找到之後是不是看著密密麻麻的數據是不是頭都大了?今天帶大家爬取雪球平臺的股票數據, 並且實現數據可視化先看下效果圖
  • TIOBE 1 月程式語言:Python 摘得 2020 年度程式語言!
    【CSDN 編者按】恭喜 Python 榮獲 2020 年度程式語言稱號,這也是自 TIOBE 榜單發布以來,首款程式語言四次獲得該獎項。整理 | 蘇宓程式語言社區 TIOBE 最新發布了 1 月程式語言排行榜。
  • TIOBE 1 月程式語言:Python 摘得 2020 年度程式語言
    整理 | 蘇宓來源 | CSDN(ID:CSDNnews)程式語言社區 TIOBE 最新發布了 1 月程式語言排行榜。這次揭曉了 2020 年度最受歡迎的程式語言,其中,Python 以 2.01% 的正增長榮獲 2020 年度 TIOBE 程式語言獎!C++ 以微弱差距無緣冠軍,憑藉 1.99% 的增長率獲得了亞軍。
  • TIOBE 11 月程式語言:Python超越Java!
    以下是 2019 年到 2020 年的搜索指數概覽: 我們也可以看下 Google 對兩門語言的熱度分析 10 月份程式語言排名前十的分別是:C,Java,Python,C++,C#,Visual Basic, JavaScript ,PHP ,R,SQL。 11 月份程式語言排名前十的分別是:C,Python,Java,C++,C#,Visual Basic, JavaScript ,PHP ,R,SQL。
  • TIOBE:2019年7月全球程式語言排行 Python熱度繼續上升
    TIOBE 程式語言排行榜 7 月更新已公布,排名前十的分別是:Java, C, Python, C++, C#, Visual Basic .NET, JavaScript, PHP, SQL 和彙編語言。和上個月的不同之處主要是 C# 以微弱的優勢超過了 Visual Basic .NET 的排名,再次進入 TOP 5。
  • Python爬取周杰倫的200首歌+BI可視化分析,青春好像又回來了
    據調研,Python已經成為排名前三的語言,具體排在第幾相信各位心中肯定有自己的評判標準,這裡不挑口水戰了。那Python到底為什麼這麼火?首先上手很快,對於新手來說是最簡單的入門語言;第二,能爬取信息,並且能做可視化分析。Python做的可視化分析最近一直在聽周杰倫的歌(可能是小編長大了,也有可能是春天快到了....)
  • TIOBE:2020年5月程式語言排行榜 C語言五年後重返第一
    TIOBE 已公布 2020 年 5 月的程式語言排行榜。本期最大的亮點是 C 語言超越 Java,重返第一的位置。C 語言上一次排名第一,還是在 2015 年。在上個月的榜單中,兩者的指數就已經非常接近了。那麼是什麼讓 C 重新拿下第一的寶座呢?
  • Python爬取中國各省疫情確診人員數據生成可視化中國地圖界面
    大家好,接下來我們用python爬蟲技術爬取中國各省疫情確診人員數據,得到數據後自動生成中國地圖可視化界面。可視化界面運用pyecharts模塊、selenium中的webdriver第一:首先分析要爬取的網頁(百家號不可粘貼具體地址,見圖吧)爬取思路:通過分析網頁的原始碼
  • TIOBE:2020年4月全球程式語言排行榜 少兒程式語言Scratch入圍
    TIOBE 已公布 2020 年 4 月的程式語言排行榜。這期的標題主角是 Scratch,它是 MIT Media 實驗室 Lifelong 幼兒園團隊的一個項目,其通過點擊並拖拽的方式可視化完成編程,幫助兒童培養編程思維,學會創造性地思考、系統地推理和協同工作。
  • Excel與Python爬取數據,兩者PK,誰優誰劣?
    小夥伴們大家好~Excel和python作為當前兩款比較火的數據分析處理工具,兩者之間有很多共性也有很大的區別。今天一起來看下在抓取網頁數據這塊,兩者有什麼異同點。Python從鋪天滿地的廣告可以看出當前Python有多火,作為程式語言,它比Java、C、C++等其它語言要簡單很多,上手也比較容易,除此之外,語言兼容性也很高,代碼簡單優雅。
  • TIOBE 1月程式語言排行榜:C語言再度「C 位」出道,Python惜敗
    Python 惜敗,C 成為 2019 年度程式語言曾幾何時,憑藉著「人生苦短,我用 Python」的 Slogan,Python 以乾淨的語法、較高的開發效率、若干實用的庫等優勢橫行大數據分析、Web、人工智慧等領域。在眾人的認知中,繼去年 Python 奪冠之後,Python 極有可能連續第二年獲得 TIOBE 的年度程式語言,但最終為什麼會被「截胡」?