数据分析西甲联赛,积分榜动态显示
2019-03-13 本文已影响2人
f5065e26181b
文章首发于公众号:1024程序开发者社区
作为一名资深球迷和二把刀程序员,一直想将数据分析用于足球比赛分析。年前有段时间,30年GDP动态变化图着实让人看着心潮澎湃。近期,五大联赛都进入了争冠的冲刺期,因此以西甲为例,看一看动态积分排名和数据分析在足球联赛中的应用。
按照惯例,先上图:
动态显示.gif
文章主要分三个部分:
- 数据获取;
- 动态显示程序的使用;
- 其他西甲数据分析。
/1/数据获取
网络上实时的联赛积分数据很容易找到,但是每一轮的历史数据记录极少,千辛万苦,找到“一比分”网站,链接:https://data.13322.com/league-31/scjf.html。网页截图为:
对网页进行分析,必须通过点击选择“轮次”才能获取该轮积分数据,这就使传统的爬虫方法失效了。
image
因此,调用“selenium”模拟浏览器进行登录。
browser = webdriver.Chrome()
wait = WebDriverWait(browser ,10)
通过CSS_SELECTOR定位触发轮次数据变化的位置,如图:
image
定义触发语句,并获取当页数据:
page = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,lst[i])))
page.click()
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#Standings')))
html1 = browser.page_source
通过BeautifulSoup对数据进行定位和提取:
for item in soup.find(id='Standings').find_all('tr'):
result_cache = []
for td in item.find_all('td'):
result_cache.append(td.get_text().replace("‘", "").replace("’", ""))
result_cache[15] = i+1
最后调用xlwt,将结果数据写入XLS文件中:
row = len(result)
col = len(result[0])
workbook = xlwt.Workbook('ascii')
worksheet = workbook.add_sheet('my_worksheet1')
for x in range(row):
for y in range(col):
worksheet.write(x, y, result[x][y])
workbook.save(r'西甲.xls')
/2/动态数据显示
本文所使用动态排名数据可视化项目是jannchie建立的开源项目,基于D3.js。能够将历史数据排名转化为动态柱状图图表。网址为:
https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js
使用方法,只需打开src目录下的bargraph.html。然后点击页面中间的选择文件按钮,接着选择csv格式的数据文件,便可以看到可视化的结果。
example有四个参数,name,type,value,date。根据爬取数据进行整理即可:
image
通过定义config.js和visual.js对显示参数进行调整。如添加图标路径:
image
最终结果如开头所示。
/3/其他数据分析
除做出积分动态变化图外,还对其他数据进行分析。
-
联赛胜率排行top10
image
巴萨不说了,皇马和马竞的差别就在于防守。
2.联赛进球排行top10
image
3.联赛失球排行top10
image
对于武球王来说,好消息是球队很能进球,坏消息是丢球也不少,目前收支还不平衡,期待武磊更好的表现。
image
4.积分变化和球队人事调整的关系
image
image
从排名来看,洛佩特吉下课确实是战绩不佳,而救火队长索拉里上任后,球队战绩有明显好转,然而近期一波三连败,将国王杯、欧冠葬送,联赛夺冠也几乎不可能。这对于皇马这样的顶级豪门来说是不能接受的,因此,齐玄宗又回来了:
image
(图片来源:懂球帝APP)
关注公众号,回复“积分动态排名”获取代码和数据。
关注公众号,送海量学习资源~