粗餅·中國魔方賽事網中國三階魔方速盲前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