使用Python进行多维数据分析

多维数据分析是对数据的信息分析,它考虑了许多关系。让我们来介绍一些使用Python分析多维/多变量数据的基本技术。

可以从下面找到用于说明的数据的链接。

以下代码用于从zoo_data. csv读取2D表格数据。

1import pandas as pd  
2  
3zoo_data = pd.read_csv("zoo_data.csv", encoding = 'utf-8',  
4                            index_col = ["animal_name"])  
5  
6# print first 5 rows of zoo data   
7print(zoo_data.head())  

输出

**注意:**我们这里的数据类型通常是分类的。本案例研究中使用的分类数据分析技术是非常基本的,易于理解,解释和实施。这些方法包括聚类分析、相关分析、PCA(主成分分析)和EDA(探索性数据分析)。

聚类分析

由于我们拥有的数据是基于不同类型动物的特征,我们可以使用一些众所周知的聚类技术将动物分为不同的组(簇)或子组,即KMeans聚类,DBscan,层次聚类和KNN(K-Nearest Neighbours)聚类。为了简单起见,在这种情况下,KMeans聚类应该是一个更好的选择。使用Kmeans聚类技术对数据进行聚类,可以使用sklearn库聚类类的KMeans模块实现,如下所示:

1# from sklearn.cluster import KMeans  
2clusters = 7  
3  
4kmeans = KMeans(n_clusters = clusters)  
5kmeans.fit(zoo_data)  
6  
7print(kmeans.labels_)  

输出

inertia表示的是每个样本点到其所在质心的距离之和。按照inertia的定义来说inertia是越小越好。

在这里,总的集群inertia是119.70392382759556。

EDA分析

为了执行EDA分析,我们需要将多变量数据降维为三变量/双变量(2D/3D)数据。我们可以使用PCA(主成分分析)来实现这个任务。

可以使用sklearn库的类分解的PCA模块进行PCA,如下所示:

1# from sklearn.decomposition import PCA  
2  
3pca = PCA(3)  
4pca.fit(zoo_data)  
5  
6pca_data = pd.DataFrame(pca.transform(zoo_data))  
7  
8print(pca_data.head())  

输出

上面的数据输出表示简化的三变量(3D)数据,我们可以在其上执行EDA分析。

注意: PCA产生的简化数据可间接用于执行各种分析,但不能直接由人类解释。

散点图是一种2D/3D图,有助于分析2D/3D数据中的各种聚类。

我们之前制作的3D简化数据的散点图可以绘制如下:

下面的代码是一个Python代码,它生成一个颜色数组(其中颜色的数量大约等于聚类的数量),按照色调,值和饱和度值的顺序进行排序。这里,每种颜色与单个聚类相关联,并将用于将动物表示为3D点,同时将其绘制在3D图/空间中(本例中为散点图)。

 1from matplotlib import colors as mcolors  
 2import math  
 3  
 4''' Generating different colors in ascending order   
 5                                of their hsv values '''  
 6colors = list(zip(*sorted((  
 7                    tuple(mcolors.rgb_to_hsv(  
 8                        mcolors.to_rgba(color)[:3])), name)  
 9                    for name, color in dict(  
10                            mcolors.BASE_COLORS, **mcolors.CSS4_COLORS  
11                                                    ).items())))[1]  
12  
13  
14# number of steps to taken generate n(clusters) colors   
15skips = math.floor(len(colors[5 : -5])/clusters)  
16cluster_colors = colors[5 : -5 : skips]

下面的代码是一个pythonic代码,它生成一个3D散点图,其中每个数据点都有一个与其对应的聚类相关的颜色。

 1from mpl_toolkits.mplot3d import Axes3D  
 2import matplotlib.pyplot as plt  
 3  
 4fig = plt.figure()  
 5ax = fig.add_subplot(111, projection = '3d')  
 6ax.scatter(pca_data[0], pca_data[1], pca_data[2],   
 7        c = list(map(lambda label : cluster_colors[label],  
 8                                            kmeans.labels_)))  
 9  
10str_labels = list(map(lambda label:'% s' % label, kmeans.labels_))  
11  
12list(map(lambda data1, data2, data3, str_label:  
13        ax.text(data1, data2, data3, s = str_label, size = 16.5,  
14        zorder = 20, color = 'k'), pca_data[0], pca_data[1],  
15        pca_data[2], str_labels))  
16  
17plt.show()

输出

仔细分析散点图可以得出这样的假设,即使用初始数据形成的聚类没有足够好的解释力。为了解决这个问题,我们需要将我们的特征集降低到一个更有用的特征集,使用它我们可以生成有用的聚类。产生这样一组特征的一种方法是进行相关性分析。这可以通过如下绘制热图和3d图来完成:

1import seaborn as sns  
2  
3# generating correlation heatmap  
4sns.heatmap(zoo_data.corr(), annot = True)  
5  
6# posting correlation heatmap to output console   
7plt.show()  

输出

下面的代码用于通过制作元组列表来生成相关矩阵的3d图,其中元组包含按动物名称顺序排列的坐标和相关值。

上述解释的伪代码:

1# PseudoCode  
2tuple -> (position_in_dataframe(feature1),  
3          position_in_dataframe(feature2),  
4          correlation(feature1, feature2))  

用于生成相关矩阵的3d图的代码:

 1from matplotlib import cm  
 2  
 3# generating correlation data  
 4df = zoo_data.corr()  
 5df.index = range(0, len(df))  
 6df.rename(columns = dict(zip(df.columns, df.index)), inplace = True)  
 7df = df.astype(object)  
 8  
 9''' Generating coordinates with   
10corresponding correlation values '''  
11for i in range(0, len(df)):  
12    for j in range(0, len(df)):  
13        if i != j:  
14            df.iloc[i, j] = (i, j, df.iloc[i, j])  
15        else :  
16            df.iloc[i, j] = (i, j, 0)  
17  
18df_list = []  
19  
20# flattening dataframe values  
21for sub_list in df.values:  
22    df_list.extend(sub_list)  
23  
24# converting list of tuples into trivariate dataframe  
25plot_df = pd.DataFrame(df_list)  
26  
27fig = plt.figure()  
28ax = Axes3D(fig)  
29  
30# plotting 3D trisurface plot  
31ax.plot_trisurf(plot_df[0], plot_df[1], plot_df[2],   
32                    cmap = cm.jet, linewidth = 0.2)  
33  
34plt.show()

输出

使用热图和3d图,我们可以对如何选择用于执行聚类分析的较小特征集进行一些推断。通常,具有极端相关值的特征具有很高的解释力,可以用于进一步的分析。

在这种情况下,查看两个图,我们得到了7个特征的合理列表:[“milk”, “eggs”, “hair”, “toothed”, “feathers”, “breathes”, “aquatic”]

再次对子集特征集运行聚类分析,我们可以生成散点图,更好地推断如何在不同的群体中传播不同的动物。

我们观察到减小的总inertia为14.479670329670329,这确实比初始inertia小得多。

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值