我對隨機選擇的30個國家和2017年所有國家的數(shù)據(jù)進行了主成分分析署辉,并將多維的包括總分排名(排名或許要刪除再計算->已刪除)及12大指標的數(shù)據(jù)降維為二維數(shù)據(jù)蒙秒,隨后使用K-Means法進行聚類分析后得出分類以及散點圖圖像。
#讀取csv文件并整理數(shù)據(jù)
def readcsvYear(path):
namesYear = ['Year','Rank','Total','SA','FE','GG','EC','UD','HF','SL','PS','HR','DP','RD','EX']
data = pd.read_csv(path,header=None,names=namesYear)
del data['Rank']
return data
data2017path = 'datasets/problemE/fsi2017.csv'
data2017 = readcsvYear(data2017path)
#主成分分析 數(shù)據(jù)降維度
from sklearn.decomposition import PCA
def getPCAData(data,comp):
pcaClf = PCA(n_components=comp, whiten=True)
pcaClf.fit(data)
data_PCA = pcaClf.transform(data) # 用來降低維度
return data_PCA
def modiData(data):
x1 = []
x2=[]
for i in range(0,len(data+1)):
x1.append(data[i][0])
x2.append(data[i][1])
x1=np.array(x1)
x2=np.array(x2)
#重塑數(shù)據(jù)
X=np.array(list(zip(x1,x2))).reshape(len(x1),2)
return X
#繪制樣式
def drawKmodel(XData,t):
plt.figure(figsize=(10,10))
colors = ['g','r','y','b']
markers = ['o','s','d','h']
kmeans_model = KMeans(n_clusters=t).fit(XData)
for i,l in enumerate(kmeans_model.labels_):
plt.plot(XData[i][0],XData[i][1],color=colors[l],marker=markers[l],ls='None')
plt.title('%s Countries K-Means'%(len(XData)))
data2017PCA = getPCAData(data2017,2)
data2017X = modiData(data2017PCA)
drawKmodel(data2017X,4)
178Kmeansnorank.png
178KmeansBig.png
178Kmeans.png
kmeans-first-k3.png
由散點圖發(fā)現(xiàn):
- 各國可根據(jù)脆弱等級劃分為4類
- 隨機篩選的30個國家分類整體過度平緩(修改語言)肺樟,但有3個國家區(qū)分度明顯
- Rank列數(shù)據(jù)對散點圖影響
http://vinking934296.iteye.com/blog/2356846
下一步:
- 分類畸變程度分析
- 聚類效果評估
- 增加氣候指數(shù)數(shù)據(jù) 查看變化
- 標注國家
目前為止涉及方法有:
- 時間序列預(yù)測法
- 層次分析法(AHP)
- 主成分分析(PCA)- 數(shù)據(jù)降維
- K-Means硬聚類算法