目录
本文涉及到的数据资料文件下载地址 百度网盘 本文的Jupyter notebook文件下载地址百度网盘
4.1 从csv和txt文件存取数据
4.1.1 csv文件的存取
4.1.1.1 以前学过的python读取csv文件
import csv
f = csv. reader( open ( 'phones.csv' , 'r' , encoding= 'gbk' ) )
for i in f:
print ( i)
['商品名称', '价格', '颜色']
['Apple iPhone X (A1865) 64GB', '6299', '深空灰色']
['Apple iPhone XS Max (A2104) 256GB ', '10999', '深空灰色']
['Apple iPhone XR (A2108) 128GB', '6199', '黑色']
['Apple iPhone 8 (A1863) 64GB', '3999', '深空灰色']
['Apple iPhone 8 Plus (A1864) 64GB', '4799', '深空灰色']
['Apple iPhone XS (A2100) 64GB', '8699', '深空灰色']
['Apple 苹果 iPhone Xs Max 256GB', '9988', '金色']
['Apple 苹果 iPhone Xs 64GB', '8058', '金色']
['Apple 苹果 iPhone XR 128GB', '5788', '黑色']
['Apple iPhone 7 (A1660) 128G', '4139', '玫瑰金色']
f = open ( 'phones.csv' , 'r' , encoding = 'gbk' )
csvReader = csv. reader( f)
for row in csvReader:
print ( row)
f. close( )
['商品名称', '价格', '颜色']
['Apple iPhone X (A1865) 64GB', '6299', '深空灰色']
['Apple iPhone XS Max (A2104) 256GB ', '10999', '深空灰色']
['Apple iPhone XR (A2108) 128GB', '6199', '黑色']
['Apple iPhone 8 (A1863) 64GB', '3999', '深空灰色']
['Apple iPhone 8 Plus (A1864) 64GB', '4799', '深空灰色']
['Apple iPhone XS (A2100) 64GB', '8699', '深空灰色']
['Apple 苹果 iPhone Xs Max 256GB', '9988', '金色']
['Apple 苹果 iPhone Xs 64GB', '8058', '金色']
['Apple 苹果 iPhone XR 128GB', '5788', '黑色']
['Apple iPhone 7 (A1660) 128G', '4139', '玫瑰金色']
with open ( 'phones.csv' , 'r' , encoding = 'gbk' ) as f:
csvReader = csv. reader( f)
for row in csvReader:
print ( row)
['商品名称', '价格', '颜色']
['Apple iPhone X (A1865) 64GB', '6299', '深空灰色']
['Apple iPhone XS Max (A2104) 256GB ', '10999', '深空灰色']
['Apple iPhone XR (A2108) 128GB', '6199', '黑色']
['Apple iPhone 8 (A1863) 64GB', '3999', '深空灰色']
['Apple iPhone 8 Plus (A1864) 64GB', '4799', '深空灰色']
['Apple iPhone XS (A2100) 64GB', '8699', '深空灰色']
['Apple 苹果 iPhone Xs Max 256GB', '9988', '金色']
['Apple 苹果 iPhone Xs 64GB', '8058', '金色']
['Apple 苹果 iPhone XR 128GB', '5788', '黑色']
['Apple iPhone 7 (A1660) 128G', '4139', '玫瑰金色']
row
['Apple iPhone 7 (A1660) 128G', '4139', '玫瑰金色']
list1 = [ ]
with open ( 'phones.csv' , 'r' , encoding = 'gbk' ) as f:
csvReader = csv. reader( f)
for row in csvReader:
list1. append( row)
list1
[['商品名称', '价格', '颜色'],
['Apple iPhone X (A1865) 64GB', '6299', '深空灰色'],
['Apple iPhone XS Max (A2104) 256GB ', '10999', '深空灰色'],
['Apple iPhone XR (A2108) 128GB', '6199', '黑色'],
['Apple iPhone 8 (A1863) 64GB', '3999', '深空灰色'],
['Apple iPhone 8 Plus (A1864) 64GB', '4799', '深空灰色'],
['Apple iPhone XS (A2100) 64GB', '8699', '深空灰色'],
['Apple 苹果 iPhone Xs Max 256GB', '9988', '金色'],
['Apple 苹果 iPhone Xs 64GB', '8058', '金色'],
['Apple 苹果 iPhone XR 128GB', '5788', '黑色'],
['Apple iPhone 7 (A1660) 128G', '4139', '玫瑰金色']]
import pandas as pd
df1 = pd. DataFrame( list1)
df1
0 1 2 0 商品名称 价格 颜色 1 Apple iPhone X (A1865) 64GB 6299 深空灰色 2 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 3 Apple iPhone XR (A2108) 128GB 6199 黑色 4 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 5 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 6 Apple iPhone XS (A2100) 64GB 8699 深空灰色 7 Apple 苹果 iPhone Xs Max 256GB 9988 金色 8 Apple 苹果 iPhone Xs 64GB 8058 金色 9 Apple 苹果 iPhone XR 128GB 5788 黑色 10 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
list1[ 1 : ]
[['Apple iPhone X (A1865) 64GB', '6299', '深空灰色'],
['Apple iPhone XS Max (A2104) 256GB ', '10999', '深空灰色'],
['Apple iPhone XR (A2108) 128GB', '6199', '黑色'],
['Apple iPhone 8 (A1863) 64GB', '3999', '深空灰色'],
['Apple iPhone 8 Plus (A1864) 64GB', '4799', '深空灰色'],
['Apple iPhone XS (A2100) 64GB', '8699', '深空灰色'],
['Apple 苹果 iPhone Xs Max 256GB', '9988', '金色'],
['Apple 苹果 iPhone Xs 64GB', '8058', '金色'],
['Apple 苹果 iPhone XR 128GB', '5788', '黑色'],
['Apple iPhone 7 (A1660) 128G', '4139', '玫瑰金色']]
df1 = pd. DataFrame( list1[ 1 : ] , columns= list1[ 0 ] )
df1
商品名称 价格 颜色 0 Apple iPhone X (A1865) 64GB 6299 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 2 Apple iPhone XR (A2108) 128GB 6199 黑色 3 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 5 Apple iPhone XS (A2100) 64GB 8699 深空灰色 6 Apple 苹果 iPhone Xs Max 256GB 9988 金色 7 Apple 苹果 iPhone Xs 64GB 8058 金色 8 Apple 苹果 iPhone XR 128GB 5788 黑色 9 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
df1. describe( )
商品名称 价格 颜色 count 10 10 10 unique 10 10 4 top Apple iPhone X (A1865) 64GB 6299 深空灰色 freq 1 1 5
df1. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 商品名称 10 non-null object
1 价格 10 non-null object
2 颜色 10 non-null object
dtypes: object(3)
memory usage: 368.0+ bytes
df1[ '价格' ] . astype( 'int64' )
0 6299
1 10999
2 6199
3 3999
4 4799
5 8699
6 9988
7 8058
8 5788
9 4139
Name: 价格, dtype: int64
df1[ '价格' ] = df1[ '价格' ] . astype( 'int64' )
df1. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 商品名称 10 non-null object
1 价格 10 non-null int64
2 颜色 10 non-null object
dtypes: int64(1), object(2)
memory usage: 368.0+ bytes
df1. describe( )
价格 count 10.000000 mean 6896.700000 std 2437.144734 min 3999.000000 25% 5046.250000 50% 6249.000000 75% 8538.750000 max 10999.000000
4.1.1.2 pandas读取csv
df2 = pd. read_csv( "phones.csv" , encoding= 'gbk' )
df2
商品名称 价格 颜色 0 Apple iPhone X (A1865) 64GB 6299 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 2 Apple iPhone XR (A2108) 128GB 6199 黑色 3 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 5 Apple iPhone XS (A2100) 64GB 8699 深空灰色 6 Apple 苹果 iPhone Xs Max 256GB 9988 金色 7 Apple 苹果 iPhone Xs 64GB 8058 金色 8 Apple 苹果 iPhone XR 128GB 5788 黑色 9 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
df2. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 商品名称 10 non-null object
1 价格 10 non-null int64
2 颜色 10 non-null object
dtypes: int64(1), object(2)
memory usage: 368.0+ bytes
df21 = pd. read_csv( "phones.csv" , encoding= 'gbk' , usecols= [ '商品名称' , '价格' ] )
df21
商品名称 价格 0 Apple iPhone X (A1865) 64GB 6299 1 Apple iPhone XS Max (A2104) 256GB 10999 2 Apple iPhone XR (A2108) 128GB 6199 3 Apple iPhone 8 (A1863) 64GB 3999 4 Apple iPhone 8 Plus (A1864) 64GB 4799 5 Apple iPhone XS (A2100) 64GB 8699 6 Apple 苹果 iPhone Xs Max 256GB 9988 7 Apple 苹果 iPhone Xs 64GB 8058 8 Apple 苹果 iPhone XR 128GB 5788 9 Apple iPhone 7 (A1660) 128G 4139
df22 = pd. read_csv( "phones.csv" , encoding= 'gbk' , usecols= [ 0 , 2 ] )
df22
商品名称 颜色 0 Apple iPhone X (A1865) 64GB 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 深空灰色 2 Apple iPhone XR (A2108) 128GB 黑色 3 Apple iPhone 8 (A1863) 64GB 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 深空灰色 5 Apple iPhone XS (A2100) 64GB 深空灰色 6 Apple 苹果 iPhone Xs Max 256GB 金色 7 Apple 苹果 iPhone Xs 64GB 金色 8 Apple 苹果 iPhone XR 128GB 黑色 9 Apple iPhone 7 (A1660) 128G 玫瑰金色
df23 = pd. read_csv( "phones.csv" , encoding= 'gbk' , nrows= 5 )
df23
商品名称 价格 颜色 0 Apple iPhone X (A1865) 64GB 6299 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 2 Apple iPhone XR (A2108) 128GB 6199 黑色 3 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色
4.1.1.3 csv文件的写入
df2
商品名称 价格 颜色 0 Apple iPhone X (A1865) 64GB 6299 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 2 Apple iPhone XR (A2108) 128GB 6199 黑色 3 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 5 Apple iPhone XS (A2100) 64GB 8699 深空灰色 6 Apple 苹果 iPhone Xs Max 256GB 9988 金色 7 Apple 苹果 iPhone Xs 64GB 8058 金色 8 Apple 苹果 iPhone XR 128GB 5788 黑色 9 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
4.1.1.3.1 原来用python写文件
csv.writerow() csv.writerows()
df2. values
array([['Apple iPhone X (A1865) 64GB', 6299, '深空灰色'],
['Apple iPhone XS Max (A2104) 256GB ', 10999, '深空灰色'],
['Apple iPhone XR (A2108) 128GB', 6199, '黑色'],
['Apple iPhone 8 (A1863) 64GB', 3999, '深空灰色'],
['Apple iPhone 8 Plus (A1864) 64GB', 4799, '深空灰色'],
['Apple iPhone XS (A2100) 64GB', 8699, '深空灰色'],
['Apple 苹果 iPhone Xs Max 256GB', 9988, '金色'],
['Apple 苹果 iPhone Xs 64GB', 8058, '金色'],
['Apple 苹果 iPhone XR 128GB', 5788, '黑色'],
['Apple iPhone 7 (A1660) 128G', 4139, '玫瑰金色']], dtype=object)
import csv
f = open ( "phonesOut0.csv" , 'w' , encoding= 'gbk' )
csvWriter = csv. writer( f)
for row in df2. values:
csvWriter. writerow( row)
f. close( )
df3 = pd. read_csv( "phonesOut0.csv" , encoding= 'gbk' , header= None , names = [ '名称' , '价格' , '颜色' ] )
df3
名称 价格 颜色 0 Apple iPhone X (A1865) 64GB 6299 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 2 Apple iPhone XR (A2108) 128GB 6199 黑色 3 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 5 Apple iPhone XS (A2100) 64GB 8699 深空灰色 6 Apple 苹果 iPhone Xs Max 256GB 9988 金色 7 Apple 苹果 iPhone Xs 64GB 8058 金色 8 Apple 苹果 iPhone XR 128GB 5788 黑色 9 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
df3. shape
(10, 3)
df4 = pd. read_csv( "phonesOut0.csv" , encoding= 'gbk' , index_col= '名称' , header= None , names = [ '名称' , '价格' , '颜色' ] )
df4
价格 颜色 名称 Apple iPhone X (A1865) 64GB 6299 深空灰色 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 Apple iPhone XR (A2108) 128GB 6199 黑色 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 Apple iPhone XS (A2100) 64GB 8699 深空灰色 Apple 苹果 iPhone Xs Max 256GB 9988 金色 Apple 苹果 iPhone Xs 64GB 8058 金色 Apple 苹果 iPhone XR 128GB 5788 黑色 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
df4. shape
(10, 2)
4.1.1.3.2 pandas写入csv
df2
商品名称 价格 颜色 0 Apple iPhone X (A1865) 64GB 6299 深空灰色 1 Apple iPhone XS Max (A2104) 256GB 10999 深空灰色 2 Apple iPhone XR (A2108) 128GB 6199 黑色 3 Apple iPhone 8 (A1863) 64GB 3999 深空灰色 4 Apple iPhone 8 Plus (A1864) 64GB 4799 深空灰色 5 Apple iPhone XS (A2100) 64GB 8699 深空灰色 6 Apple 苹果 iPhone Xs Max 256GB 9988 金色 7 Apple 苹果 iPhone Xs 64GB 8058 金色 8 Apple 苹果 iPhone XR 128GB 5788 黑色 9 Apple iPhone 7 (A1660) 128G 4139 玫瑰金色
df2. to_csv( 'phonseOut1.csv' )
df2. to_csv( 'phonseOut2.csv' , columns= [ '商品名称' , '价格' ] )
df2. to_csv( 'phonseOut3.csv' , index= False )
4.1.2 txt文件的存取
4.1.2.1 以前学过的python文件读取方法
i = 0
with open ( 'itheima_books.txt' , 'r' ) as f:
data = f. read( )
print ( i)
print ( data)
i += 1
0
黑马程序员教程 教程网址
学习线路图 https://book.itheima.net/learnline/1265899443273850881
学习教程 https://book.itheima.net/course/1265899443273850881
面试宝典 https://book.itheima.net/study/1265899443273850881
data
'黑马程序员教程 教程网址\n学习线路图 https://book.itheima.net/learnline/1265899443273850881\n学习教程 https://book.itheima.net/course/1265899443273850881\n面试宝典 https://book.itheima.net/study/1265899443273850881\n'
f.readline()读取一行内容 f.readlines() 读取所有内容,讲每一行作为一个元素,返回列表
i = 0
with open ( 'itheima_books.txt' , 'r' ) as f:
line = f. readline( )
print ( i)
print ( line)
i += 1
0
黑马程序员教程 教程网址
with open ( 'itheima_books.txt' , 'r' ) as f:
line = f. readline( )
print ( line)
line = f. readline( )
print ( line)
黑马程序员教程 教程网址
学习线路图 https://book.itheima.net/learnline/1265899443273850881
with open ( 'itheima_books.txt' , 'r' ) as f:
while True :
line = f. readline( )
if line:
print ( line, end= '' )
else :
break
黑马程序员教程 教程网址
学习线路图 https://book.itheima.net/learnline/1265899443273850881
学习教程 https://book.itheima.net/course/1265899443273850881
面试宝典 https://book.itheima.net/study/1265899443273850881
with open ( 'itheima_books.txt' , 'r' ) as f:
lines = f. readlines( )
lines
['黑马程序员教程 教程网址\n',
'学习线路图 https://book.itheima.net/learnline/1265899443273850881\n',
'学习教程 https://book.itheima.net/course/1265899443273850881\n',
'面试宝典 https://book.itheima.net/study/1265899443273850881\n']
type ( lines)
list
4.1.2.2 pandas读txt文件
import pandas as pd
txtData = pd. read_csv( "itheima_books.txt" )
txtData
黑马程序员教程 教程网址 0 学习线路图 https://book.itheima.net/learnline/12658... 1 学习教程 https://book.itheima.net/course/126589944... 2 面试宝典 https://book.itheima.net/study/1265899443...
type ( txtData)
pandas.core.frame.DataFrame
txtData. shape
(3, 1)
txtData2 = pd. read_csv( "itheima_books.txt" , sep= ' ' )
txtData2
黑马程序员教程 教程网址 0 学习线路图 https://book.itheima.net/learnline/12658994432... 1 学习教程 https://book.itheima.net/course/12658994432738... 2 面试宝典 https://book.itheima.net/study/126589944327385...
txtData2. shape
(3, 2)
练习:读取 cj.txt 文件
txtData3 = pd. read_csv( "cj.txt" , sep= '\t' )
txtData3
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 0 2308024241 23080242 成龙 男 76 78 77 40 23 60 1 2308024244 23080242 周怡 女 66 91 75 47 47 44 2 2308024251 23080242 张波 男 85 81 75 45 45 60 3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 4 2308024219 23080242 封印 女 73 88 92 61 47 46 5 2308024201 23080242 迟培 男 60 50 89 71 76 71 6 2308024347 23080243 李华 女 67 61 84 61 65 78 7 2308024307 23080243 陈田 男 76 79 86 69 40 69 8 2308024326 23080243 余皓 男 66 67 85 65 61 71 9 2308024320 23080243 李嘉 女 62 作弊 90 60 67 77 10 2308024342 23080243 李上初 男 76 90 84 60 66 60 11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 12 2308024435 23080244 姜毅涛 男 77 71 缺考 61 73 76 13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 14 2308024446 23080244 周路 女 76 80 77 61 74 80 15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 16 2308024433 23080244 李大强 男 79 76 77 78 70 70 17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 18 2308024402 23080244 王慧 女 73 74 93 70 71 75 19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 20 2308024201 23080242 迟培 男 60 50 89 71 76 71
txtData3. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 21 entries, 0 to 20
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 学号 21 non-null int64
1 班级 21 non-null int64
2 姓名 21 non-null object
3 性别 21 non-null object
4 英语 21 non-null int64
5 体育 21 non-null object
6 军训 21 non-null object
7 数分 21 non-null int64
8 高代 21 non-null int64
9 解几 21 non-null int64
dtypes: int64(6), object(4)
memory usage: 1.8+ KB
txtData3 = pd. read_table( "cj.txt" )
txtData3
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 0 2308024241 23080242 成龙 男 76 78 77 40 23 60 1 2308024244 23080242 周怡 女 66 91 75 47 47 44 2 2308024251 23080242 张波 男 85 81 75 45 45 60 3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 4 2308024219 23080242 封印 女 73 88 92 61 47 46 5 2308024201 23080242 迟培 男 60 50 89 71 76 71 6 2308024347 23080243 李华 女 67 61 84 61 65 78 7 2308024307 23080243 陈田 男 76 79 86 69 40 69 8 2308024326 23080243 余皓 男 66 67 85 65 61 71 9 2308024320 23080243 李嘉 女 62 作弊 90 60 67 77 10 2308024342 23080243 李上初 男 76 90 84 60 66 60 11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 12 2308024435 23080244 姜毅涛 男 77 71 缺考 61 73 76 13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 14 2308024446 23080244 周路 女 76 80 77 61 74 80 15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 16 2308024433 23080244 李大强 男 79 76 77 78 70 70 17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 18 2308024402 23080244 王慧 女 73 74 93 70 71 75 19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 20 2308024201 23080242 迟培 男 60 50 89 71 76 71
4.2 Excel文件的存取
4.2.1 以前学过的python操作excel文件
xlrd与xlwt进行excel文件读写 openpyxl进行excel文件读写
4.2.1.1 导入库
import xlrd
4.2.1.2 打开工作薄文件
wb = xlrd. open_workbook( "Athletes_info.xls" )
wb
<xlrd.book.Book at 0x7fc54142c6a0>
4.2.1.3 获取表单sheet
获取所有的sheet名字 .sheet_names() 获取表单数量 .nsheets 获得表单所有对象: .sheets() 通过sheet名查找: .sheet_by_name() 通过索引查找: .sheet_by_index()
wb. sheet_names( )
['Sheet1', 'Sheet2', '表单3']
type ( wb. sheet_names( ) [ 0 ] )
str
wb. nsheets
3
wb. sheets( )
[Sheet 0:<Sheet1>, Sheet 1:<Sheet2>, Sheet 2:<表单3>]
type ( wb. sheets( ) [ 0 ] )
xlrd.sheet.Sheet
wb. sheet_by_name( 'Sheet1' )
Sheet 0:<Sheet1>
wb. sheet_by_index( 2 )
Sheet 2:<表单3>
4.2.1.4 获得每个sheet的汇总数据
.name:sheet名 .nrows: 获得总行数 .ncols: 获得总的列
wb = xlrd. open_workbook( "Athletes_info.xls" )
wb. sheet_names( )
['Sheet1', 'Sheet2', '表单3']
sheets = wb. sheets( )
sheets
[Sheet 0:<Sheet1>, Sheet 1:<Sheet2>, Sheet 2:<表单3>]
type ( sheets)
list
sheets[ 0 ] . nrows
322
sheets[ 0 ] . ncols
9
import xlrd
wb = xlrd. open_workbook( "Athletes_info.xls" )
for i in range ( wb. nsheets) :
sheet = wb. sheet_by_index( i)
print ( sheet. name)
print ( '行数:' , sheet. nrows)
print ( '列数:' , sheet. ncols)
print ( "=" * 50 )
Sheet1
行数: 322
列数: 9
==================================================
Sheet2
行数: 2
列数: 3
==================================================
表单3
行数: 0
列数: 0
==================================================
4.2.1.5 单元格的操作
4.2.1.5.1 行操作
.sheet.row_values(0) #获得第一行的所有内容 .sheet.row(0). #获取单元格值的类型和内容 .sheet.row_types(0)#获得单元格的类型
sheets = wb. sheets( )
sheet0 = sheets[ 0 ]
sheet0
Sheet 0:<Sheet1>
sheet0. row_values( 0 )
['name',
'name2',
'gender',
'nation',
'birth',
'height/cm',
'weight',
'event',
'native place']
sheet0. row( 0 )
[text:'name',
text:'name2',
text:'gender',
text:'nation',
text:'birth',
text:'height/cm',
text:'weight',
text:'event',
text:'native place']
sheet0. row_types( 0 )
array('B', [1, 1, 1, 1, 1, 1, 1, 1, 1])
4.2.1.5.2 单元格操作
sheet.row_values(0,3,7) # 获得的是第0行第3到7列(不含最后的第7列) sheet.col_values(0,0,5) # 获得的是第0列第5到5行(不含最后的第5行)
sheet0. row_values( 0 )
['name',
'name2',
'gender',
'nation',
'birth',
'height/cm',
'weight',
'event',
'native place']
sheet0. row_values( 0 , 3 , 7 )
['nation', 'birth', 'height/cm', 'weight']
sheet0. row_values( 1 , 3 , 7 )
['中国', 32769.0, '', '']
sheet0. col_values( 0 , 0 , 5 )
['name', '毕晓琳 ', '鲍语晴 ', '艾衍含 ', '卞卡 ']
4.2.2 用pandas读取excel文件
import pandas as pd
excelData = pd. read_excel( "Athletes_info.xlsx" , sheet_name= "Sheet1" )
excelData. head( 5 )
name name2 gender nation birth height/cm weight event native place 0 毕晓琳 Bi Xiaolin 女 中国 1989-09-18 00:00:00 NaN NaN 足球 辽宁 1 鲍语晴 Bao Yuqing 女 中国 NaN NaN NaN 艺术体操 浙江 2 艾衍含 Ai Yanhan 女 中国 2002-02-07 00:00:00 NaN NaN 游泳 湖北 3 卞卡 BIAN Ka 女 中国 1993-01-05 00:00:00 182.0 113kg 女子铅球 江苏 4 陈楠 Chen Nan 女 中国 1983-12-08 00:00:00 197.0 90kg 篮球 青岛胶南
excelData. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 321 entries, 0 to 320
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 321 non-null object
1 name2 321 non-null object
2 gender 321 non-null object
3 nation 321 non-null object
4 birth 251 non-null object
5 height/cm 203 non-null float64
6 weight 194 non-null object
7 event 320 non-null object
8 native place 306 non-null object
dtypes: float64(1), object(8)
memory usage: 22.7+ KB
excelData. describe( )
height/cm count 203.000000 mean 177.911330 std 12.033041 min 140.000000 25% 170.500000 50% 177.000000 75% 184.000000 max 225.000000
phonsedata = pd. read_excel( "phonesdata.xlsx" , sheet_name= 0 , nrows= 5 )
phonsedata
订单号 订单日期 年 月 地区名字 省份名字 城市名字 品牌 型号 运行内存 机身内存 数量 用户名 用户姓名 年龄 性别 手机号 0 20180301004758 2020-01-14 2020 1 中南地区 广西壮族自治区 梧州市 荣耀 荣耀9X 6G 64G 4 RVwhqiwMFc 刘捷 16 1 1379407**** 1 20180301004759 2018-01-20 2018 1 华东地区 浙江省 舟山市 三星 Galaxy A50s 6G 128G 7 hICxjenVeM 陈盼妙 37 2 1382084**** 2 20180301004760 2019-06-15 2019 6 西北地区 甘肃省 白银市 小米 红米K30 Pro 8G 256G 8 RSXOFBOwki 张浩 36 1 1593116**** 3 20180301004761 2019-01-07 2019 1 中南地区 河南省 许昌市 小米 红米Note8 8G 128G 13 OtUMUlCBuK 辛倩 21 2 1308444**** 4 20180301004762 2019-05-21 2019 5 直辖市 北京市 北京市 vivo New 3S 6G 128G 4 eikoQvIyUR 徐旭 31 2 1322687****
phonsedata. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 订单号 5 non-null int64
1 订单日期 5 non-null datetime64[ns]
2 年 5 non-null int64
3 月 5 non-null int64
4 地区名字 5 non-null object
5 省份名字 5 non-null object
6 城市名字 5 non-null object
7 品牌 5 non-null object
8 型号 5 non-null object
9 运行内存 5 non-null object
10 机身内存 5 non-null object
11 数量 5 non-null int64
12 用户名 5 non-null object
13 用户姓名 5 non-null object
14 年龄 5 non-null int64
15 性别 5 non-null int64
16 手机号 5 non-null object
dtypes: datetime64[ns](1), int64(6), object(10)
memory usage: 808.0+ bytes
4.2.3 实例:新冠疫情初期数据分析
from pyecharts import options as opts
from pyecharts. charts import Map
import pandas as pd
current_prov_covid19 = pd. read_excel( "covid19_data.xls" , sheet_name= 0 )
current_prov_covid19
province confirm dead heal suspect 0 湖北 65187 2615 20948 0 1 广东 1347 7 851 0 2 河南 1271 19 1032 0 3 浙江 1205 1 860 0 4 湖南 1016 4 783 0 5 安徽 989 6 744 0 6 江西 934 1 719 0 7 山东 756 6 377 0 8 江苏 631 0 478 0 9 重庆 576 6 373 0 10 四川 531 3 307 0 11 黑龙江 480 12 249 0 12 北京 400 4 235 0 13 上海 336 3 272 0 14 河北 312 6 261 0 15 福建 294 1 213 0 16 广西 252 2 147 0 17 陕西 245 1 191 0 18 云南 174 2 144 0 19 海南 168 5 129 0 20 贵州 146 2 104 0 21 天津 135 3 96 0 22 山西 133 0 104 0 23 辽宁 121 1 88 0 24 吉林 93 1 65 0 25 甘肃 91 2 81 0 26 香港 89 2 24 0 27 新疆 76 2 34 0 28 内蒙古 75 0 38 0 29 宁夏 71 0 65 0 30 台湾 32 1 5 0 31 青海 18 0 18 0 32 澳门 10 0 7 0 33 西藏 1 0 1 0
data_history_covid19 = pd. read_excel( "covid19_data.xls" , sheet_name= 1 )
data_history_covid19
date confirm dead heal suspect 0 2020-01-20 291 6 0 54 1 2020-01-21 440 9 0 37 2 2020-01-22 571 17 28 393 3 2020-01-23 830 25 34 1072 4 2020-01-24 1287 41 38 1965 5 2020-01-25 1975 56 49 2684 6 2020-01-26 2744 80 51 5794 7 2020-01-27 4515 106 60 6973 8 2020-01-28 5974 132 103 9239 9 2020-01-29 7711 170 124 12167 10 2020-01-30 9692 213 171 15238 11 2020-01-31 11791 259 243 17988 12 2020-02-01 14380 304 328 19544 13 2020-02-02 17205 361 475 21558 14 2020-02-03 20438 425 632 23214 15 2020-02-04 24324 490 892 23260 16 2020-02-05 28018 563 1153 24702 17 2020-02-06 31116 636 1540 26359 18 2020-02-07 34546 722 2050 27657 19 2020-02-08 37198 811 2649 28942 20 2020-02-09 40171 908 3281 23589 21 2020-02-10 42638 1016 3996 21675 22 2020-02-11 44653 1113 4640 16067 23 2020-02-12 58761 1259 5642 13435 24 2020-02-13 63851 1380 6723 10109 25 2020-02-14 66492 1523 8096 8969 26 2020-02-15 68500 1665 9419 8228 27 2020-02-16 70548 1770 10844 7264 28 2020-02-17 72436 1868 12552 6242 29 2020-02-18 74185 2004 14376 5248 30 2020-02-19 75002 2118 16157 4922 31 2020-02-20 75891 2236 18266 5206 32 2020-02-21 76288 2345 20659 5365 33 2020-02-22 76741 2442 22888 4148 34 2020-02-23 77150 2592 24734 3434 35 2020-02-24 77658 2663 27323 2824 36 2020-02-25 78064 2715 29745 2491
data_world_covid19 = pd. read_excel( "covid19_data.xls" , sheet_name= "data_world" )
data_world_covid19
country confirm dead heal suspect 0 中国 78630 2747 32546 2358 1 日本 894 7 23 0 2 泰国 40 0 22 0 3 新加坡 93 0 62 0 4 韩国 1595 13 24 0 5 澳大利亚 23 0 0 0 6 德国 26 0 15 0 7 美国 60 0 0 0 8 马来西亚 22 0 7 0 9 越南 16 0 16 0 10 法国 18 2 11 0 11 阿联酋 13 0 3 0 12 加拿大 12 0 4 0 13 印度 3 0 0 0 14 英国 13 0 8 0 15 意大利 470 12 3 0 16 俄罗斯 2 0 0 0 17 菲律宾 3 1 0 0 18 芬兰 2 0 0 0 19 尼泊尔 1 0 0 0 20 西班牙 13 0 2 0 21 斯里兰卡 1 0 0 0 22 柬埔寨 1 0 0 0 23 瑞典 1 0 0 0 24 比利时 1 0 0 0 25 伊朗 139 19 49 320 26 以色列 6 0 1 0 27 黎巴嫩 1 0 0 0 28 伊拉克 5 0 0 0 29 阿富汗 1 0 0 0 30 科威特 26 0 0 0 31 巴林 26 0 0 0 32 阿曼 4 0 0 0 33 克罗地亚 1 0 0 0 34 奥地利 2 0 0 0 35 瑞士 1 0 0 0 36 阿尔及利亚 1 0 0 0 37 巴西 1 0 0 0 38 希腊 1 0 0 0 39 巴基斯坦 2 0 0 0 40 格鲁吉亚 1 0 0 0 41 挪威 1 0 0 0 42 罗马尼亚 1 0 0 0
df = pd. read_excel( r'covid19_data.xls' , sheet_name= 'current_prov' )
df. head( )
province confirm dead heal suspect 0 湖北 65187 2615 20948 0 1 广东 1347 7 851 0 2 河南 1271 19 1032 0 3 浙江 1205 1 860 0 4 湖南 1016 4 783 0
province = list ( df[ 'province' ] )
pro_value = list ( df[ 'confirm' ] )
pr_data = [ list ( z) for z in zip ( province, pro_value) ]
pr_data
[['湖北', 65187],
['广东', 1347],
['河南', 1271],
['浙江', 1205],
['湖南', 1016],
['安徽', 989],
['江西', 934],
['山东', 756],
['江苏', 631],
['重庆', 576],
['四川', 531],
['黑龙江', 480],
['北京', 400],
['上海', 336],
['河北', 312],
['福建', 294],
['广西', 252],
['陕西', 245],
['云南', 174],
['海南', 168],
['贵州', 146],
['天津', 135],
['山西', 133],
['辽宁', 121],
['吉林', 93],
['甘肃', 91],
['香港', 89],
['新疆', 76],
['内蒙古', 75],
['宁夏', 71],
['台湾', 32],
['青海', 18],
['澳门', 10],
['西藏', 1]]
用pyecharts里的map_visualmap()函数对上述数据进行疫情地图展示,让大家直观的感受到目前的疫情分布情况,作图如下所示。
epi_map = (
Map( )
. add( "2020年2月26日" , pr_data, "china" )
. set_global_opts( title_opts= opts. TitleOpts( title= "nCov疫情分布" ) ,
visualmap_opts= opts. VisualMapOpts(
pieces= [ { "min" : 10000 , "label" : '>10000人' , "color" : 'red' } ,
{ "min" : 500 , "max" : 9999 , "label" : '500-9999人' , "color" : 'orange' } ,
{ "min" : 100 , "max" : 499 , "label" : '100-499人' , "color" : 'gold' } ,
{ "min" : 10 , "max" : 99 , "label" : '10-100人' , "color" : 'cornsilk' } ,
{ "min" : 0 , "max" : 9 , "label" : '1-9人' , "color" : 'white' } , ] ,
is_piecewise= True ) , )
)
epi_map. render( 'map.html' )
epi_map. render_notebook( )
4.2.4 excel文件的写入
xlwt写入excel文件 df.to_excel()
excelData = pd. read_excel( "Athletes_info.xlsx" , sheet_name= "Sheet1" )
excelData. head( )
name name2 gender nation birth height/cm weight event native place 0 毕晓琳 Bi Xiaolin 女 中国 1989-09-18 00:00:00 NaN NaN 足球 辽宁 1 鲍语晴 Bao Yuqing 女 中国 NaN NaN NaN 艺术体操 浙江 2 艾衍含 Ai Yanhan 女 中国 2002-02-07 00:00:00 NaN NaN 游泳 湖北 3 卞卡 BIAN Ka 女 中国 1993-01-05 00:00:00 182.0 113kg 女子铅球 江苏 4 陈楠 Chen Nan 女 中国 1983-12-08 00:00:00 197.0 90kg 篮球 青岛胶南
excelData. to_excel( "Athletes_infoOut2.xls" , sheet_name= "Sheet1" , columns= [ 'name' , 'nation' ] )
D:\ProgramFiles\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: As the xlwt package is no longer maintained, the xlwt engine will be removed in a future version of pandas. This is the only engine in pandas that supports writing in the xls format. Install openpyxl and write to an xlsx file instead. You can set the option io.excel.xls.writer to 'xlwt' to silence this warning. While this option is deprecated and will also raise a warning, it can be globally set and the warning suppressed.
"""Entry point for launching an IPython kernel.
4.3 从Json文件读写
4.3.1 利用以前的方式
读取json文件为str–> str利用json.loads()转换成字典–>再利用字典使用pd.DataFrame()构建dataframe
import json
with open ( 'Animal_species.json' , encoding= 'utf8' ) as f:
json_str = f. read( )
print ( json_str)
{"哺乳动物":["虎","猴子","狗","猫","鹿"],
"鱼类动物":["龙鱼","鲶鱼","鳟鱼","章鱼","草鱼"],
"飞禽类动物":["丹顶鹤","金雕","白鹭","鸽子","天鹅"],
"昆虫类动物":["蝴蝶","金龟子","蜜蜂","蜻蜓","螳螂"]}
type ( json_str)
str
json_str[ '哺乳动物' ]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/var/folders/gv/w6mdpnf51kncpwpf7x4xvtz80000gn/T/ipykernel_845/249757702.py in <module>
----> 1 json_str['哺乳动物']
TypeError: string indices must be integers
json_dict = json. loads( json_str)
json_dict
{'哺乳动物': ['虎', '猴子', '狗', '猫', '鹿'],
'鱼类动物': ['龙鱼', '鲶鱼', '鳟鱼', '章鱼', '草鱼'],
'飞禽类动物': ['丹顶鹤', '金雕', '白鹭', '鸽子', '天鹅'],
'昆虫类动物': ['蝴蝶', '金龟子', '蜜蜂', '蜻蜓', '螳螂']}
type ( json_dict)
dict
json_dict[ '哺乳动物' ]
['虎', '猴子', '狗', '猫', '鹿']
import pandas as pd
pd. DataFrame( json_dict)
哺乳动物 鱼类动物 飞禽类动物 昆虫类动物 0 虎 龙鱼 丹顶鹤 蝴蝶 1 猴子 鲶鱼 金雕 金龟子 2 狗 鳟鱼 白鹭 蜜蜂 3 猫 章鱼 鸽子 蜻蜓 4 鹿 草鱼 天鹅 螳螂
4.3.2 直接利用pandas的方法pd.read_json读取json文件
json_data = pd. read_json( 'Animal_species.json' , encoding= 'utf8' )
json_data
哺乳动物 鱼类动物 飞禽类动物 昆虫类动物 0 虎 龙鱼 丹顶鹤 蝴蝶 1 猴子 鲶鱼 金雕 金龟子 2 狗 鳟鱼 白鹭 蜜蜂 3 猫 章鱼 鸽子 蜻蜓 4 鹿 草鱼 天鹅 螳螂
4.3.3 json文件的写入
json_dict
{'哺乳动物': ['虎', '猴子', '狗', '猫', '鹿'],
'鱼类动物': ['龙鱼', '鲶鱼', '鳟鱼', '章鱼', '草鱼'],
'飞禽类动物': ['丹顶鹤', '金雕', '白鹭', '鸽子', '天鹅'],
'昆虫类动物': ['蝴蝶', '金龟子', '蜜蜂', '蜻蜓', '螳螂']}
type ( json_dict)
dict
jsonStr = json. dumps( json_dict, ensure_ascii= False )
jsonStr
'{"哺乳动物": ["虎", "猴子", "狗", "猫", "鹿"], "鱼类动物": ["龙鱼", "鲶鱼", "鳟鱼", "章鱼", "草鱼"], "飞禽类动物": ["丹顶鹤", "金雕", "白鹭", "鸽子", "天鹅"], "昆虫类动物": ["蝴蝶", "金龟子", "蜜蜂", "蜻蜓", "螳螂"]}'
type ( jsonStr)
str
with open ( "AnimalOut.json" , "w" ) as f:
f. write( jsonStr)
json_data
哺乳动物 鱼类动物 飞禽类动物 昆虫类动物 0 虎 龙鱼 丹顶鹤 蝴蝶 1 猴子 鲶鱼 金雕 金龟子 2 狗 鳟鱼 白鹭 蜜蜂 3 猫 章鱼 鸽子 蜻蜓 4 鹿 草鱼 天鹅 螳螂
json_data. to_json( "AnimalOut2.json" , force_ascii= False )
4.4 从Html表格中获取数据
4.4.1 从Html表格获得数据的主要注意事项
采用requests.get()获取Html数据 pd.read_html() 直读取网页中的表格数据 返回值是一个列表,列表中每个元素是一个dataframe
pandas. read_html( io, match = '.+' , flavor= None , header= None , index_col= None , skiprows= None , attrs= None , parse_dates= False , tupleize_cols= None , thousands= ', ' , encoding= None , decimal= '.' , converters= None , na_values= None , keep_default_na= True , displayed_only= True )
常用的参数:
io:可以是url、html文本、本地文件等; flavor:解析器; header:标题行; skiprows:跳过的行; attrs:属性,比如 attrs = {‘id’: ‘table’}; parse_dates:解析日期
注意:返回的结果是DataFrame 组成的list 。
import requests
html_data = requests. get( "https://www.tiobe.com/tiobe-index/" )
html_data
<Response [200]>
html_data. content
b'<!doctype html>\r\n<html>\r\n <head>\r\n <meta content="IE=edge" http-equiv="X-UA-Compatible">\r\n <meta charset="utf-8">\r\n <title>index | TIOBE - The Software Quality Company</title>\r\n <link href=\'//fonts.googleapis.com/css?family=Roboto:300,400,500,700\' rel=\'stylesheet\' type=\'text/css\' />\r\n <link href=\'//fonts.googleapis.com/css?family=Roboto+Slab:300\' rel=\'stylesheet\' type=\'text/css\' />\r\n <link rel="shortcut icon" href="/images/tiobe.ico" type="image/x-icon" />\r\n <link rel="stylesheet" href="/stylesheets/normalize.css">\r\n <link rel="stylesheet" href="/stylesheets/main_prefixed.css?1623057826709">\r\n <link rel="stylesheet" href="/stylesheets/slicknav.min.css" />\r\n <meta name="viewport" content="width=device-width, initial-scale=1" />\r\n <script type="text/javascript" src="/js/jquery-1.8.0.release.js"></script>\r\n <script src="/js/vendor/modernizr-2.6.2.min.js"></script>\r\n <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>\r\n <script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.9/cookieconsent.min.js"></script>\r\n <script src="/js/plugins.js"></script>\r\n <script src="/js/main.js"></script>\r\n <script src="/js/vendor/jquery.slicknav.min.js"></script>\r\n <script>window.jQuery || document.write(\'<script src="/js/vendor/jquery-1.10.2.min.js"><\\/script>\')</script>\r\n <script>\r\n $(function(){\r\n $(\'#menu\').slicknav({appendTo:\'#siteheader, #siteheadervervolg\'});\r\n });\r\n </script>\r\n <script type="text/javascript">\r\n window.cookieconsent_options = {"message":"We use cookies to analyse our traffic and to show ads. By using our website, you agree to our use of cookies.","dismiss":"Got it!","learnMore":"More info","link":null,"theme":"/stylesheets/cookieconsent_theme.css"};\r\n </script>\r\n <script src="//code.highcharts.com/highcharts.js"></script>\r\n </head>\r\n <body>\r\n <div id="slider" class="fullwidth cycle-slideshow" data-cycle-fx="none" data-cycle-speed="500" data-cycle-slides="> div.slide" data-cycle-pause-on-hover="false" data-cycle-timeout="12000" data-cycle-pager=".realpager" data-cycle-prev=".prev" data-cycle-next=".next" data-starting-slide="0" style="height : 260px;">\r\n <div class="slide cycle-slide" style="background-image: url(\'/images/slider/header_medical.jpg\'); height: 400px; "></div>\r\n <div class="slide cycle-slide" style="background-image: url(\'/images/slider/header_aerospace.jpg\'); height: 300px; display: none;"></div>\r\n <div class="slide cycle-slide" style="background-image: url(\'/images/slider/header_automotive.jpg\'); height: 400px; display: none;"></div>\r\n <div class="slide cycle-slide" style="background-image: url(\'/images/slider/header_finance.jpg\'); height: 350px; display: none;"></div>\r\n <div class="slide cycle-slide" style="background-image: url(\'/images/slider/header_logistics.jpg\'); height: 500px; display: none;"></div>\r\n </div>\r\n <div id="siteheadervervolg" class="clearfix">\r\n <div id="menutopfull">\r\n <div class="sitewidth clearfix">\r\n <div id="menutopcontainer">\r\n <ul id="menutop">\r\n <li><a href="/contact/">Contact</a></li>\r\n <li><a href="/tiobe-index/">TIOBE index</a></li>\r\n </ul>\r\n </div>\r\n <div id="menutopfiller"></div>\r\n </div>\r\n </div>\r\n <header class="fullwidth">\r\n <div class="sitewidth">\r\n <a href="/" class="ir" id="logo">TIOBE website</a>\r\n <ul id="menu">\r\n <li>\r\n <a href="/documentation/">Documentation</a>\r\n </li>\r\n <li>\r\n <a href="/tqi/definition/">Quality Standards</a>\r\n <ul>\r\n <li><a href="/tqi/definition/">TQI</a>\r\n <ul>\r\n <li><a href="/tqi/definition/">TQI Definition</a></li>\r\n <li><a href="/tqi/tqi-demo/">TQI Demo</a></li>\r\n <li><a href="/tqi/awards/">Awards</a></li>\r\n <li><a href="/tqi/changes/">Changes</a></li>\r\n </ul>\r\n </li>\r\n <li><a href="/tpm/definition/">Trusted Product Maintainability</a>\r\n <ul>\r\n <li><a href="/tpm/definition/">TPM Definition</a></li>\r\n <li><a href="/tpm/changes/">Changes</a></li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n <li>\r\n <a href="/markets/customers/">Markets</a>\r\n <ul>\r\n <li><a href="/markets/customers/">Customers</a></li>\r\n <li><a href="/markets/distributors/">Distributors</a></li>\r\n </ul>\r\n </li>\r\n <li>\r\n <a href="/tics/fact-sheet/">Products</a>\r\n <ul>\r\n <li><a href="/tics/fact-sheet/">TICS</a></li>\r\n <li><a href="/products/quality-assessment/">TQI Quality Assessment</a></li>\r\n <li><a href="/tpm/definition/">TPM Maintainability Assessment</a></li>\r\n </ul>\r\n </li>\r\n <li>\r\n <a href="/tics/fact-sheet/">TICS</a>\r\n <ul>\r\n <li><a href="/tics/fact-sheet/">Fact Sheet</a></li>\r\n <li><a href="/tics/tics-framework/">TICS Framework</a></li>\r\n <li><a href="/tics/documentation/" class="extern">Documentation</a></li>\r\n </ul>\r\n </li>\r\n <li>\r\n <a href="/company/about/">Company</a>\r\n <ul>\r\n <li><a href="/company/about/">About</a></li>\r\n <li><a href="/company/management-team/">Management Team</a></li>\r\n <li><a href="/company/media/">Media</a></li>\r\n <li><a href="/articles/">Blog</a></li>\r\n </ul>\r\n </li>\r\n <li>\r\n <a href="/">Home</a>\r\n </li>\r\n </ul>\r\n </div>\r\n </header>\r\n </div>\r\n <section class="fullwidth offwhitebg clearfix">\r\n <section class="sitewidth">\r\n <div id="crumbs">\r\n <ul>\r\n <li><a href="/">Home</a></li>\r\n <li>></li>\r\n <li><a href=\'/tiobe-index/\'>TIOBE Index</a></li>\r\n <li>></li>\r\n <li><a href=\'\'>index</a></li>\r\n <li></li>\r\n </ul>\r\n </div> <section class="clearfix">\r\n <article class="whitebg padblock content wide">\r\n <link rel="stylesheet" href="/stylesheets/tpci.css">\r\n<style type="text/css">\r\ntable.table-top20 tbody tr td {\r\n vertical-align: baseline;\r\n}\r\n\r\ntd.td-top20 {\r\n text-align: center;\r\n}\r\n\r\ntable.table-top20 tbody tr:hover td {\r\n background-color: lightgrey;\r\n\tfont-weight: bold;\r\n cursor: pointer;\r\n vertical-align: baseline;\r\n}\r\n\r\ntable.table-top20 tbody tr td img {\r\n vertical-align: top;\r\n}\r\n</style>\r\n<script>$(document).ready(function(){$("table.table-top20 > tbody > tr").click(function() {var lang = $(this).find($("td:nth-child(5)")).text();lang = lang.replace("/", "-");lang = lang.replace(".", "dot");lang = lang.replace(/\\s/g, "-");lang = lang.toLowerCase();lang = lang.replace("#", "sharp");lang = lang.replace(/[+]/g, "plus");var page = encodeURIComponent(lang);window.open("/tiobe-index/" + page + "/", "_self");});});</script>\r\n<script>$(function () {\r\n $(\'#container\').highcharts({\r\n credits: {\r\n\t\t enabled: false\r\n },\r\n chart: {\r\n \ttype: \'spline\'\r\n },\r\n plotOptions: {\r\n \tspline: {\r\n \t\tlineWidth: 4,\r\n \t\tstates: {\r\n \t\t\thover: {\r\n \t\t\t\tlineWidth: 5\r\n \t\t\t}\r\n \t\t},\r\n \t\tmarker: {\r\n \t\t\tenabled: false\r\n \t\t}\r\n \t}\r\n },\r\n title: {\r\n \ttext: \'TIOBE Programming Community Index\',\r\n \tx: -20,\r\n \tuseHTML: true\r\n },\r\n subtitle: {\r\n \ttext: \'Source: www.tiobe.com\',\r\n \tx: -20,\r\n \tuseHTML: true\r\n },\r\n xAxis: {\r\n \ttype: \'datetime\',\r\n \tdateTimeLabelFormats: {\r\n \t\tyear: \'%Y\'\r\n \t}\r\n },\r\n yAxis: {\r\n \ttitle: {\r\n \t\ttext: \'Ratings (%)\'\r\n \t},\r\n \tplotLines: [{\r\n \t\tvalue: 0,\r\n \t\twidth: 1,\r\n \t\tcolor: \'#808080\'\r\n \t}]\r\n },\r\n tooltip: {\r\n \tvalueSuffix: \'%\',\r\n \tdateTimeLabelFormats: {\r\n \t\tweek: "%B %Y"\r\n \t}\r\n },\r\n legend: {\r\n align: \'center\',borderWidth: 0,\r\n },\r\n series: [\r\n \t{name : \'Python\',data : [[Date.UTC(2001, 5, 30), 1.25], [Date.UTC(2001, 6, 30), 1.13], [Date.UTC(2001, 7, 30), 1.20], [Date.UTC(2001, 8, 28), 1.17], [Date.UTC(2001, 9, 26), 1.28], [Date.UTC(2001, 10, 28), 1.23], [Date.UTC(2001, 11, 31), 1.04], [Date.UTC(2002, 0, 30), 1.02], [Date.UTC(2002, 1, 27), 0.99], [Date.UTC(2002, 2, 29), 0.99], [Date.UTC(2002, 3, 29), 1.07], [Date.UTC(2002, 4, 29), 1.06], [Date.UTC(2002, 5, 29), 1.13], [Date.UTC(2002, 6, 31), 1.08], [Date.UTC(2002, 7, 29), 1.22], [Date.UTC(2002, 8, 29), 1.08], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.00], [Date.UTC(2002, 11, 31), 1.00], [Date.UTC(2003, 0, 31), 1.03], [Date.UTC(2003, 1, 28), 0.97], [Date.UTC(2003, 2, 31), 0.99], [Date.UTC(2003, 3, 30), 1.01], [Date.UTC(2003, 4, 30), 1.16], [Date.UTC(2003, 5, 30), 1.28], [Date.UTC(2003, 6, 31), 1.30], [Date.UTC(2003, 7, 31), 1.42], [Date.UTC(2003, 8, 30), 1.49], [Date.UTC(2003, 9, 31), 1.77], [Date.UTC(2003, 10, 30), 1.10], [Date.UTC(2003, 11, 31), 1.13], [Date.UTC(2004, 0, 31), 1.01], [Date.UTC(2004, 1, 29), 1.02], [Date.UTC(2004, 2, 31), 1.01], [Date.UTC(2004, 3, 30), 4.57], [Date.UTC(2004, 4, 30), 6.58], [Date.UTC(2004, 5, 30), 4.96], [Date.UTC(2004, 6, 31), 4.70], [Date.UTC(2004, 7, 30), 5.60], [Date.UTC(2004, 8, 30), 4.44], [Date.UTC(2004, 9, 31), 5.20], [Date.UTC(2004, 10, 30), 3.03], [Date.UTC(2004, 11, 31), 2.84], [Date.UTC(2005, 0, 31), 2.51], [Date.UTC(2005, 1, 28), 2.42], [Date.UTC(2005, 2, 31), 2.70], [Date.UTC(2005, 3, 30), 2.48], [Date.UTC(2005, 4, 31), 2.80], [Date.UTC(2005, 5, 30), 2.52], [Date.UTC(2005, 6, 31), 2.88], [Date.UTC(2005, 7, 31), 3.03], [Date.UTC(2005, 8, 30), 2.88], [Date.UTC(2005, 11, 3), 2.68], [Date.UTC(2006, 0, 4), 2.60], [Date.UTC(2006, 1, 2), 2.67], [Date.UTC(2006, 2, 1), 3.09], [Date.UTC(2006, 3, 2), 2.76], [Date.UTC(2006, 4, 1), 3.04], [Date.UTC(2006, 5, 1), 3.46], [Date.UTC(2006, 6, 2), 3.02], [Date.UTC(2006, 7, 2), 3.07], [Date.UTC(2006, 8, 2), 3.14], [Date.UTC(2006, 9, 1), 3.47], [Date.UTC(2006, 10, 2), 3.64], [Date.UTC(2006, 11, 1), 3.76], [Date.UTC(2007, 0, 2), 3.50], [Date.UTC(2007, 1, 3), 3.57], [Date.UTC(2007, 2, 3), 3.90], [Date.UTC(2007, 3, 1), 3.81], [Date.UTC(2007, 4, 5), 3.78], [Date.UTC(2007, 5, 2), 3.16], [Date.UTC(2007, 6, 2), 3.02], [Date.UTC(2007, 7, 5), 2.75], [Date.UTC(2007, 8, 2), 3.03], [Date.UTC(2007, 9, 4), 3.43], [Date.UTC(2007, 10, 4), 4.23], [Date.UTC(2007, 11, 3), 4.70], [Date.UTC(2008, 0, 3), 5.54], [Date.UTC(2008, 1, 7), 4.76], [Date.UTC(2008, 5, 1), 4.90], [Date.UTC(2008, 6, 2), 4.97], [Date.UTC(2008, 7, 3), 4.98], [Date.UTC(2008, 8, 3), 5.01], [Date.UTC(2008, 9, 6), 4.56], [Date.UTC(2008, 10, 2), 5.14], [Date.UTC(2008, 11, 3), 4.17], [Date.UTC(2009, 0, 2), 4.73], [Date.UTC(2009, 1, 1), 4.57], [Date.UTC(2009, 2, 5), 5.18], [Date.UTC(2009, 3, 7), 6.08], [Date.UTC(2009, 4, 1), 5.55], [Date.UTC(2009, 5, 4), 4.76], [Date.UTC(2009, 6, 2), 4.43], [Date.UTC(2009, 7, 1), 4.49], [Date.UTC(2009, 8, 5), 3.93], [Date.UTC(2009, 9, 2), 3.90], [Date.UTC(2009, 10, 2), 4.67], [Date.UTC(2009, 11, 2), 5.19], [Date.UTC(2010, 0, 5), 4.45], [Date.UTC(2010, 1, 7), 4.31], [Date.UTC(2010, 2, 7), 4.23], [Date.UTC(2010, 3, 5), 4.21], [Date.UTC(2010, 4, 15), 4.10], [Date.UTC(2010, 6, 6), 4.22], [Date.UTC(2010, 6, 30), 4.22], [Date.UTC(2010, 8, 11), 4.58], [Date.UTC(2010, 9, 2), 4.86], [Date.UTC(2010, 10, 3), 5.68], [Date.UTC(2010, 11, 7), 6.48], [Date.UTC(2011, 0, 2), 6.26], [Date.UTC(2011, 1, 8), 7.04], [Date.UTC(2011, 2, 8), 5.74], [Date.UTC(2011, 3, 3), 4.93], [Date.UTC(2011, 4, 2), 4.58], [Date.UTC(2011, 5, 5), 3.90], [Date.UTC(2011, 5, 27), 3.90], [Date.UTC(2011, 6, 8), 3.58], [Date.UTC(2011, 7, 3), 3.41], [Date.UTC(2011, 8, 10), 4.00], [Date.UTC(2011, 9, 9), 3.94], [Date.UTC(2011, 10, 7), 3.62], [Date.UTC(2011, 11, 4), 3.49], [Date.UTC(2012, 0, 8), 3.21], [Date.UTC(2012, 1, 5), 3.15], [Date.UTC(2012, 2, 11), 3.29], [Date.UTC(2012, 3, 8), 3.66], [Date.UTC(2012, 4, 9), 3.82], [Date.UTC(2012, 5, 10), 3.85], [Date.UTC(2012, 6, 4), 4.00], [Date.UTC(2012, 7, 10), 3.88], [Date.UTC(2012, 8, 2), 3.86], [Date.UTC(2012, 9, 5), 3.90], [Date.UTC(2012, 10, 4), 4.06], [Date.UTC(2012, 11, 2), 3.85], [Date.UTC(2013, 0, 5), 4.17], [Date.UTC(2013, 1, 8), 4.95], [Date.UTC(2013, 2, 11), 4.39], [Date.UTC(2013, 3, 7), 4.44], [Date.UTC(2013, 4, 8), 4.32], [Date.UTC(2013, 5, 9), 4.18], [Date.UTC(2013, 6, 7), 4.03], [Date.UTC(2013, 6, 12), 4.03], [Date.UTC(2013, 7, 4), 3.60], [Date.UTC(2013, 8, 11), 3.17], [Date.UTC(2013, 9, 10), 3.11], [Date.UTC(2013, 10, 9), 3.11], [Date.UTC(2013, 11, 6), 2.21], [Date.UTC(2014, 0, 1), 2.37], [Date.UTC(2014, 1, 8), 2.16], [Date.UTC(2014, 2, 3), 2.02], [Date.UTC(2014, 3, 10), 1.99], [Date.UTC(2014, 4, 7), 3.06], [Date.UTC(2014, 5, 8), 2.71], [Date.UTC(2014, 6, 6), 2.66], [Date.UTC(2014, 7, 11), 3.12], [Date.UTC(2014, 8, 1), 2.78], [Date.UTC(2014, 9, 3), 2.33], [Date.UTC(2014, 10, 8), 2.59], [Date.UTC(2014, 11, 7), 2.29], [Date.UTC(2015, 0, 6), 2.61], [Date.UTC(2015, 1, 5), 2.88], [Date.UTC(2015, 2, 7), 2.61], [Date.UTC(2015, 3, 13), 2.69], [Date.UTC(2015, 4, 13), 3.72], [Date.UTC(2015, 5, 6), 4.00], [Date.UTC(2015, 6, 12), 4.26], [Date.UTC(2015, 7, 6), 4.07], [Date.UTC(2015, 8, 5), 3.66], [Date.UTC(2015, 9, 4), 4.51], [Date.UTC(2015, 10, 7), 3.77], [Date.UTC(2015, 11, 4), 4.43], [Date.UTC(2016, 0, 2), 3.85], [Date.UTC(2016, 1, 2), 4.18], [Date.UTC(2016, 2, 3), 4.26], [Date.UTC(2016, 3, 7), 3.33], [Date.UTC(2016, 4, 6), 3.79], [Date.UTC(2016, 5, 5), 3.90], [Date.UTC(2016, 6, 4), 4.17], [Date.UTC(2016, 7, 6), 4.40], [Date.UTC(2016, 8, 8), 4.30], [Date.UTC(2016, 9, 7), 3.77], [Date.UTC(2016, 10, 5), 3.57], [Date.UTC(2016, 11, 4), 4.24], [Date.UTC(2017, 0, 7), 3.46], [Date.UTC(2017, 1, 8), 4.04], [Date.UTC(2017, 2, 7), 3.92], [Date.UTC(2017, 3, 9), 3.46], [Date.UTC(2017, 4, 6), 3.55], [Date.UTC(2017, 5, 3), 4.33], [Date.UTC(2017, 6, 7), 3.54], [Date.UTC(2017, 7, 2), 3.69], [Date.UTC(2017, 8, 6), 2.98], [Date.UTC(2017, 9, 5), 3.80], [Date.UTC(2017, 10, 12), 4.48], [Date.UTC(2017, 11, 9), 3.78], [Date.UTC(2018, 0, 3), 4.68], [Date.UTC(2018, 1, 8), 5.17], [Date.UTC(2018, 2, 7), 5.87], [Date.UTC(2018, 3, 1), 5.80], [Date.UTC(2018, 4, 6), 5.19], [Date.UTC(2018, 5, 10), 5.76], [Date.UTC(2018, 6, 7), 6.36], [Date.UTC(2018, 7, 1), 6.99], [Date.UTC(2018, 8, 3), 7.65], [Date.UTC(2018, 9, 5), 7.16], [Date.UTC(2018, 10, 8), 7.68], [Date.UTC(2018, 11, 2), 8.38], [Date.UTC(2019, 0, 4), 8.29], [Date.UTC(2019, 1, 6), 7.57], [Date.UTC(2019, 2, 2), 8.26], [Date.UTC(2019, 3, 7), 8.17], [Date.UTC(2019, 4, 4), 7.83], [Date.UTC(2019, 5, 9), 8.53], [Date.UTC(2019, 6, 6), 9.26], [Date.UTC(2019, 7, 5), 10.02], [Date.UTC(2019, 8, 9), 9.87], [Date.UTC(2019, 9, 5), 9.09], [Date.UTC(2019, 10, 3), 9.84], [Date.UTC(2019, 11, 6), 10.31], [Date.UTC(2020, 0, 5), 9.70], [Date.UTC(2020, 1, 4), 9.35], [Date.UTC(2020, 2, 4), 10.11], [Date.UTC(2020, 3, 2), 9.31], [Date.UTC(2020, 4, 2), 9.12], [Date.UTC(2020, 5, 1), 8.36], [Date.UTC(2020, 6, 4), 9.09], [Date.UTC(2020, 7, 2), 9.69], [Date.UTC(2020, 8, 6), 10.47], [Date.UTC(2020, 9, 4), 11.28], [Date.UTC(2020, 10, 3), 12.12], [Date.UTC(2020, 11, 3), 12.21], [Date.UTC(2021, 0, 2), 11.72], [Date.UTC(2021, 1, 6), 10.86], [Date.UTC(2021, 2, 4), 10.31], [Date.UTC(2021, 3, 4), 11.03], [Date.UTC(2021, 4, 2), 11.87], [Date.UTC(2021, 5, 5), 11.84], [Date.UTC(2021, 6, 4), 10.96], [Date.UTC(2021, 7, 3), 11.86], [Date.UTC(2021, 8, 11), 11.67], [Date.UTC(2021, 9, 6), 11.27], [Date.UTC(2021, 10, 6), 11.77], [Date.UTC(2021, 11, 5), 12.90], [Date.UTC(2022, 0, 1), 13.58], [Date.UTC(2022, 1, 2), 15.33], [Date.UTC(2022, 2, 2), 14.26]]}, {name : \'C\',data : [[Date.UTC(2001, 5, 30), 20.24], [Date.UTC(2001, 6, 30), 20.77], [Date.UTC(2001, 7, 30), 20.75], [Date.UTC(2001, 8, 28), 20.77], [Date.UTC(2001, 9, 26), 19.75], [Date.UTC(2001, 10, 28), 19.21], [Date.UTC(2001, 11, 31), 20.14], [Date.UTC(2002, 0, 30), 18.83], [Date.UTC(2002, 1, 27), 19.89], [Date.UTC(2002, 2, 29), 19.85], [Date.UTC(2002, 3, 29), 19.82], [Date.UTC(2002, 4, 29), 19.99], [Date.UTC(2002, 5, 29), 19.57], [Date.UTC(2002, 6, 31), 19.25], [Date.UTC(2002, 7, 29), 18.16], [Date.UTC(2002, 8, 29), 18.70], [Date.UTC(2002, 9, 30), 18.73], [Date.UTC(2002, 10, 29), 17.50], [Date.UTC(2002, 11, 31), 17.26], [Date.UTC(2003, 0, 31), 18.25], [Date.UTC(2003, 1, 28), 18.54], [Date.UTC(2003, 2, 31), 17.21], [Date.UTC(2003, 3, 30), 18.02], [Date.UTC(2003, 4, 30), 18.50], [Date.UTC(2003, 5, 30), 18.52], [Date.UTC(2003, 6, 31), 17.97], [Date.UTC(2003, 7, 31), 17.78], [Date.UTC(2003, 8, 30), 18.31], [Date.UTC(2003, 9, 31), 17.00], [Date.UTC(2003, 10, 30), 18.47], [Date.UTC(2003, 11, 31), 18.60], [Date.UTC(2004, 0, 31), 18.20], [Date.UTC(2004, 1, 29), 18.93], [Date.UTC(2004, 2, 31), 17.75], [Date.UTC(2004, 3, 30), 17.95], [Date.UTC(2004, 4, 30), 18.29], [Date.UTC(2004, 5, 30), 17.14], [Date.UTC(2004, 6, 31), 16.33], [Date.UTC(2004, 7, 30), 17.12], [Date.UTC(2004, 8, 30), 18.17], [Date.UTC(2004, 9, 31), 17.99], [Date.UTC(2004, 10, 30), 19.70], [Date.UTC(2004, 11, 31), 20.71], [Date.UTC(2005, 0, 31), 19.82], [Date.UTC(2005, 1, 28), 19.47], [Date.UTC(2005, 2, 31), 18.63], [Date.UTC(2005, 3, 30), 18.52], [Date.UTC(2005, 4, 31), 19.37], [Date.UTC(2005, 5, 30), 19.85], [Date.UTC(2005, 6, 31), 19.47], [Date.UTC(2005, 7, 31), 19.16], [Date.UTC(2005, 8, 30), 18.77], [Date.UTC(2005, 11, 3), 19.63], [Date.UTC(2006, 0, 4), 19.01], [Date.UTC(2006, 1, 2), 18.33], [Date.UTC(2006, 2, 1), 17.79], [Date.UTC(2006, 3, 2), 17.69], [Date.UTC(2006, 4, 1), 17.69], [Date.UTC(2006, 5, 1), 18.25], [Date.UTC(2006, 6, 2), 17.83], [Date.UTC(2006, 7, 2), 17.43], [Date.UTC(2006, 8, 2), 18.06], [Date.UTC(2006, 9, 1), 17.66], [Date.UTC(2006, 10, 2), 17.20], [Date.UTC(2006, 11, 1), 16.62], [Date.UTC(2007, 0, 2), 15.81], [Date.UTC(2007, 1, 3), 16.10], [Date.UTC(2007, 2, 3), 15.63], [Date.UTC(2007, 3, 1), 14.94], [Date.UTC(2007, 4, 5), 15.15], [Date.UTC(2007, 5, 2), 15.97], [Date.UTC(2007, 6, 2), 16.36], [Date.UTC(2007, 7, 5), 15.70], [Date.UTC(2007, 8, 2), 14.91], [Date.UTC(2007, 9, 4), 14.59], [Date.UTC(2007, 10, 4), 13.97], [Date.UTC(2007, 11, 3), 13.17], [Date.UTC(2008, 0, 3), 13.92], [Date.UTC(2008, 1, 7), 14.86], [Date.UTC(2008, 5, 1), 15.51], [Date.UTC(2008, 6, 2), 15.95], [Date.UTC(2008, 7, 3), 16.18], [Date.UTC(2008, 8, 3), 15.38], [Date.UTC(2008, 9, 6), 15.57], [Date.UTC(2008, 10, 2), 15.28], [Date.UTC(2008, 11, 3), 15.02], [Date.UTC(2009, 0, 2), 15.93], [Date.UTC(2009, 1, 1), 15.84], [Date.UTC(2009, 2, 5), 15.86], [Date.UTC(2009, 3, 7), 15.47], [Date.UTC(2009, 4, 1), 16.13], [Date.UTC(2009, 5, 4), 16.78], [Date.UTC(2009, 6, 2), 17.32], [Date.UTC(2009, 7, 1), 17.22], [Date.UTC(2009, 8, 5), 16.86], [Date.UTC(2009, 9, 2), 16.84], [Date.UTC(2009, 10, 2), 17.32], [Date.UTC(2009, 11, 2), 16.28], [Date.UTC(2010, 0, 5), 16.22], [Date.UTC(2010, 1, 7), 16.60], [Date.UTC(2010, 2, 7), 17.28], [Date.UTC(2010, 3, 5), 18.06], [Date.UTC(2010, 4, 15), 18.19], [Date.UTC(2010, 6, 6), 18.48], [Date.UTC(2010, 6, 30), 17.87], [Date.UTC(2010, 8, 11), 17.15], [Date.UTC(2010, 9, 2), 17.18], [Date.UTC(2010, 10, 3), 16.72], [Date.UTC(2010, 11, 7), 16.08], [Date.UTC(2011, 0, 2), 15.82], [Date.UTC(2011, 1, 8), 14.99], [Date.UTC(2011, 2, 8), 15.26], [Date.UTC(2011, 3, 3), 16.16], [Date.UTC(2011, 4, 2), 16.17], [Date.UTC(2011, 5, 5), 16.28], [Date.UTC(2011, 5, 27), 16.28], [Date.UTC(2011, 6, 8), 17.28], [Date.UTC(2011, 7, 3), 17.39], [Date.UTC(2011, 8, 10), 18.00], [Date.UTC(2011, 9, 9), 17.71], [Date.UTC(2011, 10, 7), 17.32], [Date.UTC(2011, 11, 4), 17.06], [Date.UTC(2012, 0, 8), 16.97], [Date.UTC(2012, 1, 5), 16.52], [Date.UTC(2012, 2, 11), 17.09], [Date.UTC(2012, 3, 8), 17.55], [Date.UTC(2012, 4, 9), 17.35], [Date.UTC(2012, 5, 10), 17.72], [Date.UTC(2012, 6, 4), 18.33], [Date.UTC(2012, 7, 10), 18.94], [Date.UTC(2012, 8, 2), 19.30], [Date.UTC(2012, 9, 5), 19.82], [Date.UTC(2012, 10, 4), 19.22], [Date.UTC(2012, 11, 2), 18.70], [Date.UTC(2013, 0, 5), 17.85], [Date.UTC(2013, 1, 8), 17.08], [Date.UTC(2013, 2, 11), 17.14], [Date.UTC(2013, 3, 7), 17.86], [Date.UTC(2013, 4, 8), 18.73], [Date.UTC(2013, 5, 9), 17.81], [Date.UTC(2013, 6, 7), 17.63], [Date.UTC(2013, 6, 12), 17.63], [Date.UTC(2013, 7, 4), 15.97], [Date.UTC(2013, 8, 11), 16.98], [Date.UTC(2013, 9, 10), 17.25], [Date.UTC(2013, 10, 9), 18.16], [Date.UTC(2013, 11, 6), 17.89], [Date.UTC(2014, 0, 1), 17.94], [Date.UTC(2014, 1, 8), 18.33], [Date.UTC(2014, 2, 3), 17.53], [Date.UTC(2014, 3, 10), 17.63], [Date.UTC(2014, 4, 7), 16.93], [Date.UTC(2014, 5, 8), 16.19], [Date.UTC(2014, 6, 6), 17.14], [Date.UTC(2014, 7, 11), 16.40], [Date.UTC(2014, 8, 1), 16.72], [Date.UTC(2014, 9, 3), 17.66], [Date.UTC(2014, 10, 8), 17.47], [Date.UTC(2014, 11, 7), 17.59], [Date.UTC(2015, 0, 6), 16.70], [Date.UTC(2015, 1, 5), 16.49], [Date.UTC(2015, 2, 7), 16.64], [Date.UTC(2015, 3, 13), 15.75], [Date.UTC(2015, 4, 13), 16.85], [Date.UTC(2015, 5, 6), 16.79], [Date.UTC(2015, 6, 12), 16.15], [Date.UTC(2015, 7, 6), 14.73], [Date.UTC(2015, 8, 5), 15.62], [Date.UTC(2015, 9, 4), 16.19], [Date.UTC(2015, 10, 7), 17.15], [Date.UTC(2015, 11, 4), 16.46], [Date.UTC(2016, 0, 2), 16.04], [Date.UTC(2016, 1, 2), 15.59], [Date.UTC(2016, 2, 3), 14.60], [Date.UTC(2016, 3, 7), 13.91], [Date.UTC(2016, 4, 6), 13.22], [Date.UTC(2016, 5, 5), 12.38], [Date.UTC(2016, 6, 4), 12.24], [Date.UTC(2016, 7, 6), 11.30], [Date.UTC(2016, 8, 8), 10.95], [Date.UTC(2016, 9, 7), 9.84], [Date.UTC(2016, 10, 5), 9.20], [Date.UTC(2016, 11, 4), 8.73], [Date.UTC(2017, 0, 7), 9.35], [Date.UTC(2017, 1, 8), 8.44], [Date.UTC(2017, 2, 7), 7.74], [Date.UTC(2017, 3, 9), 6.97], [Date.UTC(2017, 4, 6), 7.00], [Date.UTC(2017, 5, 3), 6.85], [Date.UTC(2017, 6, 7), 7.32], [Date.UTC(2017, 7, 2), 6.48], [Date.UTC(2017, 8, 6), 7.38], [Date.UTC(2017, 9, 5), 8.37], [Date.UTC(2017, 10, 12), 9.29], [Date.UTC(2017, 11, 9), 10.16], [Date.UTC(2018, 0, 3), 11.04], [Date.UTC(2018, 1, 8), 11.86], [Date.UTC(2018, 2, 7), 12.76], [Date.UTC(2018, 3, 1), 13.59], [Date.UTC(2018, 4, 6), 14.00], [Date.UTC(2018, 5, 10), 14.94], [Date.UTC(2018, 6, 7), 14.66], [Date.UTC(2018, 7, 1), 14.97], [Date.UTC(2018, 8, 3), 15.45], [Date.UTC(2018, 9, 5), 15.38], [Date.UTC(2018, 10, 8), 14.40], [Date.UTC(2018, 11, 2), 14.28], [Date.UTC(2019, 0, 4), 13.34], [Date.UTC(2019, 1, 6), 12.42], [Date.UTC(2019, 2, 2), 13.31], [Date.UTC(2019, 3, 7), 14.08], [Date.UTC(2019, 4, 4), 14.24], [Date.UTC(2019, 5, 9), 13.30], [Date.UTC(2019, 6, 6), 14.21], [Date.UTC(2019, 7, 5), 15.15], [Date.UTC(2019, 8, 9), 15.21], [Date.UTC(2019, 9, 5), 16.18], [Date.UTC(2019, 10, 3), 16.04], [Date.UTC(2019, 11, 6), 16.09], [Date.UTC(2020, 0, 5), 15.77], [Date.UTC(2020, 1, 4), 16.77], [Date.UTC(2020, 2, 4), 16.33], [Date.UTC(2020, 3, 2), 16.72], [Date.UTC(2020, 4, 2), 17.07], [Date.UTC(2020, 5, 1), 17.19], [Date.UTC(2020, 6, 4), 16.45], [Date.UTC(2020, 7, 2), 16.98], [Date.UTC(2020, 8, 6), 15.95], [Date.UTC(2020, 9, 4), 16.95], [Date.UTC(2020, 10, 3), 16.21], [Date.UTC(2020, 11, 3), 16.48], [Date.UTC(2021, 0, 2), 17.38], [Date.UTC(2021, 1, 6), 16.34], [Date.UTC(2021, 2, 4), 15.33], [Date.UTC(2021, 3, 4), 14.32], [Date.UTC(2021, 4, 2), 13.38], [Date.UTC(2021, 5, 5), 12.54], [Date.UTC(2021, 6, 4), 11.63], [Date.UTC(2021, 7, 3), 12.57], [Date.UTC(2021, 8, 11), 11.83], [Date.UTC(2021, 9, 6), 11.16], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 11.80], [Date.UTC(2022, 0, 1), 12.44], [Date.UTC(2022, 1, 2), 14.08], [Date.UTC(2022, 2, 2), 13.06]]}, {name : \'Java\',data : [[Date.UTC(2001, 5, 30), 26.49], [Date.UTC(2001, 6, 30), 25.03], [Date.UTC(2001, 7, 30), 24.66], [Date.UTC(2001, 8, 28), 24.82], [Date.UTC(2001, 9, 26), 25.68], [Date.UTC(2001, 10, 28), 24.37], [Date.UTC(2001, 11, 31), 24.20], [Date.UTC(2002, 0, 30), 24.06], [Date.UTC(2002, 1, 27), 24.01], [Date.UTC(2002, 2, 29), 24.41], [Date.UTC(2002, 3, 29), 25.05], [Date.UTC(2002, 4, 29), 25.19], [Date.UTC(2002, 5, 29), 24.20], [Date.UTC(2002, 6, 31), 24.53], [Date.UTC(2002, 7, 29), 22.89], [Date.UTC(2002, 8, 29), 24.48], [Date.UTC(2002, 9, 30), 24.20], [Date.UTC(2002, 10, 29), 24.12], [Date.UTC(2002, 11, 31), 24.23], [Date.UTC(2003, 0, 31), 24.79], [Date.UTC(2003, 1, 28), 24.78], [Date.UTC(2003, 2, 31), 24.60], [Date.UTC(2003, 3, 30), 24.66], [Date.UTC(2003, 4, 30), 23.11], [Date.UTC(2003, 5, 30), 22.34], [Date.UTC(2003, 6, 31), 23.21], [Date.UTC(2003, 7, 31), 22.24], [Date.UTC(2003, 8, 30), 21.90], [Date.UTC(2003, 9, 31), 23.08], [Date.UTC(2003, 10, 30), 25.01], [Date.UTC(2003, 11, 31), 23.57], [Date.UTC(2004, 0, 31), 22.56], [Date.UTC(2004, 1, 29), 23.17], [Date.UTC(2004, 2, 31), 24.24], [Date.UTC(2004, 3, 30), 18.69], [Date.UTC(2004, 4, 30), 17.54], [Date.UTC(2004, 5, 30), 17.05], [Date.UTC(2004, 6, 31), 17.00], [Date.UTC(2004, 7, 30), 15.90], [Date.UTC(2004, 8, 30), 17.05], [Date.UTC(2004, 9, 31), 14.80], [Date.UTC(2004, 10, 30), 16.33], [Date.UTC(2004, 11, 31), 17.48], [Date.UTC(2005, 0, 31), 18.34], [Date.UTC(2005, 1, 28), 18.87], [Date.UTC(2005, 2, 31), 16.98], [Date.UTC(2005, 3, 30), 17.40], [Date.UTC(2005, 4, 31), 18.57], [Date.UTC(2005, 5, 30), 19.66], [Date.UTC(2005, 6, 31), 21.21], [Date.UTC(2005, 7, 31), 22.44], [Date.UTC(2005, 8, 30), 21.87], [Date.UTC(2005, 11, 3), 22.13], [Date.UTC(2006, 0, 4), 22.25], [Date.UTC(2006, 1, 2), 22.43], [Date.UTC(2006, 2, 1), 21.89], [Date.UTC(2006, 3, 2), 21.28], [Date.UTC(2006, 4, 1), 21.32], [Date.UTC(2006, 5, 1), 21.13], [Date.UTC(2006, 6, 2), 21.85], [Date.UTC(2006, 7, 2), 22.38], [Date.UTC(2006, 8, 2), 21.53], [Date.UTC(2006, 9, 1), 21.17], [Date.UTC(2006, 10, 2), 20.40], [Date.UTC(2006, 11, 1), 19.91], [Date.UTC(2007, 0, 2), 19.16], [Date.UTC(2007, 1, 3), 18.98], [Date.UTC(2007, 2, 3), 18.04], [Date.UTC(2007, 3, 1), 18.36], [Date.UTC(2007, 4, 5), 19.14], [Date.UTC(2007, 5, 2), 20.03], [Date.UTC(2007, 6, 2), 21.01], [Date.UTC(2007, 7, 5), 21.77], [Date.UTC(2007, 8, 2), 21.70], [Date.UTC(2007, 9, 4), 21.62], [Date.UTC(2007, 10, 4), 20.54], [Date.UTC(2007, 11, 3), 20.05], [Date.UTC(2008, 0, 3), 20.85], [Date.UTC(2008, 1, 7), 21.48], [Date.UTC(2008, 5, 1), 20.89], [Date.UTC(2008, 6, 2), 21.34], [Date.UTC(2008, 7, 3), 21.57], [Date.UTC(2008, 8, 3), 20.71], [Date.UTC(2008, 9, 6), 20.95], [Date.UTC(2008, 10, 2), 20.30], [Date.UTC(2008, 11, 3), 17.92], [Date.UTC(2009, 0, 2), 19.02], [Date.UTC(2009, 1, 1), 19.40], [Date.UTC(2009, 2, 5), 19.80], [Date.UTC(2009, 3, 7), 19.34], [Date.UTC(2009, 4, 1), 19.54], [Date.UTC(2009, 5, 4), 20.15], [Date.UTC(2009, 6, 2), 20.45], [Date.UTC(2009, 7, 1), 19.53], [Date.UTC(2009, 8, 5), 19.38], [Date.UTC(2009, 9, 2), 18.65], [Date.UTC(2009, 10, 2), 18.37], [Date.UTC(2009, 11, 2), 17.06], [Date.UTC(2010, 0, 5), 17.48], [Date.UTC(2010, 1, 7), 17.35], [Date.UTC(2010, 2, 7), 17.51], [Date.UTC(2010, 3, 5), 18.05], [Date.UTC(2010, 4, 15), 17.96], [Date.UTC(2010, 6, 6), 18.67], [Date.UTC(2010, 6, 30), 17.99], [Date.UTC(2010, 8, 11), 17.92], [Date.UTC(2010, 9, 2), 18.17], [Date.UTC(2010, 10, 3), 18.51], [Date.UTC(2010, 11, 7), 18.00], [Date.UTC(2011, 0, 2), 17.77], [Date.UTC(2011, 1, 8), 18.48], [Date.UTC(2011, 2, 8), 19.71], [Date.UTC(2011, 3, 3), 19.04], [Date.UTC(2011, 4, 2), 18.16], [Date.UTC(2011, 5, 5), 18.58], [Date.UTC(2011, 5, 27), 18.58], [Date.UTC(2011, 6, 8), 19.25], [Date.UTC(2011, 7, 3), 19.41], [Date.UTC(2011, 8, 10), 18.76], [Date.UTC(2011, 9, 9), 17.91], [Date.UTC(2011, 10, 7), 17.87], [Date.UTC(2011, 11, 4), 17.56], [Date.UTC(2012, 0, 8), 17.47], [Date.UTC(2012, 1, 5), 17.05], [Date.UTC(2012, 2, 11), 17.11], [Date.UTC(2012, 3, 8), 17.03], [Date.UTC(2012, 4, 9), 16.60], [Date.UTC(2012, 5, 10), 16.26], [Date.UTC(2012, 6, 4), 16.09], [Date.UTC(2012, 7, 10), 16.35], [Date.UTC(2012, 8, 2), 16.27], [Date.UTC(2012, 9, 5), 17.19], [Date.UTC(2012, 10, 4), 17.46], [Date.UTC(2012, 11, 2), 17.57], [Date.UTC(2013, 0, 5), 17.42], [Date.UTC(2013, 1, 8), 18.39], [Date.UTC(2013, 2, 11), 18.16], [Date.UTC(2013, 3, 7), 17.68], [Date.UTC(2013, 4, 8), 16.91], [Date.UTC(2013, 5, 9), 16.66], [Date.UTC(2013, 6, 7), 15.91], [Date.UTC(2013, 6, 12), 15.91], [Date.UTC(2013, 7, 4), 15.98], [Date.UTC(2013, 8, 11), 16.15], [Date.UTC(2013, 9, 10), 16.11], [Date.UTC(2013, 10, 9), 16.52], [Date.UTC(2013, 11, 6), 17.31], [Date.UTC(2014, 0, 1), 16.52], [Date.UTC(2014, 1, 8), 17.32], [Date.UTC(2014, 2, 3), 16.41], [Date.UTC(2014, 3, 10), 17.35], [Date.UTC(2014, 4, 7), 16.91], [Date.UTC(2014, 5, 8), 16.11], [Date.UTC(2014, 6, 6), 15.69], [Date.UTC(2014, 7, 11), 14.98], [Date.UTC(2014, 8, 1), 14.14], [Date.UTC(2014, 9, 3), 13.51], [Date.UTC(2014, 10, 8), 14.39], [Date.UTC(2014, 11, 7), 14.96], [Date.UTC(2015, 0, 6), 15.53], [Date.UTC(2015, 1, 5), 15.34], [Date.UTC(2015, 2, 7), 15.58], [Date.UTC(2015, 3, 13), 16.04], [Date.UTC(2015, 4, 13), 16.87], [Date.UTC(2015, 5, 6), 17.82], [Date.UTC(2015, 6, 12), 17.73], [Date.UTC(2015, 7, 6), 19.27], [Date.UTC(2015, 8, 5), 19.56], [Date.UTC(2015, 9, 4), 19.54], [Date.UTC(2015, 10, 7), 20.40], [Date.UTC(2015, 11, 4), 20.97], [Date.UTC(2016, 0, 2), 21.47], [Date.UTC(2016, 1, 2), 21.14], [Date.UTC(2016, 2, 3), 20.53], [Date.UTC(2016, 3, 7), 20.85], [Date.UTC(2016, 4, 6), 20.96], [Date.UTC(2016, 5, 5), 20.79], [Date.UTC(2016, 6, 4), 19.80], [Date.UTC(2016, 7, 6), 19.01], [Date.UTC(2016, 8, 8), 18.24], [Date.UTC(2016, 9, 7), 18.80], [Date.UTC(2016, 10, 5), 18.75], [Date.UTC(2016, 11, 4), 17.86], [Date.UTC(2017, 0, 7), 17.28], [Date.UTC(2017, 1, 8), 16.68], [Date.UTC(2017, 2, 7), 16.38], [Date.UTC(2017, 3, 9), 15.57], [Date.UTC(2017, 4, 6), 14.64], [Date.UTC(2017, 5, 3), 14.49], [Date.UTC(2017, 6, 7), 13.77], [Date.UTC(2017, 7, 2), 12.96], [Date.UTC(2017, 8, 6), 12.69], [Date.UTC(2017, 9, 5), 12.43], [Date.UTC(2017, 10, 12), 13.23], [Date.UTC(2017, 11, 9), 13.27], [Date.UTC(2018, 0, 3), 14.22], [Date.UTC(2018, 1, 8), 14.99], [Date.UTC(2018, 2, 7), 14.94], [Date.UTC(2018, 3, 1), 15.78], [Date.UTC(2018, 4, 6), 16.38], [Date.UTC(2018, 5, 10), 15.37], [Date.UTC(2018, 6, 7), 16.14], [Date.UTC(2018, 7, 1), 16.88], [Date.UTC(2018, 8, 3), 17.44], [Date.UTC(2018, 9, 5), 17.80], [Date.UTC(2018, 10, 8), 16.75], [Date.UTC(2018, 11, 2), 15.93], [Date.UTC(2019, 0, 4), 16.90], [Date.UTC(2019, 1, 6), 15.88], [Date.UTC(2019, 2, 2), 14.88], [Date.UTC(2019, 3, 7), 15.04], [Date.UTC(2019, 4, 4), 16.00], [Date.UTC(2019, 5, 9), 15.00], [Date.UTC(2019, 6, 6), 15.06], [Date.UTC(2019, 7, 5), 16.03], [Date.UTC(2019, 8, 9), 16.66], [Date.UTC(2019, 9, 5), 16.88], [Date.UTC(2019, 10, 3), 16.25], [Date.UTC(2019, 11, 6), 17.25], [Date.UTC(2020, 0, 5), 16.90], [Date.UTC(2020, 1, 4), 17.36], [Date.UTC(2020, 2, 4), 17.78], [Date.UTC(2020, 3, 2), 16.73], [Date.UTC(2020, 4, 2), 16.28], [Date.UTC(2020, 5, 1), 16.10], [Date.UTC(2020, 6, 4), 15.10], [Date.UTC(2020, 7, 2), 14.43], [Date.UTC(2020, 8, 6), 13.48], [Date.UTC(2020, 9, 4), 12.56], [Date.UTC(2020, 10, 3), 11.68], [Date.UTC(2020, 11, 3), 12.53], [Date.UTC(2021, 0, 2), 11.96], [Date.UTC(2021, 1, 6), 11.29], [Date.UTC(2021, 2, 4), 10.45], [Date.UTC(2021, 3, 4), 11.23], [Date.UTC(2021, 4, 2), 11.74], [Date.UTC(2021, 5, 5), 11.54], [Date.UTC(2021, 6, 4), 11.20], [Date.UTC(2021, 7, 3), 10.43], [Date.UTC(2021, 8, 11), 11.12], [Date.UTC(2021, 9, 6), 10.46], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 10.12], [Date.UTC(2022, 0, 1), 10.66], [Date.UTC(2022, 1, 2), 12.13], [Date.UTC(2022, 2, 2), 11.19]]}, {name : \'C++\',data : [[Date.UTC(2001, 5, 30), 14.20], [Date.UTC(2001, 6, 30), 16.11], [Date.UTC(2001, 7, 30), 16.12], [Date.UTC(2001, 8, 28), 15.85], [Date.UTC(2001, 9, 26), 16.10], [Date.UTC(2001, 10, 28), 15.67], [Date.UTC(2001, 11, 31), 14.96], [Date.UTC(2002, 0, 30), 15.18], [Date.UTC(2002, 1, 27), 15.54], [Date.UTC(2002, 2, 29), 15.91], [Date.UTC(2002, 3, 29), 15.37], [Date.UTC(2002, 4, 29), 14.86], [Date.UTC(2002, 5, 29), 14.18], [Date.UTC(2002, 6, 31), 14.94], [Date.UTC(2002, 7, 29), 14.77], [Date.UTC(2002, 8, 29), 15.90], [Date.UTC(2002, 9, 30), 15.03], [Date.UTC(2002, 10, 29), 13.64], [Date.UTC(2002, 11, 31), 13.19], [Date.UTC(2003, 0, 31), 14.63], [Date.UTC(2003, 1, 28), 15.53], [Date.UTC(2003, 2, 31), 14.57], [Date.UTC(2003, 3, 30), 15.80], [Date.UTC(2003, 4, 30), 15.58], [Date.UTC(2003, 5, 30), 16.72], [Date.UTC(2003, 6, 31), 16.58], [Date.UTC(2003, 7, 31), 17.53], [Date.UTC(2003, 8, 30), 16.17], [Date.UTC(2003, 9, 31), 16.31], [Date.UTC(2003, 10, 30), 17.42], [Date.UTC(2003, 11, 31), 16.08], [Date.UTC(2004, 0, 31), 15.71], [Date.UTC(2004, 1, 29), 14.50], [Date.UTC(2004, 2, 31), 15.99], [Date.UTC(2004, 3, 30), 12.27], [Date.UTC(2004, 4, 30), 12.55], [Date.UTC(2004, 5, 30), 13.44], [Date.UTC(2004, 6, 31), 15.31], [Date.UTC(2004, 7, 30), 14.92], [Date.UTC(2004, 8, 30), 15.02], [Date.UTC(2004, 9, 31), 13.86], [Date.UTC(2004, 10, 30), 11.91], [Date.UTC(2004, 11, 31), 11.93], [Date.UTC(2005, 0, 31), 11.34], [Date.UTC(2005, 1, 28), 11.63], [Date.UTC(2005, 2, 31), 10.19], [Date.UTC(2005, 3, 30), 9.90], [Date.UTC(2005, 4, 31), 9.72], [Date.UTC(2005, 5, 30), 11.06], [Date.UTC(2005, 6, 31), 10.51], [Date.UTC(2005, 7, 31), 11.17], [Date.UTC(2005, 8, 30), 11.82], [Date.UTC(2005, 11, 3), 11.03], [Date.UTC(2006, 0, 4), 11.46], [Date.UTC(2006, 1, 2), 11.30], [Date.UTC(2006, 2, 1), 11.16], [Date.UTC(2006, 3, 2), 10.90], [Date.UTC(2006, 4, 1), 10.94], [Date.UTC(2006, 5, 1), 10.67], [Date.UTC(2006, 6, 2), 9.78], [Date.UTC(2006, 7, 2), 10.25], [Date.UTC(2006, 8, 2), 10.75], [Date.UTC(2006, 9, 1), 11.06], [Date.UTC(2006, 10, 2), 11.05], [Date.UTC(2006, 11, 1), 10.41], [Date.UTC(2007, 0, 2), 10.42], [Date.UTC(2007, 1, 3), 10.77], [Date.UTC(2007, 2, 3), 11.11], [Date.UTC(2007, 3, 1), 10.72], [Date.UTC(2007, 4, 5), 10.11], [Date.UTC(2007, 5, 2), 11.12], [Date.UTC(2007, 6, 2), 10.50], [Date.UTC(2007, 7, 5), 10.11], [Date.UTC(2007, 8, 2), 9.94], [Date.UTC(2007, 9, 4), 9.58], [Date.UTC(2007, 10, 4), 8.75], [Date.UTC(2007, 11, 3), 7.87], [Date.UTC(2008, 0, 3), 8.73], [Date.UTC(2008, 1, 7), 9.27], [Date.UTC(2008, 5, 1), 10.81], [Date.UTC(2008, 6, 2), 10.69], [Date.UTC(2008, 7, 3), 10.06], [Date.UTC(2008, 8, 3), 10.72], [Date.UTC(2008, 9, 6), 10.95], [Date.UTC(2008, 10, 2), 10.36], [Date.UTC(2008, 11, 3), 10.10], [Date.UTC(2009, 0, 2), 10.12], [Date.UTC(2009, 1, 1), 9.63], [Date.UTC(2009, 2, 5), 10.36], [Date.UTC(2009, 3, 7), 10.74], [Date.UTC(2009, 4, 1), 11.07], [Date.UTC(2009, 5, 4), 10.59], [Date.UTC(2009, 6, 2), 10.42], [Date.UTC(2009, 7, 1), 10.50], [Date.UTC(2009, 8, 5), 9.99], [Date.UTC(2009, 9, 2), 9.88], [Date.UTC(2009, 10, 2), 10.00], [Date.UTC(2009, 11, 2), 9.18], [Date.UTC(2010, 0, 5), 9.71], [Date.UTC(2010, 1, 7), 9.45], [Date.UTC(2010, 2, 7), 9.61], [Date.UTC(2010, 3, 5), 9.71], [Date.UTC(2010, 4, 15), 10.38], [Date.UTC(2010, 6, 6), 10.47], [Date.UTC(2010, 6, 30), 9.66], [Date.UTC(2010, 8, 11), 9.81], [Date.UTC(2010, 9, 2), 9.80], [Date.UTC(2010, 10, 3), 9.50], [Date.UTC(2010, 11, 7), 9.01], [Date.UTC(2011, 0, 2), 8.78], [Date.UTC(2011, 1, 8), 8.19], [Date.UTC(2011, 2, 8), 8.75], [Date.UTC(2011, 3, 3), 9.23], [Date.UTC(2011, 4, 2), 9.15], [Date.UTC(2011, 5, 5), 9.83], [Date.UTC(2011, 5, 27), 9.83], [Date.UTC(2011, 6, 8), 9.02], [Date.UTC(2011, 7, 3), 8.43], [Date.UTC(2011, 8, 10), 8.85], [Date.UTC(2011, 9, 9), 9.07], [Date.UTC(2011, 10, 7), 8.08], [Date.UTC(2011, 11, 4), 8.25], [Date.UTC(2012, 0, 8), 8.05], [Date.UTC(2012, 1, 5), 7.85], [Date.UTC(2012, 2, 11), 8.05], [Date.UTC(2012, 3, 8), 8.90], [Date.UTC(2012, 4, 9), 9.82], [Date.UTC(2012, 5, 10), 9.36], [Date.UTC(2012, 6, 4), 9.12], [Date.UTC(2012, 7, 10), 9.33], [Date.UTC(2012, 8, 2), 9.15], [Date.UTC(2012, 9, 5), 9.26], [Date.UTC(2012, 10, 4), 9.70], [Date.UTC(2012, 11, 2), 9.20], [Date.UTC(2013, 0, 5), 9.14], [Date.UTC(2013, 1, 8), 8.76], [Date.UTC(2013, 2, 11), 9.11], [Date.UTC(2013, 3, 7), 9.71], [Date.UTC(2013, 4, 8), 9.20], [Date.UTC(2013, 5, 9), 8.82], [Date.UTC(2013, 6, 7), 8.75], [Date.UTC(2013, 6, 12), 8.75], [Date.UTC(2013, 7, 4), 9.37], [Date.UTC(2013, 8, 11), 8.66], [Date.UTC(2013, 9, 10), 8.66], [Date.UTC(2013, 10, 9), 8.37], [Date.UTC(2013, 11, 6), 8.27], [Date.UTC(2014, 0, 1), 7.56], [Date.UTC(2014, 1, 8), 6.89], [Date.UTC(2014, 2, 3), 6.31], [Date.UTC(2014, 3, 10), 6.14], [Date.UTC(2014, 4, 7), 5.99], [Date.UTC(2014, 5, 8), 6.43], [Date.UTC(2014, 6, 6), 5.52], [Date.UTC(2014, 7, 11), 4.70], [Date.UTC(2014, 8, 1), 4.67], [Date.UTC(2014, 9, 3), 4.87], [Date.UTC(2014, 10, 8), 6.10], [Date.UTC(2014, 11, 7), 6.10], [Date.UTC(2015, 0, 6), 6.70], [Date.UTC(2015, 1, 5), 6.61], [Date.UTC(2015, 2, 7), 6.64], [Date.UTC(2015, 3, 13), 6.96], [Date.UTC(2015, 4, 13), 7.87], [Date.UTC(2015, 5, 6), 7.76], [Date.UTC(2015, 6, 12), 8.64], [Date.UTC(2015, 7, 6), 7.74], [Date.UTC(2015, 8, 5), 6.78], [Date.UTC(2015, 9, 4), 5.75], [Date.UTC(2015, 10, 7), 6.20], [Date.UTC(2015, 11, 4), 5.94], [Date.UTC(2016, 0, 2), 6.91], [Date.UTC(2016, 1, 2), 6.91], [Date.UTC(2016, 2, 3), 6.72], [Date.UTC(2016, 3, 7), 5.92], [Date.UTC(2016, 4, 6), 6.70], [Date.UTC(2016, 5, 5), 6.20], [Date.UTC(2016, 6, 4), 6.31], [Date.UTC(2016, 7, 6), 5.80], [Date.UTC(2016, 8, 8), 6.66], [Date.UTC(2016, 9, 7), 5.80], [Date.UTC(2016, 10, 5), 5.41], [Date.UTC(2016, 11, 4), 5.34], [Date.UTC(2017, 0, 7), 6.30], [Date.UTC(2017, 1, 8), 5.43], [Date.UTC(2017, 2, 7), 5.18], [Date.UTC(2017, 3, 9), 4.55], [Date.UTC(2017, 4, 6), 4.75], [Date.UTC(2017, 5, 3), 5.72], [Date.UTC(2017, 6, 7), 5.58], [Date.UTC(2017, 7, 2), 5.55], [Date.UTC(2017, 8, 6), 5.56], [Date.UTC(2017, 9, 5), 5.01], [Date.UTC(2017, 10, 12), 5.34], [Date.UTC(2017, 11, 9), 4.72], [Date.UTC(2018, 0, 3), 5.60], [Date.UTC(2018, 1, 8), 5.73], [Date.UTC(2018, 2, 7), 6.45], [Date.UTC(2018, 3, 1), 7.22], [Date.UTC(2018, 4, 6), 7.67], [Date.UTC(2018, 5, 10), 8.34], [Date.UTC(2018, 6, 7), 7.62], [Date.UTC(2018, 7, 1), 7.47], [Date.UTC(2018, 8, 3), 7.39], [Date.UTC(2018, 9, 5), 7.59], [Date.UTC(2018, 10, 8), 8.28], [Date.UTC(2018, 11, 2), 7.56], [Date.UTC(2019, 0, 4), 8.16], [Date.UTC(2019, 1, 6), 7.44], [Date.UTC(2019, 2, 2), 8.13], [Date.UTC(2019, 3, 7), 8.84], [Date.UTC(2019, 4, 4), 8.10], [Date.UTC(2019, 5, 9), 7.38], [Date.UTC(2019, 6, 6), 6.70], [Date.UTC(2019, 7, 5), 6.06], [Date.UTC(2019, 8, 9), 5.64], [Date.UTC(2019, 9, 5), 6.23], [Date.UTC(2019, 10, 3), 5.60], [Date.UTC(2019, 11, 6), 6.20], [Date.UTC(2020, 0, 5), 5.57], [Date.UTC(2020, 1, 4), 6.16], [Date.UTC(2020, 2, 4), 6.79], [Date.UTC(2020, 3, 2), 6.78], [Date.UTC(2020, 4, 2), 6.13], [Date.UTC(2020, 5, 1), 5.95], [Date.UTC(2020, 6, 4), 6.21], [Date.UTC(2020, 7, 2), 6.84], [Date.UTC(2020, 8, 6), 7.11], [Date.UTC(2020, 9, 4), 6.94], [Date.UTC(2020, 10, 3), 7.60], [Date.UTC(2020, 11, 3), 6.91], [Date.UTC(2021, 0, 2), 7.56], [Date.UTC(2021, 1, 6), 6.88], [Date.UTC(2021, 2, 4), 6.52], [Date.UTC(2021, 3, 4), 7.14], [Date.UTC(2021, 4, 2), 7.81], [Date.UTC(2021, 5, 5), 7.36], [Date.UTC(2021, 6, 4), 8.02], [Date.UTC(2021, 7, 3), 7.36], [Date.UTC(2021, 8, 11), 7.13], [Date.UTC(2021, 9, 6), 7.50], [Date.UTC(2021, 10, 6), 8.28], [Date.UTC(2021, 11, 5), 7.73], [Date.UTC(2022, 0, 1), 8.29], [Date.UTC(2022, 1, 2), 8.01], [Date.UTC(2022, 2, 2), 8.66]]}, {name : \'C#\',data : [[Date.UTC(2001, 5, 30), 0.38], [Date.UTC(2001, 6, 30), 0.43], [Date.UTC(2001, 7, 30), 0.38], [Date.UTC(2001, 8, 28), 0.39], [Date.UTC(2001, 9, 26), 0.42], [Date.UTC(2001, 10, 28), 0.76], [Date.UTC(2001, 11, 31), 0.59], [Date.UTC(2002, 0, 30), 0.62], [Date.UTC(2002, 1, 27), 0.74], [Date.UTC(2002, 2, 29), 0.74], [Date.UTC(2002, 3, 29), 1.18], [Date.UTC(2002, 4, 29), 1.16], [Date.UTC(2002, 5, 29), 1.46], [Date.UTC(2002, 6, 31), 1.36], [Date.UTC(2002, 7, 29), 1.46], [Date.UTC(2002, 8, 29), 1.65], [Date.UTC(2002, 9, 30), 1.78], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.45], [Date.UTC(2003, 0, 31), 1.99], [Date.UTC(2003, 1, 28), 1.98], [Date.UTC(2003, 2, 31), 2.38], [Date.UTC(2003, 3, 30), 1.88], [Date.UTC(2003, 4, 30), 1.94], [Date.UTC(2003, 5, 30), 1.78], [Date.UTC(2003, 6, 31), 2.00], [Date.UTC(2003, 7, 31), 2.06], [Date.UTC(2003, 8, 30), 1.94], [Date.UTC(2003, 9, 31), 1.90], [Date.UTC(2003, 10, 30), 1.71], [Date.UTC(2003, 11, 31), 1.80], [Date.UTC(2004, 0, 31), 2.18], [Date.UTC(2004, 1, 29), 2.24], [Date.UTC(2004, 2, 31), 2.14], [Date.UTC(2004, 3, 30), 1.88], [Date.UTC(2004, 4, 30), 1.65], [Date.UTC(2004, 5, 30), 1.67], [Date.UTC(2004, 6, 31), 1.63], [Date.UTC(2004, 7, 30), 1.63], [Date.UTC(2004, 8, 30), 1.64], [Date.UTC(2004, 9, 31), 1.50], [Date.UTC(2004, 10, 30), 1.95], [Date.UTC(2004, 11, 31), 2.20], [Date.UTC(2005, 0, 31), 2.36], [Date.UTC(2005, 1, 28), 2.53], [Date.UTC(2005, 2, 31), 2.82], [Date.UTC(2005, 3, 30), 2.77], [Date.UTC(2005, 4, 31), 2.78], [Date.UTC(2005, 5, 30), 3.14], [Date.UTC(2005, 6, 31), 3.48], [Date.UTC(2005, 7, 31), 3.29], [Date.UTC(2005, 8, 30), 3.46], [Date.UTC(2005, 11, 3), 3.31], [Date.UTC(2006, 0, 4), 3.55], [Date.UTC(2006, 1, 2), 3.97], [Date.UTC(2006, 2, 1), 3.15], [Date.UTC(2006, 3, 2), 3.95], [Date.UTC(2006, 4, 1), 3.27], [Date.UTC(2006, 5, 1), 3.24], [Date.UTC(2006, 6, 2), 3.40], [Date.UTC(2006, 7, 2), 2.68], [Date.UTC(2006, 8, 2), 2.99], [Date.UTC(2006, 9, 1), 3.06], [Date.UTC(2006, 10, 2), 3.02], [Date.UTC(2006, 11, 1), 3.17], [Date.UTC(2007, 0, 2), 3.52], [Date.UTC(2007, 1, 3), 3.19], [Date.UTC(2007, 2, 3), 3.37], [Date.UTC(2007, 3, 1), 3.55], [Date.UTC(2007, 4, 5), 3.66], [Date.UTC(2007, 5, 2), 3.48], [Date.UTC(2007, 6, 2), 3.71], [Date.UTC(2007, 7, 5), 3.99], [Date.UTC(2007, 8, 2), 3.58], [Date.UTC(2007, 9, 4), 3.74], [Date.UTC(2007, 10, 4), 3.92], [Date.UTC(2007, 11, 3), 3.99], [Date.UTC(2008, 0, 3), 4.86], [Date.UTC(2008, 1, 7), 4.51], [Date.UTC(2008, 5, 1), 4.06], [Date.UTC(2008, 6, 2), 4.00], [Date.UTC(2008, 7, 3), 3.70], [Date.UTC(2008, 8, 3), 4.33], [Date.UTC(2008, 9, 6), 3.77], [Date.UTC(2008, 10, 2), 4.03], [Date.UTC(2008, 11, 3), 4.58], [Date.UTC(2009, 0, 2), 5.61], [Date.UTC(2009, 1, 1), 5.06], [Date.UTC(2009, 2, 5), 4.32], [Date.UTC(2009, 3, 7), 4.06], [Date.UTC(2009, 4, 1), 4.27], [Date.UTC(2009, 5, 4), 4.54], [Date.UTC(2009, 6, 2), 4.54], [Date.UTC(2009, 7, 1), 4.44], [Date.UTC(2009, 8, 5), 4.19], [Date.UTC(2009, 9, 2), 4.42], [Date.UTC(2009, 10, 2), 5.35], [Date.UTC(2009, 11, 2), 6.26], [Date.UTC(2010, 0, 5), 5.77], [Date.UTC(2010, 1, 7), 5.01], [Date.UTC(2010, 2, 7), 4.26], [Date.UTC(2010, 3, 5), 4.43], [Date.UTC(2010, 4, 15), 4.78], [Date.UTC(2010, 6, 6), 5.73], [Date.UTC(2010, 6, 30), 4.99], [Date.UTC(2010, 8, 11), 5.02], [Date.UTC(2010, 9, 2), 4.96], [Date.UTC(2010, 10, 3), 5.71], [Date.UTC(2010, 11, 7), 6.69], [Date.UTC(2011, 0, 2), 6.23], [Date.UTC(2011, 1, 8), 6.81], [Date.UTC(2011, 2, 8), 7.21], [Date.UTC(2011, 3, 3), 7.19], [Date.UTC(2011, 4, 2), 7.54], [Date.UTC(2011, 5, 5), 6.84], [Date.UTC(2011, 5, 27), 6.84], [Date.UTC(2011, 6, 8), 6.22], [Date.UTC(2011, 7, 3), 6.04], [Date.UTC(2011, 8, 10), 6.82], [Date.UTC(2011, 9, 9), 6.72], [Date.UTC(2011, 10, 7), 7.32], [Date.UTC(2011, 11, 4), 8.21], [Date.UTC(2012, 0, 8), 8.76], [Date.UTC(2012, 1, 5), 8.65], [Date.UTC(2012, 2, 11), 8.24], [Date.UTC(2012, 3, 8), 7.35], [Date.UTC(2012, 4, 9), 6.82], [Date.UTC(2012, 5, 10), 7.03], [Date.UTC(2012, 6, 4), 6.67], [Date.UTC(2012, 7, 10), 6.59], [Date.UTC(2012, 8, 2), 6.60], [Date.UTC(2012, 9, 5), 6.53], [Date.UTC(2012, 10, 4), 5.59], [Date.UTC(2012, 11, 2), 5.55], [Date.UTC(2013, 0, 5), 6.20], [Date.UTC(2013, 1, 8), 6.68], [Date.UTC(2013, 2, 11), 6.60], [Date.UTC(2013, 3, 7), 6.15], [Date.UTC(2013, 4, 8), 6.12], [Date.UTC(2013, 5, 9), 5.78], [Date.UTC(2013, 6, 7), 6.21], [Date.UTC(2013, 6, 12), 6.21], [Date.UTC(2013, 7, 4), 6.12], [Date.UTC(2013, 8, 11), 5.56], [Date.UTC(2013, 9, 10), 5.72], [Date.UTC(2013, 10, 9), 6.02], [Date.UTC(2013, 11, 6), 5.62], [Date.UTC(2014, 0, 1), 5.85], [Date.UTC(2014, 1, 8), 6.45], [Date.UTC(2014, 2, 3), 5.57], [Date.UTC(2014, 3, 10), 4.82], [Date.UTC(2014, 4, 7), 3.75], [Date.UTC(2014, 5, 8), 3.94], [Date.UTC(2014, 6, 6), 4.05], [Date.UTC(2014, 7, 11), 3.41], [Date.UTC(2014, 8, 1), 4.35], [Date.UTC(2014, 9, 3), 4.75], [Date.UTC(2014, 10, 8), 4.98], [Date.UTC(2014, 11, 7), 4.33], [Date.UTC(2015, 0, 6), 5.05], [Date.UTC(2015, 1, 5), 5.74], [Date.UTC(2015, 2, 7), 4.92], [Date.UTC(2015, 3, 13), 4.95], [Date.UTC(2015, 4, 13), 5.26], [Date.UTC(2015, 5, 6), 5.06], [Date.UTC(2015, 6, 12), 5.65], [Date.UTC(2015, 7, 6), 4.84], [Date.UTC(2015, 8, 5), 4.91], [Date.UTC(2015, 9, 4), 4.82], [Date.UTC(2015, 10, 7), 4.32], [Date.UTC(2015, 11, 4), 4.11], [Date.UTC(2016, 0, 2), 4.71], [Date.UTC(2016, 1, 2), 4.40], [Date.UTC(2016, 2, 3), 4.27], [Date.UTC(2016, 3, 7), 3.80], [Date.UTC(2016, 4, 6), 4.48], [Date.UTC(2016, 5, 5), 3.79], [Date.UTC(2016, 6, 4), 3.92], [Date.UTC(2016, 7, 6), 4.91], [Date.UTC(2016, 8, 8), 5.49], [Date.UTC(2016, 9, 7), 4.37], [Date.UTC(2016, 10, 5), 3.66], [Date.UTC(2016, 11, 4), 3.17], [Date.UTC(2017, 0, 7), 4.04], [Date.UTC(2017, 1, 8), 4.90], [Date.UTC(2017, 2, 7), 4.41], [Date.UTC(2017, 3, 9), 3.58], [Date.UTC(2017, 4, 6), 3.46], [Date.UTC(2017, 5, 3), 3.53], [Date.UTC(2017, 6, 7), 3.52], [Date.UTC(2017, 7, 2), 4.20], [Date.UTC(2017, 8, 6), 4.78], [Date.UTC(2017, 9, 5), 3.86], [Date.UTC(2017, 10, 12), 3.01], [Date.UTC(2017, 11, 9), 2.82], [Date.UTC(2018, 0, 3), 3.75], [Date.UTC(2018, 1, 8), 4.45], [Date.UTC(2018, 2, 7), 5.07], [Date.UTC(2018, 3, 1), 5.27], [Date.UTC(2018, 4, 6), 4.40], [Date.UTC(2018, 5, 10), 4.31], [Date.UTC(2018, 6, 7), 3.79], [Date.UTC(2018, 7, 1), 3.54], [Date.UTC(2018, 8, 3), 3.30], [Date.UTC(2018, 9, 5), 3.49], [Date.UTC(2018, 10, 8), 3.95], [Date.UTC(2018, 11, 2), 3.45], [Date.UTC(2019, 0, 4), 3.28], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 3.27], [Date.UTC(2019, 3, 7), 3.52], [Date.UTC(2019, 4, 4), 3.98], [Date.UTC(2019, 5, 9), 4.48], [Date.UTC(2019, 6, 6), 4.36], [Date.UTC(2019, 7, 5), 3.84], [Date.UTC(2019, 8, 9), 3.40], [Date.UTC(2019, 9, 5), 3.86], [Date.UTC(2019, 10, 3), 4.32], [Date.UTC(2019, 11, 6), 4.80], [Date.UTC(2020, 0, 5), 5.35], [Date.UTC(2020, 1, 4), 5.93], [Date.UTC(2020, 2, 4), 5.32], [Date.UTC(2020, 3, 2), 4.74], [Date.UTC(2020, 4, 2), 4.29], [Date.UTC(2020, 5, 1), 4.73], [Date.UTC(2020, 6, 4), 5.25], [Date.UTC(2020, 7, 2), 4.68], [Date.UTC(2020, 8, 6), 4.58], [Date.UTC(2020, 9, 4), 4.16], [Date.UTC(2020, 10, 3), 4.67], [Date.UTC(2020, 11, 3), 4.20], [Date.UTC(2021, 0, 2), 3.95], [Date.UTC(2021, 1, 6), 4.44], [Date.UTC(2021, 2, 4), 4.97], [Date.UTC(2021, 3, 4), 4.91], [Date.UTC(2021, 4, 2), 4.41], [Date.UTC(2021, 5, 5), 4.33], [Date.UTC(2021, 6, 4), 4.84], [Date.UTC(2021, 7, 3), 5.14], [Date.UTC(2021, 8, 11), 5.78], [Date.UTC(2021, 9, 6), 5.26], [Date.UTC(2021, 10, 6), 6.06], [Date.UTC(2021, 11, 5), 6.40], [Date.UTC(2022, 0, 1), 5.68], [Date.UTC(2022, 1, 2), 5.37], [Date.UTC(2022, 2, 2), 5.92]]}, {name : \'Visual Basic\',data : [[Date.UTC(2010, 8, 11), 0.33], [Date.UTC(2010, 9, 2), 0.33], [Date.UTC(2010, 10, 3), 0.32], [Date.UTC(2010, 11, 7), 0.26], [Date.UTC(2011, 0, 2), 0.26], [Date.UTC(2011, 1, 8), 0.59], [Date.UTC(2011, 2, 8), 0.56], [Date.UTC(2011, 3, 3), 0.34], [Date.UTC(2011, 4, 2), 0.48], [Date.UTC(2011, 5, 5), 0.43], [Date.UTC(2011, 5, 27), 0.43], [Date.UTC(2011, 6, 8), 0.48], [Date.UTC(2011, 7, 3), 0.46], [Date.UTC(2011, 8, 10), 0.31], [Date.UTC(2011, 9, 9), 0.48], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.36], [Date.UTC(2012, 0, 8), 0.48], [Date.UTC(2012, 1, 5), 0.80], [Date.UTC(2012, 2, 11), 0.78], [Date.UTC(2012, 3, 8), 0.98], [Date.UTC(2012, 4, 9), 1.27], [Date.UTC(2012, 5, 10), 1.22], [Date.UTC(2012, 6, 4), 0.92], [Date.UTC(2012, 7, 10), 0.88], [Date.UTC(2012, 8, 2), 0.84], [Date.UTC(2012, 9, 5), 0.60], [Date.UTC(2012, 10, 4), 0.77], [Date.UTC(2012, 11, 2), 0.89], [Date.UTC(2013, 0, 5), 1.04], [Date.UTC(2013, 1, 8), 1.01], [Date.UTC(2013, 2, 11), 0.89], [Date.UTC(2013, 3, 7), 1.10], [Date.UTC(2013, 4, 8), 1.13], [Date.UTC(2013, 5, 9), 1.07], [Date.UTC(2013, 6, 7), 1.25], [Date.UTC(2013, 6, 12), 1.25], [Date.UTC(2013, 7, 4), 1.32], [Date.UTC(2013, 8, 11), 1.84], [Date.UTC(2013, 9, 10), 1.93], [Date.UTC(2013, 10, 9), 1.97], [Date.UTC(2013, 11, 6), 1.69], [Date.UTC(2014, 0, 1), 1.56], [Date.UTC(2014, 1, 8), 1.80], [Date.UTC(2014, 2, 3), 1.86], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.26], [Date.UTC(2014, 5, 8), 1.91], [Date.UTC(2014, 6, 6), 1.49], [Date.UTC(2014, 7, 11), 2.01], [Date.UTC(2014, 8, 1), 1.27], [Date.UTC(2014, 9, 3), 1.56], [Date.UTC(2014, 10, 8), 1.66], [Date.UTC(2014, 11, 7), 1.80], [Date.UTC(2015, 0, 6), 1.07], [Date.UTC(2015, 1, 5), 1.72], [Date.UTC(2015, 2, 7), 1.95], [Date.UTC(2015, 3, 13), 2.20], [Date.UTC(2015, 4, 13), 1.89], [Date.UTC(2015, 5, 6), 1.84], [Date.UTC(2015, 6, 12), 1.95], [Date.UTC(2015, 7, 6), 1.78], [Date.UTC(2015, 8, 5), 1.53], [Date.UTC(2015, 9, 4), 1.51], [Date.UTC(2015, 10, 7), 1.68], [Date.UTC(2015, 11, 4), 1.65], [Date.UTC(2016, 0, 2), 1.68], [Date.UTC(2016, 1, 2), 1.86], [Date.UTC(2016, 2, 3), 1.67], [Date.UTC(2016, 3, 7), 1.61], [Date.UTC(2016, 4, 6), 1.83], [Date.UTC(2016, 5, 5), 2.25], [Date.UTC(2016, 6, 4), 2.01], [Date.UTC(2016, 7, 6), 2.05], [Date.UTC(2016, 8, 8), 1.76], [Date.UTC(2016, 9, 7), 1.99], [Date.UTC(2016, 10, 5), 1.92], [Date.UTC(2016, 11, 4), 1.97], [Date.UTC(2017, 0, 7), 1.91], [Date.UTC(2017, 1, 8), 1.88], [Date.UTC(2017, 2, 7), 2.01], [Date.UTC(2017, 3, 9), 2.06], [Date.UTC(2017, 4, 6), 2.35], [Date.UTC(2017, 5, 3), 2.01], [Date.UTC(2017, 6, 7), 2.10], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.75], [Date.UTC(2017, 9, 5), 1.42], [Date.UTC(2017, 10, 12), 1.49], [Date.UTC(2017, 11, 9), 1.35], [Date.UTC(2018, 0, 3), 2.31], [Date.UTC(2018, 1, 8), 2.18], [Date.UTC(2018, 2, 7), 1.74], [Date.UTC(2018, 3, 1), 1.80], [Date.UTC(2018, 4, 6), 0.91], [Date.UTC(2018, 5, 10), 1.15], [Date.UTC(2018, 6, 7), 0.89], [Date.UTC(2018, 7, 1), 0.92], [Date.UTC(2018, 8, 3), 0.68], [Date.UTC(2018, 9, 5), 0.65], [Date.UTC(2018, 10, 8), 0.85], [Date.UTC(2018, 11, 2), 0.98], [Date.UTC(2019, 0, 4), 1.03], [Date.UTC(2019, 1, 6), 0.99], [Date.UTC(2019, 2, 2), 0.95], [Date.UTC(2019, 3, 7), 1.06], [Date.UTC(2019, 4, 4), 1.32], [Date.UTC(2019, 5, 9), 1.07], [Date.UTC(2019, 6, 6), 1.01], [Date.UTC(2019, 7, 5), 1.02], [Date.UTC(2019, 8, 9), 1.08], [Date.UTC(2019, 9, 5), 1.23], [Date.UTC(2019, 10, 3), 0.96], [Date.UTC(2019, 11, 6), 0.93], [Date.UTC(2020, 0, 5), 0.83], [Date.UTC(2020, 1, 4), 0.60], [Date.UTC(2020, 2, 4), 0.77], [Date.UTC(2020, 3, 2), 4.72], [Date.UTC(2020, 4, 2), 4.18], [Date.UTC(2020, 5, 1), 4.69], [Date.UTC(2020, 6, 4), 5.23], [Date.UTC(2020, 7, 2), 4.66], [Date.UTC(2020, 8, 6), 4.12], [Date.UTC(2020, 9, 4), 3.97], [Date.UTC(2020, 10, 3), 4.01], [Date.UTC(2020, 11, 3), 3.92], [Date.UTC(2021, 0, 2), 3.84], [Date.UTC(2021, 1, 6), 4.33], [Date.UTC(2021, 2, 4), 4.85], [Date.UTC(2021, 3, 4), 4.55], [Date.UTC(2021, 4, 2), 4.02], [Date.UTC(2021, 5, 5), 4.01], [Date.UTC(2021, 6, 4), 4.50], [Date.UTC(2021, 7, 3), 4.67], [Date.UTC(2021, 8, 11), 4.62], [Date.UTC(2021, 9, 6), 5.24], [Date.UTC(2021, 10, 6), 5.72], [Date.UTC(2021, 11, 5), 5.40], [Date.UTC(2022, 0, 1), 4.74], [Date.UTC(2022, 1, 2), 5.23], [Date.UTC(2022, 2, 2), 5.77]]}, {name : \'JavaScript\',data : [[Date.UTC(2001, 5, 30), 1.55], [Date.UTC(2001, 6, 30), 1.72], [Date.UTC(2001, 7, 30), 1.66], [Date.UTC(2001, 8, 28), 1.63], [Date.UTC(2001, 9, 26), 1.51], [Date.UTC(2001, 10, 28), 1.47], [Date.UTC(2001, 11, 31), 1.46], [Date.UTC(2002, 0, 30), 2.73], [Date.UTC(2002, 1, 27), 1.48], [Date.UTC(2002, 2, 29), 1.47], [Date.UTC(2002, 3, 29), 1.37], [Date.UTC(2002, 4, 29), 1.36], [Date.UTC(2002, 5, 29), 1.43], [Date.UTC(2002, 6, 31), 1.15], [Date.UTC(2002, 7, 29), 2.02], [Date.UTC(2002, 8, 29), 1.91], [Date.UTC(2002, 9, 30), 1.98], [Date.UTC(2002, 10, 29), 2.49], [Date.UTC(2002, 11, 31), 2.42], [Date.UTC(2003, 0, 31), 2.92], [Date.UTC(2003, 1, 28), 2.81], [Date.UTC(2003, 2, 31), 2.63], [Date.UTC(2003, 3, 30), 3.26], [Date.UTC(2003, 4, 30), 1.72], [Date.UTC(2003, 5, 30), 1.69], [Date.UTC(2003, 6, 31), 1.79], [Date.UTC(2003, 7, 31), 1.90], [Date.UTC(2003, 8, 30), 1.66], [Date.UTC(2003, 9, 31), 1.92], [Date.UTC(2003, 10, 30), 1.74], [Date.UTC(2003, 11, 31), 1.74], [Date.UTC(2004, 0, 31), 2.14], [Date.UTC(2004, 1, 29), 2.06], [Date.UTC(2004, 2, 31), 1.78], [Date.UTC(2004, 3, 30), 1.78], [Date.UTC(2004, 4, 30), 1.45], [Date.UTC(2004, 5, 30), 1.61], [Date.UTC(2004, 6, 31), 1.68], [Date.UTC(2004, 7, 30), 1.51], [Date.UTC(2004, 8, 30), 1.27], [Date.UTC(2004, 9, 31), 1.20], [Date.UTC(2004, 10, 30), 1.59], [Date.UTC(2004, 11, 31), 1.70], [Date.UTC(2005, 0, 31), 1.78], [Date.UTC(2005, 1, 28), 1.65], [Date.UTC(2005, 2, 31), 1.64], [Date.UTC(2005, 3, 30), 1.44], [Date.UTC(2005, 4, 31), 1.39], [Date.UTC(2005, 5, 30), 1.78], [Date.UTC(2005, 6, 31), 1.92], [Date.UTC(2005, 7, 31), 1.77], [Date.UTC(2005, 8, 30), 2.04], [Date.UTC(2005, 11, 3), 1.84], [Date.UTC(2006, 0, 4), 1.54], [Date.UTC(2006, 1, 2), 1.51], [Date.UTC(2006, 2, 1), 1.73], [Date.UTC(2006, 3, 2), 1.57], [Date.UTC(2006, 4, 1), 2.19], [Date.UTC(2006, 5, 1), 1.46], [Date.UTC(2006, 6, 2), 2.11], [Date.UTC(2006, 7, 2), 2.02], [Date.UTC(2006, 8, 2), 2.44], [Date.UTC(2006, 9, 1), 2.20], [Date.UTC(2006, 10, 2), 2.31], [Date.UTC(2006, 11, 1), 2.56], [Date.UTC(2007, 0, 2), 2.84], [Date.UTC(2007, 1, 3), 2.98], [Date.UTC(2007, 2, 3), 3.49], [Date.UTC(2007, 3, 1), 3.14], [Date.UTC(2007, 4, 5), 3.07], [Date.UTC(2007, 5, 2), 2.62], [Date.UTC(2007, 6, 2), 2.51], [Date.UTC(2007, 7, 5), 2.58], [Date.UTC(2007, 8, 2), 2.72], [Date.UTC(2007, 9, 4), 2.68], [Date.UTC(2007, 10, 4), 2.93], [Date.UTC(2007, 11, 3), 2.73], [Date.UTC(2008, 0, 3), 3.20], [Date.UTC(2008, 1, 7), 2.33], [Date.UTC(2008, 5, 1), 2.93], [Date.UTC(2008, 6, 2), 2.76], [Date.UTC(2008, 7, 3), 2.89], [Date.UTC(2008, 8, 3), 3.13], [Date.UTC(2008, 9, 6), 2.67], [Date.UTC(2008, 10, 2), 2.93], [Date.UTC(2008, 11, 3), 2.97], [Date.UTC(2009, 0, 2), 3.36], [Date.UTC(2009, 1, 1), 3.54], [Date.UTC(2009, 2, 5), 3.61], [Date.UTC(2009, 3, 7), 3.68], [Date.UTC(2009, 4, 1), 3.55], [Date.UTC(2009, 5, 4), 4.02], [Date.UTC(2009, 6, 2), 3.51], [Date.UTC(2009, 7, 1), 2.81], [Date.UTC(2009, 8, 5), 3.00], [Date.UTC(2009, 9, 2), 3.03], [Date.UTC(2009, 10, 2), 2.92], [Date.UTC(2009, 11, 2), 3.51], [Date.UTC(2010, 0, 5), 2.71], [Date.UTC(2010, 1, 7), 2.64], [Date.UTC(2010, 2, 7), 2.65], [Date.UTC(2010, 3, 5), 2.47], [Date.UTC(2010, 4, 15), 2.08], [Date.UTC(2010, 6, 6), 2.43], [Date.UTC(2010, 6, 30), 2.40], [Date.UTC(2010, 8, 11), 1.66], [Date.UTC(2010, 9, 2), 1.66], [Date.UTC(2010, 10, 3), 1.66], [Date.UTC(2010, 11, 7), 1.51], [Date.UTC(2011, 0, 2), 1.59], [Date.UTC(2011, 1, 8), 2.56], [Date.UTC(2011, 2, 8), 1.87], [Date.UTC(2011, 3, 3), 1.51], [Date.UTC(2011, 4, 2), 1.39], [Date.UTC(2011, 5, 5), 1.50], [Date.UTC(2011, 5, 27), 1.50], [Date.UTC(2011, 6, 8), 2.24], [Date.UTC(2011, 7, 3), 1.56], [Date.UTC(2011, 8, 10), 1.47], [Date.UTC(2011, 9, 9), 2.19], [Date.UTC(2011, 10, 7), 2.56], [Date.UTC(2011, 11, 4), 2.20], [Date.UTC(2012, 0, 8), 2.32], [Date.UTC(2012, 1, 5), 2.46], [Date.UTC(2012, 2, 11), 3.39], [Date.UTC(2012, 3, 8), 2.88], [Date.UTC(2012, 4, 9), 2.13], [Date.UTC(2012, 5, 10), 1.47], [Date.UTC(2012, 6, 4), 1.45], [Date.UTC(2012, 7, 10), 1.37], [Date.UTC(2012, 8, 2), 1.33], [Date.UTC(2012, 9, 5), 1.26], [Date.UTC(2012, 10, 4), 1.28], [Date.UTC(2012, 11, 2), 1.32], [Date.UTC(2013, 0, 5), 1.98], [Date.UTC(2013, 1, 8), 1.42], [Date.UTC(2013, 2, 11), 1.37], [Date.UTC(2013, 3, 7), 1.51], [Date.UTC(2013, 4, 8), 1.54], [Date.UTC(2013, 5, 9), 1.65], [Date.UTC(2013, 6, 7), 1.84], [Date.UTC(2013, 6, 12), 1.84], [Date.UTC(2013, 7, 4), 2.09], [Date.UTC(2013, 8, 11), 2.01], [Date.UTC(2013, 9, 10), 2.04], [Date.UTC(2013, 10, 9), 2.05], [Date.UTC(2013, 11, 6), 1.85], [Date.UTC(2014, 0, 1), 1.58], [Date.UTC(2014, 1, 8), 1.93], [Date.UTC(2014, 2, 3), 1.90], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.79], [Date.UTC(2014, 5, 8), 2.00], [Date.UTC(2014, 6, 6), 1.81], [Date.UTC(2014, 7, 11), 2.17], [Date.UTC(2014, 8, 1), 2.45], [Date.UTC(2014, 9, 3), 1.77], [Date.UTC(2014, 10, 8), 2.09], [Date.UTC(2014, 11, 7), 2.43], [Date.UTC(2015, 0, 6), 3.27], [Date.UTC(2015, 1, 5), 3.51], [Date.UTC(2015, 2, 7), 3.63], [Date.UTC(2015, 3, 13), 3.30], [Date.UTC(2015, 4, 13), 3.13], [Date.UTC(2015, 5, 6), 2.30], [Date.UTC(2015, 6, 12), 2.19], [Date.UTC(2015, 7, 6), 2.16], [Date.UTC(2015, 8, 5), 2.34], [Date.UTC(2015, 9, 4), 2.29], [Date.UTC(2015, 10, 7), 2.47], [Date.UTC(2015, 11, 4), 2.36], [Date.UTC(2016, 0, 2), 2.57], [Date.UTC(2016, 1, 2), 2.20], [Date.UTC(2016, 2, 3), 2.33], [Date.UTC(2016, 3, 7), 2.57], [Date.UTC(2016, 4, 6), 2.34], [Date.UTC(2016, 5, 5), 2.58], [Date.UTC(2016, 6, 4), 2.64], [Date.UTC(2016, 7, 6), 2.71], [Date.UTC(2016, 8, 8), 2.93], [Date.UTC(2016, 9, 7), 2.75], [Date.UTC(2016, 10, 5), 2.71], [Date.UTC(2016, 11, 4), 2.86], [Date.UTC(2017, 0, 7), 2.85], [Date.UTC(2017, 1, 8), 2.87], [Date.UTC(2017, 2, 7), 2.67], [Date.UTC(2017, 3, 9), 2.85], [Date.UTC(2017, 4, 6), 3.07], [Date.UTC(2017, 5, 3), 3.02], [Date.UTC(2017, 6, 7), 2.61], [Date.UTC(2017, 7, 2), 2.10], [Date.UTC(2017, 8, 6), 2.02], [Date.UTC(2017, 9, 5), 3.01], [Date.UTC(2017, 10, 12), 2.97], [Date.UTC(2017, 11, 9), 2.47], [Date.UTC(2018, 0, 3), 3.47], [Date.UTC(2018, 1, 8), 3.16], [Date.UTC(2018, 2, 7), 3.92], [Date.UTC(2018, 3, 1), 3.49], [Date.UTC(2018, 4, 6), 2.92], [Date.UTC(2018, 5, 10), 2.50], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.41], [Date.UTC(2018, 8, 3), 2.13], [Date.UTC(2018, 9, 5), 2.28], [Date.UTC(2018, 10, 8), 2.66], [Date.UTC(2018, 11, 2), 3.06], [Date.UTC(2019, 0, 4), 3.30], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 2.43], [Date.UTC(2019, 3, 7), 2.51], [Date.UTC(2019, 4, 4), 2.69], [Date.UTC(2019, 5, 9), 2.72], [Date.UTC(2019, 6, 6), 2.30], [Date.UTC(2019, 7, 5), 2.26], [Date.UTC(2019, 8, 9), 2.13], [Date.UTC(2019, 9, 5), 2.08], [Date.UTC(2019, 10, 3), 1.93], [Date.UTC(2019, 11, 6), 2.09], [Date.UTC(2020, 0, 5), 2.45], [Date.UTC(2020, 1, 4), 2.06], [Date.UTC(2020, 2, 4), 2.05], [Date.UTC(2020, 3, 2), 2.38], [Date.UTC(2020, 4, 2), 2.68], [Date.UTC(2020, 5, 1), 2.27], [Date.UTC(2020, 6, 4), 2.48], [Date.UTC(2020, 7, 2), 2.87], [Date.UTC(2020, 8, 6), 2.54], [Date.UTC(2020, 9, 4), 2.14], [Date.UTC(2020, 10, 3), 2.03], [Date.UTC(2020, 11, 3), 2.35], [Date.UTC(2021, 0, 2), 2.20], [Date.UTC(2021, 1, 6), 2.27], [Date.UTC(2021, 2, 4), 2.11], [Date.UTC(2021, 3, 4), 2.44], [Date.UTC(2021, 4, 2), 2.45], [Date.UTC(2021, 5, 5), 2.33], [Date.UTC(2021, 6, 4), 2.71], [Date.UTC(2021, 7, 3), 2.95], [Date.UTC(2021, 8, 11), 2.55], [Date.UTC(2021, 9, 6), 2.19], [Date.UTC(2021, 10, 6), 2.66], [Date.UTC(2021, 11, 5), 2.30], [Date.UTC(2022, 0, 1), 2.09], [Date.UTC(2022, 1, 2), 1.83], [Date.UTC(2022, 2, 2), 2.09]]}, {name : \'PHP\',data : [[Date.UTC(2001, 5, 30), 1.90], [Date.UTC(2001, 6, 30), 1.38], [Date.UTC(2001, 7, 30), 1.55], [Date.UTC(2001, 8, 28), 1.55], [Date.UTC(2001, 9, 26), 1.78], [Date.UTC(2001, 10, 28), 4.87], [Date.UTC(2001, 11, 31), 7.27], [Date.UTC(2002, 0, 30), 8.27], [Date.UTC(2002, 1, 27), 7.44], [Date.UTC(2002, 2, 29), 7.03], [Date.UTC(2002, 3, 29), 5.05], [Date.UTC(2002, 4, 29), 5.22], [Date.UTC(2002, 5, 29), 5.18], [Date.UTC(2002, 6, 31), 6.50], [Date.UTC(2002, 7, 29), 5.35], [Date.UTC(2002, 8, 29), 4.96], [Date.UTC(2002, 9, 30), 5.28], [Date.UTC(2002, 10, 29), 7.30], [Date.UTC(2002, 11, 31), 7.61], [Date.UTC(2003, 0, 31), 4.49], [Date.UTC(2003, 1, 28), 4.01], [Date.UTC(2003, 2, 31), 4.61], [Date.UTC(2003, 3, 30), 4.53], [Date.UTC(2003, 4, 30), 4.78], [Date.UTC(2003, 5, 30), 3.83], [Date.UTC(2003, 6, 31), 4.68], [Date.UTC(2003, 7, 31), 5.44], [Date.UTC(2003, 8, 30), 5.80], [Date.UTC(2003, 9, 31), 3.57], [Date.UTC(2003, 10, 30), 5.74], [Date.UTC(2003, 11, 31), 6.31], [Date.UTC(2004, 0, 31), 7.26], [Date.UTC(2004, 1, 29), 7.63], [Date.UTC(2004, 2, 31), 9.76], [Date.UTC(2004, 3, 30), 7.17], [Date.UTC(2004, 4, 30), 8.71], [Date.UTC(2004, 5, 30), 10.32], [Date.UTC(2004, 6, 31), 10.43], [Date.UTC(2004, 7, 30), 8.23], [Date.UTC(2004, 8, 30), 7.42], [Date.UTC(2004, 9, 31), 7.59], [Date.UTC(2004, 10, 30), 11.45], [Date.UTC(2004, 11, 31), 9.48], [Date.UTC(2005, 0, 31), 10.28], [Date.UTC(2005, 1, 28), 9.41], [Date.UTC(2005, 2, 31), 8.72], [Date.UTC(2005, 3, 30), 9.20], [Date.UTC(2005, 4, 31), 7.97], [Date.UTC(2005, 5, 30), 9.17], [Date.UTC(2005, 6, 31), 7.87], [Date.UTC(2005, 7, 31), 8.89], [Date.UTC(2005, 8, 30), 9.67], [Date.UTC(2005, 11, 3), 9.63], [Date.UTC(2006, 0, 4), 9.40], [Date.UTC(2006, 1, 2), 8.92], [Date.UTC(2006, 2, 1), 9.95], [Date.UTC(2006, 3, 2), 10.88], [Date.UTC(2006, 4, 1), 10.22], [Date.UTC(2006, 5, 1), 9.59], [Date.UTC(2006, 6, 2), 10.35], [Date.UTC(2006, 7, 2), 9.64], [Date.UTC(2006, 8, 2), 9.13], [Date.UTC(2006, 9, 1), 9.86], [Date.UTC(2006, 10, 2), 9.21], [Date.UTC(2006, 11, 1), 8.54], [Date.UTC(2007, 0, 2), 7.94], [Date.UTC(2007, 1, 3), 8.85], [Date.UTC(2007, 2, 3), 9.46], [Date.UTC(2007, 3, 1), 8.64], [Date.UTC(2007, 4, 5), 8.74], [Date.UTC(2007, 5, 2), 8.87], [Date.UTC(2007, 6, 2), 8.65], [Date.UTC(2007, 7, 5), 9.70], [Date.UTC(2007, 8, 2), 10.20], [Date.UTC(2007, 9, 4), 9.50], [Date.UTC(2007, 10, 4), 8.69], [Date.UTC(2007, 11, 3), 8.39], [Date.UTC(2008, 0, 3), 9.20], [Date.UTC(2008, 1, 7), 9.89], [Date.UTC(2008, 5, 1), 10.21], [Date.UTC(2008, 6, 2), 9.52], [Date.UTC(2008, 7, 3), 9.35], [Date.UTC(2008, 8, 3), 9.24], [Date.UTC(2008, 9, 6), 8.61], [Date.UTC(2008, 10, 2), 8.94], [Date.UTC(2008, 11, 3), 9.13], [Date.UTC(2009, 0, 2), 8.88], [Date.UTC(2009, 1, 1), 8.78], [Date.UTC(2009, 2, 5), 9.48], [Date.UTC(2009, 3, 7), 9.89], [Date.UTC(2009, 4, 1), 9.92], [Date.UTC(2009, 5, 4), 9.67], [Date.UTC(2009, 6, 2), 9.27], [Date.UTC(2009, 7, 1), 9.39], [Date.UTC(2009, 8, 5), 10.16], [Date.UTC(2009, 9, 2), 10.36], [Date.UTC(2009, 10, 2), 10.18], [Date.UTC(2009, 11, 2), 9.77], [Date.UTC(2010, 0, 5), 10.07], [Date.UTC(2010, 1, 7), 10.00], [Date.UTC(2010, 2, 7), 9.91], [Date.UTC(2010, 3, 5), 9.66], [Date.UTC(2010, 4, 15), 9.07], [Date.UTC(2010, 6, 6), 8.57], [Date.UTC(2010, 6, 30), 9.18], [Date.UTC(2010, 8, 11), 8.37], [Date.UTC(2010, 9, 2), 8.32], [Date.UTC(2010, 10, 3), 7.81], [Date.UTC(2010, 11, 7), 7.51], [Date.UTC(2011, 0, 2), 7.83], [Date.UTC(2011, 1, 8), 6.97], [Date.UTC(2011, 2, 8), 6.57], [Date.UTC(2011, 3, 3), 6.58], [Date.UTC(2011, 4, 2), 6.51], [Date.UTC(2011, 5, 5), 6.60], [Date.UTC(2011, 5, 27), 6.60], [Date.UTC(2011, 6, 8), 6.18], [Date.UTC(2011, 7, 3), 6.13], [Date.UTC(2011, 8, 10), 6.60], [Date.UTC(2011, 9, 9), 6.82], [Date.UTC(2011, 10, 7), 6.10], [Date.UTC(2011, 11, 4), 6.00], [Date.UTC(2012, 0, 8), 5.70], [Date.UTC(2012, 1, 5), 5.64], [Date.UTC(2012, 2, 11), 5.55], [Date.UTC(2012, 3, 8), 5.29], [Date.UTC(2012, 4, 9), 5.71], [Date.UTC(2012, 5, 10), 5.29], [Date.UTC(2012, 6, 4), 5.01], [Date.UTC(2012, 7, 10), 5.52], [Date.UTC(2012, 8, 2), 5.61], [Date.UTC(2012, 9, 5), 5.67], [Date.UTC(2012, 10, 4), 5.73], [Date.UTC(2012, 11, 2), 5.54], [Date.UTC(2013, 0, 5), 5.55], [Date.UTC(2013, 1, 8), 5.07], [Date.UTC(2013, 2, 11), 4.81], [Date.UTC(2013, 3, 7), 5.43], [Date.UTC(2013, 4, 8), 5.78], [Date.UTC(2013, 5, 9), 5.99], [Date.UTC(2013, 6, 7), 7.19], [Date.UTC(2013, 6, 12), 7.19], [Date.UTC(2013, 7, 4), 6.69], [Date.UTC(2013, 8, 11), 6.43], [Date.UTC(2013, 9, 10), 6.09], [Date.UTC(2013, 10, 9), 5.38], [Date.UTC(2013, 11, 6), 5.28], [Date.UTC(2014, 0, 1), 4.61], [Date.UTC(2014, 1, 8), 4.22], [Date.UTC(2014, 2, 3), 3.70], [Date.UTC(2014, 3, 10), 2.77], [Date.UTC(2014, 4, 7), 3.39], [Date.UTC(2014, 5, 8), 2.85], [Date.UTC(2014, 6, 6), 2.92], [Date.UTC(2014, 7, 11), 2.86], [Date.UTC(2014, 8, 1), 3.12], [Date.UTC(2014, 9, 3), 2.94], [Date.UTC(2014, 10, 8), 3.04], [Date.UTC(2014, 11, 7), 2.75], [Date.UTC(2015, 0, 6), 3.78], [Date.UTC(2015, 1, 5), 3.17], [Date.UTC(2015, 2, 7), 4.00], [Date.UTC(2015, 3, 13), 3.01], [Date.UTC(2015, 4, 13), 2.72], [Date.UTC(2015, 5, 6), 2.87], [Date.UTC(2015, 6, 12), 2.89], [Date.UTC(2015, 7, 6), 2.73], [Date.UTC(2015, 8, 5), 2.53], [Date.UTC(2015, 9, 4), 2.56], [Date.UTC(2015, 10, 7), 3.25], [Date.UTC(2015, 11, 4), 2.79], [Date.UTC(2016, 0, 2), 2.71], [Date.UTC(2016, 1, 2), 2.77], [Date.UTC(2016, 2, 3), 2.77], [Date.UTC(2016, 3, 7), 2.99], [Date.UTC(2016, 4, 6), 2.99], [Date.UTC(2016, 5, 5), 3.23], [Date.UTC(2016, 6, 4), 3.27], [Date.UTC(2016, 7, 6), 3.17], [Date.UTC(2016, 8, 8), 2.85], [Date.UTC(2016, 9, 7), 2.74], [Date.UTC(2016, 10, 5), 3.13], [Date.UTC(2016, 11, 4), 2.92], [Date.UTC(2017, 0, 7), 2.56], [Date.UTC(2017, 1, 8), 3.07], [Date.UTC(2017, 2, 7), 3.01], [Date.UTC(2017, 3, 9), 3.38], [Date.UTC(2017, 4, 6), 2.69], [Date.UTC(2017, 5, 3), 2.77], [Date.UTC(2017, 6, 7), 3.09], [Date.UTC(2017, 7, 2), 2.29], [Date.UTC(2017, 8, 6), 2.21], [Date.UTC(2017, 9, 5), 2.79], [Date.UTC(2017, 10, 12), 1.90], [Date.UTC(2017, 11, 9), 1.59], [Date.UTC(2018, 0, 3), 2.53], [Date.UTC(2018, 1, 8), 3.42], [Date.UTC(2018, 2, 7), 4.01], [Date.UTC(2018, 3, 1), 4.22], [Date.UTC(2018, 4, 6), 3.32], [Date.UTC(2018, 5, 10), 2.88], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.93], [Date.UTC(2018, 8, 3), 2.78], [Date.UTC(2018, 9, 5), 2.79], [Date.UTC(2018, 10, 8), 2.38], [Date.UTC(2018, 11, 2), 2.44], [Date.UTC(2019, 0, 4), 2.68], [Date.UTC(2019, 1, 6), 2.27], [Date.UTC(2019, 2, 2), 2.42], [Date.UTC(2019, 3, 7), 2.24], [Date.UTC(2019, 4, 4), 2.49], [Date.UTC(2019, 5, 9), 2.57], [Date.UTC(2019, 6, 6), 2.17], [Date.UTC(2019, 7, 5), 2.08], [Date.UTC(2019, 8, 9), 1.86], [Date.UTC(2019, 9, 5), 1.91], [Date.UTC(2019, 10, 3), 1.72], [Date.UTC(2019, 11, 6), 2.05], [Date.UTC(2020, 0, 5), 2.41], [Date.UTC(2020, 1, 4), 2.02], [Date.UTC(2020, 2, 4), 2.02], [Date.UTC(2020, 3, 2), 2.37], [Date.UTC(2020, 4, 2), 2.49], [Date.UTC(2020, 5, 1), 2.26], [Date.UTC(2020, 6, 4), 1.90], [Date.UTC(2020, 7, 2), 2.24], [Date.UTC(2020, 8, 6), 2.49], [Date.UTC(2020, 9, 4), 2.09], [Date.UTC(2020, 10, 3), 1.79], [Date.UTC(2020, 11, 3), 2.12], [Date.UTC(2021, 0, 2), 1.99], [Date.UTC(2021, 1, 6), 1.75], [Date.UTC(2021, 2, 4), 2.07], [Date.UTC(2021, 3, 4), 1.84], [Date.UTC(2021, 4, 2), 1.86], [Date.UTC(2021, 5, 5), 2.21], [Date.UTC(2021, 6, 4), 2.58], [Date.UTC(2021, 7, 3), 2.19], [Date.UTC(2021, 8, 11), 1.85], [Date.UTC(2021, 9, 6), 2.10], [Date.UTC(2021, 10, 6), 1.81], [Date.UTC(2021, 11, 5), 1.50], [Date.UTC(2022, 0, 1), 1.40], [Date.UTC(2022, 1, 2), 1.79], [Date.UTC(2022, 2, 2), 1.92]]}, {name : \'Assembly language\',data : [[Date.UTC(2010, 11, 7), 0.66], [Date.UTC(2011, 0, 2), 0.86], [Date.UTC(2011, 1, 8), 1.27], [Date.UTC(2011, 2, 8), 1.34], [Date.UTC(2011, 3, 3), 0.97], [Date.UTC(2011, 4, 2), 1.04], [Date.UTC(2011, 5, 5), 0.67], [Date.UTC(2011, 5, 27), 0.67], [Date.UTC(2011, 6, 8), 0.62], [Date.UTC(2011, 7, 3), 0.60], [Date.UTC(2011, 8, 10), 0.59], [Date.UTC(2011, 9, 9), 0.62], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.56], [Date.UTC(2012, 0, 8), 0.54], [Date.UTC(2012, 1, 5), 0.52], [Date.UTC(2012, 2, 11), 0.43], [Date.UTC(2012, 3, 8), 0.47], [Date.UTC(2012, 4, 9), 0.52], [Date.UTC(2012, 5, 10), 0.54], [Date.UTC(2012, 6, 4), 0.55], [Date.UTC(2012, 7, 10), 0.50], [Date.UTC(2012, 8, 2), 0.53], [Date.UTC(2012, 9, 5), 0.57], [Date.UTC(2012, 10, 4), 0.59], [Date.UTC(2012, 11, 2), 0.58], [Date.UTC(2013, 0, 5), 0.63], [Date.UTC(2013, 1, 8), 0.64], [Date.UTC(2013, 2, 11), 0.63], [Date.UTC(2013, 3, 7), 0.71], [Date.UTC(2013, 4, 8), 0.64], [Date.UTC(2013, 5, 9), 0.50], [Date.UTC(2013, 6, 7), 0.58], [Date.UTC(2013, 6, 12), 0.58], [Date.UTC(2013, 7, 4), 0.62], [Date.UTC(2013, 8, 11), 0.48], [Date.UTC(2013, 9, 10), 0.47], [Date.UTC(2013, 10, 9), 0.53], [Date.UTC(2013, 11, 6), 0.58], [Date.UTC(2014, 0, 1), 0.49], [Date.UTC(2014, 1, 8), 0.40], [Date.UTC(2014, 2, 3), 0.73], [Date.UTC(2014, 3, 10), 0.85], [Date.UTC(2014, 4, 7), 0.77], [Date.UTC(2014, 5, 8), 0.77], [Date.UTC(2014, 6, 6), 0.78], [Date.UTC(2014, 7, 11), 0.65], [Date.UTC(2014, 8, 1), 0.58], [Date.UTC(2014, 9, 3), 0.41], [Date.UTC(2014, 10, 8), 0.60], [Date.UTC(2014, 11, 7), 0.52], [Date.UTC(2015, 0, 6), 1.17], [Date.UTC(2015, 1, 5), 0.75], [Date.UTC(2015, 2, 7), 0.62], [Date.UTC(2015, 3, 13), 0.66], [Date.UTC(2015, 4, 13), 0.76], [Date.UTC(2015, 5, 6), 0.75], [Date.UTC(2015, 6, 12), 1.54], [Date.UTC(2015, 7, 6), 1.76], [Date.UTC(2015, 8, 5), 1.81], [Date.UTC(2015, 9, 4), 1.57], [Date.UTC(2015, 10, 7), 1.88], [Date.UTC(2015, 11, 4), 1.93], [Date.UTC(2016, 0, 2), 2.09], [Date.UTC(2016, 1, 2), 1.83], [Date.UTC(2016, 2, 3), 1.85], [Date.UTC(2016, 3, 7), 2.19], [Date.UTC(2016, 4, 6), 1.88], [Date.UTC(2016, 5, 5), 2.12], [Date.UTC(2016, 6, 4), 2.28], [Date.UTC(2016, 7, 6), 2.36], [Date.UTC(2016, 8, 8), 2.42], [Date.UTC(2016, 9, 7), 2.23], [Date.UTC(2016, 10, 5), 2.44], [Date.UTC(2016, 11, 4), 2.54], [Date.UTC(2017, 0, 7), 2.70], [Date.UTC(2017, 1, 8), 2.11], [Date.UTC(2017, 2, 7), 2.23], [Date.UTC(2017, 3, 9), 2.17], [Date.UTC(2017, 4, 6), 2.86], [Date.UTC(2017, 5, 3), 2.25], [Date.UTC(2017, 6, 7), 2.24], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.64], [Date.UTC(2017, 9, 5), 2.37], [Date.UTC(2017, 10, 12), 1.72], [Date.UTC(2017, 11, 9), 1.47], [Date.UTC(2018, 0, 3), 2.06], [Date.UTC(2018, 1, 8), 1.83], [Date.UTC(2018, 2, 7), 1.71], [Date.UTC(2018, 3, 1), 1.65], [Date.UTC(2018, 4, 6), 1.00], [Date.UTC(2018, 5, 10), 0.92], [Date.UTC(2018, 6, 7), 1.15], [Date.UTC(2018, 7, 1), 1.41], [Date.UTC(2018, 8, 3), 1.23], [Date.UTC(2018, 9, 5), 1.25], [Date.UTC(2018, 10, 8), 1.11], [Date.UTC(2018, 11, 2), 1.37], [Date.UTC(2019, 0, 4), 1.20], [Date.UTC(2019, 1, 6), 1.38], [Date.UTC(2019, 2, 2), 1.41], [Date.UTC(2019, 3, 7), 1.71], [Date.UTC(2019, 4, 4), 1.82], [Date.UTC(2019, 5, 9), 1.48], [Date.UTC(2019, 6, 6), 1.39], [Date.UTC(2019, 7, 5), 1.11], [Date.UTC(2019, 8, 9), 1.38], [Date.UTC(2019, 9, 5), 1.31], [Date.UTC(2019, 10, 3), 1.02], [Date.UTC(2019, 11, 6), 1.07], [Date.UTC(2020, 0, 5), 0.88], [Date.UTC(2020, 1, 4), 1.11], [Date.UTC(2020, 2, 4), 1.25], [Date.UTC(2020, 3, 2), 1.16], [Date.UTC(2020, 4, 2), 1.12], [Date.UTC(2020, 5, 1), 0.97], [Date.UTC(2020, 6, 4), 0.94], [Date.UTC(2020, 7, 2), 1.04], [Date.UTC(2020, 8, 6), 1.30], [Date.UTC(2020, 9, 4), 1.08], [Date.UTC(2020, 10, 3), 1.17], [Date.UTC(2020, 11, 3), 1.35], [Date.UTC(2021, 0, 2), 1.64], [Date.UTC(2021, 1, 6), 1.65], [Date.UTC(2021, 2, 4), 1.97], [Date.UTC(2021, 3, 4), 2.32], [Date.UTC(2021, 4, 2), 2.43], [Date.UTC(2021, 5, 5), 2.05], [Date.UTC(2021, 6, 4), 2.40], [Date.UTC(2021, 7, 3), 2.03], [Date.UTC(2021, 8, 11), 2.42], [Date.UTC(2021, 9, 6), 2.06], [Date.UTC(2021, 10, 6), 2.52], [Date.UTC(2021, 11, 5), 2.25], [Date.UTC(2022, 0, 1), 1.85], [Date.UTC(2022, 1, 2), 1.60], [Date.UTC(2022, 2, 2), 1.90]]}, {name : \'SQL\',data : [[Date.UTC(2001, 5, 30), 2.96], [Date.UTC(2001, 6, 30), 2.77], [Date.UTC(2001, 7, 30), 2.38], [Date.UTC(2001, 8, 28), 2.36], [Date.UTC(2001, 9, 26), 2.24], [Date.UTC(2001, 10, 28), 1.84], [Date.UTC(2001, 11, 31), 1.87], [Date.UTC(2002, 0, 30), 1.94], [Date.UTC(2002, 1, 27), 2.09], [Date.UTC(2002, 2, 29), 2.06], [Date.UTC(2002, 3, 29), 2.33], [Date.UTC(2002, 4, 29), 2.36], [Date.UTC(2002, 5, 29), 2.53], [Date.UTC(2002, 6, 31), 2.66], [Date.UTC(2002, 7, 29), 2.65], [Date.UTC(2002, 8, 29), 2.54], [Date.UTC(2002, 9, 30), 2.64], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.52], [Date.UTC(2003, 0, 31), 2.56], [Date.UTC(2003, 1, 28), 2.51], [Date.UTC(2003, 2, 31), 2.56], [Date.UTC(2003, 3, 30), 2.65], [Date.UTC(2003, 4, 30), 3.12], [Date.UTC(2003, 5, 30), 3.04], [Date.UTC(2003, 6, 31), 2.99], [Date.UTC(2003, 7, 31), 3.24], [Date.UTC(2003, 8, 30), 3.72], [Date.UTC(2003, 9, 31), 3.70], [Date.UTC(2003, 10, 30), 2.93], [Date.UTC(2003, 11, 31), 3.10], [Date.UTC(2004, 0, 31), 3.51], [Date.UTC(2004, 1, 29), 3.10], [Date.UTC(2004, 2, 31), 2.97], [Date.UTC(2004, 3, 30), 2.44], [Date.UTC(2018, 1, 8), 2.36], [Date.UTC(2018, 2, 7), 2.69], [Date.UTC(2018, 3, 1), 2.65], [Date.UTC(2018, 4, 6), 1.99], [Date.UTC(2018, 5, 10), 2.34], [Date.UTC(2018, 6, 7), 2.33], [Date.UTC(2018, 7, 1), 2.32], [Date.UTC(2018, 8, 3), 2.06], [Date.UTC(2018, 9, 5), 2.04], [Date.UTC(2018, 10, 8), 1.84], [Date.UTC(2018, 11, 2), 2.18], [Date.UTC(2019, 0, 4), 2.28], [Date.UTC(2019, 1, 6), 1.90], [Date.UTC(2019, 2, 2), 1.93], [Date.UTC(2019, 3, 7), 2.27], [Date.UTC(2019, 4, 4), 2.56], [Date.UTC(2019, 5, 9), 2.22], [Date.UTC(2019, 6, 6), 1.98], [Date.UTC(2019, 7, 5), 1.63], [Date.UTC(2019, 8, 9), 1.94], [Date.UTC(2019, 9, 5), 1.93], [Date.UTC(2019, 10, 3), 1.69], [Date.UTC(2019, 11, 6), 1.84], [Date.UTC(2020, 0, 5), 1.50], [Date.UTC(2020, 1, 4), 1.53], [Date.UTC(2020, 2, 4), 1.83], [Date.UTC(2020, 3, 2), 2.17], [Date.UTC(2020, 4, 2), 2.09], [Date.UTC(2020, 5, 1), 1.73], [Date.UTC(2020, 6, 4), 1.40], [Date.UTC(2020, 7, 2), 1.46], [Date.UTC(2020, 8, 6), 1.76], [Date.UTC(2020, 9, 4), 1.57], [Date.UTC(2020, 10, 3), 1.54], [Date.UTC(2020, 11, 3), 1.53], [Date.UTC(2021, 0, 2), 1.61], [Date.UTC(2021, 1, 6), 1.72], [Date.UTC(2021, 2, 4), 1.87], [Date.UTC(2021, 3, 4), 1.83], [Date.UTC(2021, 4, 2), 1.71], [Date.UTC(2021, 5, 5), 1.88], [Date.UTC(2021, 6, 4), 1.53], [Date.UTC(2021, 7, 3), 1.47], [Date.UTC(2021, 8, 11), 1.80], [Date.UTC(2021, 9, 6), 2.17], [Date.UTC(2021, 10, 6), 2.11], [Date.UTC(2021, 11, 5), 1.79], [Date.UTC(2022, 0, 1), 1.80], [Date.UTC(2022, 1, 2), 1.55], [Date.UTC(2022, 2, 2), 1.85]]}\r\n ]\r\n });\r\n});\r\n</script>\r\n<div align="center">\r\n<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>\r\n<!-- Horizontal_Display_Responsive_Ad -->\r\n<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8520506242739182" data-ad-slot="4917108898" data-ad-format="auto" data-full-width-responsive="true"></ins>\r\n<script>\r\n (adsbygoogle = window.adsbygoogle || []).push({});\r\n</script>\r\n</div>\r\n<a href="./rss.xml">\r\n <img style="float:right" src="/images/rss_logo.gif" border="0" alt="rss" title="RSS Feed">\r\n</a>\r\n<h2><b>TIOBE Index for March 2022</b></h2>\r\n<h3>March Headline: Lua is back in the TIOBE index top 20</h3>\r\n<p>\r\nScripting language Lua is back in the top 20 of the TIOBE index. In its heyday in 2011, Lua briefly touched a top 10 position. Whether this is going to happen again is unknown. But it is clear that Lua is catching up in the game development market: easy to learn, fast to execute, and simple to interface with C. This makes Lua a perfect candidate for this job. One of the drivers behind the recent success of Lua is the very popular gaming platform Roblox, which uses Lua as its main programming language. --<i>Paul Jansen CEO TIOBE Software</i>\r\n</p> \r\n<p>The TIOBE Programming Community index is an indicator of the popularity of programming \r\nlanguages. The index is updated once a month. The ratings are based on the number of \r\nskilled engineers world-wide, courses and third party vendors. Popular search engines such as\r\nGoogle, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings.\r\nIt is important to note that the TIOBE index is not about the <i>best</i> programming language or the language\r\nin which <i>most lines of code</i> have been written.</p>\r\n<p>The index can be used to check whether your programming skills are still up to date or to make a \r\nstrategic decision about what programming language should be adopted when starting to build a new \r\nsoftware system. The definition of the TIOBE index can be found <a href="./programming-languages-definition/">here</a>.\r\n</p>\r\n<table id="top20" class="table table-striped table-top20">\r\n<thead><tr>\r\n<th style="width: 15%">Mar 2022</th>\r\n<th style="width: 15%">Mar 2021</th>\r\n<th title="Difference compared to last year" style="width: 15%">Change</th>\r\n<th style="width: 25%" colspan="2">Programming Language</th>\r\n<th style="width: 15%">Ratings</th>\r\n<th title="Difference compared to last year" style="width: 15%">Change</th>\r\n</tr></thead>\r\n<tbody>\r\n<tr><td>1</td><td>3</td><td><img src="/images/up.png" alt="change"></td><td class="td-top20"><img src="images/Python.png" alt="Python page" style="vertical-align:middle"></td><td>Python</td><td>14.26%</td><td>+3.95%</td></tr><tr><td>2</td><td>1</td><td><img src="/images/down.png" alt="change"></td><td class="td-top20"><img src="images/C.png" alt="C page" style="vertical-align:middle"></td><td>C</td><td>13.06%</td><td>-2.27%</td></tr><tr><td>3</td><td>2</td><td><img src="/images/down.png" alt="change"></td><td class="td-top20"><img src="images/Java.png" alt="Java page" style="vertical-align:middle"></td><td>Java</td><td>11.19%</td><td>+0.74%</td></tr><tr><td>4</td><td>4</td><td></td><td class="td-top20"><img src="images/C__.png" alt="C++ page" style="vertical-align:middle"></td><td>C++</td><td>8.66%</td><td>+2.14%</td></tr><tr><td>5</td><td>5</td><td></td><td class="td-top20"><img src="images/C_.png" alt="C# page" style="vertical-align:middle"></td><td>C#</td><td>5.92%</td><td>+0.95%</td></tr><tr><td>6</td><td>6</td><td></td><td class="td-top20"><img src="images/Visual_Basic.png" alt="Visual Basic page" style="vertical-align:middle"></td><td>Visual Basic</td><td>5.77%</td><td>+0.91%</td></tr><tr><td>7</td><td>7</td><td></td><td class="td-top20"><img src="images/JavaScript.png" alt="JavaScript page" style="vertical-align:middle"></td><td>JavaScript</td><td>2.09%</td><td>-0.03%</td></tr><tr><td>8</td><td>8</td><td></td><td class="td-top20"><img src="images/PHP.png" alt="PHP page" style="vertical-align:middle"></td><td>PHP</td><td>1.92%</td><td>-0.15%</td></tr><tr><td>9</td><td>9</td><td></td><td class="td-top20"><img src="images/Assembly_language.png" alt="Assembly language page" style="vertical-align:middle"></td><td>Assembly language</td><td>1.90%</td><td>-0.07%</td></tr><tr><td>10</td><td>10</td><td></td><td class="td-top20"><img src="images/SQL.png" alt="SQL page" style="vertical-align:middle"></td><td>SQL</td><td>1.85%</td><td>-0.02%</td></tr><tr><td>11</td><td>13</td><td><img src="/images/up.png" alt="change"></td><td class="td-top20"><img src="images/R.png" alt="R page" style="vertical-align:middle"></td><td>R</td><td>1.37%</td><td>+0.12%</td></tr><tr><td>12</td><td>14</td><td><img src="/images/up.png" alt="change"></td><td class="td-top20"><img src="images/Delphi_Object_Pascal.png" alt="Delphi/Object Pascal page" style="vertical-align:middle"></td><td>Delphi/Object Pascal</td><td>1.12%</td><td>-0.07%</td></tr><tr><td>13</td><td>11</td><td><img src="/images/down.png" alt="change"></td><td class="td-top20"><img src="images/Go.png" alt="Go page" style="vertical-align:middle"></td><td>Go</td><td>0.98%</td><td>-0.33%</td></tr><tr><td>14</td><td>19</td><td><img src="/images/upup.png" alt="change"></td><td class="td-top20"><img src="images/Swift.png" alt="Swift page" style="vertical-align:middle"></td><td>Swift</td><td>0.90%</td><td>-0.05%</td></tr><tr><td>15</td><td>18</td><td><img src="/images/up.png" alt="change"></td><td class="td-top20"><img src="images/MATLAB.png" alt="MATLAB page" style="vertical-align:middle"></td><td>MATLAB</td><td>0.80%</td><td>-0.23%</td></tr><tr><td>16</td><td>16</td><td></td><td class="td-top20"><img src="images/Ruby.png" alt="Ruby page" style="vertical-align:middle"></td><td>Ruby</td><td>0.66%</td><td>-0.52%</td></tr><tr><td>17</td><td>12</td><td><img src="/images/downdown.png" alt="change"></td><td class="td-top20"><img src="images/Classic_Visual_Basic.png" alt="Classic Visual Basic page" style="vertical-align:middle"></td><td>Classic Visual Basic</td><td>0.60%</td><td>-0.66%</td></tr><tr><td>18</td><td>20</td><td><img src="/images/up.png" alt="change"></td><td class="td-top20"><img src="images/Objective_C.png" alt="Objective-C page" style="vertical-align:middle"></td><td>Objective-C</td><td>0.59%</td><td>-0.31%</td></tr><tr><td>19</td><td>17</td><td><img src="/images/down.png" alt="change"></td><td class="td-top20"><img src="images/Perl.png" alt="Perl page" style="vertical-align:middle"></td><td>Perl</td><td>0.57%</td><td>-0.58%</td></tr><tr><td>20</td><td>38</td><td><img src="/images/upup.png" alt="change"></td><td class="td-top20"><img src="images/Lua.png" alt="Lua page" style="vertical-align:middle"></td><td>Lua</td><td>0.56%</td><td>+0.23%</td></tr>\r\n</tbody>\r\n</table>\r\n<div align="center">\r\n<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>\r\n<!-- Horizontal_Display_Responsive_Ad -->\r\n<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8520506242739182" data-ad-slot="4917108898" data-ad-format="auto" data-full-width-responsive="true"></ins>\r\n<script>\r\n (adsbygoogle = window.adsbygoogle || []).push({});\r\n</script>\r\n</div>\r\n<div id="container" style="width:100%; height:450px;"></div>\r\n<hr>\r\n<h2>Other programming languages</h2>\r\n<p>The complete top 50 of programming languages is listed below. This overview is \r\npublished unofficially, because it could be the case that we missed a language. If\r\nyou have the impression there is a programming language lacking, please notify us \r\nat <a href="mailto:tpci@tiobe.com">tpci@tiobe.com</a>. Please also check the <a href="./programming-languages-definition/#instances">overview of all programming languages</a> that we monitor.</p>\r\n\r\n<table id="otherPL" class="table table-striped">\r\n<thead><tr><th>Position</th><th>Programming Language</th><th>Ratings</th></tr></thead>\r\n<tbody>\r\n<tr><td>21</td><td>Prolog</td><td>0.55%</td></tr><tr><td>22</td><td>COBOL</td><td>0.54%</td></tr><tr><td>23</td><td>Scratch</td><td>0.53%</td></tr><tr><td>24</td><td>SAS</td><td>0.52%</td></tr><tr><td>25</td><td>Groovy</td><td>0.52%</td></tr><tr><td>26</td><td>Rust</td><td>0.51%</td></tr><tr><td>27</td><td>(Visual) FoxPro</td><td>0.50%</td></tr><tr><td>28</td><td>Ada</td><td>0.42%</td></tr><tr><td>29</td><td>PL/SQL</td><td>0.39%</td></tr><tr><td>30</td><td>Fortran</td><td>0.39%</td></tr><tr><td>31</td><td>Kotlin</td><td>0.38%</td></tr><tr><td>32</td><td>Julia</td><td>0.32%</td></tr><tr><td>33</td><td>Lisp</td><td>0.31%</td></tr><tr><td>34</td><td>VBScript</td><td>0.31%</td></tr><tr><td>35</td><td>Dart</td><td>0.26%</td></tr><tr><td>36</td><td>Scala</td><td>0.25%</td></tr><tr><td>37</td><td>D</td><td>0.25%</td></tr><tr><td>38</td><td>Transact-SQL</td><td>0.22%</td></tr><tr><td>39</td><td>RPG</td><td>0.22%</td></tr><tr><td>40</td><td>TypeScript</td><td>0.22%</td></tr><tr><td>41</td><td>PowerShell</td><td>0.21%</td></tr><tr><td>42</td><td>ABAP</td><td>0.20%</td></tr><tr><td>43</td><td>Awk</td><td>0.18%</td></tr><tr><td>44</td><td>VHDL</td><td>0.17%</td></tr><tr><td>45</td><td>Simulink</td><td>0.17%</td></tr><tr><td>46</td><td>OpenEdge ABL</td><td>0.16%</td></tr><tr><td>47</td><td>Clojure</td><td>0.16%</td></tr><tr><td>48</td><td>Logo</td><td>0.16%</td></tr><tr><td>49</td><td>Haskell</td><td>0.15%</td></tr><tr><td>50</td><td>LabVIEW</td><td>0.14%</td></tr>\r\n</tbody>\r\n</table>\r\n<hr>\r\n<h2>The Next 50 Programming Languages</h2>\r\n<p>The following list of languages denotes #51 to #100. Since the differences are \r\nrelatively small, the programming languages are only listed (in alphabetical\r\norder).\r\n</p>\r\n<ul>\r\n<li>\t\t\r\nABC, ActionScript, Alice, Apex, ATLAS, Bash, bc, BCPL, Boo, Bourne shell, C shell, CL (OS/400), Clipper, CLIPS, CoffeeScript, DCL, DiBOL, Dylan, ECMAScript, Eiffel, Elm, EXEC, F#, Factor, GML, Hack, Harbour, Haxe, Icon, IDL, Io, J#, Korn shell, Ladder Logic, LiveCode, LPC, ML, Monkey, OCaml, OpenCL, Oz, Processing, Q, Racket, REXX, Ring, S-PLUS, Scheme, SPARK, Tcl\r\n</li></ul><p></p>\r\n<hr>\r\n<h2>This Month's Changes in the Index</h2>\r\n<p>This month the following changes have been made to the definition of the index:\r\n<ul>\r\n<li> \r\nTzvetelin Katchov observed that "Elisp" has been incorrectly spelled "Elips" for many years in the TIOBE index definition. This has been fixed now. Thanks Tzvetelin! \r\n</li>\r\n<li> \r\nThere are lots of mails that still need to be processed. As soon as there is more time available your mail will be answered. Please be patient. \r\n</li>\r\n</ul>\r\n<hr>\r\n</p><h2>Very Long Term History</h2>\r\n<p>\r\nTo see the bigger picture, please find below the positions of the top 10 programming languages of many years back. Please note that these are <i>average</i> positions for a period of 12 months.</p> \r\n<table id="VLTH" class="table table-striped">\r\n<thead><tr><th>Programming Language</th><th>2022</th><th>2017</th><th>2012</th><th>2007</th><th>2002</th><th>1997</th><th>1992</th><th>1987</th></tr></thead>\r\n<tr><td>C</td><td>1</td><td>2</td><td>2</td><td>2</td><td>2</td><td>1</td><td>1</td><td>1</td></tr><tr><td>Python</td><td>2</td><td>5</td><td>8</td><td>7</td><td>12</td><td>28</td><td>-</td><td>-</td></tr><tr><td>Java</td><td>3</td><td>1</td><td>1</td><td>1</td><td>1</td><td>14</td><td>-</td><td>-</td></tr><tr><td>C++</td><td>4</td><td>3</td><td>3</td><td>3</td><td>3</td><td>2</td><td>2</td><td>4</td></tr><tr><td>C#</td><td>5</td><td>4</td><td>4</td><td>8</td><td>14</td><td>-</td><td>-</td><td>-</td></tr><tr><td>Visual Basic</td><td>6</td><td>15</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr><tr><td>JavaScript</td><td>7</td><td>7</td><td>10</td><td>9</td><td>9</td><td>21</td><td>-</td><td>-</td></tr><tr><td>Assembly language</td><td>8</td><td>10</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr><tr><td>PHP</td><td>9</td><td>6</td><td>5</td><td>5</td><td>8</td><td>-</td><td>-</td><td>-</td></tr><tr><td>SQL</td><td>10</td><td>-</td><td>-</td><td>-</td><td>34</td><td>-</td><td>-</td><td>-</td></tr><tr><td>Fortran</td><td>20</td><td>27</td><td>26</td><td>21</td><td>24</td><td>16</td><td>3</td><td>7</td></tr><tr><td>Prolog</td><td>24</td><td>34</td><td>42</td><td>27</td><td>25</td><td>19</td><td>14</td><td>3</td></tr><tr><td>Lisp</td><td>31</td><td>31</td><td>13</td><td>14</td><td>10</td><td>9</td><td>11</td><td>2</td></tr><tr><td>(Visual) Basic</td><td>-</td><td>-</td><td>7</td><td>4</td><td>4</td><td>3</td><td>7</td><td>5</td></tr>\r\n</table>\r\n<p>There are 2 important remarks here:</p> \r\n<ol><li>There is a difference between "Visual Basic" and "(Visual) Basic" in the table above. Until 2010, "(Visual) Basic" referred to all possible dialects of Basic, including Visual Basic. After some discussion, it has been decided to split "(Visual) Basic" into all its dialects such as Visual Basic .NET, Classic Visual Basic, PureBasic, and Small Basic, just to name a few. Since Visual Basic .NET has become the major implementation of Visual Basic, it is now called "Visual Basic".</li><li>The programming language SQL has not been in the TIOBE index for a long time. In 2018, somebody pointed out that SQL is Turing Complete. From that moment on, SQL is part of the TIOBE index. So although this language is very old, it has only a short history in the index.</li></ol> \r\n<hr>\r\n<h2>Programming Language Hall of Fame</h2>\r\n<p>The hall of fame listing all "Programming Language of the Year" award winners is shown below. The award is given to the programming language that has the highest rise in ratings in a year.\r\n<br><br>\r\n<table id="PLHoF" class="table table-striped"><colgroup><col align="center"><col align="center"><tr><th nowrap align="center">Year</th><th nowrap align="center">Winner</th></tr><tr><td>2021</td><td><img src="/images/medal.png" alt="medal"> Python</td></tr><tr><td>2020</td><td><img src="/images/medal.png" alt="medal"> Python</td></tr><tr><td>2019</td><td><img src="/images/medal.png" alt="medal"> C</td></tr><tr><td>2018</td><td><img src="/images/medal.png" alt="medal"> Python</td></tr><tr><td>2017</td><td><img src="/images/medal.png" alt="medal"> C</td></tr><tr><td>2016</td><td><img src="/images/medal.png" alt="medal"> Go</td></tr><tr><td>2015</td><td><img src="/images/medal.png" alt="medal"> Java</td></tr><tr><td>2014</td><td><img src="/images/medal.png" alt="medal"> JavaScript</td></tr><tr><td>2013</td><td><img src="/images/medal.png" alt="medal"> Transact-SQL</td></tr><tr><td>2012</td><td><img src="/images/medal.png" alt="medal"> Objective-C</td></tr><tr><td>2011</td><td><img src="/images/medal.png" alt="medal"> Objective-C</td></tr><tr><td>2010</td><td><img src="/images/medal.png" alt="medal"> Python</td></tr><tr><td>2009</td><td><img src="/images/medal.png" alt="medal"> Go</td></tr><tr><td>2008</td><td><img src="/images/medal.png" alt="medal"> C</td></tr><tr><td>2007</td><td><img src="/images/medal.png" alt="medal"> Python</td></tr><tr><td>2006</td><td><img src="/images/medal.png" alt="medal"> Ruby</td></tr><tr><td>2005</td><td><img src="/images/medal.png" alt="medal"> Java</td></tr><tr><td>2004</td><td><img src="/images/medal.png" alt="medal"> PHP</td></tr><tr><td>2003</td><td><img src="/images/medal.png" alt="medal"> C++</td></tr></colgroup></table>\r\n</p>\r\n\r\n<hr>\r\n<h2>Bugs & Change Requests</h2>\r\n<p>This is the top 5 of most requested changes and bugs. If you have any suggestions how to improve the index don't hesitate to send an e-mail to <a href="mailto:tpci@tiobe.com">tpci@tiobe.com</a>.</p>\r\n<ol>\r\n<li>\r\nApart from "<language> programming", also other queries such as "programming with <language>", "<language> development" and "<language> coding" should be tried out.\r\n</li>\r\n<li>\r\nAdd queries for other natural languages (apart from English). The idea is to start with the Chinese search engine Baidu. This has been implemented partially and will be completed the next few months.\r\n</li>\r\n<li>\r\nAdd a list of all search term requests that have been rejected. This is to minimize the number of recurring mails about Rails, JQuery, JSP, etc.\r\n</li>\r\n<li>\r\nStart a TIOBE index for databases, software configuration management systems and application frameworks.\r\n</li>\r\n<li>\r\nSome search engines allow to query pages that have been added last year. The TIOBE index should only track those recently added pages.\r\n</li>\r\n</ol>\r\n<p></p>\r\n\r\n\r\n<hr>\r\n<h2>Frequently Asked Questions (FAQ)</h2>\r\n<ul>\r\n<li>\r\n<i>Q: Am I allowed to show the TIOBE index in my weblog/presentation/publication?</i>\r\n<p>A: Yes, the only condition is to refer to its original source "www.tiobe.com".</p>\r\n</li>\r\n<li>\r\n<i>Q: How may I nominate a new language to be added to the TIOBE index?</i>\r\n<p>A: If a language meets the criteria of being listed (i.e. it is Turing complete and has an own Wikipedia entry that indicates that it concerns a programming language) and it is sufficiently popular (more than 5,000 hits for +"<language> programming" for Google), then please write an e-mail to <a href="mailto:tpci@tiobe.com">tpci@tiobe.com</a>.</p>\r\n</li>\r\n<li>\r\n<i>Q: I would like to have the complete data set of the TIOBE index. Is this possible?</i>\r\n<p>A: We spent a lot of effort to obtain all the data and keep the TIOBE index up to date. \r\nIn order to compensate a bit for this, we ask a fee of 5,000 US$ for the complete data set. \r\nThe data set runs from June 2001 till today. It started with 25 languages back in 2001, and \r\nnow measures more than 150 languages once a month. The data are available in comma separated \r\nformat. Please contact <a href="mailto:sales@tiobe.com"> sales@tiobe.com</a> for more information.</p>\r\n</li><li>\r\n<i>Q: Why is the maximum taken to calculate the ranking for a grouping, why not the sum?</i>\r\n<p>A: Well, you can do it either way and both are wrong. If you take the sum, then you get the intersection \r\ntwice. If you take the max, then you miss the difference. Which one to choose? Suppose somebody comes up with a new search term that is 10% of \r\nthe original. If you take the max, nothing changes. If you take the sum then the ratings will rise 10%. So \r\ntaking the sum will be an incentive for some to come up with all kinds of obscure terms for a language. That's \r\nwhy we decided to take the max.</p>\r\n<p>The proper way to solve this is is of course to take the sum and subtract the intersection. This will give \r\nrise to an explosion of extra queries that must be performed. Suppose a language has a grouping of 15 terms, \r\nthen you have to perform 32,768 queries (all combinations of intersections). \r\nSo this seems not possible either... If somebody has a solution for this, please let us know.</p>\r\n</li>\r\n<li>\r\n<i>Q: What happened to Java in April 2004? Did you change your methodology?</i>\r\n<p>A: No, we did not change our methodology at that time. Google changed its methodology. \r\nThey performed a general sweep action to get rid of all kinds of web sites that had been \r\npushed up. As a consequence, there was a huge drop for languages such as Java and C++. In \r\norder to minimize such fluctuations in the future, we added two more search engines (MSN \r\nand Yahoo) a few months after this incident.</p>\r\n</li>\r\n</ul>\r\n </article>\r\n </section>\r\n <div id="news" class="sitewidth whitebg padblock clearfix">\r\n <a href="/news/" class="right link">More news</a>\r\n <h1>Latest news</h1>\r\n <hr>\r\n <div class="newsitems">\r\n <a href="/tqi/awards/" class="clearfix">\r\n <img src="/images/news/philips.png" width="60" height="60" alt="news image">\r\n <div>\r\n <time datetime="">April 2022</time>\r\n <h3>Philips wins TIOBE QA Award</h3>\r\n <p>The Rhy2020 project has the best TIOBE Quality Indicator (TQI) score of more than 5,300 industrial projects.</p>\r\n </div>\r\n </a>\r\n <a href="https://www.delem.com/en/home" target="_blank" class="clearfix">\r\n <img src="/images/news/delem.png" width="60" height="60" alt="news image">\r\n <div>\r\n <time datetime="">February 2022</time>\r\n <h3>Delem checks code quality</h3>\r\n <p>CNC control company Delem starts using TIOBE's TiCS framework to measure its code quality.</p>\r\n </div>\r\n </a>\r\n <a href="https://www.ecb.europa.eu" target="_blank" class="clearfix">\r\n <img src="/images/news/ECB.png" width="60" height="60" alt="news image">\r\n <div>\r\n <time datetime="">January 2022</time>\r\n <h3>ECB assessment</h3>\r\n <p>TIOBE has conducted a TUViT Trusted Product Maintainability assessment for the European Central Bank (ECB).</p>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\r\n </section>\r\n </section>\r\n <div class="fullwidth graybg">\r\n <footer class="sitewidth">\r\n <div class="row clearfix">\r\n <a href="/" class="ir" id="footerlogo">TIOBE website</a>\r\n <ul id="footermenu">\r\n <li>\r\n <a href="/documentation/">Documentation</a>\r\n </li>\r\n <li>\r\n <a href="/tqi/definition/">TQI</a>\r\n </li>\r\n <li>\r\n <a href="/markets/customers/">Markets</a>\r\n </li>\r\n <li>\r\n <a href="/tics/fact-sheet/">Products</a>\r\n </li>\r\n <li>\r\n <a href="/tics/fact-sheet/">TICS</a>\r\n </li>\r\n <li>\r\n <a href="/company/about/">Company</a>\r\n </li>\r\n <li>\r\n <a href="/">Home</a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class="row clearfix">\r\n <div class="quote">\r\n TIOBE checks more than 1056 million lines of software code for its customers world-wide, realtime, each day.\r\n </div>\r\n <div class="zoeken">\r\n <form method="get" action="/search">\r\n <input type="text" name="s" class="input" placeholder="Search"><input type="submit" value="" class="searchbutton">\r\n </form>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class="row clearfix" id="adres">\r\n <div class="contact-footer-desktop">\r\n <div class="adres left">Victory House II, Esp 401, 5633 AJ Eindhoven, The Netherlands</div>\r\n <div class="tel left">+31 40 400 2800</div>\r\n <div class="mail left"><a href="mailto:info@tiobe.com">info@tiobe.com</a></div>\r\n </div>\r\n <div class="contact-footer-mobile">\r\n <ul>\r\n <li>Victory House II</li>\r\n <li>Esp 401</li>\r\n <li>5633 AJ Eindhoven</li>\r\n <li>The Netherlands</li>\r\n <li>+31 40 400 2800</li>\r\n <li><a href="mailto:info@tiobe.com">info@tiobe.com</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class="row clearfix" id="disclaimer">\r\n <div class="copy left">© 2022 TIOBE Software BV</div>\r\n <div class="left"><a href="/privacy-statement/">Privacy statement</a></div>\r\n </div>\r\n </footer>\r\n </div>\r\n <script>\r\n (function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){\r\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\r\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\r\n })(window,document,\'script\',\'https://www.google-analytics.com/analytics.js\',\'ga\');\r\n \r\n ga(\'create\', \'UA-18555865-1\', \'auto\');\r\n ga(\'set\', \'anonymizeIp\', true);\r\n ga(\'send\', \'pageview\');\r\n \r\n </script>\r\n <script type="text/javascript">\r\n _linkedin_partner_id = "440548";\r\n window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\r\n window._linkedin_data_partner_ids.push(_linkedin_partner_id);\r\n </script><script type="text/javascript">\r\n (function(){var s = document.getElementsByTagName("script")[0];\r\n var b = document.createElement("script");\r\n b.type = "text/javascript";b.async = true;\r\n b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";\r\n s.parentNode.insertBefore(b, s);})();\r\n </script>\r\n <noscript>\r\n <img height="1" width="1" style="display:none;" alt="" \r\n src="https://dc.ads.linkedin.com/collect/?pid=440548&fmt=gif" />\r\n </noscript>\r\n </body>\r\n</html>\r\n'
html_tables = pd. read_html( html_data. content, encoding= 'utf-8' )
type ( html_tables)
list
len ( html_tables)
4
html_tables[ 0 ]
Mar 2022 Mar 2021 Change Programming Language Programming Language.1 Ratings Change.1 0 1 3 NaN NaN Python 14.26% +3.95% 1 2 1 NaN NaN C 13.06% -2.27% 2 3 2 NaN NaN Java 11.19% +0.74% 3 4 4 NaN NaN C++ 8.66% +2.14% 4 5 5 NaN NaN C# 5.92% +0.95% 5 6 6 NaN NaN Visual Basic 5.77% +0.91% 6 7 7 NaN NaN JavaScript 2.09% -0.03% 7 8 8 NaN NaN PHP 1.92% -0.15% 8 9 9 NaN NaN Assembly language 1.90% -0.07% 9 10 10 NaN NaN SQL 1.85% -0.02% 10 11 13 NaN NaN R 1.37% +0.12% 11 12 14 NaN NaN Delphi/Object Pascal 1.12% -0.07% 12 13 11 NaN NaN Go 0.98% -0.33% 13 14 19 NaN NaN Swift 0.90% -0.05% 14 15 18 NaN NaN MATLAB 0.80% -0.23% 15 16 16 NaN NaN Ruby 0.66% -0.52% 16 17 12 NaN NaN Classic Visual Basic 0.60% -0.66% 17 18 20 NaN NaN Objective-C 0.59% -0.31% 18 19 17 NaN NaN Perl 0.57% -0.58% 19 20 38 NaN NaN Lua 0.56% +0.23%
html_tables[ 1 ] . head( )
Position Programming Language Ratings 0 21 Prolog 0.55% 1 22 COBOL 0.54% 2 23 Scratch 0.53% 3 24 SAS 0.52% 4 25 Groovy 0.52%
4.4.2 利用pandas.read_html()爬取天气网页数据
实现上学期所学python爬虫类似功能
import requests
html_data = requests. get( "http://www.weather.com.cn/textFC/hb.shtml" )
html_tables = pd. read_html( html_data. content)
len ( html_tables)
35
html_tables[ 0 ]
0 1 2 3 4 5 6 7 8 0 省/直辖市 城市 周一(4月11日)白天 周一(4月11日)白天 周一(4月11日)白天 周一(4月11日)夜间 周一(4月11日)夜间 周一(4月11日)夜间 NaN 1 省/直辖市 城市 天气现象 风向风力 最高气温 天气现象 风向风力 最低气温 NaN 2 北京 北京 - - - - 扬沙 北风 3-4级 14 详情 3 北京 海淀 - - - - 扬沙 北风 3-4级 13 详情 4 北京 朝阳 - - - - 扬沙 北风 3-4级 14 详情 5 北京 顺义 - - - - 扬沙 北风 3-4级 14 详情 6 北京 怀柔 - - - - 扬沙 北风 3-4级 13 详情 7 北京 通州 - - - - 扬沙 北风 3-4级 12 详情 8 北京 昌平 - - - - 扬沙 西北风 <3级 12 详情 9 北京 延庆 - - - - 扬沙 北风 <3级 9 详情 10 北京 丰台 - - - - 扬沙 北风 3-4级 14 详情 11 北京 石景山 - - - - 扬沙 北风 3-4级 12 详情 12 北京 大兴 - - - - 扬沙 北风 3-4级 12 详情 13 北京 房山 - - - - 扬沙 北风 3-4级 13 详情 14 北京 密云 - - - - 扬沙 北风 3-4级 10 详情 15 北京 门头沟 - - - - 扬沙 北风 3-4级 13 详情 16 北京 平谷 - - - - 扬沙 北风 <3级 11 详情 17 北京 东城 - - - - 扬沙 北风 3-4级 14 详情 18 北京 西城 - - - - 扬沙 北风 3-4级 13 详情
html_tables[ 1 ]
0 1 2 3 4 5 6 7 8 0 省/直辖市 城市 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)夜间 周四(4月7日)夜间 周四(4月7日)夜间 NaN 1 省/直辖市 城市 天气现象 风向风力 最高气温 天气现象 风向风力 最低气温 NaN 2 天津 天津 晴 南风 <3级 23 晴 南风 <3级 10 详情 3 天津 武清 晴 南风 <3级 23 晴 东南风 <3级 9 详情 4 天津 宝坻 晴 南风 <3级 22 晴 东风 <3级 9 详情 5 天津 东丽 晴 东南风 <3级 22 晴 南风 <3级 10 详情 6 天津 西青 晴 南风 <3级 23 晴 南风 <3级 10 详情 7 天津 北辰 晴 南风 <3级 23 晴 南风 <3级 10 详情 8 天津 宁河 晴 南风 3-4级 20 晴 东南风 3-4级 8 详情 9 天津 和平 晴 南风 <3级 23 晴 南风 <3级 10 详情 10 天津 静海 晴 西南风 <3级 23 晴 南风 <3级 9 详情 11 天津 津南 晴 东南风 <3级 22 晴 南风 <3级 10 详情 12 天津 滨海新区 晴 东南风 4-5级 20 晴 南风 4-5级 10 详情 13 天津 河东 晴 南风 <3级 23 晴 南风 <3级 10 详情 14 天津 河西 晴 南风 <3级 23 晴 南风 <3级 10 详情 15 天津 蓟州 晴 西南风 <3级 22 晴 东北风 <3级 8 详情 16 天津 南开 晴 南风 <3级 23 晴 南风 <3级 10 详情 17 天津 河北 晴 南风 <3级 23 晴 南风 <3级 10 详情 18 天津 红桥 晴 南风 <3级 23 晴 南风 <3级 10 详情
html_tables[ 2 ]
0 1 2 3 4 5 6 7 8 0 省/直辖市 城市 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)夜间 周四(4月7日)夜间 周四(4月7日)夜间 NaN 1 省/直辖市 城市 天气现象 风向风力 最高气温 天气现象 风向风力 最低气温 NaN 2 河北 石家庄 晴 南风 3-4级 24 晴 北风 <3级 10 详情 3 河北 保定 晴 西南风 <3级 25 晴 西南风 <3级 7 详情 4 河北 张家口 晴 东南风 3-4级 24 晴 东南风 <3级 9 详情 5 河北 承德 晴 南风 <3级 22 晴 东南风 <3级 4 详情 6 河北 唐山 晴 西南风 <3级 21 晴 南风 <3级 4 详情 7 河北 廊坊 晴 南风 <3级 24 晴 南风 <3级 9 详情 8 河北 沧州 晴 西南风 3-4级 24 晴 南风 3-4级 6 详情 9 河北 衡水 晴 西南风 <3级 24 晴 南风 <3级 9 详情 10 河北 邢台 晴 东南风 <3级 23 晴 西南风 <3级 11 详情 11 河北 邯郸 晴 南风 <3级 22 晴 南风 <3级 10 详情 12 河北 秦皇岛 晴 西南风 3-4级 18 晴 东风 3-4级 4 详情 13 河北 雄安新区 晴 南风 3-4级 26 晴 南风 3-4级 8 详情
html_tables[ 3 ]
0 1 2 3 4 5 6 7 8 0 省/直辖市 城市 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)夜间 周四(4月7日)夜间 周四(4月7日)夜间 NaN 1 省/直辖市 城市 天气现象 风向风力 最高气温 天气现象 风向风力 最低气温 NaN 2 山西 太原 晴 南风 <3级 24 晴 东南风 <3级 3 详情 3 山西 大同 晴 西风 3-4级 22 晴 西风 <3级 3 详情 4 山西 阳泉 晴 西风 3-4级 25 晴 西风 <3级 8 详情 5 山西 晋中 晴 西南风 <3级 23 晴 东南风 <3级 6 详情 6 山西 长治 晴 南风 3-4级 23 晴 南风 3-4级 9 详情 7 山西 晋城 晴 南风 3-4级 25 晴 东南风 <3级 9 详情 8 山西 临汾 晴 西南风 <3级 29 晴 北风 <3级 11 详情 9 山西 运城 晴 东风 <3级 29 晴 东南风 <3级 13 详情 10 山西 朔州 晴 西风 3-4级 22 晴 西南风 <3级 4 详情 11 山西 忻州 晴 东南风 <3级 24 晴 西南风 <3级 5 详情 12 山西 吕梁 晴 西风 3-4级 25 晴 东风 <3级 8 详情
html_tables[ 4 ]
0 1 2 3 4 5 6 7 8 0 省/直辖市 城市 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)白天 周四(4月7日)夜间 周四(4月7日)夜间 周四(4月7日)夜间 NaN 1 省/直辖市 城市 天气现象 风向风力 最高气温 天气现象 风向风力 最低气温 NaN 2 内蒙古 呼和浩特 晴 西风 3-4级 23 晴 西风 4-5级 5 详情 3 内蒙古 包头 晴 西南风 3-4级 23 晴 西南风 <3级 4 详情 4 内蒙古 乌海 晴 西南风 3-4级 25 晴 西南风 3-4级 8 详情 5 内蒙古 乌兰察布 晴 西风 4-5级 18 晴 西风 4-5级 6 详情 6 内蒙古 通辽 晴 西北风 <3级 12 晴 西南风 4-5级 5 详情 7 内蒙古 赤峰 晴 北风 3-4级 17 晴 西南风 <3级 6 详情 8 内蒙古 鄂尔多斯 晴 西南风 3-4级 21 晴 西南风 3-4级 8 详情 9 内蒙古 巴彦淖尔 晴 西风 <3级 25 晴 西风 <3级 8 详情 10 内蒙古 锡林郭勒 晴 西南风 4-5级 18 晴 西南风 4-5级 4 详情 11 内蒙古 呼伦贝尔 多云 西南风 4-5级 6 多云 西南风 3-4级 -4 详情 12 内蒙古 兴安盟 晴 西北风 3-4级 12 晴 西南风 4-5级 1 详情 13 内蒙古 阿拉善盟 晴 西北风 3-4级 22 晴 西北风 3-4级 9 详情
html_tables[ 5 ]
0 1 2 3 4 5 6 7 8 0 省/直辖市 城市 周五(4月8日)白天 周五(4月8日)白天 周五(4月8日)白天 周五(4月8日)夜间 周五(4月8日)夜间 周五(4月8日)夜间 NaN 1 省/直辖市 城市 天气现象 风向风力 最高气温 天气现象 风向风力 最低气温 NaN 2 北京 北京 晴 西南风 <3级 27 晴 北风 <3级 12 详情 3 北京 海淀 晴 南风 <3级 26 晴 北风 <3级 11 详情 4 北京 朝阳 晴 南风 <3级 26 晴 北风 <3级 13 详情 5 北京 顺义 晴 东南风 <3级 26 晴 东北风 <3级 12 详情 6 北京 怀柔 晴 北风 <3级 24 晴 东北风 <3级 11 详情 7 北京 通州 晴 南风 <3级 26 晴 东风 <3级 13 详情 8 北京 昌平 晴 东南风 <3级 26 晴 西北风 <3级 11 详情 9 北京 延庆 晴 东南风 <3级 23 晴 北风 <3级 10 详情 10 北京 丰台 晴 西南风 <3级 26 晴 北风 <3级 13 详情 11 北京 石景山 晴 南风 <3级 25 晴 北风 <3级 11 详情 12 北京 大兴 晴 西南风 <3级 26 晴 北风 <3级 13 详情 13 北京 房山 晴 西南风 <3级 26 晴 东北风 <3级 11 详情 14 北京 密云 晴 南风 <3级 24 晴 东北风 <3级 9 详情 15 北京 门头沟 晴 南风 <3级 26 晴 北风 <3级 13 详情 16 北京 平谷 晴 南风 <3级 26 晴 东北风 <3级 12 详情 17 北京 东城 晴 南风 <3级 26 晴 北风 <3级 13 详情 18 北京 西城 晴 南风 <3级 26 晴 北风 <3级 11 详情
4.5 从数据库获取
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine( 'mysql+pymysql://root:123456@127.0.0.1:3306/ttsx' )
category_data = pd. read_sql( 'goodscategory' , engine)
category_data
id cag_name cag_css cag_img 0 1 时令水果 fruit images/banner01.jpg 1 2 海鲜水产 seafood images/banner02.jpg 2 3 全品肉类 meet images/banner03.jpg 3 4 美味蛋品 egg images/banner04.jpg 4 5 新鲜蔬菜 vegetables images/banner05.jpg 5 6 低温奶制品 ice images/banner06.jpg
4.6 从word文件获取
4.6.1 python-docx的安装
pip install python-docx
4.6.2 python-docx数据获取的使用
from docx import Document
myDocx = Document( "集合介绍.docx" )
myDocx
<docx.document.Document at 0x7fd85b0f9600>
paragraphs = myDocx. paragraphs
paragraphs
[<docx.text.paragraph.Paragraph at 0x7fd85c2dd5e0>,
<docx.text.paragraph.Paragraph at 0x7fd85c2dd6a0>,
<docx.text.paragraph.Paragraph at 0x7fd85c2dd8b0>,
<docx.text.paragraph.Paragraph at 0x7fd85c2dd760>,
<docx.text.paragraph.Paragraph at 0x7fd85c2dd940>,
<docx.text.paragraph.Paragraph at 0x7fd85c2dd820>]
paragraphs[ 0 ] . text
'集合'
paragraphs[ 1 ] . text
'Python的集合(set)本身是可变类型,但Python要求放入集合中的元素必须是不可变类型;集合类型与列表和元组的区别是:集合中的元素无序但必须唯一。下面分创建集合、集合的常见操作和集合推导式三部分对集合进行介绍。'
paragraphs[ 2 ] . text
'集合的常见操作'
from docx import Document
myDocx = Document( "集合介绍.docx" )
paragraphs = myDocx. paragraphs
i = 0
for para in paragraphs:
print ( "第%s个段落:" % i)
print ( para. text)
i = i+ 1
print ( "\n" )
第0个段落:
集合
第1个段落:
Python的集合(set)本身是可变类型,但Python要求放入集合中的元素必须是不可变类型;集合类型与列表和元组的区别是:集合中的元素无序但必须唯一。下面分创建集合、集合的常见操作和集合推导式三部分对集合进行介绍。
第2个段落:
集合的常见操作
第3个段落:
集合是可变的,集合中的元素可以动态增加或删除。Python提供了一些内置方法来操作集合,操作集合的常见方法如下表所示。
第4个段落:
操作集合的常见方法
第5个段落:
from docx import Document
myDocx = Document( "集合介绍.docx" )
tables = myDocx. tables
i = 0
for table in tables:
for row in table. rows:
row_content = [ ]
for cell in row. cells[ : ] :
row_content. append( cell. text)
print ( row_content)
print ( "-" * 20 )
['常见方法', '说明']
--------------------
['add(x)', '向集合中添加元素x,x已存在时不作处理']
--------------------
['remove(x)', '删除集合中的元素x,若x不存在则抛出KeyError异常']
--------------------
['discard(x)', '删除集合中的元素x,若x不存在不作处理']
--------------------
['pop()', '随机返回集合中的一个元素,同时删除该元素。若集合为空,抛出KeyError异常']
--------------------
['clear()', '清空集合 ']
--------------------
['copy()', '拷贝集合,返回值为集合']
--------------------
['isdisjoint(T)', '判断集合与集合T是否没有相同的元素,没有返回True,有则返回False']
--------------------
4.6.3 实例:简单可视化分析2022年重庆市免试专升本各个学校数据
from docx import Document
import pandas as pd
doc = Document( "gs1.docx" )
tables = doc. tables
table_content = [ ]
for table in tables:
for row in table. rows:
row_content = [ ]
for cell in row. cells[ : ] :
row_content. append( cell. text)
table_content. append( row_content)
df = pd. DataFrame( table_content[ 1 : ] , columns= table_content[ 0 ] )
df = df. drop_duplicates( subset= [ '学校名称' , '学生姓名' ] , keep= 'first' )
df_result = df. groupby( '学校名称' ) . count( ) . sort_values( '序号' , ascending= False ) [ '学生姓名' ]
import matplotlib. pyplot as plt
plt. rcParams[ 'font.sans-serif' ] = [ 'Arial Unicode MS' ]
type ( df_result)
pandas.core.series.Series
table_content
df = pd. DataFrame( table_content[ 1 : ] , columns= table_content[ 0 ] )
df. head( )
序号 学生姓名 学校名称 专业名称 获奖项目名称 获奖等次 备注 0 1 谭欣 重庆三峡医药高等专科学校 中药学 2021年全国职业院校技能大赛高职组中药传统技能赛项 国赛一等奖 1 2 张茂晴 重庆三峡医药高等专科学校 护理 中华人民共和国第一届职业技能大赛健康和社会照护项目 国赛二等奖 2 3 邓栏栏 重庆三峡医药高等专科学校 护理 2021年“巴渝工匠”杯重庆市第十四届高等职业院校学生职业技能竞赛“护理技能”赛项 市赛一等奖 3 4 秦秀娟 重庆三峡医药高等专科学校 中药学 2021年“巴渝工匠”杯重庆市第十四届高等职业院校学生职业技能竞赛“中药传统技能”赛项 市赛一等奖 4 5 石佳 重庆三峡医药高等专科学校 中药学 2021年“巴渝工匠”杯重庆市第十四届高等职业院校学生职业技能竞赛“中药传统技能”赛项 市赛一等奖
df = df. drop_duplicates( )
df. shape
(313, 7)
df = df. drop_duplicates( subset= [ '学校名称' , '学生姓名' ] , keep= 'first' )
df. shape
(309, 7)
df. groupby( '学校名称' ) . count( )
序号 学生姓名 专业名称 获奖项目名称 获奖等次 备注 学校名称 重庆三峡医药高等专科学校 7 7 7 7 7 7 重庆三峡职业学院 20 20 20 20 20 20 重庆交通职业学院 12 12 12 12 12 12 重庆化工职业学院 3 3 3 3 3 3 重庆医药高等专科学校 5 5 5 5 5 5 重庆商务职业学院 28 28 28 28 28 28 重庆城市管理职业学院 23 23 23 23 23 23 重庆城市职业学院 25 25 25 25 25 25 重庆安全技术职业学院 1 1 1 1 1 1 重庆工业职业技术学院 13 13 13 13 13 13 重庆工商职业学院 15 15 15 15 15 15 重庆工程职业技术学院 28 28 28 28 28 28 重庆工贸职业技术学院 13 13 13 13 13 13 重庆幼儿师范高等专科学校 3 3 3 3 3 3 重庆应用技术职业学院 1 1 1 1 1 1 重庆建筑工程职业学院 1 1 1 1 1 1 重庆建筑科技职业学院 6 6 6 6 6 6 重庆文化艺术职业学院 3 3 3 3 3 3 重庆旅游职业学院 11 11 11 11 11 11 重庆水利电力职业技术学院 18 18 18 18 18 18 重庆电子工程职业学院 31 31 31 31 31 31 重庆科创职业学院 6 6 6 6 6 6 重庆能源职业学院 1 1 1 1 1 1 重庆航天职业技术学院 7 7 7 7 7 7 重庆艺术工程职业学院 1 1 1 1 1 1 重庆财经职业学院 28 28 28 28 28 28 重庆青年职业技术学院 3 3 3 3 3 3
df_result = df. groupby( '学校名称' ) . count( ) . sort_values( '序号' , ascending= False ) [ '学生姓名' ]
df_result
学校名称
重庆电子工程职业学院 31
重庆财经职业学院 28
重庆商务职业学院 28
重庆工程职业技术学院 28
重庆城市职业学院 25
重庆城市管理职业学院 23
重庆三峡职业学院 20
重庆水利电力职业技术学院 18
重庆工商职业学院 15
重庆工贸职业技术学院 13
重庆工业职业技术学院 13
重庆交通职业学院 12
重庆旅游职业学院 11
重庆航天职业技术学院 7
重庆三峡医药高等专科学校 7
重庆科创职业学院 6
重庆建筑科技职业学院 6
重庆医药高等专科学校 5
重庆幼儿师范高等专科学校 3
重庆文化艺术职业学院 3
重庆化工职业学院 3
重庆青年职业技术学院 3
重庆建筑工程职业学院 1
重庆应用技术职业学院 1
重庆能源职业学院 1
重庆安全技术职业学院 1
重庆艺术工程职业学院 1
Name: 学生姓名, dtype: int64
import matplotlib. pyplot as plt
plt. rcParams[ 'font.sans-serif' ] = [ 'Arial Unicode MS' ]
df_result. plot. bar( ylabel= '免试人数' )
<AxesSubplot:xlabel='学校名称', ylabel='免试人数'>
4.7 从pdf文件读取数据
import pdfplumber
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
/var/folders/gv/w6mdpnf51kncpwpf7x4xvtz80000gn/T/ipykernel_1085/786904664.py in <module>
----> 1 import pdfplumber
ModuleNotFoundError: No module named 'pdfplumber'
4.7.1 安装pdfplumber
pip install pdfplumber
import pdfplumber
4.7.2 使用pdfplumber读取数据
4.7.2.1 读取单页的《集合介绍.pdf》
pdfObj = pdfplumber. open ( "集合介绍.pdf" )
type ( pdfObj)
pdfplumber.pdf.PDF
pdfObj. pages
[<Page:1>]
pdfObj. metadata
{'Author': '孙东',
'Creator': 'Microsoft® Word 2010',
'CreationDate': "D:20200727154403+08'00'",
'ModDate': "D:20200727154403+08'00'",
'Producer': 'Microsoft® Word 2010'}
type ( pdfObj. metadata)
dict
pdfObj. metadata[ 'CreationDate' ]
"D:20200727154403+08'00'"
type ( pdfObj. metadata[ 'CreationDate' ] )
str
pdfObj. pages[ 0 ] . extract_text( )
'集合 \nPython 的集合(set)本身是可变类型,但 Python 要求放入集合中的元素必\n须是不可变类型;集合类型与列表和元组的区别是:集合中的元素无序但必须唯\n一。下面分创建集合、集合的常见操作和集合推导式三部分对集合进行介绍。 \n集合的常见操作 \n集合是可变的,集合中的元素可以动态增加或删除。Python 提供了一些内置\n方法来操作集合,操作集合的常见方法如下表所示。 \n操作集合的常见方法 \n常见方法 说明 \nadd(x) 向集合中添加元素x,x 已存在时不作处理 \nremove(x) 删除集合中的元素x,若x 不存在则抛出KeyError异常 \ndiscard(x) 删除集合中的元素x,若x 不存在不作处理 \n随机返回集合中的一个元素,同时删除该元素。若集合为空,\npop() \n抛出KeyError异常 \nclear() 清空集合 \ncopy() 拷贝集合,返回值为集合 \n判断集合与集合T是否没有相同的元素,没有返回True,\nisdisjoint(T) \n有则返回False \n '
print ( pdfObj. pages[ 0 ] . extract_text( ) )
集合
Python 的集合(set)本身是可变类型,但 Python 要求放入集合中的元素必
须是不可变类型;集合类型与列表和元组的区别是:集合中的元素无序但必须唯
一。下面分创建集合、集合的常见操作和集合推导式三部分对集合进行介绍。
集合的常见操作
集合是可变的,集合中的元素可以动态增加或删除。Python 提供了一些内置
方法来操作集合,操作集合的常见方法如下表所示。
操作集合的常见方法
常见方法 说明
add(x) 向集合中添加元素x,x 已存在时不作处理
remove(x) 删除集合中的元素x,若x 不存在则抛出KeyError异常
discard(x) 删除集合中的元素x,若x 不存在不作处理
随机返回集合中的一个元素,同时删除该元素。若集合为空,
pop()
抛出KeyError异常
clear() 清空集合
copy() 拷贝集合,返回值为集合
判断集合与集合T是否没有相同的元素,没有返回True,
isdisjoint(T)
有则返回False
pdfObj. pages[ 0 ] . extract_words( )
[{'text': '集合',
'x0': 275.57,
'x1': 319.60999999999996,
'top': 93.59635999999989,
'doctop': 93.59635999999989,
'bottom': 115.55635999999993,
'upright': True,
'direction': 1},
{'text': 'Python',
'x0': 114.02,
'x1': 147.824,
'top': 140.61199999999997,
'doctop': 140.61199999999997,
'bottom': 152.61199999999997,
'upright': True,
'direction': 1},
{'text': '的集合(set)本身是可变类型,但',
'x0': 151.22,
'x1': 332.678,
'top': 139.712,
'doctop': 139.712,
'bottom': 152.61199999999997,
'upright': True,
'direction': 1},
{'text': 'Python',
'x0': 336.07,
'x1': 370.006,
'top': 140.61199999999997,
'doctop': 140.61199999999997,
'bottom': 152.61199999999997,
'upright': True,
'direction': 1},
{'text': '要求放入集合中的元素必',
'x0': 373.39,
'x1': 505.39,
'top': 139.712,
'doctop': 139.712,
'bottom': 151.712,
'upright': True,
'direction': 1},
{'text': '须是不可变类型;集合类型与列表和元组的区别是:集合中的元素无序但必须唯',
'x0': 90.024,
'x1': 505.22400000000005,
'top': 157.712,
'doctop': 157.712,
'bottom': 169.712,
'upright': True,
'direction': 1},
{'text': '一。下面分创建集合、集合的常见操作和集合推导式三部分对集合进行介绍。',
'x0': 90.024,
'x1': 498.024,
'top': 175.59199999999998,
'doctop': 175.59199999999998,
'bottom': 187.59199999999998,
'upright': True,
'direction': 1},
{'text': '集合的常见操作',
'x0': 241.49,
'x1': 353.93,
'top': 211.19035999999994,
'doctop': 211.19035999999994,
'bottom': 227.15035999999998,
'upright': True,
'direction': 1},
{'text': '集合是可变的,集合中的元素可以动态增加或删除。Python',
'x0': 114.02,
'x1': 418.234,
'top': 250.74199999999996,
'doctop': 250.74199999999996,
'bottom': 263.64199999999994,
'upright': True,
'direction': 1},
{'text': '提供了一些内置',
'x0': 421.3,
'x1': 505.408,
'top': 250.74199999999996,
'doctop': 250.74199999999996,
'bottom': 262.74199999999996,
'upright': True,
'direction': 1},
{'text': '方法来操作集合,操作集合的常见方法如下表所示。',
'x0': 90.024,
'x1': 366.07,
'top': 268.74199999999996,
'doctop': 268.74199999999996,
'bottom': 280.74199999999996,
'upright': True,
'direction': 1},
{'text': '操作集合的常见方法',
'x0': 266.33,
'x1': 374.35,
'top': 286.62199999999996,
'doctop': 286.62199999999996,
'bottom': 298.62199999999996,
'upright': True,
'direction': 1},
{'text': '常见方法',
'x0': 114.14,
'x1': 162.38,
'top': 306.062,
'doctop': 306.062,
'bottom': 318.062,
'upright': True,
'direction': 1},
{'text': '说明',
'x0': 332.95,
'x1': 357.07,
'top': 306.062,
'doctop': 306.062,
'bottom': 318.062,
'upright': True,
'direction': 1},
{'text': 'add(x)',
'x0': 122.66,
'x1': 154.00400000000002,
'top': 325.322,
'doctop': 325.322,
'bottom': 337.32199999999995,
'upright': True,
'direction': 1},
{'text': '向集合中添加元素x,x',
'x0': 191.09,
'x1': 314.11,
'top': 324.5419999999999,
'doctop': 324.5419999999999,
'bottom': 337.44199999999995,
'upright': True,
'direction': 1},
{'text': '已存在时不作处理',
'x0': 317.23,
'x1': 413.23,
'top': 324.5419999999999,
'doctop': 324.5419999999999,
'bottom': 336.542,
'upright': True,
'direction': 1},
{'text': 'remove(x)',
'x0': 113.3,
'x1': 163.24400000000003,
'top': 343.80199999999996,
'doctop': 343.80199999999996,
'bottom': 355.80199999999996,
'upright': True,
'direction': 1},
{'text': '删除集合中的元素x,若x',
'x0': 191.09,
'x1': 329.11,
'top': 343.022,
'doctop': 343.022,
'bottom': 355.92199999999997,
'upright': True,
'direction': 1},
{'text': '不存在则抛出KeyError异常',
'x0': 332.23,
'x1': 479.38,
'top': 343.022,
'doctop': 343.022,
'bottom': 355.92199999999997,
'upright': True,
'direction': 1},
{'text': 'discard(x)',
'x0': 114.02,
'x1': 162.64400000000003,
'top': 362.1619999999999,
'doctop': 362.1619999999999,
'bottom': 374.1619999999999,
'upright': True,
'direction': 1},
{'text': '删除集合中的元素x,若x',
'x0': 191.09,
'x1': 329.11,
'top': 361.38199999999995,
'doctop': 361.38199999999995,
'bottom': 374.2819999999999,
'upright': True,
'direction': 1},
{'text': '不存在不作处理',
'x0': 332.23,
'x1': 416.23,
'top': 361.38199999999995,
'doctop': 361.38199999999995,
'bottom': 373.38199999999995,
'upright': True,
'direction': 1},
{'text': '随机返回集合中的一个元素,同时删除该元素。若集合为空,',
'x0': 191.09,
'x1': 505.06,
'top': 379.86199999999997,
'doctop': 379.86199999999997,
'bottom': 391.86199999999997,
'upright': True,
'direction': 1},
{'text': 'pop()',
'x0': 125.3,
'x1': 151.292,
'top': 389.64199999999994,
'doctop': 389.64199999999994,
'bottom': 401.64199999999994,
'upright': True,
'direction': 1},
{'text': '抛出KeyError异常',
'x0': 191.09,
'x1': 290.33,
'top': 397.74199999999996,
'doctop': 397.74199999999996,
'bottom': 410.64199999999994,
'upright': True,
'direction': 1},
{'text': 'clear()',
'x0': 122.66,
'x1': 153.92,
'top': 417.02199999999993,
'doctop': 417.02199999999993,
'bottom': 429.02199999999993,
'upright': True,
'direction': 1},
{'text': '清空集合',
'x0': 191.09,
'x1': 239.09,
'top': 416.24199999999996,
'doctop': 416.24199999999996,
'bottom': 428.24199999999996,
'upright': True,
'direction': 1},
{'text': 'copy()',
'x0': 122.66,
'x1': 153.872,
'top': 435.50199999999995,
'doctop': 435.50199999999995,
'bottom': 447.50199999999995,
'upright': True,
'direction': 1},
{'text': '拷贝集合,返回值为集合',
'x0': 191.09,
'x1': 323.09000000000003,
'top': 434.722,
'doctop': 434.722,
'bottom': 446.722,
'upright': True,
'direction': 1},
{'text': '判断集合与集合T是否没有相同的元素,没有返回True,',
'x0': 191.09,
'x1': 493.54,
'top': 453.082,
'doctop': 453.082,
'bottom': 465.98199999999997,
'upright': True,
'direction': 1},
{'text': 'isdisjoint(T)',
'x0': 108.62,
'x1': 168.056,
'top': 462.86199999999997,
'doctop': 462.86199999999997,
'bottom': 474.86199999999997,
'upright': True,
'direction': 1},
{'text': '有则返回False',
'x0': 191.09,
'x1': 267.30199999999996,
'top': 471.082,
'doctop': 471.082,
'bottom': 483.98199999999997,
'upright': True,
'direction': 1}]
pdfObj. pages[ 0 ] . extract_tables( )
[[['', '常见方法', '', '', '说明', ''],
['add(x)', None, None, '向集合中添加元素x,x 已存在时不作处理', None, None],
['remove(x)', None, None, '删除集合中的元素x,若x 不存在则抛出KeyError异常', None, None],
['discard(x)', None, None, '删除集合中的元素x,若x 不存在不作处理', None, None],
['pop()',
None,
None,
'随机返回集合中的一个元素,同时删除该元素。若集合为空,\n抛出KeyError异常',
None,
None],
['clear()', None, None, '清空集合', None, None],
['copy()', None, None, '拷贝集合,返回值为集合', None, None],
['isdisjoint(T)',
None,
None,
'判断集合与集合T是否没有相同的元素,没有返回True,\n有则返回False',
None,
None]]]
pdfObj. close( )
import pdfplumber
i = 0
with pdfplumber. open ( "集合介绍.pdf" ) as pdfObj:
for page in pdfObj. pages:
for table in page. extract_tables( ) :
for row in table:
print ( f"第 { i} 行" )
print ( row)
i = i+ 1
第0行
['', '常见方法', '', '', '说明', '']
第1行
['add(x)', None, None, '向集合中添加元素x,x 已存在时不作处理', None, None]
第2行
['remove(x)', None, None, '删除集合中的元素x,若x 不存在则抛出KeyError异常', None, None]
第3行
['discard(x)', None, None, '删除集合中的元素x,若x 不存在不作处理', None, None]
第4行
['pop()', None, None, '随机返回集合中的一个元素,同时删除该元素。若集合为空,\n抛出KeyError异常', None, None]
第5行
['clear()', None, None, '清空集合', None, None]
第6行
['copy()', None, None, '拷贝集合,返回值为集合', None, None]
第7行
['isdisjoint(T)', None, None, '判断集合与集合T是否没有相同的元素,没有返回True,\n有则返回False', None, None]
import re
i = 0
with pdfplumber. open ( "集合介绍.pdf" ) as pdfObj:
for page in pdfObj. pages:
for table in page. extract_tables( ) :
for row in table:
print ( f"第 { i} 行" )
cleanData = list ( filter ( None , row) )
print ( cleanData)
i = i+ 1
第0行
['常见方法', '说明']
第1行
['add(x)', '向集合中添加元素x,x 已存在时不作处理']
第2行
['remove(x)', '删除集合中的元素x,若x 不存在则抛出KeyError异常']
第3行
['discard(x)', '删除集合中的元素x,若x 不存在不作处理']
第4行
['pop()', '随机返回集合中的一个元素,同时删除该元素。若集合为空,\n抛出KeyError异常']
第5行
['clear()', '清空集合']
第6行
['copy()', '拷贝集合,返回值为集合']
第7行
['isdisjoint(T)', '判断集合与集合T是否没有相同的元素,没有返回True,\n有则返回False']
import pandas as pd
import pdfplumber
with pdfplumber. open ( "集合介绍.pdf" ) as pdfObj:
for page in pdfObj. pages:
for table in page. extract_tables( ) :
tableData = [ ]
for row in table:
cleanData = list ( filter ( None , row) )
tableData. append( cleanData)
pdfTableDf = pd. DataFrame( tableData[ 1 : ] , columns= tableData[ 0 ] )
pdfTableDf
常见方法 说明 0 add(x) 向集合中添加元素x,x 已存在时不作处理 1 remove(x) 删除集合中的元素x,若x 不存在则抛出KeyError异常 2 discard(x) 删除集合中的元素x,若x 不存在不作处理 3 pop() 随机返回集合中的一个元素,同时删除该元素。若集合为空,\n抛出KeyError异常 4 clear() 清空集合 5 copy() 拷贝集合,返回值为集合 6 isdisjoint(T) 判断集合与集合T是否没有相同的元素,没有返回True,\n有则返回False
tableData
[['常见方法', '说明'],
['add(x)', '向集合中添加元素x,x 已存在时不作处理'],
['remove(x)', '删除集合中的元素x,若x 不存在则抛出KeyError异常'],
['discard(x)', '删除集合中的元素x,若x 不存在不作处理'],
['pop()', '随机返回集合中的一个元素,同时删除该元素。若集合为空,\n抛出KeyError异常'],
['clear()', '清空集合'],
['copy()', '拷贝集合,返回值为集合'],
['isdisjoint(T)', '判断集合与集合T是否没有相同的元素,没有返回True,\n有则返回False']]
4.7.2.2 读取多页的《2021jxcg.pdf》
pdfObj2 = pdfplumber. open ( "2021jxcg.pdf" )
type ( pdfObj2)
pdfplumber.pdf.PDF
pdfObj2. pages
[<Page:1>,
<Page:2>,
...
<Page:36>,
<Page:37>]
读取《2021jxcg.pdf》的附件1表格,转换成DataFrame
利用.extract_table() 利用.extract_tables()
import re
import pandas as pd
import pdfplumber
pdfObj2 = pdfplumber. open ( "2021jxcg.pdf" )
table1List = [ ]
for i in range ( 1 , 5 ) :
page = pdfObj2. pages[ i]
table = page. extract_table( )
for row in table:
cleanData = list ( filter ( None , row) )
cleanDataList = [ re. sub( "\n" , '' , value) for value in cleanData[ : ] ]
table1List. append( cleanDataList)
table1Df1 = pd. DataFrame( table1List[ 1 : ] , columns= table1List[ 0 ] )
table1Df1. head( )
申报年度 学院 项目类别 项目名称 成果级别 等级 计分 奖金 人员名单 0 补登记 创新教育学院 质量工程 本/专科英语国家概况(1)(精品课程) 省部级 默认 30 0 曾仲贤、公共账户2、公共账户3、公共账户4、陈显通 1 补登记 城市建设工程学院 教改项目 乡村振兴背景下田园综合体可持续发展研究(脱贫攻坚成果) 省部级 默认 20 0 郭永彦、陈娟娟、江涛、张基斌 2 补登记 会计与金融学院 国家级规划教材 财务会计 国家级 默认 100 0 罗小明、戴锋、张小红 3 补登记 电子信息工程学院 国家级规划教材 C++语言程序设计项目制案例教程 国家级 默认 100 0 陈郑军、蔡茜、龚卫、白小燕、周继萍、胡方霞 4 2021年 党委组织部 质量工程 党建与思想政治教育 省部级 默认 30 3000 王剑华、刘芹、刘玮、黄建、卿竹、周同磊、张基斌
import re
import pandas as pd
import pdfplumber
pdfObj2 = pdfplumber. open ( "2021jxcg.pdf" )
table1List = [ ]
for i in range ( 1 , 5 ) :
page = pdfObj2. pages[ i]
tables = page. extract_tables( )
for table in tables:
for row in table:
cleanData = list ( filter ( None , row) )
cleanDataList = [ re. sub( "\n" , '' , value) for value in cleanData[ : ] ]
table1List. append( cleanDataList)
table1Df2 = pd. DataFrame( table1List[ 1 : ] , columns= table1List[ 0 ] )
table1Df2. head( )
申报年度 学院 项目类别 项目名称 成果级别 等级 计分 奖金 人员名单 0 补登记 创新教育学院 质量工程 本/专科英语国家概况(1)(精品课程) 省部级 默认 30 0 曾仲贤、公共账户2、公共账户3、公共账户4、陈显通 1 补登记 城市建设工程学院 教改项目 乡村振兴背景下田园综合体可持续发展研究(脱贫攻坚成果) 省部级 默认 20 0 郭永彦、陈娟娟、江涛、张基斌 2 补登记 会计与金融学院 国家级规划教材 财务会计 国家级 默认 100 0 罗小明、戴锋、张小红 3 补登记 电子信息工程学院 国家级规划教材 C++语言程序设计项目制案例教程 国家级 默认 100 0 陈郑军、蔡茜、龚卫、白小燕、周继萍、胡方霞 4 2021年 党委组织部 质量工程 党建与思想政治教育 省部级 默认 30 3000 王剑华、刘芹、刘玮、黄建、卿竹、周同磊、张基斌
读取《2021jxcg.pdf》的附件2表格,转换成DataFrame
import pdfplumber
pdfObj2 = pdfplumber. open ( "2021jxcg.pdf" )
table2List = [ ]
for i in range ( 5 , 37 ) :
page = pdfObj2. pages[ i]
tables = page. extract_tables( )
for table in tables:
for row in table:
cleanData = list ( filter ( None , row) )
cleanDataList = [ re. sub( "\n" , '' , value) for value in cleanData[ : ] ]
table2List. append( cleanDataList)
table2Df = pd. DataFrame( table2List[ 1 : ] , columns= table2List[ 0 ] )
table2Df. head( )
申报年度 类别 级别 竞赛名称 认定等次 计分 教师奖金 学生奖金 参与人明细 学生明细 0 补登记 教师比赛 全国一类 全国职业院校技能大赛教学能力比赛 一等奖 120 0 0 蔡茜、胡方霞、陈郑军、周士凯、唐春玲 None 1 补登记 教师比赛 全国三类 全国教育教学信息化大奖赛 三等奖 4 0 0 张弦、许汝才、王传 None 2 补登记 教师比赛 全国三类 国家开放大学学前教育专业学生幼儿集体活动优秀案例评选 三等奖 4 0 0 崔璨 None 3 补登记 教师比赛 全国三类 全国教育教学信息化大奖赛 一等奖 12 0 0 彭翔宇、汪洋、段玭 None 4 补登记 教师比赛 全国三类 全国教育教学信息化大奖赛 三等奖 4 0 0 王嵋、赵娜、尹静 None
table2Df. shape
(578, 10)