一、引言
在足球产业数字化浪潮中,数据驱动决策已成为俱乐部运营、赛事分析、球探招聘的核心支撑 —— 通过球员表现数据优化战术布置、依托转会历史预测球员价值、结合伤病记录规避阵容风险,数据能力直接决定球队竞争力与商业收益。当前,欧洲五大联赛等顶级赛事已实现 “每场均生成超 10 万条数据” 的精细化运营,而中小俱乐部、足球分析师及研究人员常面临优质数据获取难的问题,制约分析深度与模型效果。
然而,多数公开足球数据集存在三大核心痛点:一是维度单一,仅覆盖球员基础信息或单赛季表现,缺乏 “估值 - 转会 - 伤病” 的全生命周期数据;二是格式不统一,数据分散在 Excel、JSON 等多种格式中,需大量时间清洗整合;三是覆盖范围有限,仅聚焦局部联赛,无法支撑全球范围的对比分析。这些问题导致用户需投入 60% 以上时间处理数据,而非聚焦核心分析任务。
本数据集基于 Transfermarkt 核心数据构建,提供结构化、全维度的足球数据湖,涵盖 4.1 万 + 球员、1400 + 俱乐部的 10 类核心信息,以通用 CSV 格式适配各类分析工具,无需预处理即可直接用于 EDA 探索、ML 建模与业务决策,目标是让所有足球数据使用者(俱乐部、分析师、研究员)都能低成本挖掘数据价值。
二、核心信息
数据集核心信息
信息类别具体内容基础属性数据总量:2.2M + 条记录;数据类型:结构化表格数据(含球员 / 球队 / 转会 / 伤病等 10 类核心维度);采集时间:覆盖多赛季采集信息采集设备:基于 Transfermarkt 官方公开数据接口 + 合规爬虫工具;采集场景:全球足球职业赛事(含联赛、杯赛、国家队比赛);采集环境:无特殊过滤,覆盖正常赛事数据(含伤病、转会等异常事件记录)标注情况标注类型:字段级结构化标注(如 “injury_reason” 预定义 “肌肉拉伤 / 骨折” 等枚举值);标注精度:数据准确率≥98%(与 Transfermarkt 官方数据交叉校验);标注工具:自定义数据清洗脚本格式与规格文件格式:UTF-8 编码 CSV(共 11 个文件);单文件大小:最小 4.37MB(player_injuries.csv)、最大约 50MB(player_performances.csv);适配格式:支持 Python pandas/R 读取、SQL 导入、BI 工具直接加载数据划分数据分区:按 “数据类型” 分区(11 个独立 CSV 文件,对应 10 类核心维度 + 1 个备用字段说明文件);无训练集 / 验证集划分(非模型专用数据,支持用户按需拆分)
数据集核心优势
本数据集的核心优势在于 “维度全、格式优、适配广”,解决传统足球数据集 “碎片化、预处理难” 的痛点,具体亮点如下:
优势 1:全生命周期维度覆盖,支撑多场景深度分析
涵盖球员 “基础信息 - 表现 - 估值 - 转会 - 伤病 - 国家队” 全生命周期数据,及球队 “详情 - 赛事 - 梯队关系” 核心维度:包含 427K + 市场估值记录(跟踪球员估值波动趋势)、280K + 转会历史(含转会费、转会球队等关键信息)、78K + 伤病记录(含缺席天数 / 比赛数),可直接支撑 “球员价值预测”“伤病风险评估”“球队阵容优化” 等复杂分析,避免传统数据集 “仅能做单维度统计” 的局限。
优势 2:结构化程度高,零预处理直接复用
所有字段均做标准化处理:枚举字段预定义统一值(如 “cash_type” 无模糊表述)、日期字段统一为 “YYYY-MM-DD” 格式(如 “from_date/end_date”)、数值字段无异常值(如 “days_missed” 无负数)。实测显示,相比零散的足球数据,使用本数据集可节省 60% 以上的预处理时间,新手可当天完成 “球员表现与估值相关性” 等 EDA 分析。
优势 3:全工具链适配,无技术门槛限制
通用 CSV 格式完美兼容三类核心工具:
代码分析工具:支持 Python pandas(读取代码见 “应用示例”)、R 语言,可直接对接 numpy(数值计算)、scikit-learn(ML 建模);可视化 / BI 工具:无需格式转换,可直接导入 Tableau/Power BI 生成 “球员估值趋势图”“球队赛事胜率仪表盘”;数据库工具:支持 MySQL/PostgreSQL 直接导入,便于多表关联查询(如 “球员表现与伤病历史关联分析”)。
数据应用全流程指导
(1)数据预处理(基础操作:读取、筛选、多表关联)
功能目标:加载多 CSV 文件,按分析需求筛选目标数据,关联跨表维度(如 “球员表现 + 伤病记录”)。
代码示例(Python,基于 pandas):
import pandas as pd
# 1. 读取核心CSV文件(关键参数:encoding确保UTF-8编码,避免中文/特殊字符乱码)
player_profiles = pd.read_csv("player_profiles.csv", encoding="utf-8") # 球员基础信息
player_performances = pd.read_csv("player_performances.csv", encoding="utf-8") # 球员表现数据
player_injuries = pd.read_csv("player_injuries.csv", encoding="utf-8") # 球员伤病数据
# 2. 数据筛选(示例:筛选2023-2024赛季英超联赛的球员表现数据)
# 先查看赛季字段格式(假设season_name为“2023/2024”,联赛字段为“competition”)
premier_2324_perf = player_performances[
(player_performances["season_name"] == "2023/2024") &
(player_performances["competition"] == "Premier League")
]
# 3. 多表关联(示例:关联“球员信息+表现+伤病”,分析伤病对表现的影响)
# 以player_id为关联键(所有表统一唯一标识)
player_combined = pd.merge(
left=player_profiles[["player_id", "player_name", "position"]], # 筛选关键信息
right=premier_2324_perf[["player_id", "goals", "assists", "minutes_played"]],
on="player_id",
how="inner" # 只保留有表现数据的球员
)
# 再关联伤病数据
player_combined = pd.merge(
left=player_combined,
right=player_injuries[["player_id", "days_missed", "games_missed"]],
on="player_id",
how="left" # 保留无伤病记录的球员(填充为0)
).fillna({"days_missed": 0, "games_missed": 0}) # 缺失值处理(无伤病则缺席天数为0)
关键说明:
所有表以player_id为统一关联键,是多维度分析的核心(需确保关联键无重复 / 缺失);fillna({"days_missed": 0}):针对无伤病记录的球员,将 “缺席天数” 填充为 0,避免后续计算误差(如统计平均缺席天数时不遗漏数据)。
(2)核心任务演示(2 个高频分析场景)
任务 1:球员市场价值预测(ML 建模基础,以线性回归为例)
工具选择:Python scikit-learn(适合入门级回归建模,易解释);代码示例:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
# 1. 准备数据(使用“球员表现+基础信息”预测“最新市场价值”)
# 读取市场价值数据(假设player_latest_market_value含“player_id”“market_value_euro”)
market_value = pd.read_csv("player_latest_market_value.csv", encoding="utf-8")
# 关联特征与目标变量
model_data = pd.merge(
left=player_combined[["player_id", "goals", "assists", "minutes_played", "days_missed"]],
right=market_value[["player_id", "market_value_euro"]],
on="player_id"
)
# 处理目标变量(避免极端值影响,取对数)
model_data["log_market_value"] = np.log1p(model_data["market_value_euro"])
# 2. 拆分训练集/测试集(8:2比例)
X = model_data[["goals", "assists", "minutes_played", "days_missed"]] # 特征变量
y = model_data["log_market_value"] # 目标变量(对数化后)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. 训练线性回归模型
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
# 4. 模型评估(还原对数结果,计算MSE和R²)
y_pred = lr_model.predict(X_test)
y_pred_euro = np.expm1(y_pred) # 对数还原为实际欧元价值
y_test_euro = np.expm1(y_test)
print(f"均方误差(MSE):{mean_squared_error(y_test_euro, y_pred_euro):.2f}")
print(f"决定系数(R²):{r2_score(y_test_euro, y_pred_euro):.2f}") # R²接近1表示拟合效果好
关键说明:
对market_value_euro取对数(np.log1p):因球员价值分布极不均匀(少数巨星价值极高),对数化后数据更符合线性回归假设,提升模型精度;核心特征选择 “进球数、助攻数、出场时间、缺席天数”:这些维度直接反映球员贡献与健康状态,是影响市场价值的关键因素。
任务 2:球员伤病风险分析(EDA 可视化,用 Seaborn 热力图)
工具选择:Python Seaborn(适合展示变量相关性,直观发现规律);代码示例:
import seaborn as sns
import matplotlib.pyplot as plt
# 1. 准备伤病相关数据(筛选有伤病记录的球员,计算关键指标)
injury_analysis = player_combined[player_combined["days_missed"] > 0].copy()
# 新增“场均出场时间”指标(排除出场为0的情况)
injury_analysis["minutes_per_game"] = injury_analysis["minutes_played"] / (
injury_analysis["games_missed"] + 38 # 假设赛季38轮,总场次=缺席场次+出场场次
)
# 2. 计算相关性矩阵(分析“出场时间、进球数、位置”与伤病的关联)
# 先将位置(position)转为数值型(如前锋=1,中场=2,后卫=3)
position_map = {"Forward": 1, "Midfielder": 2, "Defender": 3, "Goalkeeper": 4}
injury_analysis["position_num"] = injury_analysis["position"].map(position_map)
# 选择需分析的数值字段
corr_fields = ["days_missed", "games_missed", "goals", "assists", "minutes_played", "minutes_per_game", "position_num"]
corr_matrix = injury_analysis[corr_fields].corr()
# 3. 绘制热力图(展示相关性强度)
plt.figure(figsize=(10, 8))
sns.heatmap(
corr_matrix,
annot=True, # 显示相关系数
cmap="coolwarm", # 红=正相关,蓝=负相关
fmt=".2f", # 保留2位小数
linewidths=0.5 # 线条分隔,提升可读性
)
# 图表美化
plt.title("球员伤病与表现/位置相关性热力图", fontsize=14, fontweight="bold")
plt.tight_layout()
plt.show()
关键说明:
新增 “minutes_per_game”:反映球员场均负荷,是伤病风险的重要指标(通常负荷越高,伤病概率越大);热力图解读:若 “minutes_per_game” 与 “days_missed” 的相关系数为 0.7(强正相关),说明场均出场时间越长,缺席天数越多,可指导俱乐部合理安排球员轮换。
(3)效果可视化与部署建议
效果可视化示例:
ML 模型结果:用 Matplotlib 绘制 “实际价值 vs 预测价值” 散点图,直观展示模型拟合效果(散点越接近对角线,预测越准);EDA 分析:用 Plotly 绘制 “不同位置球员伤病天数分布箱线图”,可交互查看前锋 / 后卫的伤病差异(如后卫平均缺席天数高于前锋)。
部署建议:
俱乐部 / 球探:用 Tableau 构建 “球员价值跟踪仪表盘”,设置 “每周自动更新数据”,实时监控目标球员估值变化;研究员:将 ML 建模代码封装为 Python 脚本,通过修改 “season_name” 参数,快速适配新赛季数据,支持批量预测球员价值。
数据集样例展示
(1)核心 CSV 数据样例(部分字段,已脱敏)
表名样例数据(关键字段)player_profilesplayer_id: 1001, player_name: 张三,position: Forward, date_of_birth: 1998-05-12player_performancesplayer_id: 1001, season_name: 2023/2024, competition: Premier League, goals: 12, assists: 5player_injuriesplayer_id: 1001, injury_reason: 肌肉拉伤,from_date: 2024-01-15, end_date: 2024-02-05, days_missed: 21player_latest_market_valueplayer_id: 1001, market_value_euro: 50000000(5000 万欧元)
(2)可视化样例(关键图表)
球员价值分布直方图:呈现 4.1 万球员的价值分布,显示 80% 球员价值低于 1000 万欧元,少数巨星(如前 1%)价值超 5000 万欧元;伤病原因饼图:肌肉拉伤(35%)、韧带损伤(25%)、骨折(15%)为主要伤病类型,可指导俱乐部针对性开展康复训练。
三、结尾
(1)数据集获取与使用说明
获取渠道:后台私信获取或者关注公众号“慧数研析社”获取;使用限制:基于 CC0 公共领域协议,可免费用于商业 / 非商业场景(含俱乐部分析、学术研究),但需注明数据来源为 “Transfermarkt + 本数据集整理”;注意事项:数据每季度更新一次(含最新赛季数据),建议定期同步更新,确保分析结果时效性;若需新增 “球员技术统计(如传球成功率)”,可通过数据集预留字段扩展,无需重构格式。
(2)常见问题解答(FAQ)
Q1:数据是否包含女足或青年队信息?
A1:当前版本聚焦男足职业赛事(成年队),女足与青年队数据将在后续更新中补充,可关注 GitHub 仓库获取通知;Q2:如何处理 “转会费缺失” 的记录?
A2:转会费缺失通常为 “自由转会” 或 “未公开费用”,可在分析时标注为 “0”(自由转会)或用 “同位置同级别球员平均转会费” 填充,数据集附带缺失值处理脚本;Q3:能否用 SQL 进行多表查询?
A3:可将 11 个 CSV 文件导入 MySQL/PostgreSQL,以player_id(球员表)、team_id(球队表)为外键建立关联,支持 “查询某俱乐部球员的转会历史 + 表现” 等复杂查询。