|
|
<
【计较机设想年夜赛比年获奖疑息】数据阐发及可视化
写正在前里
本文经由过程近来三年 “中国年夜门生存算机设想年夜赛” 的获奖数据(2021成果还没有发表),阐发发掘一下该角逐深层的一些内乱容,次要有以下几面:
- 各年各奖项的比例散布
- 各年得奖最多的黉舍 Top10
- 哪些黉舍屡次进进得奖最多 Top10
- 各黉舍三年中参赛次数统计
- 各级别奖项中黉舍条理别离
- 参赛人数取奖项之间的干系
- 获奖做品称号热词
文中各部分中假设代码量较多的,为了浏览体验,便没有停止展现,如需代码及相干文件能够公疑我。
数据读与及形貌
数据散是年夜赛民圆供给的数据,2018、2019 年纪据为.xlsx文件,2020 年纪据为.pdf文件。先读与 2018 、2019 年纪据,并察看一下数据散疑息。
- import pandas as pd
- df_2018 = pd.read_excel('2018年决赛正式成果.xlsx', sheet_name='123等奖')
- df_2019 = pd.read_excel('2019年年夜赛获奖做品名单公示20190907.xlsx')
复造代码
经由过程上图中的疑息能够看到,2018 年取 2019 年的数据散格局有挺年夜的差别,那些正在以后兼并时需求统一。
因为 2020 年的数据是 .pdf 文件,我们零丁定义一个函数去读与。关于读与时的一些细节成绩,皆已正在代码中以正文的情势标出。
- import pdfplumber
- def read_pdf_2020(read_path):
- pdf_2020 = pdfplumber.open(read_path)
- result_df = pd.DataFrame()
- for page in pdf_2020.pages:
- table = page.extract_table()
- df_detail = pd.DataFrame(table[1:], columns=table[0])
- # 兼并每页的数据散
- result_df = pd.concat([df_detail, result_df], ignore_index=True)
- # 删除值局部是 NaN 的列
- result_df.dropna(axis=1, how='all', inplace=True)
- # 重置列名
- result_df.columns = ['奖项', '做品编号', '做品称号', '参赛黉舍', '做者', '指点教师']
- return result_df
- df_2020 = read_pdf_2020('2020年中国年夜门生计较机设想年夜赛参赛做品获奖名单.pdf')
复造代码
察看 2020 年的数据,比拟于前两年的数据,它的各列皆出出缺得值,但2020年的获奖疑息中并出有包罗做品种别那一列,所以我们处置数据散时要将前两年的种别列停止删除。如许,我们能够根据 2020 数据散的格局做为模板,将前两年的数据散转换为不异的格局,再停止兼并。
数据预处置
各年纪据散格局化
根据 2020 年格局,将 2018 年取 2019 年纪据会集部分列停止兼并,并改换列名,删除过剩的列。并增加 “年份” 那一列。
上面是处置后的 2018 年取 2019 年纪据。
关于 2020 年纪据散的处置要留意,数据读与时是基于每页数据去读与的,假设正在一页的最初一止数据较多,需求换止的话,那末下一页尾止数据便会缺得,以下所示。
这类状况便需求先挑选出那些做品编号为空的止,正在将数据增加到上一止中。
- # 2020年纪据散处置
- clean_df_2020 = df_2020.copy()
- # 部门疑息太长招致正在分页处被朋分,别离呈现正在两页上,上面将奖项为空的数据增加到上一条数据的疑息中。
- clean_df_2020.iloc[609]['参赛黉舍'] += '医年夜教'
- clean_df_2020.iloc[1330]['做品称号'] += '丹霞'
- clean_df_2020.iloc[2121]['做品称号'] += '现'
- clean_df_2020.iloc[2997]['做品称号'] += '云仄台'
- del_index = clean_df_2020.loc[clean_df_2020['奖项'] == ''].index
- clean_df_2020.drop(del_index, inplace=True)
- clean_df_2020.reset_index(drop=True, inplace=True)
- clean_df_2020['年份'] = [2020 for _ in range(len(clean_df_2020))]
复造代码
数据兼并
现在兼并三年的数据。兼并后数据散以下。
数据洗濯
现在我们要对兼并后的数据散停止一些处置,以便更好天阐发及可视化。因为以后我们要用到全国下校的一些根本疑息,如黉舍条理(985 211等),所以需求导进 college_info.csv ,该数据是专主正在 6月15日 爬与的,部分下职下专能够并已支录,关于那部分下校便将对应标签赋值为 “久无数据” 。肃清参赛黉舍战做品称号中的换止符“\n”,以后增加 参赛人数列 去记载 各做品做者人数 ,指点教师人数列 记载 该做品指点教师人数。
- college_info = pd.read_csv('college_info.csv')
- college_name = college_info['黉舍称号'].values.tolist()
- college_level = []
- for college in all_df['参赛黉舍']:
- if college not in college_name:
- college_level.append('久无数据')
- else:
- college_level.append(college_info['黉舍条理'][college_name.index(college)])
- all_df['黉舍条理'] = college_level
- all_df['参赛黉舍'] = all_df['参赛黉舍'].str.replace('\n|\r', '')
- all_df['做品称号'] = all_df['做品称号'].str.replace('\n|\r', '')
- # 删除做者为空的列
- all_df.dropna(subset=['做者'], axis=0, inplace=True)
- # 增加 参数人数 列去记载各做品做者人数
- all_df['参赛人数'] = all_df['做者'].apply(lambda x: len(x.split('、')))
- count_list = []
- for index, row in all_df.iterrows():
- try:
- count_list.append(len(row['指点教师'].split('、')))
- except:
- count_list.append(0)
- all_df['指点教师人数'] = count_list
- all_df.to_csv('all_df.csv', index=False)
- all_df
复造代码 处置后的数据散以下。
数据阐发及可视化
各年奖项数目散布
统计三年中一等奖、两等奖、三等奖的占比,画造层叠条形图。
- '''
- 数据统计省略
- '''
- from pyecharts import options as opts
- from pyecharts.charts import Bar
- from pyecharts.commons.utils import JsCode
- from pyecharts.globals import ThemeType
- c = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
- c.add_xaxis([2018, 2019, 2020])
- c.add_yaxis("三等奖", list1, stack="stack1", category_gap="70%")
- c.add_yaxis("两等奖", list2, stack="stack1", category_gap="70%")
- c.add_yaxis("一等奖", list3, stack="stack1", category_gap="70%")
- c.set_series_opts(label_opts=opts.LabelOpts(
- position="right",
- formatter=JsCode(
- "function(x){return Number(x.data.percent * 100).toFixed() + '%';}"
- ),
- )
- )
- c.render("./images/各年奖项数目散布堆叠条形图.html")
- c.render_notebook()
复造代码
从上图中察看发明,跟着工夫的推移,一等奖、两等奖的比例开端削减,三等奖比例增长,正在 2020 年三等奖比例到达68%,没有好看出赛圆念要增长一等奖的露金量。
各年得奖最多的黉舍Top10
统计各年得奖最多的前 10 论理学校的各项奖的数目,画造图形。
从上图中大致能够看到许多年夜教没有行一次出现在 Top10 傍边,正在那些黉舍中,一部分多是由于黉舍比较正视该角逐。
上面利用韦恩图详细看一下,哪些黉舍屡次进进得奖最多 Top10。
沈阳师范年夜教、沈阳工教院、辽宁产业年夜教正在三年中皆进进 Top10,另有一些其他两次进进 Top10 的黉舍, 此中东北部的年夜教较着较多。
各黉舍参与次数统计
现在统计各个黉舍的参赛次数,并计较各次数的黉舍数目。
- from collections import Counter
- all_school = []
- for year in [2018, 2019, 2020]:
- school_set = set(all_df.loc[all_df['年份'] == year, '参赛黉舍'].values.tolist())
- all_school += list(school_set)
- value_count = Counter(all_school)
- count_list = ['参赛' + str(n) + '次' for n in value_count.values()]
- counter = Counter(count_list)
- from pyecharts.charts import Pie
- c = Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
- c.add("", [list(z) for z in zip(counter.keys(), counter.values())])
- c.set_global_opts(title_opts=opts.TitleOpts(title="Pie-根本示例"))
- c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
- c.render("./images/各黉舍参与次数统计饼图.html")
- c.render_notebook()
复造代码
正在那三年的参赛黉舍中,三次参赛的占了一半阁下,参赛一次战参赛两次的各占 25% 阁下,那么道,参与角逐的黉舍仍是情愿持续下一届持续来参与,阐明该角逐是有吸收黉舍的处所。
各年参赛黉舍条理别离
统计各年参赛黉舍的条理,察看参与角逐黉舍的条理散布。
三年中,尽年夜大都的参赛者去自伟大本科,其次为211,而且各条理的黉舍参赛人数正在逐年上降。伟大本科最为明显。能够看到,跟着年夜赛的宣扬战计较机的提高,愈来愈多的人存眷计较机圆里的角逐。(关于久无数据的那一列部分缘故原由是由于黉舍的疑息出有支录,另有多是参赛选脚挖写黉舍时呈现得误形成)
参赛人数取奖项散布
按照做者战指点教师的人数停止组开,统计各奖项中呈现的次数,画造以下图形。
正在各项奖项中,获奖比例最多的皆是3名做者2名教师的声势,其次便是3名做者1名教师。其他的声势获奖人数便比较少了。看模样也没有是人数越多获奖概率越年夜。
获奖做品称号热词
起首定义一个减载停用词的函数,用于减载本地停用词。
- def load_stopwords(read_path):
- '''
- 读与文件每止内乱容并保留到列表中
- :param read_path: 待读与文件的途径
- :return: 保留文件每止疑息的列表
- '''
- result = []
- with open(read_path, "r", encoding='utf-8') as f:
- for line in f.readlines():
- line = line.strip('\n') # 来失落列表中每个元素的换止符
- result.append(line)
- return result
- # 减载中文停用词
- stopwords = load_stopwords('wordcloud_stopwords.txt')
复造代码 统计一切做品称号中来除停用词后的辞汇,保留到列表中。
- import jieba
- # 增加自界说辞书
- jieba.load_userdict("自界说辞书.txt")
- token_list = []
- # 对题目内乱容停止分词,并将分词成果保留正在列表中
- for name in all_df['做品称号']:
- tokens = jieba.lcut(name, cut_all=False)
- token_list += [token for token in tokens if token not in stopwords]
- len(token_list)
复造代码 统计该列表中各词呈现的频次,与前100做为热点词,画造词云图。
- from pyecharts.charts import WordCloud
- from collections import Counter
- token_count_list = Counter(token_list).most_common(100)
- new_token_list = []
- for token, count in token_count_list:
- new_token_list.append((token, str(count)))
- c = WordCloud()
- c.add(series_name="热词", data_pair=new_token_list, word_size_range=[20, 200])
- c.set_global_opts(
- title_opts=opts.TitleOpts(
- title="获奖做品热词", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
- ),
- tooltip_opts=opts.TooltipOpts(is_show=True),
- )
- c.render("./images/获奖做品热词.html")
- c.render_notebook()
复造代码
察看上图,可以非常明晰的理解今朝计较机中热点的话题,如年夜数据、野生智能、算法、可视化、办理体系、机械人等,那些标的目的不断皆是计较机止业的热点标的目的,也能够做为我们此后开展的一条路径。
总结
- 比年去,计较机设想年夜赛一等奖、两等奖的比例削减,三等奖比例增长,那便增长了得到1、两等奖的易度取露金量。
- 东北部的年夜教愈加存眷该赛事,不管从参赛人数仍是获奖人数去看,此中沈阳师范年夜教、沈阳工教院、辽宁产业年夜教屡次进进获奖最多 Top10。
- 尽年夜大都的黉舍持续参与该角逐,正在近来三年中,三次参赛的黉舍占了获奖总黉舍的一半阁下。
- 三年中,尽年夜大都的参赛者去自伟大本科,其次为211,而且各条理的黉舍参赛人数正在逐年上降。
- 获奖的参赛选脚中比例最多的是 3名做者2名教师 的声势,其次便是 3名做者1名教师。(做者最多5人,指点教师2人 共7人)
- 做品中的热点词年夜数据、野生智能、算法、可视化、办理体系、机械人等。
那便是本文一切的内乱容了,假设觉得借没有错的话。❤ 面个赞再走吧!!!❤
后绝会持续分享 数据阐发 的文章,假设感爱好的话能够面个存眷没有迷路哦~。
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作! |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|