第4章 数据获取与存储

目录

本文涉及到的数据资料文件下载地址 百度网盘
本文的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')  # 1. 打开文件
csvReader = csv.reader(f)  # 2. 读取文件
for row in csvReader:
    print(row)
f.close()  # 3. 关闭文件
['商品名称', '价格', '颜色']
['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)  # 2. 读取文件
    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)  # 2. 读取文件
    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
012
0商品名称价格颜色
1Apple iPhone X (A1865) 64GB6299深空灰色
2Apple iPhone XS Max (A2104) 256GB10999深空灰色
3Apple iPhone XR (A2108) 128GB6199黑色
4Apple iPhone 8 (A1863) 64GB3999深空灰色
5Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
6Apple iPhone XS (A2100) 64GB8699深空灰色
7Apple 苹果 iPhone Xs Max 256GB9988金色
8Apple 苹果 iPhone Xs 64GB8058金色
9Apple 苹果 iPhone XR 128GB5788黑色
10Apple iPhone 7 (A1660) 128G4139玫瑰金色
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
商品名称价格颜色
0Apple iPhone X (A1865) 64GB6299深空灰色
1Apple iPhone XS Max (A2104) 256GB10999深空灰色
2Apple iPhone XR (A2108) 128GB6199黑色
3Apple iPhone 8 (A1863) 64GB3999深空灰色
4Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
5Apple iPhone XS (A2100) 64GB8699深空灰色
6Apple 苹果 iPhone Xs Max 256GB9988金色
7Apple 苹果 iPhone Xs 64GB8058金色
8Apple 苹果 iPhone XR 128GB5788黑色
9Apple iPhone 7 (A1660) 128G4139玫瑰金色
df1.describe()
商品名称价格颜色
count101010
unique10104
topApple iPhone X (A1865) 64GB6299深空灰色
freq115
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()
价格
count10.000000
mean6896.700000
std2437.144734
min3999.000000
25%5046.250000
50%6249.000000
75%8538.750000
max10999.000000
4.1.1.2 pandas读取csv
df2 = pd.read_csv("phones.csv",encoding='gbk')
df2
商品名称价格颜色
0Apple iPhone X (A1865) 64GB6299深空灰色
1Apple iPhone XS Max (A2104) 256GB10999深空灰色
2Apple iPhone XR (A2108) 128GB6199黑色
3Apple iPhone 8 (A1863) 64GB3999深空灰色
4Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
5Apple iPhone XS (A2100) 64GB8699深空灰色
6Apple 苹果 iPhone Xs Max 256GB9988金色
7Apple 苹果 iPhone Xs 64GB8058金色
8Apple 苹果 iPhone XR 128GB5788黑色
9Apple iPhone 7 (A1660) 128G4139玫瑰金色
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
商品名称价格
0Apple iPhone X (A1865) 64GB6299
1Apple iPhone XS Max (A2104) 256GB10999
2Apple iPhone XR (A2108) 128GB6199
3Apple iPhone 8 (A1863) 64GB3999
4Apple iPhone 8 Plus (A1864) 64GB4799
5Apple iPhone XS (A2100) 64GB8699
6Apple 苹果 iPhone Xs Max 256GB9988
7Apple 苹果 iPhone Xs 64GB8058
8Apple 苹果 iPhone XR 128GB5788
9Apple iPhone 7 (A1660) 128G4139
df22 = pd.read_csv("phones.csv",encoding='gbk',usecols=[0,2])
df22
商品名称颜色
0Apple iPhone X (A1865) 64GB深空灰色
1Apple iPhone XS Max (A2104) 256GB深空灰色
2Apple iPhone XR (A2108) 128GB黑色
3Apple iPhone 8 (A1863) 64GB深空灰色
4Apple iPhone 8 Plus (A1864) 64GB深空灰色
5Apple iPhone XS (A2100) 64GB深空灰色
6Apple 苹果 iPhone Xs Max 256GB金色
7Apple 苹果 iPhone Xs 64GB金色
8Apple 苹果 iPhone XR 128GB黑色
9Apple iPhone 7 (A1660) 128G玫瑰金色
df23 = pd.read_csv("phones.csv",encoding='gbk',nrows=5)
df23
商品名称价格颜色
0Apple iPhone X (A1865) 64GB6299深空灰色
1Apple iPhone XS Max (A2104) 256GB10999深空灰色
2Apple iPhone XR (A2108) 128GB6199黑色
3Apple iPhone 8 (A1863) 64GB3999深空灰色
4Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
4.1.1.3 csv文件的写入
df2
商品名称价格颜色
0Apple iPhone X (A1865) 64GB6299深空灰色
1Apple iPhone XS Max (A2104) 256GB10999深空灰色
2Apple iPhone XR (A2108) 128GB6199黑色
3Apple iPhone 8 (A1863) 64GB3999深空灰色
4Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
5Apple iPhone XS (A2100) 64GB8699深空灰色
6Apple 苹果 iPhone Xs Max 256GB9988金色
7Apple 苹果 iPhone Xs 64GB8058金色
8Apple 苹果 iPhone XR 128GB5788黑色
9Apple iPhone 7 (A1660) 128G4139玫瑰金色
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
名称价格颜色
0Apple iPhone X (A1865) 64GB6299深空灰色
1Apple iPhone XS Max (A2104) 256GB10999深空灰色
2Apple iPhone XR (A2108) 128GB6199黑色
3Apple iPhone 8 (A1863) 64GB3999深空灰色
4Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
5Apple iPhone XS (A2100) 64GB8699深空灰色
6Apple 苹果 iPhone Xs Max 256GB9988金色
7Apple 苹果 iPhone Xs 64GB8058金色
8Apple 苹果 iPhone XR 128GB5788黑色
9Apple iPhone 7 (A1660) 128G4139玫瑰金色
df3.shape
(10, 3)
df4 = pd.read_csv("phonesOut0.csv",encoding='gbk',index_col='名称',header=None,names = ['名称','价格','颜色'])
df4
价格颜色
名称
Apple iPhone X (A1865) 64GB6299深空灰色
Apple iPhone XS Max (A2104) 256GB10999深空灰色
Apple iPhone XR (A2108) 128GB6199黑色
Apple iPhone 8 (A1863) 64GB3999深空灰色
Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
Apple iPhone XS (A2100) 64GB8699深空灰色
Apple 苹果 iPhone Xs Max 256GB9988金色
Apple 苹果 iPhone Xs 64GB8058金色
Apple 苹果 iPhone XR 128GB5788黑色
Apple iPhone 7 (A1660) 128G4139玫瑰金色
df4.shape
(10, 2)
4.1.1.3.2 pandas写入csv
  • df.to_csv()
df2
商品名称价格颜色
0Apple iPhone X (A1865) 64GB6299深空灰色
1Apple iPhone XS Max (A2104) 256GB10999深空灰色
2Apple iPhone XR (A2108) 128GB6199黑色
3Apple iPhone 8 (A1863) 64GB3999深空灰色
4Apple iPhone 8 Plus (A1864) 64GB4799深空灰色
5Apple iPhone XS (A2100) 64GB8699深空灰色
6Apple 苹果 iPhone Xs Max 256GB9988金色
7Apple 苹果 iPhone Xs 64GB8058金色
8Apple 苹果 iPhone XR 128GB5788黑色
9Apple iPhone 7 (A1660) 128G4139玫瑰金色
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文件读取方法
  • f.read() 读取所有的文本内容
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
学号班级姓名性别英语体育军训数分高代解几
0230802424123080242成龙767877402360
1230802424423080242周怡669175474744
2230802425123080242张波858175454560
3230802424923080242朱浩655080726271
4230802421923080242封印738892614746
5230802420123080242迟培605089717671
6230802434723080243李华676184616578
7230802430723080243陈田767986694069
8230802432623080243余皓666785656171
9230802432023080243李嘉62作弊90606777
10230802434223080243李上初769084606660
11230802431023080243郭窦796784646479
12230802443523080244姜毅涛7771缺考617376
13230802443223080244赵宇747488687071
14230802444623080244周路768077617480
15230802442123080244林建祥727281639075
16230802443323080244李大强797677787070
17230802442823080244李侧通649691696077
18230802440223080244王慧737493707175
19230802442223080244李晓亮856085727283
20230802420123080242迟培605089717671
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
学号班级姓名性别英语体育军训数分高代解几
0230802424123080242成龙767877402360
1230802424423080242周怡669175474744
2230802425123080242张波858175454560
3230802424923080242朱浩655080726271
4230802421923080242封印738892614746
5230802420123080242迟培605089717671
6230802434723080243李华676184616578
7230802430723080243陈田767986694069
8230802432623080243余皓666785656171
9230802432023080243李嘉62作弊90606777
10230802434223080243李上初769084606660
11230802431023080243郭窦796784646479
12230802443523080244姜毅涛7771缺考617376
13230802443223080244赵宇747488687071
14230802444623080244周路768077617480
15230802442123080244林建祥727281639075
16230802443323080244李大强797677787070
17230802442823080244李侧通649691696077
18230802440223080244王慧737493707175
19230802442223080244李晓亮856085727283
20230802420123080242迟培605089717671

4.2 Excel文件的存取

4.2.1 以前学过的python操作excel文件

  • xlrd与xlwt进行excel文件读写
  • openpyxl进行excel文件读写
4.2.1.1 导入库
import xlrd
4.2.1.2 打开工作薄文件
#打开文件(excel就是workbook)
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: 获得总的列
#打开文件(excel就是workbook)
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

#打开文件(excel就是workbook)
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)
namename2gendernationbirthheight/cmweighteventnative place
0毕晓琳Bi Xiaolin中国1989-09-18 00:00:00NaNNaN足球辽宁
1鲍语晴Bao Yuqing中国NaNNaNNaN艺术体操浙江
2艾衍含Ai Yanhan中国2002-02-07 00:00:00NaNNaN游泳湖北
3卞卡BIAN Ka中国1993-01-05 00:00:00182.0113kg女子铅球江苏
4陈楠Chen Nan中国1983-12-08 00:00:00197.090kg篮球青岛胶南
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
count203.000000
mean177.911330
std12.033041
min140.000000
25%170.500000
50%177.000000
75%184.000000
max225.000000
phonsedata = pd.read_excel("phonesdata.xlsx",sheet_name=0,nrows=5)
phonsedata
订单号订单日期地区名字省份名字城市名字品牌型号运行内存机身内存数量用户名用户姓名年龄性别手机号
0201803010047582020-01-1420201中南地区广西壮族自治区梧州市荣耀荣耀9X6G64G4RVwhqiwMFc刘捷1611379407****
1201803010047592018-01-2020181华东地区浙江省舟山市三星Galaxy A50s6G128G7hICxjenVeM陈盼妙3721382084****
2201803010047602019-06-1520196西北地区甘肃省白银市小米红米K30 Pro8G256G8RSXOFBOwki张浩3611593116****
3201803010047612019-01-0720191中南地区河南省许昌市小米红米Note88G128G13OtUMUlCBuK辛倩2121308444****
4201803010047622019-05-2120195直辖市北京市北京市vivoNew 3S6G128G4eikoQvIyUR徐旭3121322687****
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
provinceconfirmdeadhealsuspect
0湖北651872615209480
1广东134778510
2河南12711910320
3浙江120518600
4湖南101647830
5安徽98967440
6江西93417190
7山东75663770
8江苏63104780
9重庆57663730
10四川53133070
11黑龙江480122490
12北京40042350
13上海33632720
14河北31262610
15福建29412130
16广西25221470
17陕西24511910
18云南17421440
19海南16851290
20贵州14621040
21天津1353960
22山西13301040
23辽宁1211880
24吉林931650
25甘肃912810
26香港892240
27新疆762340
28内蒙古750380
29宁夏710650
30台湾32150
31青海180180
32澳门10070
33西藏1010
data_history_covid19 = pd.read_excel("covid19_data.xls",sheet_name=1)
data_history_covid19
dateconfirmdeadhealsuspect
02020-01-202916054
12020-01-214409037
22020-01-225711728393
32020-01-2383025341072
42020-01-24128741381965
52020-01-25197556492684
62020-01-26274480515794
72020-01-274515106606973
82020-01-2859741321039239
92020-01-29771117012412167
102020-01-30969221317115238
112020-01-311179125924317988
122020-02-011438030432819544
132020-02-021720536147521558
142020-02-032043842563223214
152020-02-042432449089223260
162020-02-0528018563115324702
172020-02-0631116636154026359
182020-02-0734546722205027657
192020-02-0837198811264928942
202020-02-0940171908328123589
212020-02-10426381016399621675
222020-02-11446531113464016067
232020-02-12587611259564213435
242020-02-13638511380672310109
252020-02-1466492152380968969
262020-02-1568500166594198228
272020-02-16705481770108447264
282020-02-17724361868125526242
292020-02-18741852004143765248
302020-02-19750022118161574922
312020-02-20758912236182665206
322020-02-21762882345206595365
332020-02-22767412442228884148
342020-02-23771502592247343434
352020-02-24776582663273232824
362020-02-25780642715297452491
data_world_covid19 = pd.read_excel("covid19_data.xls",sheet_name="data_world")
data_world_covid19
countryconfirmdeadhealsuspect
0中国786302747325462358
1日本8947230
2泰国400220
3新加坡930620
4韩国159513240
5澳大利亚23000
6德国260150
7美国60000
8马来西亚22070
9越南160160
10法国182110
11阿联酋13030
12加拿大12040
13印度3000
14英国13080
15意大利4701230
16俄罗斯2000
17菲律宾3100
18芬兰2000
19尼泊尔1000
20西班牙13020
21斯里兰卡1000
22柬埔寨1000
23瑞典1000
24比利时1000
25伊朗1391949320
26以色列6010
27黎巴嫩1000
28伊拉克5000
29阿富汗1000
30科威特26000
31巴林26000
32阿曼4000
33克罗地亚1000
34奥地利2000
35瑞士1000
36阿尔及利亚1000
37巴西1000
38希腊1000
39巴基斯坦2000
40格鲁吉亚1000
41挪威1000
42罗马尼亚1000
  • 读取当前各省数据
#读取疫情数据、数据格式变换
df = pd.read_excel(r'covid19_data.xls',sheet_name='current_prov')  #读取当前疫情数据
df.head()
provinceconfirmdeadhealsuspect
0湖北651872615209480
1广东134778510
2河南12711910320
3浙江120518600
4湖南101647830
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()   #jupyter下运行

在这里插入图片描述

4.2.4 excel文件的写入

  • xlwt写入excel文件
  • df.to_excel()
excelData = pd.read_excel("Athletes_info.xlsx",sheet_name="Sheet1")
excelData.head()
namename2gendernationbirthheight/cmweighteventnative place
0毕晓琳Bi Xiaolin中国1989-09-18 00:00:00NaNNaN足球辽宁
1鲍语晴Bao Yuqing中国NaNNaNNaN艺术体操浙江
2艾衍含Ai Yanhan中国2002-02-07 00:00:00NaNNaN游泳湖北
3卞卡BIAN Ka中国1993-01-05 00:00:00182.0113kg女子铅球江苏
4陈楠Chen Nan中国1983-12-08 00:00:00197.090kg篮球青岛胶南
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>&gt;</li>\r\n        <li><a href=\'/tiobe-index/\'>TIOBE Index</a></li>\r\n        <li>&gt;</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&apos;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 &quot;Elisp&quot; has been incorrectly spelled &quot;Elips&quot; 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 &quot;Visual Basic&quot; and &quot;(Visual) Basic&quot; in the table above. Until 2010, &quot;(Visual) Basic&quot; referred to all possible dialects of Basic, including Visual Basic. After some discussion, it has been decided to split &quot;(Visual) Basic&quot; 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 &quot;Visual Basic&quot;.</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 &quot;Programming Language of the Year&quot; 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 &amp; 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&apos;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 &quot;&lt;language&gt; programming&quot;, also other queries such as &quot;programming with &lt;language&gt;&quot;, &quot;&lt;language&gt; development&quot; and &quot;&lt;language&gt; coding&quot; 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 &quot;www.tiobe.com&quot;.</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 +&quot;&lt;language&gt; programming&quot; 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&apos;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&#x27;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">&copy; 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 2022Mar 2021ChangeProgramming LanguageProgramming Language.1RatingsChange.1
013NaNNaNPython14.26%+3.95%
121NaNNaNC13.06%-2.27%
232NaNNaNJava11.19%+0.74%
344NaNNaNC++8.66%+2.14%
455NaNNaNC#5.92%+0.95%
566NaNNaNVisual Basic5.77%+0.91%
677NaNNaNJavaScript2.09%-0.03%
788NaNNaNPHP1.92%-0.15%
899NaNNaNAssembly language1.90%-0.07%
91010NaNNaNSQL1.85%-0.02%
101113NaNNaNR1.37%+0.12%
111214NaNNaNDelphi/Object Pascal1.12%-0.07%
121311NaNNaNGo0.98%-0.33%
131419NaNNaNSwift0.90%-0.05%
141518NaNNaNMATLAB0.80%-0.23%
151616NaNNaNRuby0.66%-0.52%
161712NaNNaNClassic Visual Basic0.60%-0.66%
171820NaNNaNObjective-C0.59%-0.31%
181917NaNNaNPerl0.57%-0.58%
192038NaNNaNLua0.56%+0.23%
html_tables[1].head()
PositionProgramming LanguageRatings
021Prolog0.55%
122COBOL0.54%
223Scratch0.53%
324SAS0.52%
425Groovy0.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]
012345678
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]
012345678
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]
012345678
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]
012345678
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]
012345678
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]
012345678
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')
# 如果出现警告可使用如下(需使用pip安装mysql-connector-python)
# engine = create_engine('mysql+mysqlconnector://root:123456@127.0.0.1:3306/ttsx')
# 通过数据表名读取数据库的数据
category_data = pd.read_sql('goodscategory', engine)
# 也可以通过SQL语句读取数据库的数据
# sql = "select * from goodscategory"
# category = pd.read_sql(sql,engine)
category_data
idcag_namecag_csscag_img
01时令水果fruitimages/banner01.jpg
12海鲜水产seafoodimages/banner02.jpg
23全品肉类meetimages/banner03.jpg
34美味蛋品eggimages/banner04.jpg
45新鲜蔬菜vegetablesimages/banner05.jpg
56低温奶制品iceimages/banner06.jpg

4.6 从word文件获取

4.6.1 python-docx的安装

pip install python-docx

4.6.2 python-docx数据获取的使用

from docx import Document
# 创建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
'集合的常见操作'
  • 读取word段落
#1. 导入库
from docx import Document

#2. 创建document对象
myDocx = Document("集合介绍.docx")

#3.获取document类的段落对象【得到段落列表】
paragraphs = myDocx.paragraphs

# 4. 遍历列表,获取段落的属性text
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个段落:
  • 读取word表格
#1. 导入库
from docx import Document

#2. 创建document对象
myDocx = Document("集合介绍.docx")

#3.获取document类的table对象【得到table列表】
tables = myDocx.tables

# 4. 遍历列表,获取段落的属性text
i = 0
for table in tables:
    for row in table.rows:  # 5.获取每行的内容
        row_content = []    # 用于保存表格数据的列表
        for cell in row.cells[:]: # 6. 获得每行中所有单元格对象
            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     #1. 导入库
import pandas as pd 


doc = Document("gs1.docx")     #2.获取document对象
tables = doc.tables            #3.获取所有表格对象
table_content = [] # 用于存储表格数据的list
for table in tables:          #4.遍历每一个表格对象
    for row in table.rows:    # 5.获取每行的内容
        row_content = []      # 用于保存每行表格数据的列表
        for cell in row.cells[:]: # 6. 获得每行中所有单元格对象
            row_content.append(cell.text) # 保存每个单元格数据
        table_content.append(row_content) # 将每行添加到表内容列表

df = pd.DataFrame(table_content[1:],columns= table_content[0]) # 利用获取的二维表格构建dataframe
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 # 二维list
df = pd.DataFrame(table_content[1:],columns= table_content[0])
df.head()
序号学生姓名学校名称专业名称获奖项目名称获奖等次备注
01谭欣重庆三峡医药高等专科学校中药学2021年全国职业院校技能大赛高职组中药传统技能赛项国赛一等奖
12张茂晴重庆三峡医药高等专科学校护理中华人民共和国第一届职业技能大赛健康和社会照护项目国赛二等奖
23邓栏栏重庆三峡医药高等专科学校护理2021年“巴渝工匠”杯重庆市第十四届高等职业院校学生职业技能竞赛“护理技能”赛项市赛一等奖
34秦秀娟重庆三峡医药高等专科学校中药学2021年“巴渝工匠”杯重庆市第十四届高等职业院校学生职业技能竞赛“中药传统技能”赛项市赛一等奖
45石佳重庆三峡医药高等专科学校中药学2021年“巴渝工匠”杯重庆市第十四届高等职业院校学生职业技能竞赛“中药传统技能”赛项市赛一等奖
df = df.drop_duplicates()
df.shape
(313, 7)
df = df.drop_duplicates(subset=['学校名称','学生姓名'],keep='first')
df.shape
(309, 7)
df.groupby('学校名称').count()
序号学生姓名专业名称获奖项目名称获奖等次备注
学校名称
重庆三峡医药高等专科学校777777
重庆三峡职业学院202020202020
重庆交通职业学院121212121212
重庆化工职业学院333333
重庆医药高等专科学校555555
重庆商务职业学院282828282828
重庆城市管理职业学院232323232323
重庆城市职业学院252525252525
重庆安全技术职业学院111111
重庆工业职业技术学院131313131313
重庆工商职业学院151515151515
重庆工程职业技术学院282828282828
重庆工贸职业技术学院131313131313
重庆幼儿师范高等专科学校333333
重庆应用技术职业学院111111
重庆建筑工程职业学院111111
重庆建筑科技职业学院666666
重庆文化艺术职业学院333333
重庆旅游职业学院111111111111
重庆水利电力职业技术学院181818181818
重庆电子工程职业学院313131313131
重庆科创职业学院666666
重庆能源职业学院111111
重庆航天职业技术学院777777
重庆艺术工程职业学院111111
重庆财经职业学院282828282828
重庆青年职业技术学院333333
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》
# 获得pdf对象
pdfObj = pdfplumber.open("集合介绍.pdf")
type(pdfObj)
pdfplumber.pdf.PDF
# 获得pdf对象的page对象列表
pdfObj.pages
[<Page:1>]
# 查看pdf对象的metadata属性
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
# 获取pdf对象的创建时间
pdfObj.metadata['CreationDate']
"D:20200727154403+08'00'"
type(pdfObj.metadata['CreationDate'])
str
# 抽取pdf对象的某page对象的text属性
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 
# 抽取pdf对象的某page对象的word属性(对中文不好用,没意义)
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}]
# 抽取pdf对象的某page对象中的所有表格
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]]]
# 关闭pdf对象
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]
  • 过滤掉None,删除‘\n’
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}行")
                # 过滤掉里面的None
                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']
  • 抽取表格数据,并构建为DataFrame
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:
                # 过滤掉里面的None
                cleanData = list(filter(None, row))
                tableData.append(cleanData)

pdfTableDf = pd.DataFrame(tableData[1:],columns=tableData[0])
pdfTableDf
常见方法说明
0add(x)向集合中添加元素x,x 已存在时不作处理
1remove(x)删除集合中的元素x,若x 不存在则抛出KeyError异常
2discard(x)删除集合中的元素x,若x 不存在不作处理
3pop()随机返回集合中的一个元素,同时删除该元素。若集合为空,\n抛出KeyError异常
4clear()清空集合
5copy()拷贝集合,返回值为集合
6isdisjoint(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")  #1. 获取pdf对象
table1List = [] # 用于存放获取的数据二维列表
for i in range(1,5):                      # 循环遍历附件1表格的各页(第2到5页)
    page = pdfObj2.pages[i]               #2. 取得每page对象
    table = page.extract_table()        #3. 获得每page对象的所有表格
    for row in table:
        cleanData = list(filter(None, row))
        #print(cleanData)
        cleanDataList = [re.sub("\n",'',value) for value in cleanData[:]]
        table1List.append(cleanDataList)
            
table1Df1 = pd.DataFrame(table1List[1:],columns=table1List[0])
table1Df1.head()
申报年度学院项目类别项目名称成果级别等级计分奖金人员名单
0补登记创新教育学院质量工程本/专科英语国家概况(1)(精品课程)省部级默认300曾仲贤、公共账户2、公共账户3、公共账户4、陈显通
1补登记城市建设工程学院教改项目乡村振兴背景下田园综合体可持续发展研究(脱贫攻坚成果)省部级默认200郭永彦、陈娟娟、江涛、张基斌
2补登记会计与金融学院国家级规划教材财务会计国家级默认1000罗小明、戴锋、张小红
3补登记电子信息工程学院国家级规划教材C++语言程序设计项目制案例教程国家级默认1000陈郑军、蔡茜、龚卫、白小燕、周继萍、胡方霞
42021年党委组织部质量工程党建与思想政治教育省部级默认303000王剑华、刘芹、刘玮、黄建、卿竹、周同磊、张基斌
import re
import pandas as pd
import pdfplumber

pdfObj2 = pdfplumber.open("2021jxcg.pdf")  #1. 获取pdf对象
table1List = [] # 用于存放获取的数据二维列表
for i in range(1,5):                      # 循环遍历附件1表格的各页(第2到5页)
    page = pdfObj2.pages[i]               #2. 取得每page对象
    tables = page.extract_tables()        #3. 获得每page对象的所有表格
    for table in tables:                  #4. 
        for row in table:
            cleanData = list(filter(None, row))
            #print(cleanData)
            cleanDataList = [re.sub("\n",'',value) for value in cleanData[:]]
            table1List.append(cleanDataList)
            
table1Df2 = pd.DataFrame(table1List[1:],columns=table1List[0])
table1Df2.head()
申报年度学院项目类别项目名称成果级别等级计分奖金人员名单
0补登记创新教育学院质量工程本/专科英语国家概况(1)(精品课程)省部级默认300曾仲贤、公共账户2、公共账户3、公共账户4、陈显通
1补登记城市建设工程学院教改项目乡村振兴背景下田园综合体可持续发展研究(脱贫攻坚成果)省部级默认200郭永彦、陈娟娟、江涛、张基斌
2补登记会计与金融学院国家级规划教材财务会计国家级默认1000罗小明、戴锋、张小红
3补登记电子信息工程学院国家级规划教材C++语言程序设计项目制案例教程国家级默认1000陈郑军、蔡茜、龚卫、白小燕、周继萍、胡方霞
42021年党委组织部质量工程党建与思想政治教育省部级默认303000王剑华、刘芹、刘玮、黄建、卿竹、周同磊、张基斌
  • 读取《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))
            #print(cleanData)
            cleanDataList = [re.sub("\n",'',value) for value in cleanData[:]]
            table2List.append(cleanDataList)
            
table2Df = pd.DataFrame(table2List[1:],columns=table2List[0])
table2Df.head()
申报年度类别级别竞赛名称认定等次计分教师奖金学生奖金参与人明细学生明细
0补登记教师比赛全国一类全国职业院校技能大赛教学能力比赛一等奖12000蔡茜、胡方霞、陈郑军、周士凯、唐春玲None
1补登记教师比赛全国三类全国教育教学信息化大奖赛三等奖400张弦、许汝才、王传None
2补登记教师比赛全国三类国家开放大学学前教育专业学生幼儿集体活动优秀案例评选三等奖400崔璨None
3补登记教师比赛全国三类全国教育教学信息化大奖赛一等奖1200彭翔宇、汪洋、段玭None
4补登记教师比赛全国三类全国教育教学信息化大奖赛三等奖400王嵋、赵娜、尹静None
table2Df.shape
(578, 10)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值