百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

一图看尽编程语言十年热度变化

toyiye 2024-06-21 12:20 8 浏览 0 评论

作者 | 叶庭云 责编 | 张文

前言

TIOBE 排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube 统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。

TIOBE 开发语言排行榜每月更新一次,依据的指数是基于世界范围内的资深软件工程师和第三方供应商提供,其结果作为当前业内程序开发语言的流行使用程度的有效指标。

该指数可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的。观察认为,该指数反应的虽并非当前最流行或应用最广的语言,但对世界范围内开发语言的走势仍具有重要参考意义。

2020 年,Python 再次获得年度编程语言荣誉。Python 在人工智能和数据科学领域的应用越来越来广泛,且在过去的一年里,Python 在处理疫情数据和舆情数据也发挥了巨大作用。至此,Python 已经第四次获得年度编程语言荣誉。

获取数据

获取 TIOBE 官网里历年编程语言热度数据,目标URL:https://www.tiobe.com/tiobe-index/

分析网页源代码可以找到我们想要的数据,利用正则表达式提取出数据,并保存到 Excel 中,便于后续数据处理和可视化。

爬虫代码如下:

# -*- coding: UTF-8 -*-"""@Author :叶庭云@公众号 :修炼Python@CSDN :https://yetingyun.blog.csdn.net/"""import requestsimport reimport openpyxlimport 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 环境中查看数据:

import pandas as pd
df = pd.read_excel('language_data.xlsx')df.sample(10)
df['Programing'].unique
df.info

数据可视化

利用 pyecharts 绘制时间轮播图数据可视化,展示现在热度排 Top10 的编程语言 2011-2020 年这十年里平均热度变化。

# -*- coding: UTF-8 -*-"""@Author :叶庭云@公众号 :修炼Python@CSDN :https://yetingyun.blog.csdn.net/"""import pandas as pdimport xlrdimport pyecharts.options as optsfrom pyecharts.charts import Timeline, Barfrom pyecharts.globals import CurrentConfig, ThemeType

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 提取现在的Top10编程语言name = list(pd.read_excel('language_data.xlsx')['Programing'].unique)
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, 2022)}print(data_per)
count = 0for k, v in dic1.items: print(k, v) 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(round(avg, 2)) # 这一年里的平均热度
# 得到TOBIE现在排Top10的编程语言从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]) 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'] data_1 = for item in range(10): data_1.append( opts.BarItem( name=name_[item], value=datas[item], itemstyle_opts=opts.ItemStyleOpts(color=colors[item]) # 设置每根柱子的颜色 ) ) # 绘制柱形图 bar = Bar bar.add_xaxis(name_) bar.add_yaxis(series_name='热度', yaxis_data=data_1, is_selected=True, label_opts=opts.LabelOpts(is_show=False)) bar.reversal_axis bar.set_global_opts(title_opts=opts.TitleOpts( title="2011-2020年编程语言热度变化"), 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(theme=ThemeType.MACARONS, width="1200px", height="600px"))for y in range(2011, 2021): timeline.add(get_year_overlap_chart(y), time_point=str(y))
timeline.add_schema(is_auto_play=True, play_interval=1000)timeline.render("language_2011_2020.html")

结果如下:

解决有时候 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 资源的路径

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码