資料:asina_football_data.csv
資料描述:
id :國家對應id
國家:國家名稱
2023年國際排名:2019 年國際足聯的世界排名。
2023年世界盃:2018 年世界盃中,很多球隊沒有進入到決賽圈,所以只有進入到決賽圈的球隊才有實際的排名。如果是亞洲區預選賽 12 強的球隊,排名會設定為 40。如果沒有進入亞洲區預選賽 12 強,球隊排名會設定為 50。
2023年亞洲盃:真實排名。
一、核心**截圖
匯入實驗中所需要的包
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.讀取資料
# 讀取資料
defread_data
(filename)
:return pd.read_csv( filename )
4.處理資料
# 處理資料
defdeal_data
(data)
:return preprocessing.scale( data.iloc[:,
2:])
5.訓練模型
# 訓練模型
defmodel_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=
, inplace=
true
)# 修改列名
return data
畫圖 3d顯示梯隊
# 畫圖 3d顯示梯隊
defdraw
(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(
'2023年國際排名'
, fontproperties=my_font )
ax.set_ylabel(
'2023年世界盃'
, fontproperties=my_font )
ax.set_zlabel(
'2023年亞洲盃'
, 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效果顯示:
k-means 的工作原理總結如下:
選取 k 個點作為初始的類中心點,這些點一般都是從資料集中隨機抽取的;
將每個點分配到最近的類中心點,這樣就形成了 k 個類,然後重新計算每個類的中心點;
重複第二步,直到類不發生變化,或者你也可以設定最大迭代次數,這樣即使類中心點發生變化,但是只要達到最大迭代次數就會結束。
如何計算幾個梯隊的中心點呢,在做專案時常常會遇到這個事情,最簡單的方式就是取平均值,然後根據新的中心點按照距離遠近重新分配球隊的分類,再根據球隊的分類更新中心點的位置。
劃分聚類 Kmeans演算法
劃分聚類 聚類是針對一堆沒有類別屬性的物件的,它把這一大堆物件分成一些小堆,並保證小堆內的物件之間彼此相似,小堆之間的物件彼此不同。劃分聚類是聚類的一種,由它生成的小堆,小堆間沒有一樣的元素,大堆小堆之間關係和大集合與它的的分割一樣。kmeans演算法 設資料點 物件 的集合為 其中,xi 是實數空...
mahout使用KMeans演算法
mahout提供了記憶體中和分布式的兩種kmeans聚類實現。下面是記憶體中kmeans的 示例,示例 使用了最簡單的一維向量作為輸入 tests kmeans cluster algorithm in memory,note the test uses only 1 d vector i.e.a ...
kmeans演算法在matlab中的使用
matlab中kmeans使用 matlab中kmeans使用 英文實在太難看懂了,翻譯一下 後續有空就加上吧 idx,c kmeans x,k 返回聚類下標idx,聚類中心座標c idx,c,sumd kmeans x,k 返回聚類內的點到中心的距離之和的k 1 向量 sumd.idx,c,sum...