Advertisement

差异可视化-多维量法(MDS)

阅读量:

本任务涉及对美国国家教育统计中心数据的处理与分析,主要分为两部分:第一部分通过计算距离矩阵并使用多维标度法(MDS)实现降维,并绘制降维后的散点图;第二部分在此基础上,分别按不同特征和聚类结果对数据进行着色,并在图中标注具体名称。整个过程利用了pandas、scikit-learn、matplotlib等工具进行数据处理与可视化。

第1关:美国国家教育统计中心数据——降维

本环节的任务是基于美国国家教育统计中心的数据,计算出各数据点之间的距离矩阵。然后,采用多维标度法(MDS)对数据进行降维处理,最后,绘制降维后的散点图,以便直观地观察数据的分布情况。

复制代码
    # -*- coding: utf-8 -*-  
    import pandas as pd #用于生成满足绘图要求的数据格式  
    from sklearn.manifold import MDS #用于MDS降维  
    import matplotlib.pyplot as plt #用于绘制撒点图  
    from sklearn.cluster import KMeans #用于Kmeans聚类  
    from scipy.spatial import distance #用于计算获取距离矩阵  
    edu=pd.read_csv(r"MDS/csv/education.csv") #读取csv数据,返回值为二维标记数据结构 DataFrame  
    def plot():  
    # ********* Begin *********#  
    edu_x=edu.iloc[:,1:7] #选择edu_x中的第1列到第6列  
    DM_dist = distance.squareform(distance.pdist(edu_x,     metric="euclidean")) #计算距离矩阵  
    clf2 = MDS(n_components=2,dissimilarity="precomputed") #将矩阵降成2维数据  
    edu_t2 = clf2.fit_transform(DM_dist) #先拟合数据,再标准化  
    fig,ax=plt.subplots() #subplots返回画布和子图  
    ax.scatter(edu_t2[:,0],edu_t2[:,1]) #绘制散点图  
    names=list(edu.iloc[:,0])  
    for i in range(len(names)):  
        plt.annotate(names[i], xy = (edu_t2[:,0][i],edu_t2[:,1][i]), xytext=(-20, 5), textcoords='offset points')  
    # ********* End *********#  
    plt.savefig("MDS/studentanswer/level_1/education.png")  
    plt.close()

第2关:美国国家教育统计中心数据——分别按特征和聚类结果着色

本关的任务是基于前一关的降维结果,对美国国家教育统计中心的数据按照不同特征与聚类结果进行颜色标注。

复制代码
    # -*- coding: utf-8 -*-  
    import pandas as pd #用于生成满足绘图要求的数据格式  
    from sklearn.manifold import MDS #用于MDS降维  
    import matplotlib.pyplot as plt #用于绘制撒点图  
    from sklearn.cluster import KMeans #用于Kmeans聚类  
    from scipy.spatial import distance #用于计算获取距离矩阵  
    edu=pd.read_csv(r"MDS/csv/education.csv") #读取csv数据,返回值为二维标记数据结构 DataFrame  
    def plot():  
    # ********* Begin *********#  
    edu_x=edu.iloc[:,1:7] #选择edu_x中的第1列到第6列  
    DM_dist = distance.squareform(distance.pdist(edu_x, metric="euclidean")) #计算距离矩阵  
    clf2 = MDS(n_components=2,dissimilarity="precomputed") #将矩阵降成2维数据  
    edu_t2 = clf2.fit_transform(DM_dist) #先拟合数据,再标准化  
    reading_colors_list=[]  
    average=sum(edu_x["reading"])/len(edu_x["reading"])  
    for i in range(0,len(edu_x["reading"])):  
        if edu_x["reading"][i] < average:  
            reading_colors_list.append("#DB7093")  
        else:  
            reading_colors_list.append("#5F9F9F")  
    fig,ax = plt.subplots() #subplots返回画布和子图  
    ax.scatter(edu_t2[:,0],edu_t2[:,1],color=reading_colors_list) #绘制散点图  
    names=list(edu.iloc[:,0])  
    for i in range(len(names)):  
        plt.annotate(names[i], xy = (edu_t2[:,0][i],edu_t2[:,1][i]), xytext=(-20, 5), textcoords='offset points', color = reading_colors_list[i])  
    # ********* End *********#  
    plt.savefig("MDS/studentanswer/level_2/education.png")  
    plt.close()

全部评论 (0)

还没有任何评论哟~