通过python对2018年足球世界杯的球员信息进行数据分析

一.目的和意义

目的:通过python的学习,在获取一定数量的数据后,加之进行数据分析来研究一些问题,能够将我们所学的知识融会贯通,提高编程能力。用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程
意义:为了对数据分析有一个较为清楚的认识,从一堆杂乱无章的数据中能够发现一定的有规律性的结论,有时候可能会觉得某些结论有些牵强,但这属于每个人对每个问题而见解不同,因而较强的数据分析能力,需要在以后的学习中进行慢慢培养出来。同时本次设计很好的将pandas库运用到其中,这个也可以帮助我们学以致用,会起到更好的效果。

二.程序详细设计

在这里插入图片描述

1、下载数据集文件(FIFA18v2.csv)
链接(百度网盘):https://pan.baidu.com/s/14CyKS5D2buo3FRyDhB5DlA
提取码:ocba
2、进行数据分析

# 导入数据和第三方库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl

# 默认字体为黑体
mpl.rcParams['font.family'] = 'SimHei'

# 字体大小为15
mpl.rcParams['font.size'] = 15

# 解决保存图像是负号'-'显示中文为方块的问题
mpl.rcParams['axes.unicode_minus'] = False

# 读取csv文件
data = pd.read_csv('FIFA18v2.csv')

# 输出球员的数据类型和列表
print(data.dtypes)
print(data.columns)

# 每个球员的球员数量和属性数量
print(data.shape)
print(data.head())

# 球员年龄的分布区间
data.count()
bins = np.arange(15, 50, 5)
bins_data = pd.cut(data['Age'], bins)
bin_counts = data['Age'].groupby(bins_data).count()
bin_counts.plot(kind='pie', figsize=(10, 8), autopct='%.2f%%')
plt.xlabel('年龄')
plt.title('球员年龄的分布区间')
plt.show()

# 球员数量最多的前五个国家
num_date = data['Nationality'].value_counts().head(5).plot.pie(figsize=(10, 8), autopct='%.2f%%')
plt.title('国籍分布前5名')
plt.xlabel('国籍')
plt.show()

# 球员数量最多的前十个俱乐部
date = data['Club'].value_counts().head(10).plot.pie(figsize=(10, 8), autopct='%.2f%%')
plt.title('俱乐部分布前10名')
plt.xlabel('俱乐部')
plt.show()

# 十大最有价值球员
sorted_data = data.sort_values(by='Value', ascending=False).head(10)[['Name', 'Value']]
sorted_data.plot.bar(x='Name', y='Value', figsize=(10, 8), color=['r', 'g', 'b', 'c', 'm', 'y'])
plt.title("最有价值球员:前10名")
plt.xlabel("球员姓名")
plt.ylabel("身价")
plt.show()

# 收入最高的十名球员
sorted_data = data.sort_values(by='Wage', ascending=False).head(10)[['Name', 'Wage']]
sorted_data.plot.bar(x='Name', y='Wage', figsize=(10, 8), color=['r', 'g', 'b', 'c', 'm', 'y'])
plt.title("收入最高:前10名")
plt.xlabel("球员姓名")
plt.ylabel("工资")
plt.show()

# 当前和潜在评级之间差异最大的球员,拥有最高评级提升的球员
temp_data = data.copy()
temp_data['Potential_Increase'] = temp_data['Potential'] - temp_data['Overall']
temp_data.sort_values(by='Potential_Increase', ascending=False).head(10)[['Name', 'Potential_Increase']].plot.bar(x='Name', y='Potential_Increase', figsize=(10, 8), color=['r', 'g', 'b', 'c', 'm', 'y'])
plt.xlabel('球员姓名')
plt.ylabel('增加潜力')
plt.show()

# 平均工资和身价关系
data.groupby('Age')['Value'].mean().plot(figsize=(10, 8))
plt.xlabel('年龄')
plt.ylabel('身价')
plt.title('平均工资和身价关系')
plt.show()

# 平均工资和年龄关系
data.groupby('Age')['Wage'].mean().plot(figsize=(10, 8))
plt.xlabel('年龄')
plt.ylabel('工资')
plt.title('平均工资和年龄关系')
plt.show()

# 平均潜力和年龄关系
temp_data.groupby('Age')['Potential_Increase'].mean().plot.bar(figsize=(10, 8), color=['r', 'g', 'b', 'c', 'm', 'y'])
plt.xlabel('年龄')
plt.ylabel('潜力')
plt.title('平均潜力和年龄关系')
plt.show()


# 最佳属性的球员
def draw_graph(attribute_name):
    data.sort_values(by=attribute_name, ascending=False).head(10)[['Name', attribute_name]].plot.bar(x='Name',y='{}'.format(attribute_name),
                                                                                                     figsize=(10, 8),
                                                                                                     color=['r', 'g','b'],
                                                                                                     fontsize=14)
    plt.show()


# 速度快的前十球员
draw_graph('Acceleration')

# 前十佳运球手
draw_graph('Dribbling')

# 前十佳完赛者
draw_graph('Finishing')

# 前十佳球员
draw_graph('Strength')

# 前十佳传球手
draw_graph('Short Passing')

# 前十佳的点球手
draw_graph('Penalties')

三.报告总结

通过python学习,让我对python知识有了更深层次的了解。在课程和课外教程的强化下,感觉我对于Python语法、numpy、pandas还有列表,类方法,类变量等知识使用得更加熟练了,希望自己可以在不断得加强学习中掌握相关的技能。继续加油!学习python之路漫长,要先打好基础。

猜你喜欢

转载自blog.csdn.net/m0_63599362/article/details/131983367