Python 数据可视化学习笔记 之高维数据可视化及其方法
一、高维数据
高维数据泛指高维(multidimensional) 和多变量(multivariate)数据
-- 高维是指数据具有多个独立属性 -- 多变量是指数据具有多个相关属性
高维数据可视化的挑战:
如何呈现单个数据点的各属性的数据值分布,以及比较多个高维数据点之间的属性关系,从而提升高维数据的分类、聚类、关联、异常点检测、属性选择、属性关联分析和属性简化等任务的效率。
说明:
1.聚类:聚类是一种无监督学习的手段,其目的是使相似数据点分布在同一类中,而不同数据点处于不同类中或者噪声中
2.利用关联分析的方法可以发现联系如关联规则或频繁项集。
关联分析需要处理的关键问题:
- 从大型事务数据集中发现模式可能在计算上要付出很高的代价。
- 所发现的某些模式可能是假的,因为它们可能是偶然发生的
高维数据可视化方法分类:
方法之间的比较:
当需要把高维数据以一种可视化的形式展现出来是,则需要对高维数据进行一些处理——降维
2.降维
使用线性或非线性变换把高维数据投影到低高维空间中,去掉冗余属性,同时尽可能地保留高维空间的重要信息和特征
方法分类:
线性方法:主成分分析PCA、多维尺度分析MDS、非矩阵分解NMF,等
非线性方法:等距特征映射ISOMAP、局部线性嵌套LLE,等
2.1主成分分析法(PCA)
详细:(31条消息) 主成分分析(PCA)原理详解_Microstrong-CSDN博客_pca
主成分分析法采用一个线性变换将高维数据变换到一个新的坐标系统中,使得任何数据点投影到第一个坐标(第一主成分)的方差最大,在第二个坐标(第二主成分)的方差为第二大,依次类推。
优点:主成分分析可以减少数据的维数,并保持对方差贡献最大的特征,相当于保留低阶主成分,忽略高阶主成分
特点:一组二维数据,采用主成分分析检测到的前两位综合指标,正好指出数据点的两个主要方向(正交)
作业:使用进行数据集:iris(安德森鸢尾花卉数据集)绘制
iris数据集介绍
iris数据集有150个观测值和5个变量,分别是sepal length、sepal width、petal length、petal width、species,其中species有3个取值:setosa、virginica、versicolor,反正就是鸾尾花的3个不同品种吧,各有50个观测值。具体见下表。
import pandas as pd import numpy as np from plotnine import* from sklearn.decomposition import PCA from sklearn import datasets iris=datasets.load_iris() data = PCA(n_components =2).fit_transform(iris.data) #对数据进行降维处理 target= pd.Categorical.from_codes(iris.target,iris.target_names) df= pd.DataFrame(dict(pca1=data[:,0],pca2 = data[:,1],target= target)) base_plot=(ggplot(df,aes('pca1','pca2',fill='factor(target)'))+geom_point(alpha=1,size= 3,shape='o',colour='k') + #绘制透明度为0.2的散点图stat_ellipse ( geom="polygon",level =0.95, alpha=0.2) + #绘制椭圆标定不同的类型scale_fill_manual(values= ("#00AFBB", "#E7B800", "#FC4E07"),name='group')+theme(axis_title= element_text(size= 15,face= "plain",color= "black"),axis_text= element_text(size= 13,face= "plain" ,color="black"),legend_text = element_text(size= 11,face="plain",color= "black"),figure_size =(5,5),dpi = 100)) print(base_plot)
1.Categorical:categorical 实际上是计算一个列表型数据中的类别数,即不重复项,它返回的是一个CategoricalDtype 类型的对象,相当于在原来数据上附加上类别信息 , 具体的类别可以通过和对应的序号可以通过 codes 和 categories 来查看:
在实际应用中 我们常常是结合他的 codes 属性来一起使用的 , 即
pd.Categorical( list ).codes 这样就可以直接得到原始数据的对应的序号列表,通过这样的处理可以将类别信息转化成数值信息 ,这样就可以应用到模型中去了 另外更加详细的功能参考官网。
其实看到这里 可以发现 Categorical 的功能和 之前在机器学习 数据处理部分提到的 LabelEncoder (https://blog.csdn.net/weixin_38656890/article/details/80849334)
的功能是一样的, 不过 Categorical 是对自己编码 ,而LabelEncoder 是通过通过一个样本 制成标准 然后 对其他样本编码,因而相对的更加灵活。
2.pd.Categorical.from_codes用于类别替换
原来版本是pd.Factor,新版本换成了pd.Categorical.from_codes(),功能都一样;
实例:
pd.Categorical.from_codes(iris.target, iris.target_names)
原来的target是这样的:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) 现在变成了这样:
[setosa, setosa, setosa, setosa, setosa, ..., virginica, virginica, virginica, virginica, virginica] Length: 150 Categories (3, object): [setosa, versicolor, virginica]
2.2 t-SNE算法
Manifold Learing是一种非线性降维的手段,可以看作一种生成类似PCA的线性框架,不同的是可以对数据中的非线性结构敏感。虽然存在监督变体,但是典型的流式学习问题是非监督的:它从数据本身学习高维结构,不需要使用既定的分类。 t-SNE是一种工具。
非线性降维算法 基于在邻域图上随机游走的概率分布来找到数据的内部结构 基本思想:若两个数据在高维空间中是相似的,则降维至2维空间时它们应该离得很近(用条件概率来描述两个数据之间的相似性)TSNE的实现总体上并不复杂,麻烦的是其超高的浮点运算和大型矩阵的操控。
t-SNE(t分布随机邻域嵌入)是一种用于探索高维数据的非线性降维算法。通过基于具有多个特征的数据点的相似性识别观察到的簇来在数据中找到模式,将多维数据映射到适合于人类观察的两个或多个维度。本质上是一种降维和可视化技术。使用该算法的最佳方法是将其用于探索性数据分析。
from sklearn.manifold import TSNEiris_embedded = TSNE(n_components=2).fit_transform(iris.iloc[:,:-1])pos = pd.DataFrame(iris_embedded, columns=['X','Y'])
pos['species'] = iris['species']ax = pos[pos['species']=='virginica'].plot(kind='scatter', x='X', y='Y', color='blue', label='virgnica')
pos[pos['species']=='setosa'].plot(kind='scatter', x='X', y='Y', color='green', label='setosa', ax=ax)
pos[pos['species']=='versicolor'].plot(kind='scatter', x='X', y='Y', color='red', label='versicolor', ax=ax)
import pandas as pdimport numpy as npfrom plotnine import *from sklearn import manifold, datasetsdf=pd.read_csv('D:\Tsne_Data.csv')df=df.set_index('id')num_rows_sample=5000df = df.sample(n=num_rows_sample)tsne = manifold.TSNE(n_components=2, init='pca', random_state=501)X_tsne = tsne.fit_transform(df.iloc[:,:-1])df=pd.DataFrame(dict(DistributedY1=X_tsne[:, 0],DistributedY2=X_tsne[:, 1],target=df.iloc[:,-1])) base_plot=(ggplot(df, aes('DistributedY1','DistributedY2',fill='target')) +geom_point (alpha=1,size=2,shape='o',colour='k', stroke=0.1)+scale_fill_hue(s = 0.99, I= 0.65, h=0.0417,color_space='husl')+xlim(-100,100)) print(base_plot)
1.set_index( ) 将 DataFrame 中的列转化为行索引。
2.sample(序列a,n)
功能:从序列a中随机抽取n个元素,并将n个元素生以list形式返回。
参考:
基于Python的数据可视化:从一维到多维 - 简书 (jianshu.com)
(31条消息) pd.Categorical 的用法_code_new_life的博客-CSDN博客_pd.categorical
pd.Categorical.from_codes()用于类别替换 - 小小喽啰 - 博客园 (cnblogs.com)
Python 数据可视化学习笔记 之高维数据可视化及其方法相关推荐
- Python数据科学学习笔记之——Matplotlib数据可视化
Matplotlib 数据可视化 1.Matplotlib 常用技巧 1.1.导入 Matplotlib import matplotlib as mpl import matplotlib.pypl ...
- python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化
文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...
- 大数据第二阶段Python基础编程学习笔记(待完善)
大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...
- ECharts数据可视化学习笔记和应用
ECharts数据可视化学习笔记和应用 一.概念 二.Echarts使用 使用步骤 三.Echarts-基础配置 四.柱状图图表1 五.柱状图图表2 六.折线图1 七.折线图2 八.饼状图1 九.饼形 ...
- 大数据业务学习笔记_学习业务成为一名出色的数据科学家
大数据业务学习笔记 意见 (Opinion) A lot of aspiring Data Scientists think what they need to become a Data Scien ...
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...
- React学习:路由定义及传参、数据复用-学习笔记
文章目录 React学习:路由定义及传参.数据复用-学习笔记 在React中使用react-router-dom路由 简单例子 路由定义及传参 React学习:路由定义及传参.数据复用-学习笔记 在R ...
- Vue学习笔记入门篇——数据及DOM
本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...
- vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient
概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
最新文章
- MDK中软仿真下Debug-(printf)Viewer
- python3项目-把项目从Python2.x移植到Python3.x的经验总结
- 美国版“健康码”遭遇尴尬:隐私保护最大化 疫情追踪基本无效
- Redis 持久化(persistence)
- 关于用飞信框架运行net程序-用批处理运行
- linux实验之文件与文件,linux实验报告文件系统与文件管理.doc
- oracle视图失效,ORACLE 11Gr2 V$ARCHIVED_LOG视图过期信息
- 损失函数梯度对比-均方差和交叉熵
- 初识JAVA--foreach语句的应用
- mysql不能删除外键吗,为什么mysql不允许删除外键?
- CSDN帐号管理规范
- 以太网口差分电平_以太网差分信号线在两层PCB板上的布线方法
- 格局炸裂,程序员必看的十部纪录片
- 源码解析少儿编程微课程9:机械手臂模拟制作
- C语言实现康托尔集cantor set(附完整源码)
- Qt使用QImage裁剪图片
- 009-Dockerfile-MAINTAINER(deprecate)-使用 LABEL 代替
- 主干开发(Trunk-based development)
- too many open files in system报错处理方案
- WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)
热门文章
- 如何用getevent查看C-TouchPanel上报数据?
- 使用python调用openmpi编译的MPI 动态库报错:mca_base_component_repository_open: unable to open mca_patcher_overwri
- 《单片机原理与接口技术》小结
- 5G和北斗,交通行业新基建的正确打开方式
- 林郑月娥冀香港发挥连接中外优势发展创科
- 单循环赛制php,告别东西部分组LPL实行常规赛单循环赛制
- UART串口驱动代码编写及总结
- flex和blazeds_使用BlazeDS和AMF构建Web和桌面应用程序
- Jmeter启动失败
- MSNMessenger忌讳用法大全(转)