如何记录足球数据?
1. 统计 2015-2016赛季中超联赛的进球情况,需要考虑下列几个要素: 球员号码、球员名字、主客场的区别(共38轮) 这个问题用Python可以解决。首先把数据从网页中收集到Excel文件中。然后导入Jupyter Notebook中。在Notebook中定义函数,计算每场比赛的进球数并保存至List中,最后将结果导出成CSV文件即可。 #导入需要的包 import requests import pandas as pd from bs4 import BeautifulSoup #收集数据的网址 url="URL" #定义函数 def score(url): #使用requests库访问网页 html_page = requests.get(url) #使用bs4库对html页面进行解析 soup =BeautifulSoup(html_page.text,'html.parser') match_list = [] for game in soup.findAll('td', class_=['match','info']): a=game.div.a.string print (a) try: a1=game.span.div.strong.string print ("第%s场的比分是:%s"%(str(int(a))+1,a1)) except Exception: continue return match_list match_list=score(url) #将列表中的元素转换为数据框 df=pd.DataFrame(match_list) df.to_csv("scores.csv",index=False,encoding='gbk') 在处理数据之前先看看效果吧!
#数据处理前的效果 可以看到数据中存在无效值,需要进行清洗。我们可以添加一个if语句来过滤掉不存在的值。
df1=df[df["第几场"]>0] 对于主客场区分的问题,我们可以增加一个字段来表示主场还是客场。这里我们以场地的颜色为分类标准。
#添加一列判断主客场的条件 if len(df1["场地颜色"])!=len(df1["第几场"]): print((len(df1["场地颜色"])-len(df1["第几场"]))) else: pass df1["场所类型"]=None for i in range(0,len(df1["第几场"})): #1代表主场;0代表客场 df1["场所类型"].iloc="" if "蓝" in df1["场地颜色"]: tmp=[] elif "红" in df1["场地颜色"][:i] and "'white'" not in df1["场地颜色"][:-i]: tmp=[] else: tmp=[] for item in range(tmp.max()+1,5): df1["场所类型"].iloc[:i]=item break 如果只考虑进球的情况而忽略失球的话,那么就可以用以下代码来生成最终的数据表格了。
#删除所有空白行 df2=df[df["场所类型"]!="0"] del df2["第几场"] del df2["\t\t\t时间\n\n"] del df2["\n\n\n","\n\n\n"],