我对随机选择的30个国家和2017年所有国家的数据进行了主成分分析,并将多维的包括总分排名(排名或许要删除再计算->已删除)及12大指标的数据降维为二维数据,随后使用K-Means法进行聚类分析后得出分类以及散点图图像。
#读取csv文件并整理数据
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)
#主成分分析 数据降维度
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)
#重塑数据
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
由散点图发现:
- 各国可根据脆弱等级划分为4类
- 随机筛选的30个国家分类整体过度平缓(修改语言),但有3个国家区分度明显
- Rank列数据对散点图影响
http://vinking934296.iteye.com/blog/2356846
下一步:
- 分类畸变程度分析
- 聚类效果评估
- 增加气候指数数据 查看变化
- 标注国家
目前为止涉及方法有:
- 时间序列预测法
- 层次分析法(AHP)
- 主成分分析(PCA)- 数据降维
- K-Means硬聚类算法
网友评论