关于运动员伤病预测数据集的探索(上)https://developer.aliyun.com/article/1507871?spm=a2c6h.13148508.setting.17.1b484f0euQtoBM
从上面的条形图中,我们可以得到关于特征重要性的信息:
Player_Weight
:这个特征的重要性得分最高,这意味着在预测运动员受伤可能性时,体重可能是最重要的因素之一。Player_Height
:这个特征的重要性得分也很高,排在第二位。这表明身高也可能是预测受伤可能性时的一个重要因素。Player_Age
:年龄特征的重要性得分相对较高,排在第三位。这意味着年龄也可能是预测受伤可能性时的一个重要因素。Training_Intensity
和Previous_Injuries
:这两个特征的重要性得分相对较低。尽管我们在之前的分析中观察到Previous_Injuries
与Likelihood_of_Injury
之间存在一定的相关性,但在随机森林模型中,它的重要性不如其他特征。Recovery_Time
:这个特征的重要性得分最低,意味着在预测受伤可能性时,它可能是最不重要的因素。
需要注意的是,特征重要性得分是基于随机森林模型的,它反映了特征在模型中的预测能力。不同的模型可能会给出不同的特征重要性得分。 此外,特征重要性得分也不能完全代表特征在实际问题中的重要性。因此,在做出任何结论之前,我们可能还需要进行更深入的分析或考虑其他类型的模型。
5、展示更多的特征组合
从上面的配对图中,我们可以得到关于特征之间关系的信息:
Player_Age
vsPlayer_Height
:这两个特征之间存在较强的正相关关系,这与我们之前的观察一致。随着年龄的增长,身高通常也会增长。Player_Weight
vsPlayer_Height
:这两个特征之间也存在较强的正相关关系。通常情况下,身高较高的个体体重也较重。Training_Intensity
vsLikelihood_of_Injury
:从散点图中我们可以看到,随着训练强度的增加,受伤的可能性也有所增加,但这种关系不是很强。Previous_Injuries
vsLikelihood_of_Injury
:有先前受伤历史的运动员的受伤可能性略高于没有先前受伤历史的运动员。Recovery_Time
vsLikelihood_of_Injury
:从散点图中我们看不出明显的趋势,表明恢复时间与受伤可能性之间没有明显的直接关系。
这些观察结果与我们之前的分析结果相符。配对图提供了一个更全面的视角来观察特征之间的关系,帮助我们更好地理解数据。
需要注意的是,配对图只能展示特征之间的两两关系,并不能提供关于它们之间更复杂交互作用的详细信息。 在实际应用中,我们可能还需要考虑特征之间的交互作用,或者使用更复杂的模型来捕获这些关系。
总结
为了帮助调整训练计划以降低受伤风险,我们可以基于现有的数据集来提供一些建议。以下是一些可能有助于降低受伤风险的建议:
- 监控训练强度:分析显示:训练强度与受伤可能性之间存在微弱的正相关关系。
建议运动员和教练团队密切监控训练强度,避免过度训练。可以考虑使用心率监测器和其他可穿戴设备来跟踪训练强度,并据此调整训练计划。 - 注意体重和身高:分析显示:体重和身高是预测受伤可能性的重要因素。运动员应该确保他们的体重和身高比例适当,避免过重或过高的体重增加受伤风险。
- 考虑年龄因素:分析显示:随着年龄的增长,运动员的身体恢复能力和适应性可能会下降。
建议年长的运动员可能需要更加注意训练强度和恢复时间,以降低受伤风险。 - 预防先前受伤的再次发生:分析显示:有先前受伤历史的运动员受伤的可能性略高。
建议运动员在训练前进行适当的热身和拉伸,以预防先前受伤的再次发生。 - 适当增加恢复时间:分析显示:恢复时间与受伤可能性之间没有明显的直接关系,但适当的恢复对于避免过度训练和减少受伤风险仍然非常重要。
但还是建议运动员确保在训练之间有足够的恢复时间。
附录
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns injury_data = pd.read_csv('injury_data.csv') injury_data.head() missing_values = injury_data.isnull().sum() statistical_summary = injury_data.describe() missing_values statistical_summary
1、探索这些特征与受伤可能性之间的关系
#为seaborn打造风格 sns.set_style("whitegrid") #创建子地块 fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(15, 15)) #年龄与受伤可能性 sns.boxplot(x="Likelihood_of_Injury", y="Player_Age", data=injury_data, ax=axes[0, 0]) axes[0, 0].set_title("Age vs Likelihood of Injury") #重量与受伤可能性 sns.boxplot(x="Likelihood_of_Injury", y="Player_Weight", data=injury_data, ax=axes[0, 1]) axes[0, 1].set_title("Weight vs Likelihood of Injury") #身高与受伤可能性 sns.boxplot(x="Likelihood_of_Injury", y="Player_Height", data=injury_data, ax=axes[1, 0]) axes[1, 0].set_title("Height vs Likelihood of Injury") #既往受伤与受伤可能性 sns.barplot(x="Previous_Injuries", y="Likelihood_of_Injury", data=injury_data, ax=axes[1, 1]) axes[1, 1].set_title("Previous Injuries vs Likelihood of Injury") #训练强度与受伤可能性 sns.boxplot(x="Likelihood_of_Injury", y="Training_Intensity", data=injury_data, ax=axes[2, 0]) axes[2, 0].set_title("Training Intensity vs Likelihood of Injury") #恢复时间与受伤可能性 sns.boxplot(x="Likelihood_of_Injury", y="Recovery_Time", data=injury_data, ax=axes[2, 1]) axes[2, 1].set_title("Recovery Time vs Likelihood of Injury") plt.tight_layout() plt.show()
2、创建一个成对图以可视化要素之间的关系
# 计算相关性矩阵 correlation_matrix = injury_data.corr() # 创建热力图可视化相关性矩阵 plt.figure(figsize=(15, 12)) # 调整图形大小 sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0) plt.title("Correlation Heatmap of Features") plt.show()
3、特征相关性分析
correlation_with_target = injury_data.corr()["Likelihood_of_Injury"].drop("Likelihood_of_Injury") plt.figure(figsize=(10, 6)) correlation_with_target.sort_values().plot(kind='bar') plt.title("Correlation of Features with Likelihood of Injury") plt.xlabel("Features") plt.ylabel("Correlation Coefficient") plt.xticks(rotation=45) plt.grid(axis='y') plt.show()
4、特征重要性分析
from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split #将数据拆分为训练集和测试集 X = injury_data.drop("Likelihood_of_Injury", axis=1) y = injury_data["Likelihood_of_Injury"] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) #初始化随机林分类器 rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42) #训练分类器 rf_classifier.fit(X_train, y_train) #获取功能重要性 feature_importances = rf_classifier.feature_importances_ #创建条形图以可视化功能重要性 plt.figure(figsize=(10, 6)) sorted_idx = feature_importances.argsort() plt.barh(range(len(sorted_idx)), feature_importances[sorted_idx], align='center') plt.yticks(range(len(sorted_idx)), [X.columns[i] for i in sorted_idx]) plt.xlabel("Feature Importance") plt.title("Feature Importances from Random Forest") plt.grid(axis='x') plt.show()
5、展示更多的特征组合
sns.pairplot(injury_data, hue="Likelihood_of_Injury", diag_kind="kde") plt.suptitle("Pairplot of Features with Likelihood of Injury", y=1.02) plt.show()