粗饼·中国魔方赛事网中国三阶魔方速盲前100爬虫分析


粗饼·中国魔方赛事网中国三阶魔方速盲前100爬虫分析

一、选题背景

魔方,又叫鲁比克方块,最早是由匈牙利布达佩斯建筑学院厄尔诺·鲁比克教授于1974年发明的机械益智玩具。WCA(World Cube Association,世界魔方协会)每年都会在世界各地举办各类大小魔方赛事。1991年十一月中国国内首次魔方比赛在广州进行,2004年元月中国选手首次参加世界魔方协会比赛,2009年5月中国选手首次在官方比赛中打破世界纪录,2014年6月粗饼•中国魔方赛事网(Cubing China)正式上线,为国内魔方事业的发展起到了关键的作用,如今在三阶魔方上中国人也取得了优秀的成绩。本次课程将会对粗饼网的三阶魔方速拧与盲拧的前100名的相关数据进行爬虫分析。

 

二、主题式网络爬虫设计方案

1.主题式网络爬虫名称

     粗饼·中国魔方赛事网中国三阶魔方单次速盲前100爬虫分析

2.主题式网络爬虫爬取的内容与数据特征分析

     爬取粗饼网中国三阶魔方单次速拧与盲拧前100名的排名,姓名,地区,成绩,比赛,日期,年份数据,对其进行分析。

     数据来源:https://cubing.com/(数据截止至2021年12月27日)

3.主题式网络爬虫设计方案概述

 (1)实现思路

     通过对粗饼网的页面进行分析,利用Requests爬虫库和BeautifulSoup库爬取到我们所需要的粗饼网中国三阶魔方单次速拧与盲拧前100名的排名,姓名,地区,成绩,比赛,日期,年份数据,然后再保存为.csv文件,最后进行可视化分析。

 (2)技术难点

     爬取数据中的一些困难,在利用Matplotlib与PyEcharts进行数据可视化分析时遇到了难点。

三、主题页面的结构特征分析

1.主题页面的结构与特征分析

需要爬取的相关页面截图

 三阶单次成绩前100(截图仅展示部分)

 三阶单次盲拧成绩前100(截图仅展示部分)

 

 

 

 我们需要爬取的数据如图所示。

2.Htmls 页面解析

 

 通过对页面审查元素观察分析,可以得知我们所需要爬取的数据在body标签下的div标签中(三阶盲拧单次的数据也是一样的)

3.节点(标签)查找方法与遍历方法

通过for循环进行节点(标签)的查找与遍历。

四、网络爬虫程序设计

1.数据爬取与采集 

 

 1 #导入我们所需要的库#
 2 import requests
 3 from bs4 import BeautifulSoup
 4 import csv
 5 main_url = 'https://cubingchina.com'
 6 def get_html(url):
 7 #根据url返回相应的html对象#
 8 #写入请求标头#
 9     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
10     response = requests.get(url, headers=headers)
11     response.encoding='utf-8-sig'
12     html = response.text
13     return html
14 def get_soup(html):
15 #根据HTML返回beautifulsoup对象#
16     soup = BeautifulSoup(html, 'lxml')
17     return soup
18 def get_rank_list(soup):
19 #使用beautifulsoup解析网页,取得选手信息,并返回选手信息列表#
20     rank_text_list = soup.find('table', {'class': 'table table-bordered table-condensed table-hover table-boxed'})
21     rank_text_list = rank_text_list.find_all('tr')[1:]
22     rank_list = []
23     for rank_text in rank_text_list:
24         rank_text = rank_text.find_all('td')
25         rank = rank_text[1].extract().text
26         name = rank_text[2].extract().text
27         region = rank_text[3].extract().text
28         result = rank_text[4].extract().text
29         competitive = rank_text[5].extract().text
30         date = rank_text[6].extract().text
31         item = (rank, name, region, result, competitive, date)
32         rank_list.append(item)
33     return rank_list
34 def writer_file(rank_list, flag=''):
35 #将三阶速拧的数据写入csv文件#
36     header = ('排名', '姓名','地区', '成绩', '比赛', '日期')
37     with open('333_single_china.csv', 'a',encoding='utf-8-sig',newline='') as file:
38         writer = csv.writer(file)
39         if flag == 'first':
40             writer.writerow(header)
41         for rank in rank_list:
42             writer.writerow(rank)
43 def main():
44     start_url = 'https://cubing.com/results/rankings'
45     html = get_html(start_url)
46     soup = get_soup(html)
47     # 将三阶单次排名写入文件#
48     rank_list = get_rank_list(soup)
49     writer_file(rank_list, 'first')
50     print('三阶单次速拧排名数据爬取成功,已保存!')
51 if __name__=="__main__":
52     main()
53 def writer_file(rank_list, flag=''):
54 #将三阶盲拧的数据写入csv文件#
55     header = ('排名', '姓名','地区', '成绩', '比赛', '日期')
56     with open('333bf_single_china.csv', 'a',encoding='utf-8-sig',newline='') as file:
57         writer = csv.writer(file)
58         if flag == 'first':
59             writer.writerow(header)
60         for rank in rank_list:
61             writer.writerow(rank)
62 def main():
63     start_url = 'https://cubing.com/results/rankings?region=China&event=333bf&gender=all&type=single'
64     html = get_html(start_url)
65     soup = get_soup(html)
66     # 三阶盲拧排名写入文件#
67     rank_list = get_rank_list(soup)
68     writer_file(rank_list, 'first')
69     print('三阶盲拧单次排名数据爬取成功,已保存!')
70 if __name__=="__main__":
71     main()    

 

运行结果:

 

 

 保存的csv文件如下

2.对数据进行清洗和处理
1 #导入三阶魔方速拧单次中国前100排名数据#
2 import pandas as pd
3 df=pd.DataFrame(pd.read_csv('C:\\Users\\Lenovo\\Desktop\\中国三阶魔方数据\\333_single_china.csv'))
4 df

运行结果:

1 #导入三阶魔方盲拧单次中国前100排名数据#
2 import pandas as pd
3 df2=pd.DataFrame(pd.read_csv('C:\\Users\\Lenovo\\Desktop\\中国三阶魔方数据\\333bf_single_china.csv'))
4 df2

运行结果:

 

 

1 #删除三阶速拧单次排名数据中我们不需要的行和列#
2 df.drop('比赛',axis=1,inplace=True)
3 df
4 df.drop('地区',axis=1,inplace=True)
5 df

运行结果:

1 #删除三阶单次盲拧排名中我们不需要的行和列#
2 df2.drop('比赛',axis=1,inplace=True)
3 df2
4 df2.drop('地区',axis=1,inplace=True)
5 df2

运行结果:

1 # 查看数据是否存在有空值,有空值返回True,没有空值返回False#
2 df.isnull().value_counts()

运行结果:

1 df2.isnull().value_counts()

运行结果:

1 # 查看爬取的数据是否有重复行,有重复行返回True,没有重复行返回False#
2 df.duplicated()

运行结果:

1 df2.duplicated()

运行结果:

 

 

 3.数据分析与可视化

 1 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方速拧前100排名柱状图#
 2 #导入库#
 3 import pandas as pd
 4 import matplotlib
 5 import matplotlib.pyplot as plt
 6 plt.figure(figsize=(15, 7),dpi=600)
 7 # 解决中文和负号显示问题#
 8 plt.rcParams['font.sans-serif']=['SimHei']
 9 plt.rcParams['axes.unicode_minus'] = False
10 #读取中国三阶魔方单次速拧前100数据csv文件#
11 df = pd.read_csv("C:\\Users\\Lenovo\\Desktop\\中国三阶魔方数据\\333_single_china.csv")
12 #设置x轴与y轴显示内容#
13 plt.bar(df['姓名'], df['成绩'])
14 #设置标题#
15 plt.title(r'截止至2021年12月27日中国三阶魔方速拧前100排名(单位:s)')
16 #设置x轴标签#
17 plt.xlabel('选手姓名')
18 #设置y轴标签#
19 plt.ylabel(r'选手成绩')
20 #将x轴标签字体调整为7#
21 plt.tick_params(labelsize=7)
22 #将x轴标签字体顺时针旋转90度#
23 plt.xticks(rotation=90)
24 #数据持久化#
25 plt.savefig('截止至2021年12月27日中国三阶魔方速拧前100排名.jpg')
26 #显示可视化结果#
27 plt.show()

 

运行结果:

 1 #利用pyecharts绘制截止至2021年12月27日中国三阶魔方盲拧前100排名柱状图#
 2 #导入库#
 3 import time
 4 import json
 5 import pandas as pd
 6 import numpy as np
 7 from pyecharts import options as opts
 8 data=df2
 9 bar = (
10     Bar()
11     .add_xaxis(df2["姓名"].tolist())
12     .add_yaxis("成绩", df2["成绩"].tolist())
13     .set_global_opts(
14         #图形标题的设置#
15         title_opts=opts.TitleOpts(
16             title="截止至2021年12月27日中国三阶魔方盲拧前100排名",
17             subtitle="(图中仅展示部分)",
18             pos_left="center",
19             pos_top="7%"),
20          #'shadow':阴影指示器#
21         tooltip_opts=opts.TooltipOpts(
22             is_show=True, 
23             trigger="axis", 
24             axis_pointer_type="shadow"
25             ),
26         #x轴坐标配置项,x轴标签,顺时针旋转90度#
27         xaxis_opts=opts.AxisOpts(name="姓名",axislabel_opts={"interval":"0","rotate":90}),
28         #y轴配置项#
29         yaxis_opts=opts.AxisOpts(
30             name="成绩",min_=0,
31             type_="value",axislabel_opts=opts.LabelOpts(formatter="{value} 秒"),),
32         #区域缩放配置项#
33         datazoom_opts=opts.DataZoomOpts(range_start=0,range_end=10),
34     )
35 )
36 bar.render_notebook()

 

运行结果:

 1 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图#
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 plt.figure(figsize=(15, 6.5),dpi=600)
 5 plt.title('截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图',size=25,color="black")
 6 #画出散点图#
 7 plt.scatter(df['日期'], df['创造年份'])
 8 plt.xticks(rotation=90)
 9 #数据持久化#
10 plt.savefig('截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图.jpg')
11 #将散点图显示出来
12 plt.show()

运行结果:

 1 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图#
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 plt.figure(figsize=(15, 6.5),dpi=600)
 5 plt.title('截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图',size=25,color="black")
 6 #画出散点图#
 7 plt.scatter(df2['日期'], df2['创造年份'])
 8 plt.xticks(rotation=90)
 9 #数据持久化#
10 plt.savefig('截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图.jpg')
11 #将散点图显示出来
12 plt.show()

运行结果:

 1 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方速拧前100成绩创造时间分布图#
 2 #导入库#
 3 import pandas as pd
 4 import matplotlib
 5 import matplotlib.pyplot as plt
 6 #设置图形大小#
 7 plt.figure(figsize=(15,7),dpi=80)
 8 #设置各部分显示比例#
 9 finance=[len(df[df["创造年份"]==2015]["创造年份"]),
10          len(df[df["创造年份"]==2017]["创造年份"]),
11          len(df[df["创造年份"]==2018]["创造年份"]),
12          len(df[df["创造年份"]==2019]["创造年份"]),
13          len(df[df["创造年份"]==2020]["创造年份"]),
14          len(df[df["创造年份"]==2021]["创造年份"])]
15 
16 #设置中文显示,解决乱码问题#
17 font = {'family' : 'MicroSoft YaHei',
18         'weight': 'bold',
19         'size': '12'}
20 matplotlib.rc("font",**font)
21 matplotlib.rc("font",
22               family='MicroSoft YaHei',
23               weight="bold")
24 labels = ["2015",
25           "2017",
26           "2018",
27           "2019",
28           "2020",
29           "2021"]
30 explode = [0.1, 0.1, 0.1, 0.1,0.1,0.1]
31 colors = ['mistyrose', 'salmon', 'tomato', 'darksalmon','mistyrose','orangered']
32 #设置饼图相关参数#
33 plt.pie(finance, explode=explode, labels=labels,
34         colors=colors,autopct='%.2f%%',
35         pctdistance=0.8, labeldistance=1.1,
36         startangle=180,  radius=1.2,
37         counterclock=False,
38         wedgeprops={'linewidth':1.5, 'edgecolor':'white'},
39         textprops={'fontsize':10, 'color':'black'} )
40 #设置标题#
41 plt.title('中国三阶魔方速拧前100成绩创造年份分布饼图')
42 #数据持久化#
43 plt.savefig('中国三阶魔方速拧前100成绩创造年份分布饼图.jpg')
44 #显示可视化图像#
45 plt.show()

 

运行结果:

 

 

 

 

 

 

 1 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方盲拧前100成绩创造时间分布图#
 2 #导入库#
 3 import pandas as pd
 4 import matplotlib
 5 import matplotlib.pyplot as plt
 6 #设置图形大小#
 7 plt.figure(figsize=(15,7),dpi=80)
 8 #设置各部分显示比例#
 9 finance=[len(df2[df2["创造年份"]==2009]["创造年份"]),
10          len(df2[df2["创造年份"]==2010]["创造年份"]),
11          len(df2[df2["创造年份"]==2012]["创造年份"]),
12          len(df2[df2["创造年份"]==2013]["创造年份"]),
13          len(df2[df2["创造年份"]==2014]["创造年份"]),
14          len(df2[df2["创造年份"]==2015]["创造年份"]),
15          len(df2[df2["创造年份"]==2016]["创造年份"]),
16          len(df2[df2["创造年份"]==2017]["创造年份"]),
17          len(df2[df2["创造年份"]==2018]["创造年份"]),
18          len(df2[df2["创造年份"]==2019]["创造年份"]),
19          len(df2[df2["创造年份"]==2021]["创造年份"])]
20 
21 #设置中文显示,解决乱码问题#
22 font = {'family' : 'MicroSoft YaHei',
23         'weight': 'bold',
24         'size': '12'}
25 matplotlib.rc("font",**font)
26 matplotlib.rc("font",
27               family='MicroSoft YaHei',
28               weight="bold")
29 #设置饼图显示#
30 labels = ["2009",
31           "2010",
32           "2012",
33           "2013",
34           "2014",
35           "2015",
36           "2016",
37           "2017",
38           "2018",
39           "2019",
40           "2021"]
41 explode = [0.1, 0.1, 0.1, 0.1,0.1,0.1,0.1, 0.1, 0.1, 0.1,0.1]
42 colors = ['plum', 'violet', 'purple', 'darkmagenta','m','thistle','magenta','orchid','mediumvioletred','deeppink','hotpink']
43 #设置饼图相关参数#
44 plt.pie(finance, explode=explode, labels=labels,
45         colors=colors,autopct='%.2f%%',
46         pctdistance=0.8, labeldistance=1.1,
47         startangle=180,  radius=1.2,
48         counterclock=False,
49         wedgeprops={'linewidth':1.5, 'edgecolor':'white'},
50         textprops={'fontsize':10, 'color':'black'} )
51 #设置标题#
52 plt.title('中国三阶魔方盲拧前100成绩创造年份分布饼图')
53 #数据持久化#
54 plt.savefig('中国三阶盲拧速拧前100成绩创造年份分布饼图.jpg')
55 #显示可视化图像#
56 plt.show()

 

运行结果:

 

 

 4.数据持久化

1 #数据持久化#
2 plt.savefig('截止至2021年12月27日中国三阶魔方速拧前100排名.jpg')
3 plt.savefig('截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图.jpg')
4 plt.savefig('截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图.jpg')
5 plt.savefig('中国三阶魔方速拧前100成绩创造年份分布饼图.jpg')
6 plt.savefig('中国三阶盲拧速拧前100成绩创造年份分布饼图.jpg')

运行结果:

 

 5.附上完整代码

  1 #导入我们所需要的库#
  2 import requests
  3 from bs4 import BeautifulSoup
  4 import csv
  5 main_url = 'https://cubingchina.com'
  6 def get_html(url):
  7 #根据url返回相应的html对象#
  8 #写入请求标头#
  9     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
 10     response = requests.get(url, headers=headers)
 11     response.encoding='utf-8-sig'
 12     html = response.text
 13     return html
 14 def get_soup(html):
 15 #根据HTML返回beautifulsoup对象#
 16     soup = BeautifulSoup(html, 'lxml')
 17     return soup
 18 def get_rank_list(soup):
 19 #使用beautifulsoup解析网页,取得选手信息,并返回选手信息列表#
 20     rank_text_list = soup.find('table', {'class': 'table table-bordered table-condensed table-hover table-boxed'})
 21     rank_text_list = rank_text_list.find_all('tr')[1:]
 22     rank_list = []
 23     for rank_text in rank_text_list:
 24         rank_text = rank_text.find_all('td')
 25         rank = rank_text[1].extract().text
 26         name = rank_text[2].extract().text
 27         region = rank_text[3].extract().text
 28         result = rank_text[4].extract().text
 29         competitive = rank_text[5].extract().text
 30         date = rank_text[6].extract().text
 31         item = (rank, name, region, result, competitive, date)
 32         rank_list.append(item)
 33     return rank_list
 34 def writer_file(rank_list, flag=''):
 35 #将三阶速拧的数据写入csv文件#
 36     header = ('排名', '姓名','地区', '成绩', '比赛', '日期')
 37     with open('333_single_china.csv', 'a',encoding='utf-8-sig',newline='') as file:
 38         writer = csv.writer(file)
 39         if flag == 'first':
 40             writer.writerow(header)
 41         for rank in rank_list:
 42             writer.writerow(rank)
 43 def main():
 44     start_url = 'https://cubing.com/results/rankings'
 45     html = get_html(start_url)
 46     soup = get_soup(html)
 47     # 将三阶单次排名写入文件#
 48     rank_list = get_rank_list(soup)
 49     writer_file(rank_list, 'first')
 50     print('三阶单次速拧排名数据爬取成功,已保存!')
 51 if __name__=="__main__":
 52     main()
 53 def writer_file(rank_list, flag=''):
 54 #将三阶盲拧的数据写入csv文件#
 55     header = ('排名', '姓名','地区', '成绩', '比赛', '日期')
 56     with open('333bf_single_china.csv', 'a',encoding='utf-8-sig',newline='') as file:
 57         writer = csv.writer(file)
 58         if flag == 'first':
 59             writer.writerow(header)
 60         for rank in rank_list:
 61             writer.writerow(rank)
 62 def main():
 63     start_url = 'https://cubing.com/results/rankings?region=China&event=333bf&gender=all&type=single'
 64     html = get_html(start_url)
 65     soup = get_soup(html)
 66     # 三阶盲拧排名写入文件#
 67     rank_list = get_rank_list(soup)
 68     writer_file(rank_list, 'first')
 69     print('三阶盲拧单次排名数据爬取成功,已保存!')
 70 if __name__=="__main__":
 71     main()
 72     
 73 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方速拧前100排名柱状图#
 74 #导入库#
 75 import pandas as pd
 76 import matplotlib
 77 import matplotlib.pyplot as plt
 78 plt.figure(figsize=(15, 7),dpi=600)
 79 
 80 # 解决中文和负号显示问题#
 81 plt.rcParams['font.sans-serif']=['SimHei']
 82 plt.rcParams['axes.unicode_minus'] = False
 83 
 84 #读取中国三阶魔方单次速拧前100数据csv文件#
 85 df = pd.read_csv("C:\\Users\\Lenovo\\Desktop\\中国三阶魔方数据\\333_single_china.csv")
 86 
 87 #设置x轴与y轴显示内容#
 88 plt.bar(df['姓名'], df['成绩'])
 89 
 90 #设置标题#
 91 plt.title(r'截止至2021年12月27日中国三阶魔方速拧前100排名(单位:s)')
 92 
 93 #设置x轴标签#
 94 plt.xlabel('选手姓名')
 95 
 96 #设置y轴标签#
 97 plt.ylabel(r'选手成绩')
 98 
 99 #将x轴标签字体调整为7#
100 plt.tick_params(labelsize=7)
101 
102 #将x轴标签字体顺时针旋转90度#
103 plt.xticks(rotation=90)
104 
105 #数据持久化#
106 plt.savefig('截止至2021年12月27日中国三阶魔方速拧前100排名.jpg')
107 
108 #显示可视化结果#
109 plt.show()
110 
111 #利用pyecharts绘制截止至2021年12月27日中国三阶魔方盲拧前100排名柱状图#
112 #导入库#
113 import time
114 import json
115 import pandas as pd
116 import numpy as np
117 from pyecharts import options as opts
118 
119 bar = (
120     Bar()
121     .add_xaxis(df2["姓名"].tolist())
122     .add_yaxis("成绩", df2["成绩"].tolist())
123     .set_global_opts(
124         #图形标题的设置#
125         title_opts=opts.TitleOpts(
126             title="截止至2021年12月27日中国三阶魔方盲拧前100排名",
127             subtitle="(图中仅展示部分)",
128             pos_left="center",
129             pos_top="7%"),
130          #'shadow':阴影指示器#
131         tooltip_opts=opts.TooltipOpts(
132             is_show=True, 
133             trigger="axis", 
134             axis_pointer_type="shadow"
135             ),
136         #x轴坐标配置项,x轴标签,顺时针旋转90度#
137         xaxis_opts=opts.AxisOpts(name="姓名",axislabel_opts={"interval":"0","rotate":90}),
138         #y轴配置项#
139         yaxis_opts=opts.AxisOpts(
140             name="成绩",min_=0,
141             type_="value",axislabel_opts=opts.LabelOpts(formatter="{value} 秒"),),
142         #区域缩放配置项#
143         datazoom_opts=opts.DataZoomOpts(range_start=0,range_end=10),
144     )
145 )
146 bar.render_notebook()
147 
148 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图#
149 import pandas as pd
150 import matplotlib.pyplot as plt
151 plt.figure(figsize=(15, 6.5),dpi=600)
152 plt.title('截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图',size=25,color="black")
153 
154 #画出散点图#
155 plt.scatter(df['日期'], df['创造年份'])
156 plt.xticks(rotation=90)
157 
158 #数据持久化#
159 plt.savefig('截止至2021年12月27日中国三阶魔方速拧前100创造时间散点图.jpg')
160 
161 #将散点图显示出来
162 plt.show()
163 
164 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图#
165 import pandas as pd
166 import matplotlib.pyplot as plt
167 plt.figure(figsize=(15, 6.5),dpi=600)
168 plt.title('截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图',size=25,color="black")
169 
170 #画出散点图#
171 plt.scatter(df2['日期'], df2['创造年份'])
172 plt.xticks(rotation=90)
173 
174 #数据持久化#
175 plt.savefig('截止至2021年12月27日中国三阶魔方盲拧前100创造时间散点图.jpg')
176 
177 #将散点图显示出来
178 plt.show()
179 
180 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方速拧前100成绩创造时间分布图#
181 #导入库#
182 import pandas as pd
183 import matplotlib
184 import matplotlib.pyplot as plt
185 
186 #设置图形大小#
187 plt.figure(figsize=(15,7),dpi=80)
188 
189 #设置各部分显示比例#
190 finance=[len(df[df["创造年份"]==2015]["创造年份"]),
191          len(df[df["创造年份"]==2017]["创造年份"]),
192          len(df[df["创造年份"]==2018]["创造年份"]),
193          len(df[df["创造年份"]==2019]["创造年份"]),
194          len(df[df["创造年份"]==2020]["创造年份"]),
195          len(df[df["创造年份"]==2021]["创造年份"])]
196 
197 #设置中文显示,解决乱码问题#
198 font = {'family' : 'MicroSoft YaHei',
199         'weight': 'bold',
200         'size': '12'}
201 matplotlib.rc("font",**font)
202 matplotlib.rc("font",
203               family='MicroSoft YaHei',
204               weight="bold")
205 labels = ["2015",
206           "2017",
207           "2018",
208           "2019",
209           "2020",
210           "2021"]
211 explode = [0.1, 0.1, 0.1, 0.1,0.1,0.1]
212 colors = ['mistyrose', 'salmon', 'tomato', 'darksalmon','mistyrose','orangered']
213 
214 #设置饼图相关参数#
215 plt.pie(finance, explode=explode, labels=labels,
216         colors=colors,autopct='%.2f%%',
217         pctdistance=0.8, labeldistance=1.1,
218         startangle=180,  radius=1.2,
219         counterclock=False,
220         wedgeprops={'linewidth':1.5, 'edgecolor':'white'},
221         textprops={'fontsize':10, 'color':'black'} )
222 
223 #设置标题#
224 plt.title('中国三阶魔方速拧前100成绩创造年份分布饼图')
225 
226 #数据持久化#
227 plt.savefig('中国三阶魔方速拧前100成绩创造年份分布饼图.jpg')
228 
229 #显示可视化图像#
230 plt.show()
231 
232 #利用Matplotlib绘制截止至2021年12月27日中国三阶魔方盲拧前100成绩创造时间分布图#
233 #导入库#
234 import pandas as pd
235 import matplotlib
236 import matplotlib.pyplot as plt
237 
238 #设置图形大小#
239 plt.figure(figsize=(15,7),dpi=80)
240 
241 #设置各部分显示比例#
242 finance=[len(df2[df2["创造年份"]==2009]["创造年份"]),
243          len(df2[df2["创造年份"]==2010]["创造年份"]),
244          len(df2[df2["创造年份"]==2012]["创造年份"]),
245          len(df2[df2["创造年份"]==2013]["创造年份"]),
246          len(df2[df2["创造年份"]==2014]["创造年份"]),
247          len(df2[df2["创造年份"]==2015]["创造年份"]),
248          len(df2[df2["创造年份"]==2016]["创造年份"]),
249          len(df2[df2["创造年份"]==2017]["创造年份"]),
250          len(df2[df2["创造年份"]==2018]["创造年份"]),
251          len(df2[df2["创造年份"]==2019]["创造年份"]),
252          len(df2[df2["创造年份"]==2021]["创造年份"])]
253 
254 #设置中文显示,解决乱码问题#
255 font = {'family' : 'MicroSoft YaHei',
256         'weight': 'bold',
257         'size': '12'}
258 matplotlib.rc("font",**font)
259 matplotlib.rc("font",
260               family='MicroSoft YaHei',
261               weight="bold")
262 
263 #设置饼图显示#
264 labels = ["2009",
265           "2010",
266           "2012",
267           "2013",
268           "2014",
269           "2015",
270           "2016",
271           "2017",
272           "2018",
273           "2019",
274           "2021"]
275 explode = [0.1, 0.1, 0.1, 0.1,0.1,0.1,0.1, 0.1, 0.1, 0.1,0.1]
276 colors = ['plum', 'violet', 'purple', 'darkmagenta','m','thistle','magenta','orchid','mediumvioletred','deeppink','hotpink']
277 
278 #设置饼图相关参数#
279 plt.pie(finance, explode=explode, labels=labels,
280         colors=colors,autopct='%.2f%%',
281         pctdistance=0.8, labeldistance=1.1,
282         startangle=180,  radius=1.2,
283         counterclock=False,
284         wedgeprops={'linewidth':1.5, 'edgecolor':'white'},
285         textprops={'fontsize':10, 'color':'black'} )
286 
287 #设置标题#
288 plt.title('中国三阶魔方盲拧前100成绩创造年份分布饼图')
289 
290 #数据持久化#
291 plt.savefig('中国三阶盲拧速拧前100成绩创造年份分布饼图.jpg')
292 
293 #显示可视化图像#
294 plt.show()

 五、总结

1.经过对主题数据的分析与可视化,可以得到哪些结论?是否达到预期的目标?

结论:(1)近几年中国三阶速拧和盲拧的成绩逐年提升,说明选手的实力逐年增强;

           (2)与速拧对比,盲拧的钱100排名成绩落差较大,创造成绩的时间也较为分散,中国的盲拧成绩还有待提高;

           (3)总的来说,中国魔方事业发展呈现稳中向好的趋势。

达到了预期的目标。

2.在完成此设计过程中,得到哪些收获?以及要改进的建议?

收获:在设计过程中,了解到了很多关于Python爬虫的相关知识,也了解到了Python可视化功能的强大以及方便。但是也遇到了一些难点,暴露了自己对Python的不熟练。学习的不够认真,在爬虫与可视化的相关内容中遇到了一些难点,但是在多次尝试之后,也迎刃而解了。

建议:还需要继续努力,多学习,多尝试,多思考。

 

 

 

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM