Python进行多维数据分析

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

从这里找到用于说明的数据的链接。(https://archive.ics.uci.edu/dataset/111/zoo)

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

import pandas as pd

zoo_data = pd.read_csv("zoo_data.csv", encoding = 'utf-8',
							index_col = ["animal_name"])

# print first 5 rows of zoo data 
print(zoo_data.head())

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

聚类分析

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

# from sklearn.cluster import KMeans
clusters = 7

kmeans = KMeans(n_clusters = clusters)
kmeans.fit(zoo_data)

print(kmeans.labels_)

输出
在这里插入图片描述

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

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

EDA分析

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

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

# from sklearn.decomposition import PCA

pca = PCA(3)
pca.fit(zoo_data)

pca_data = pd.DataFrame(pca.transform(zoo_data))

print(pca_data.head())

输出
在这里插入图片描述
上面的数据输出表示简化的三变量(3D)数据,我们可以在其上执行EDA分析。

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

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

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

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

from matplotlib import colors as mcolors
import math

''' Generating different colors in ascending order 
								of their hsv values '''
colors = list(zip(*sorted((
					tuple(mcolors.rgb_to_hsv(
						mcolors.to_rgba(color)[:3])), name)
					for name, color in dict(
							mcolors.BASE_COLORS, **mcolors.CSS4_COLORS
													).items())))[1]


# number of steps to taken generate n(clusters) colors 
skips = math.floor(len(colors[5 : -5])/clusters)
cluster_colors = colors[5 : -5 : skips]

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

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
ax.scatter(pca_data[0], pca_data[1], pca_data[2], 
		c = list(map(lambda label : cluster_colors[label],
											kmeans.labels_)))

str_labels = list(map(lambda label:'% s' % label, kmeans.labels_))

list(map(lambda data1, data2, data3, str_label:
		ax.text(data1, data2, data3, s = str_label, size = 16.5,
		zorder = 20, color = 'k'), pca_data[0], pca_data[1],
		pca_data[2], str_labels))

plt.show()

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

import seaborn as sns

# generating correlation heatmap
sns.heatmap(zoo_data.corr(), annot = True)

# posting correlation heatmap to output console 
plt.show()

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

上述解释的伪代码:

# PseudoCode
tuple -> (position_in_dataframe(feature1),
          position_in_dataframe(feature2),
          correlation(feature1, feature2))

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

from matplotlib import cm

# generating correlation data
df = zoo_data.corr()
df.index = range(0, len(df))
df.rename(columns = dict(zip(df.columns, df.index)), inplace = True)
df = df.astype(object)

''' Generating coordinates with 
corresponding correlation values '''
for i in range(0, len(df)):
	for j in range(0, len(df)):
		if i != j:
			df.iloc[i, j] = (i, j, df.iloc[i, j])
		else :
			df.iloc[i, j] = (i, j, 0)

df_list = []

# flattening dataframe values
for sub_list in df.values:
	df_list.extend(sub_list)

# converting list of tuples into trivariate dataframe
plot_df = pd.DataFrame(df_list)

fig = plt.figure()
ax = Axes3D(fig)

# plotting 3D trisurface plot
ax.plot_trisurf(plot_df[0], plot_df[1], plot_df[2], 
					cmap = cm.jet, linewidth = 0.2)

plt.show()

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

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

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

在这里插入图片描述
我们观察到减小的总inertia为14.479670329670329,这确实比初始inertia小得多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132365.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud学习(三)【Nacos注册中心】

文章目录 认识 NacosNacos 安装使用 Nacos 完成服务注册Nacos 服务分级存储模型集群负载均衡策略 NacosRule根据权重负载均衡Nacos 环境隔离(命名空间)Nacos 和 Eureka 的区别 认识 Nacos Nacos 是阿里巴巴的产品,现在是 SpringCloud 中的一…

高频SQL50题(基础版)-3

文章目录 主要内容一.SQL练习题1.1174-即时食物配送代码如下(示例): 2.550-游戏玩法分析代码如下(示例): 3.2356-每位教师所教授的科目种类的数量代码如下(示例): 4.1141-查询近30天活跃用户数代码如下&…

@CreateCache:深度解析其功能与优势

1. CreateCache前言 在现代Web应用程序开发中,缓存是提高性能和响应速度的重要手段之一。CreateCache注解是JetCache框架中用于创建缓存的注解。本文将介绍CreateCache注解以及它在缓存管理中的作用。 2. CreateCache使用示例 以下是使用CreateCache注解的一个简…

计算机组成原理之处理器(单周期)

引言 处理器的实现方式决定了时钟周期长度和CPI。实现方式有单周期与流水线,本篇谈谈单周期处理器。 目前CPU的频率一般是3GHZ/4GHZ,但是频率是有极限值的,受cycletime影响 基本的RISC-V实现 存储指令:ld,sd算术逻辑指令 &…

python3GUI--QQ音乐By:PyQt5(附下载地址)

文章目录 一.前言二.展示0.播放页1.主界面1.精选2.有声电台3.排行4.歌手5.歌单 2.推荐3.视频1.视频2.分类3.视频分类 4.雷达5.我喜欢1.歌曲2.歌手 6.本地&下载7.最近播放8.歌单1.一般歌单2.自建歌单3.排行榜 9.其他1.搜索词推荐2.搜索结果 三&#x…

第四节(2):修改WORD中表格数据的方案

《VBA信息获取与处理》教程(10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

容器网络-Underlay和Overlay

一、主机网络 前面讲了容器内部网络,但是容器最终是要部署在主机上,跨主机间的网络访问又是怎么样的,跨主机网络主要有两种方案。 二、 Underlay 使用现有底层网络,为每一个容器配置可路由的网络IP。也就是说容器网络和主机网络…

Spring Boot(二)

1、运行维护 1.1、打包程序 SpringBoot程序是基于Maven创建的,在Maven中提供有打包的指令,叫做package。本操作可以在Idea环境下执行。 mvn package 打包后会产生一个与工程名类似的jar文件,其名称是由模块名版本号.jar组成的。 1.2、程序…

Docker容器网络

一、Docker网络 Docker网络有下面4种配置类型,用的比较多的是Bridge: Null(–netNone) 把容器放入独立的网络空间但不做任何网络配置;用户需要通过运行 docker network 命令来完成网络配置。 Host 使用主机网络名空间,复用主机网…

万字详解Linux内核内存规整!超详细!

1.前言 伙伴系统作为内核最基础的物理页内存分配器,具有高效、实现逻辑简介等优点,其原理页也尽可能降低内存外部碎片产生,但依然无法杜绝碎片问题。外部碎片带来的最大影响就是内存足够,但是却无法满足内存分配需求,…

Spring事务一网打尽

Spring事务一网打尽 什么是事务首先说一个坑Spring 中的事务两种用法三大基础设施编程性事务TransactionManager 实现编程性事务TransactionTemplate 实现编程性事务 声明式事务XML配置声明式事务注解配置声明式事务注解XML混合配置声明式事务 什么是事务 这里要额外补充一点&a…

docker主备节点数据同步

主备节点挂载 在生产环境中,赋予一个docker操作系统的权限是一件不安全的事,在不具有系统操作权限的情况下,主备机无法通过nfs进行挂载。此时,可借助数据卷进行挂载 创建两个数据卷 docker volume create vol1 docker volume cr…

openstack部署后实战

分布式部署规则 1、平常都是两台Node安装OpenStack平台,那如果想分布式部署该怎么做?比如:部署两台Nova服务,一台单独的Neutron服务,一台单独的存储节点等。 整体思想: 如果想要部署两台Nova服务&#xf…

vue3 使用element plus 打包时 报错

vue3vitetselementPlus中运行正常打包出错 能正常运行,但是打包出错 解决打包时出现导入element plus相关的爆红,导致无法打包的问题 如若出现类似于:Module ‘“element-plus”’ has no exported member ‘ElMessage’. Did you mean to…

94.二叉树的中序遍历

描述 : 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 题目 : LeetCode 94.二叉树的中序遍历 : 94. 二叉树的中序遍历 分析 : 这个代码还是很好写的 ...... 解析 : /*** Definition for a binary tree node.* public class TreeNode {* int val;…

前端开发项目中使用字体库

开发中有些项目要求使用固定的字体,这就需要项目中使用字体库。 首先需要下载字体库 将下载的字体文件放进项目中 在项目代码样式文件中定义字体 font-face {font-family: "Tobias-SemiBold";src: url("./assets/font/Tobias-SemiBold.ttf"…

Gogs安装和部署教程-centos上

0、什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windo…

「题解」环形链表的约瑟夫问题

文章目录 🍉题目🍉解析🍌创建环形链表🍌释放指定节点🍌其他思路 🍉写在最后 🍉题目 🍉解析 题目的意思就是从环形链表的第一个节点开始数,数到第 m 的时候释放对应的节点…

CMake教程--QT项目使用CMake

CMake教程--QT项目使用CMake Chapter1 CMake教程--QT项目使用CMake1. Basic Cmake Based Project2. Executable VS Library3. Every module has its own CMakeList.txt in its folder3.1 不推荐的做法:3.2 推荐的做法 4. 强制以Debug, Release, RelWithDebInfo, Min…