图1 大赛产业命题赛道部分命题
如图1所示,产业命题赛道就好比命题作文,选题都是一些真实企业(如华为)提前定好的,参赛选手必须在命题要求的范围内按照要求进行准备。
这些命题直观上令人感觉到十分前沿,大部分都要求应用新技术,如区块链等,颇具难度。
作者对命题方向的分布十分感兴趣,于是爬取了所有命题题目,并对其进行分词,然后计算词频,并进行可视化呈现,直观准确地获得了命题方向的大概分布情况。
1 整体思路
图2 整体思路流程图
2 项目实施
2.1 爬取题目
import requests
from lxml import etree
import pandas as pd
import jieba
import matplotlib.pyplot as plt
word_list = [] # 用来储存分好的词
stopword_list = [] # 停用词列表,用来排除分好的词中虚词等无意义的词
for i in range(8):
url = 'https://cy.ncss.cn/mtcontest/mingtilist?pageIndex='+str(i)+'&pageSize=30&companyName=&name='
headers={
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36',
'Host':'cy.ncss.cn'
}
text = requests.get(url = url, headers = headers).text
html = etree.HTML(text)
title = html.xpath('//div[@class="cyyq-title"]//text()')
需要注意的是,目标网页通过ajax加载数据,需要通过chrome浏览器分析出发送ajax请求后的新url进行请求,不然无法获得目标数据。
2.2 分词操作
for item in title: # 接上面的代码段
for word in jieba.lcut(item,cut_all = False, HMM=True):
word_list.append(word)
with open('stopword.txt', encoding='utf-8') as f:
for line in f.readlines():
stopword_list.append(line.strip('\n'))
word_list = [w for w in word_list if w not in stopword_list]
利用jieba库进行中文分词,分词后导入停用词表删除无效的虚词、标点符号等无意义词。
2.3 词频统计
df = pd.DataFrame(word_list)
table = pd.DataFrame(d