Python模拟2018世界杯夺冠之路,统计了四强预测…
2018-06-18 03:30:11来源:未知 阅读 ()
万众瞩目的2018世界杯即将在俄罗斯拉开战幕。四年一次的足球盛宴,更是每一个球迷翘首以盼的狂欢节日,球迷们痴迷的呐喊,激动至晕厥的欢呼仿佛已经随着2018世界杯的临近在我们耳边响起。
毫无疑问,谁将捧起世界杯是我们最关心的问题,小编作为一名“资深”球迷自然得发挥下自己的专长,用python模拟2018世界杯,先给大家解解渴。
前言
世界杯即将开打,一切都是未知数,不过整个赛程已定,我们可以完全按照赛程模拟全部64场比赛比分10000次,得出A~H组各自的出线形势、每支队伍进四强的概率、以及最终的夺冠概率。
接下来我们将要运用离散概率分布中的泊松分布来对本次世界杯进行预测,一共分为四个步骤:
1. 数据采集(用python实现网络爬虫,进行抓取资源);
2. 计算球队进球、失球均值,构建算法模型;
3. 模拟10000次世界杯赛事,进行分析;
4. 统计出线概率、夺冠概率、四强概率;
数据采集
寻找有利资源和所要采集的网站,准备开始数据采集。这次采集以球探网为例:
首先找到32个国家各自的网站链接;然后分别进入32个链接,采集各自的比赛记录数据;
解析网站,构造大体思路,创建网络爬虫实施采集。由于该网站是静态网站,所以就很容易的对网站的采集,在采集的过程中,我们首先找到,每个国家球队的链接,建立国家球队链接和国家球队名,然后进行采集给定国家队页面的所有历史比赛的数据。
在寻找国家链接的时候请注意链接的准确性,球探网每一个球队都有一个独立的链接,比如巴西的id是778,链接地址就为:http://zq.win007.com/cn/team/CTeamSche/778.html,如果对链接的不放心,可以先将链接复制到浏览器中,看是否能够找到网页。
以下为数据采集详细代码:
1 from __future__ importprint_function, division 2 3 from selenium import webdriver 4 5 import pandas as pd 6 7 class Spider(object): 8 9 def __init__(self): 10 11 self.driver = webdriver.Chrome() 12 13 self.driver.implicitly_wait(30) 14 15 self.verificationErrors = [] 16 17 self.accept_next_alert = True 18 19 def get_all_team_data(self): 20 21 # 先通过世界杯主页获取所有32只队的ID(构成球队URL)Python学习交流群:125240963,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流
22 23 self.get_team_ids() 24 25 # 循环采集每一支队的比赛数据 26 27 data = [] 28 29 for i, [team_id, team_name] inenumerate(self.team_list): 30 31 print(i, team_id, team_name) 32 33 df =self.get_team_data(team_id, team_name) 34 35 data.append(df) 36 37 output = pd.concat(data) 38 39 output.reset_index(drop=True,inplace=True) 40 41 output.to_csv('data_2018WorldCup.csv',index=False, encoding='utf-8') 42 43 self.driver.close() 44 45 def get_team_ids(self): 46 47 main_url ='http://zq.win007.com/cn/CupMatch/75.html' 48 49 self.driver.get(main_url) 50 51 teams=self.driver.find_elements_by_xpath("//td[@style='background-color:#fff;text-align:left;']") 52 53 data = [] 54 55 for team in teams: 56 57 team_id= 58 59 int(team.find_element_by_xpath(".//a").get_attribute('href').split('/')[-1].split('.')[0]) 60 61 team_name =team.find_element_by_xpath(".//a").text 62 63 print(team_id, team_name) 64 65 data.append([team_id,team_name]) 66 67 self.team_list = data 68 69 #self.team_list =pd.DataFrame(data, columns=['team_name', 'team_id']) 70 71 #self.team_list.to_excel('国家队ID.xlsx', index=False) 72 73 def get_team_data(self, team_id,team_name): 74 75 """获取一个国家队的比赛数据。TODO:没有实现翻页Python学习交流群:125240963,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流""" 76 77 url ='http://zq.win007.com/cn/team/CTeamSche/%d.html'%team_id 78 79 self.driver.get(url) 80 81 table=self.driver.find_element_by_xpath("//div[@id='Tech_schedule'and@class='data']") 82 83 matches =table.find_elements_by_xpath(".//tr") 84 85 print(len(matches)) 86 87 # 抓取比赛数据,并保存成DataFrame 88 89 data = [] 90 91 for i, match inenumerate(matches): 92 93 if i == 0: 94 95 headers =match.find_elements_by_xpath(".//th") 96 97 h1, h2, h3, h4, h5 =headers[0].text, headers[1].text, headers[2].text, headers[3].text,headers[4].text 98 99 print(h1, h2, h3, h4, h5) 100 101 continue 102 103 try: 104 105 info =match.find_elements_by_xpath(".//td") 106 107 cup =str(info[0].text.encode('utf-8')) 108 109 match_time =str(info[1].text.encode('utf-8')) 110 111 home_team =str(info[2].text.encode('utf-8')) 112 113 fts = info[3].text 114 115 #print('-', cup, '-') 116 117 fs_A,fs_B=int(fts.split('-')[0]),int(fts.split('-')[1]) 118 119 away_team = str(info[4].text.encode('utf-8')) 120 121 print(cup, match_time,home_team, away_team, fs_A, fs_B) 122 123 data.append([cup,match_time, home_team, away_team, fs_A, fs_B, team_name]) 124 125 except: 126 127 break 128 129 df = pd.DataFrame(data, columns=['赛事', '时间', '主队', '客队', '主队进球', '客队进球', '国家队名']) 130 131 return df 132 133 if __name__ == "__main__": 134 135 spider = Spider() 136 137 # 第一步:抓2018世界杯球队的ID。第二部:循环抓取每一支队的比赛数据。 138 139 spider.get_all_team_data()
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:第一章、python学习大纲
下一篇:Python3练习题系列(02)
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash