import requests import json import csv import pandas as pd import numpy as np import matplotlib.pyplot as plt url='https://china.nba.cn/stats2/league/playerstats.json' def getJson(url): headers={ 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53' } response = requests.get(url,headers=headers) json_Data = json.loads(response.text) return json_Data def getData(json_data): playerList=[] for item in json_data['payload']['players']: player_dataDict={} #球员名字 name=item['playerProfile']['displayName'] #中文名 #names=item['playerProfile']['displayName'] #出场次数 games=item['statAverage']['games'] #先发 gamesStarted=item['statAverage']['gamesStarted'] #分钟 mins=item['statAverage']['minsPg'] #三分命中 tpm=item['statAverage']['tppct'] #罚球命中 ftm=item['statAverage']['ftpct'] #进攻 offRebs=item['statAverage']['offRebsPg'] #防守 defRebs=item['statAverage']['defRebsPg'] #篮板 rebs=item['statAverage']['rebsPg'] #助攻 assists=item['statAverage']['assistsPg'] #抢断 steals=item['statAverage']['stealsPg'] #盖帽 blocks=item['statAverage']['blocksPg'] #失误 turnovers=item['statAverage']['turnoversPg'] #犯规 fouls=item['statAverage']['foulsPg'] #得分 points=item['statAverage']['pointsPg'] player_dataDict['球员']=name #player_dataDict['球员'] = names player_dataDict['场次']=games player_dataDict['先发']=gamesStarted player_dataDict['出场时间']=mins player_dataDict['三分命中率']=tpm player_dataDict['罚球命中率']=ftm player_dataDict['进攻效率']=offRebs player_dataDict['防守效率']=defRebs player_dataDict['篮板']=rebs player_dataDict['助攻']= assists player_dataDict['抢断']=steals player_dataDict['盖帽']=blocks player_dataDict['失误']=turnovers player_dataDict['犯规']=fouls player_dataDict['得分']=points print(player_dataDict) playerList.append(player_dataDict) return playerList def writeData(playerList): #写入数据 with open('player_data.csv','w',encoding='utf-8',newline='')as f: write=csv.DictWriter(f, fieldnames=['球员','场次','先发','出场时间','三分命中率','罚球命中率', '进攻效率','防守效率','篮板','助攻', '抢断','盖帽','失误','犯规','得分']) write.writeheader() for each in playerList: write.writerow(each) if name == "main": json_Data = getJson(url) playerList=[] playerList += getData(json_Data) writeData(playerList) 为我尽可能详细的解释上述代码并加上注释,要尽可能地详细,里面涉及到地方法,python库等知识点都需要详细讲解
时间: 2023-10-04 09:07:15 浏览: 209
数据处理Pandas-读取Excel、文本、CSV等不同类型数据-Python实例源码.zip
好的,下面是对该Python代码的详细解释和注释:
```python
# 导入需要用到的Python库
import requests
import json
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 定义获取Json数据的函数
def getJson(url):
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53'
}
response = requests.get(url,headers=headers) # 使用requests库发起GET请求获取数据
json_Data = json.loads(response.text) # 将获取到的数据转换为Json格式
return json_Data
# 定义处理Json数据的函数
def getData(json_data):
playerList=[] # 定义一个列表用来存储每个球员的数据
for item in json_data['payload']['players']: # 遍历Json数据中的每个球员
player_dataDict={} # 定义一个字典用来存储每个球员的数据
name=item['playerProfile']['displayName'] # 获取球员的名字
games=item['statAverage']['games'] # 获取球员的出场次数
gamesStarted=item['statAverage']['gamesStarted'] # 获取球员的先发次数
mins=item['statAverage']['minsPg'] # 获取球员的出场时间
tpm=item['statAverage']['tppct'] # 获取球员的三分命中率
ftm=item['statAverage']['ftpct'] # 获取球员的罚球命中率
offRebs=item['statAverage']['offRebsPg'] # 获取球员的进攻效率
defRebs=item['statAverage']['defRebsPg'] # 获取球员的防守效率
rebs=item['statAverage']['rebsPg'] # 获取球员的场均篮板数
assists=item['statAverage']['assistsPg'] # 获取球员的场均助攻数
steals=item['statAverage']['stealsPg'] # 获取球员的场均抢断数
blocks=item['statAverage']['blocksPg'] # 获取球员的场均盖帽数
turnovers=item['statAverage']['turnoversPg'] # 获取球员的场均失误数
fouls=item['statAverage']['foulsPg'] # 获取球员的场均犯规数
points=item['statAverage']['pointsPg'] # 获取球员的场均得分数
player_dataDict['球员']=name # 将球员名字存储在字典中
player_dataDict['场次']=games # 将球员出场次数存储在字典中
player_dataDict['先发']=gamesStarted # 将球员先发次数存储在字典中
player_dataDict['出场时间']=mins # 将球员出场时间存储在字典中
player_dataDict['三分命中率']=tpm # 将球员三分命中率存储在字典中
player_dataDict['罚球命中率']=ftm # 将球员罚球命中率存储在字典中
player_dataDict['进攻效率']=offRebs # 将球员进攻效率存储在字典中
player_dataDict['防守效率']=defRebs # 将球员防守效率存储在字典中
player_dataDict['篮板']=rebs # 将球员场均篮板数存储在字典中
player_dataDict['助攻']= assists # 将球员场均助攻数存储在字典中
player_dataDict['抢断']=steals # 将球员场均抢断数存储在字典中
player_dataDict['盖帽']=blocks # 将球员场均盖帽数存储在字典中
player_dataDict['失误']=turnovers # 将球员场均失误数存储在字典中
player_dataDict['犯规']=fouls # 将球员场均犯规数存储在字典中
player_dataDict['得分']=points # 将球员场均得分数存储在字典中
print(player_dataDict) # 输出每个球员的数据
playerList.append(player_dataDict) # 将每个球员的数据字典添加到列表中
return playerList
# 定义将数据写入CSV文件的函数
def writeData(playerList):
# 写入数据
with open('player_data.csv','w',encoding='utf-8',newline='')as f:
write=csv.DictWriter(f, fieldnames=['球员','场次','先发','出场时间','三分命中率','罚球命中率', '进攻效率','防守效率','篮板','助攻', '抢断','盖帽','失误','犯规','得分'])
write.writeheader() # 写入CSV文件的表头
for each in playerList: # 遍历每个球员的数据字典
write.writerow(each) # 将每个球员的数据写入CSV文件中
# 主函数
if name == "main":
url='https://china.nba.cn/stats2/league/playerstats.json' # 定义NBA官网的数据API接口
json_Data = getJson(url) # 获取Json格式的NBA官网数据
playerList=[] # 定义一个空列表用来存储每个球员的数据
playerList += getData(json_Data) # 处理Json数据,将每个球员的数据添加到列表中
writeData(playerList) # 将每个球员的数据写入CSV文件中
```
该代码主要用来从NBA官网获取每个球员的数据并将其写入CSV文件中。下面是该代码的具体步骤:
1. 导入需要用到的Python库:`requests`、`json`、`csv`、`pandas`、`numpy`、`matplotlib.pyplot`。
2. 定义一个函数 `getJson(url)`,用来获取NBA官网的Json数据。其中,`url` 是 NBA 官网的数据API接口,使用 requests 库发送 GET 请求获取数据,然后将获取到的数据转换为 Json 格式并返回。
3. 定义一个函数 `getData(json_data)`,用来处理得到的 Json 数据,提取每个球员的数据并将其存储在一个字典中,最后将每个球员的数据字典添加到一个列表中并返回。在处理每个球员的数据时,需要从 `json_data` 中提取出该球员的各项数据,并将其存储在一个字典中。这里我们只提取了球员的名字、出场次数、先发次数、出场时间、三分命中率、罚球命中率、进攻效率、防守效率、篮板、助攻、抢断、盖帽、失误、犯规、得分等15个数据。
4. 定义一个函数 `writeData(playerList)`,用来将每个球员的数据写入 CSV 文件。在该函数中,首先使用 `csv.DictWriter()` 函数创建一个写入器对象,然后使用 `writeheader()` 函数写入表头,最后遍历每个球员的数据字典,使用 `writerow()` 函数将每个球员的数据写入 CSV 文件中。
5. 在主函数中,定义 NBA 官网的数据API接口,然后使用 `getJson()` 函数获取 Json 格式的NBA官网数据,接着使用 `getData()` 函数处理数据,将每个球员的数据字典添加到一个列表中,最后使用 `writeData()` 函数将每个球员的数据写入 CSV 文件中。
这段代码的核心思想是:使用 requests 库获取 NBA 官网的数据,然后使用 json 库将数据转换为 Json 格式,最后提取每个球员的数据并将其存储在一个字典中,最终将每个球员的数据写入 CSV 文件中。
阅读全文