football.json数据可视化:用Python和JavaScript创建足球数据图表
football.json是一个免费开源的足球数据项目,提供包括英超、德甲、西甲、意甲等多个联赛的JSON格式数据,无需API密钥即可使用。本文将介绍如何利用Python和JavaScript工具,将这些足球数据转化为直观的可视化图表,帮助球迷和数据爱好者更好地理解比赛结果和联赛趋势。
一、获取football.json数据
首先需要获取项目数据,你可以通过以下命令克隆仓库:
git clone https://gitcode.com/gh_mirrors/fo/football.json
项目数据按赛季和联赛组织,例如2023-24赛季英超数据位于2023-24/en.1.json,包含完整的赛事信息,包括比赛轮次、日期、时间、球队名称和比分(含半场和全场比分)。
二、Python可视化实现
1. 数据读取与处理
使用Python的json模块读取数据文件,以2023-24赛季英超数据为例:
import json
with open('2023-24/en.1.json', 'r') as f:
data = json.load(f)
# 提取所有比赛结果
matches = data['matches']
2. 常用可视化图表
球队胜负分布饼图
使用matplotlib创建球队胜负分布饼图,直观展示特定球队的胜负平比例:
import matplotlib.pyplot as plt
# 统计阿森纳队的比赛结果
team = "Arsenal FC"
results = []
for match in matches:
if match['team1'] == team:
if match['score']['ft'][0] > match['score']['ft'][1]:
results.append('胜')
elif match['score']['ft'][0] < match['score']['ft'][1]:
results.append('负')
else:
results.append('平')
elif match['team2'] == team:
if match['score']['ft'][1] > match['score']['ft'][0]:
results.append('胜')
elif match['score']['ft'][1] < match['score']['ft'][0]:
results.append('负')
else:
results.append('平')
# 绘制饼图
labels = ['胜', '负', '平']
sizes = [results.count('胜'), results.count('负'), results.count('平')]
colors = ['#4CAF50', '#F44336', '#FFC107']
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title(f'{team} 2023/24赛季胜负分布')
plt.show()
联赛进球数趋势图
使用pandas和seaborn创建联赛进球数趋势图,分析整个赛季的进球变化:
import pandas as pd
import seaborn as sns
# 提取比赛日期和总进球数
df = pd.DataFrame([
{
'date': match['date'],
'goals': match['score']['ft'][0] + match['score']['ft'][1]
} for match in matches
])
# 转换日期格式并按日期排序
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values('date')
# 绘制折线图
plt.figure(figsize=(12, 6))
sns.lineplot(data=df, x='date', y='goals')
plt.title('2023/24赛季英超联赛进球数趋势')
plt.xlabel('日期')
plt.ylabel('总进球数')
plt.grid(True)
plt.show()
三、JavaScript可视化实现
1. 使用Chart.js创建交互式图表
Chart.js是一个简单灵活的JavaScript图表库,适合在网页中展示足球数据。首先引入Chart.js库,然后读取JSON数据并创建图表:
<!DOCTYPE html>
<html>
<head>
<title>足球数据可视化</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="goalsChart" width="800" height="400"></canvas>
<script>
// 从文件加载数据(实际应用中可能需要通过AJAX请求)
fetch('2023-24/en.1.json')
.then(response => response.json())
.then(data => {
// 统计各轮次进球数
const rounds = {};
data.matches.forEach(match => {
const round = match.round.replace('Matchday ', '');
const goals = match.score.ft[0] + match.score.ft[1];
if (!rounds[round]) rounds[round] = 0;
rounds[round] += goals;
});
// 准备图表数据
const labels = Object.keys(rounds).sort((a, b) => a - b);
const values = labels.map(round => rounds[round]);
// 创建柱状图
new Chart(document.getElementById('goalsChart'), {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: '每轮总进球数',
data: values,
backgroundColor: 'rgba(54, 162, 235, 0.5)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: '总进球数'
}
},
x: {
title: {
display: true,
text: '比赛轮次'
}
}
},
title: {
display: true,
text: '2023/24赛季英超各轮次进球数统计'
}
}
});
});
</script>
</body>
</html>
2. 数据文件路径说明
项目中的数据文件按赛季和联赛代码组织,例如:
- 2022-23赛季英超数据:
2022-23/en.1.json - 2023-24赛季德甲数据:
2023-24/de.1.json - 2023-24赛季西甲数据:
2023-24/es.1.json
每个JSON文件包含该赛季对应联赛的所有比赛信息,可直接用于数据可视化处理。
四、实用可视化技巧
-
数据筛选:根据需要筛选特定球队、特定时间段的数据,例如只分析"Manchester City FC"的主场比赛结果。
-
多图表对比:将不同赛季的数据可视化结果放在一起对比,分析联赛趋势变化。
-
交互式探索:使用JavaScript实现交互式图表,允许用户点击查看具体比赛细节。
-
数据聚合:对数据进行聚合分析,如计算各球队的场均进球数、最大连胜纪录等。
通过以上方法,你可以将football.json中的原始数据转化为直观易懂的可视化图表,深入了解足球比赛数据背后的规律和故事。无论是足球爱好者还是数据分析师,都能从中获得有价值的 insights。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



