python模拟足球_使用K-Means算法划分亚洲国家的三个足球梯队

数据:asina_football_data.csv

数据描述:

id :国家对应id

国家:国家名称

2019年国际排名:2019 年国际足联的世界排名。

2018年世界杯:2018 年世界杯中,很多球队没有进入到决赛圈,所以只有进入到决赛圈的球队才有实际的排名。如果是亚洲区预选赛 12 强的球队,排名会设置为 40。如果没有进入亚洲区预选赛 12 强,球队排名会设置为 50。

2015年亚洲杯:真实排名。

一、核心代码截图

导入实验中所需要的包

import matplotlib.pyplot as plt

from matplotlib import font_manager

from mpl_toolkits.mplot3d import Axes3D

import matplotlib

import pandas as pd

from sklearn import preprocessing

from sklearn.cluster import KMean

2.导入字体,用于3D图中显示中文汉字,字体可以自行在网上寻找ttf格式的字体。

my_font = font_manager.FontProperties( fname='时尚细黑字体.ttf' )

3.读取数据

# 读取数据

def read_data(filename):

return pd.read_csv( filename )

4.处理数据

# 处理数据

def deal_data(data):

return preprocessing.scale( data.iloc[:, 2:] )

5.训练模型

# 训练模型

def model_fit_pred(scale_x, data, k=3):

model = KMeans( k )

clf = model.fit( scale_x )

pre = clf.predict( scale_x ) # 预测模型

print( pre )

data = pd.concat( [data, pd.DataFrame( pre )], axis=1 )

data.rename( columns={0: "梯队"}, inplace=True ) # 修改列名

return data

画图 3D显示梯队

# 画图 3D显示梯队

def draw(data):

xs = data.iloc[:, 2]

ys = data.iloc[:, 3]

zs = data.iloc[:, 4]

fig = plt.figure()

ax = Axes3D( fig )

name = data.iloc[:, 1]

for label, x, y, z in zip( name, xs, ys, zs ):

ax.scatter( x, y, z )

ax.text( x, y, z, label, fontproperties=my_font )

cValue = ['r', 'y', 'g', 'b', 'r', 'y', 'g', 'b', 'r']

ax.set_xlabel( '2019年国际排名', fontproperties=my_font )

ax.set_ylabel( '2018年世界杯', fontproperties=my_font )

ax.set_zlabel( '2015年亚洲杯', fontproperties=my_font )

plt.show()

最后的主函数调用

if __name__ == '__main__':

data = read_data( "asina_football_data.csv" ) # 读取数据

print( data.head() )

scale_x = deal_data( data )

data = model_fit_pred( scale_x, data, 3 )

print( data.head() )

draw( data ) # 画出3D图

最终3D效果显示:

python模拟足球_使用K-Means算法划分亚洲国家的三个足球梯队_第1张图片

K-Means 的工作原理总结如下:

选取 K 个点作为初始的类中心点,这些点一般都是从数据集中随机抽取的;

将每个点分配到最近的类中心点,这样就形成了 K 个类,然后重新计算每个类的中心点;

重复第二步,直到类不发生变化,或者你也可以设置最大迭代次数,这样即使类中心点发生变化,但是只要达到最大迭代次数就会结束。

如何计算几个梯队的中心点呢,在做项目时常常会遇到这个事情,最简单的方式就是取平均值,然后根据新的中心点按照距离远近重新分配球队的分类,再根据球队的分类更新中心点的位置。

原文链接:https://blog.csdn.net/qq_41986239/article/details/106045507

你可能感兴趣的:(python模拟足球)