数据分析之球队人员身体状况变化

分析目的:

查看球员身体一年内变化情况

分析思路:

数据只有球员身高,年龄,体重三个方面,因为身高,年龄在一年内不会有太大的变化,所以,只有体重会影响球员整体的身体状况。BMI指数不适用运动员,故不考虑。>
在这里插入图片描述

分析内容
数据:

球员的基本数据以及数据的变化情况

数据清洗

观察数据,updated这组数据中,第二列下降的应该是体重,而不是身高,需要将第一列与第二列互换,代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 将列表转换为ndarray数组格式
np_baseball = np.array(baseball)
np_updated = np.array(updated)

#数据不对,降低的是体重,更换第一列与第二列,
data= np.array(np_updated[:,0] )
np_updated[:,0]=np_updated[:,1]
np_updated[:,1]=data
print(np_updated)

显示出来的结果如下,成功互换:

[[-11. 1. 1.]
[ 16. 1. 1.]
[ 5. 1. 1.]

[ 4. 1. 1.]
[-18. 1. 1.]
[ 8. 1. 1.]]

计算今年变化后的结果:

# 计算今年更新的结果 把原本的数据与更新数据进行相加
ans = np_baseball + np_updated
print(ans)

显示结果如下
[[ 63. 181. 23.99]
[ 90. 216. 35.69]
[ 77. 211. 31.78]

[ 79. 206. 26.19]
[ 57. 191. 32.01]
[ 81. 196. 28.92]]

数据分析

1.观察球员总体状况,体现在身高,体重,年龄的中位数,均值,人数

df = pd.DataFrame(ans)
df_character = df.describe()
print(df_character )

#结果如下
                 0            1            2
count  1015.000000  1015.000000  1015.000000
mean     73.483744   202.359606    29.708355
std      10.385066    20.823001     4.314453
min      36.000000   151.000000    21.900000
25%      67.000000   187.000000    26.405000
50%      74.000000   201.000000    28.900000
75%      80.000000   216.000000    32.190000
max     112.000000   291.000000    49.520000

观察数据的总体特征,总共1015条数据,其中身高的标准差最大,身高整体差异很大, 而年龄标准差最小,年龄分布相对比较集中,体重次之。

weights_last = np_baseball[:,0]
heights_last = np_baseball[:,1]
weights = ans[:,0]
heights = ans[:,1]
weight_l= weights.tolist()
plt.figure(figsize=(20, 8), dpi=100)
distance =1
group_num = int((max(weight_l) - min(weight_l)) / distance)
plt.hist(weight_l, bins=group_num)
plt.grid(linestyle="--", color="r", alpha=0.3)
plt.xlabel("weights range")
plt.ylabel("weights num")
plt.show()

体重分布及去年今年的变化:
在这里插入图片描述
在这里插入图片描述
球员今年体重分布情况,与上图相比,体重主要范围由去年的70-80公斤扩大到了50-100公斤。

2.计算体重的具体变化情况分为三种情况:

  • 体重下降的人数为486人
  • 体重上升的人数为491人
  • 体重无变化的人数为38人

代码如下:

#计算体重减少的人数
updated = np.array(updated)
counts1 = np.count_nonzero(updated)
#这里找出体重变化中为负的数值,也可能包含体重没有变化的即为0
updated[updated<0]=0
counts2 = np.count_nonzero(updated)
print(counts1-counts2)
# 486人体重下降

#计算体重上升人数
df_updated = pd.DataFrame(updated,columns = ['one','two','three'])
df_updated[df_updated>0] = '上升'
print(df_updated['two'].value_counts())
#为491人体重上升
#体重无变化人数为1015-491-486=38

3.计算体重具体上升下降了多少。

df_updated = pd.DataFrame(updated,columns = ['one','two','three'])
#weight_change=(df_updated['two'].value_counts())
#print(weight_change)
#为了方便观察,将统计出来的个数及与其相对应的值保存起来:
weight_change=(df_updated['two'].value_counts()).reset_index()
df =( pd.DataFrame(weight_change)).values
print(df)

将结果进行转置后显示结果如下,第一行为体重的变化,第二行为相对应的人数:
[[ 6. 1. 2. -4. -6. -1. 0. -2. -7. 3. 5. -11. 4. 7.
-5. 11. -9. 8. -3. -8. 9. -12. 13. 10. -13. 14. -15. 12.
-10. -14. 16. 15. 18. -20. 17. -17. -16. -18. 21. -22. -19. 27.
-21. 22. 19. -23. -27. -25. 25. 20. 26. -29. -32. -35. -30. 35.
23. -26. -28.]
[ 49. 48. 42. 41. 40. 39. 38. 38. 35. 34. 33. 32. 31. 30.
30. 28. 28. 28. 27. 26. 24. 24. 23. 20. 20. 20. 18. 14.
14. 13. 12. 11. 10. 9. 9. 8. 8. 8. 7. 6. 5. 4.
4. 3. 3. 3. 2. 2. 2. 2. 2. 1. 1. 1. 1. 1.
1. 1. 1.]]

根据体重下降情况,绘制散点图:

x= df[:,0]
y= df[:,1]
plt.figure(figsize=(20, 8), dpi=100)
plt.scatter(x, y)
plt.show()

在这里插入图片描述
观察图可知,体重变化与人数之间呈现负偏态相关,即多数人的体重高于平均数。

4.具体是哪部分人的体重下降?体重下降跟年龄和身高有关系吗?

age_weights = np.vstack((np_baseball[:,2], np_updated[:,1]))
height_weights = np.vstack((np_baseball[:,1], np_updated[:,1]))
print(age_weights)
print(height_weights)

显示如下:
[[ 22.99 34.69 30.78 … 25.19 31.01 27.92]
[-11. 16. 5. … 4. -18. 8. ]]

[[180. 215. 210. … 205. 190. 195.]
[-11. 16. 5. … 4. -18. 8.]]

根据体重变化情况,绘制散点图:
在这里插入图片描述
在这里插入图片描述
观察图可知,体重与身高,年龄都无相关关系。

分析结果:

1.体重增高人数高于体重降低人数,多数人体重高于平均水平。
2.球员体重不断向两极化扩展,变化差异很大。
3.体重与年龄,身高无明显相关性。

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页