第六章 样本相似性可视化课堂练习

Author

kaka

1 案例数据

1.1 iris:鸢尾花数据集

  • R语言内置的 iris 数据集(鸢尾花数据集)是统计学和机器学习领域最经典的案例数据集之一,由英国统计学家 Ronald Fisher 在1936年首次提出。它包含了3种鸢尾花的测量数据,每个类别有50个样本,共150行数据。
变量名 数据类型 单位 说明
Sepal.Length numeric cm 花萼(萼片)长度,即花朵最外层绿色叶状结构的长度
Sepal.Width numeric cm 花萼(萼片)宽度
Petal.Length numeric cm 花瓣长度,即花朵内部彩色叶状结构的长度
Petal.Width numeric cm 花瓣宽度
Species factor - 鸢尾花种类(分类标签),包含3个水平:
setosa山鸢尾
versicolor变色鸢尾
virginica维吉尼亚鸢尾
  • setosa 类的花通常较小,花瓣短而宽,与其他两类差异明显;versicolorvirginica 在部分特征上有重叠,分类难度更高。

2 平行坐标图和雷达图

2.1 平行坐标图

  • ggplot(group=id)+geom_line+geom_point 绘图
  • Species 映射为颜色

2.1.1 图形观察和代码编写的心得体会

  • 从这张平行坐标图可以看出:

    1. 它展示了四个变量:Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)和Petal.Width(花瓣宽度)

    2. 这很可能是对鸢尾花(Iris)数据集的可视化,因为这几个变量是鸢尾花数据集的经典特征

    3. 不同颜色的线条可能代表不同种类的鸢尾花(如setosa、versicolor、virginica)

    4. 可以观察到某些变量组合有明显的聚类特征,说明不同种类在这些特征上有明显差异

  • 2.1.2 实用经验

    1. 变量顺序很重要,可以按相关性或聚类效果排序

    2. 对于大数据集,需要调整透明度或采样以减少重叠

    3. 颜色选择要确保不同类别清晰可辨

    4. 添加交互功能(如plotly)可以增强探索性分析

    平行坐标图特别适合展示中等维度的数据,能够揭示变量间的关系和聚类模式,是探索性数据分析的有力工具。

2.2 雷达图

  • 采用ggiraphExtra::ggRadar 绘图

2.2.1 图形观察和代码编写的心得体会

  • 从这张雷达图可以看出:

    1. 它展示了鸢尾花(Iris)数据集的四个特征:Petal.Width(花瓣宽度)、Sepal.Length(花萼长度)、Petal.Length(花瓣长度)和Sepal.Width(花萼宽度)

    2. 三个不同颜色的多边形代表三个鸢尾花种类:setosa、versicolor和virginica

    3. 每个变量的数值范围在0-6之间,可能是经过标准化处理的结果

    4. setosa在Sepal.Width上表现突出,而virginica在Petal.Length和Petal.Width上数值较高

    5. 图形清晰地展示了不同种类在各个特征上的差异模式

    2.2.2 实用经验

    1. 雷达图适合比较4-8个维度的数据,过多会导致图形难以阅读

    2. 变量顺序应按逻辑排列,通常将相关变量相邻放置

    3. 数据标准化是必须的步骤,否则量纲大的变量会主导图形

    4. 颜色选择要确保对比明显,特别是打印时也要可区分

    5. 添加适当的图例和标题增强可读性

    6. 可以考虑添加交互功能(如plotly)来增强用户体验

    雷达图能直观展示多维数据中不同类别的特征模式,特别适合用于比较不同类别在各个维度上的表现。但需注意避免过度解读面积大小,重点应放在各轴上的相对位置。

3 星图和脸谱图

3.1 星图

  • 采用stars 函数,对标准化数据绘制圆弧星图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 设置图例在合适位置,能完整显示;将图形分为10行。

3.1.1 图形观察和代码编写的心得体会

3.1.2 图形观察心得:

  1. 细节识别:观察图形时,需要关注细节,比如形状、颜色、排列等,这有助于发现图形中的规律或模式。

  2. 模式识别:识别图形中的重复模式或序列,这有助于理解图形的整体结构。

  3. 空间推理:图形观察往往需要良好的空间推理能力,以理解图形在二维或三维空间中的布局。

  4. 创造性思维:有时,图形观察可以激发创造性思维,比如在艺术设计或图形游戏中。

  5. 耐心和专注:仔细观察图形可能需要时间和耐心,尤其是在寻找隐藏的细节或模式时。

3.1.3 代码编写心得:

  1. 逻辑思维:编写代码需要清晰的逻辑思维,以确保代码能够按照预期的方式运行。

  2. 问题分解:将复杂问题分解成更小、更易于管理的部分,这是编写代码时常用的策略。

  3. 模式识别:在代码中识别和利用模式可以提高代码的可读性和效率。

  4. 调试和测试:编写代码后,需要通过调试和测试来确保代码的正确性和稳定性。

3.2 脸谱图

  • 采用aplpack::faces 函数,作Species 三个类别的脸谱图
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 设置图例在合适位置,能完整显示;将图形分为3列。

effect of variables:
 modified item       Var           
 "height of face   " "Sepal.Length"
 "width of face    " "Sepal.Width" 
 "structure of face" "Petal.Length"
 "height of mouth  " "Petal.Width" 
 "width of mouth   " "Sepal.Length"
 "smiling          " "Sepal.Width" 
 "height of eyes   " "Petal.Length"
 "width of eyes    " "Petal.Width" 
 "height of hair   " "Sepal.Length"
 "width of hair   "  "Sepal.Width" 
 "style of hair   "  "Petal.Length"
 "height of nose  "  "Petal.Width" 
 "width of nose   "  "Sepal.Length"
 "width of ear    "  "Sepal.Width" 
 "height of ear   "  "Petal.Length"

3.2.1 图形观察和代码编写的心得体会

  • 从这张简单的标签图可以看出:

    1. 它列出了鸢尾花(Iris)数据集的三个种类:setosa、versicolor和virginica

    2. 这三个标签代表了鸢尾花的三个不同物种分类

    3. 虽然没有展示具体数据,但这通常是更复杂可视化(如箱线图、散点图或柱状图)的图例或分类依据

    1. 颜色选择:为不同类别选择对比明显的颜色,确保色盲用户也能区分

      • 推荐使用ColorBrewer的配色方案

      • 可以使用scale_fill_brewer(palette = "Set2")

    2. 标签排序:考虑按某种逻辑排序(如字母、平均值等)

4 聚类图和热图

4.1 系统聚类树状图

  • 采用factoextra::fviz_dend 函数,对标准化后数据作图;
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 要求分为3类,观察分类结果和Species 的差异;树状图的外观为圆形。

4.1.1 图形观察和代码编写的心得体会

  • 4.1.2 图形观察心得:

    1. 层次结构:图形展示了一个清晰的层次结构,这有助于理解不同元素之间的关系。

    2. 颜色编码:颜色的变化可能代表不同的分类或特征,这有助于快速识别和区分不同的组。

    3. 分支长度:在系统发育树中,分支的长度通常与进化距离或时间有关,观察这些长度可以提供关于进化速率的信息。

    4. 节点:节点的位置和数量可以提供关于共同祖先和分化时间的信息。

    5. 密集区域:图形中密集的区域可能表示物种多样性较高的区域,这可能是研究的热点。

    4.1.3 代码编写心得:

    1. 数据结构:编写代码时,选择合适的数据结构来存储和处理数据是非常重要的,比如使用树结构来表示系统发育关系。

    2. 算法选择:根据问题的性质选择合适的算法,比如在构建系统发育树时可能需要使用特定的算法来计算距离矩阵和构建树。

    3. 可视化:代码编写不仅仅是逻辑实现,还包括如何将结果以图形的方式展示出来,这需要对可视化工具和库有一定的了解。

    4. 性能优化:对于处理大量数据的代码,性能优化是必不可少的,比如通过减少不必要的计算或使用更高效的数据结构。

4.2 K-menas聚类主成分图

  • 采用factoextra::fviz_cluster 函数,对标准化后数据作图;

  • 需要先将四个数值变量转化为矩阵,并将1:150 作为矩阵的行名;

  • 要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。

4.2.1 图形观察和代码编写的心得体会

  • 从这张K-means聚类结果图可以看出:

    1. 数据被分成3个聚类(符合鸢尾花数据集的三分类特性)

    2. 使用降维技术(可能是PCA)后的二维可视化,Dim1解释了24.8%的方差

    3. 图中显示了一些异常数值(如-105102等),可能是图像解析错误或数据标准化问题

    4. 三个聚类在二维空间中有明显的分离趋势

    5. 坐标轴范围显示数据经过了某种缩放处理

    K-means作为最常用的聚类算法,虽然原理简单,但在实际应用中需要考虑数据特性、参数选择和结果解释等多个方面。通过可视化可以直观评估聚类效果,但也要结合统计指标进行综合判断。在R中,factoextra包提供了丰富的聚类可视化功能,极大简化了分析流程。

4.3 热图

  • 采用gplots::heatmap.2 函数,对原始数据绘制热力图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 要求横轴和纵轴均添加聚类树状图

4.3.1 图形观察和代码编写的心得体会

4.3.2 图形观察心得:

  1. 模式识别:通过颜色的变化,可以快速识别数据中的模式,比如哪些特征在不同种类之间有显著差异。

  2. 聚类分析:树状图显示了数据的聚类结果,可以帮助理解不同数据点之间的相似性。

  3. 数据分布:热图可以直观地展示数据的分布情况,比如哪些特征在数据集中占主导地位。

  4. 异常值检测:通过观察颜色的异常变化,可以发现数据中的异常值或离群点。

  5. 多维数据简化:热图将多维数据简化为二维图形,使得复杂数据的可视化变得更加容易。

4.3.3 代码编写心得:

  1. 数据处理:在编写代码之前,需要对数据进行预处理,比如标准化或归一化,以确保热图能够正确反映数据的模式。

  2. 选择合适的库:在Python中,可以使用如matplotlib、seaborn或pandas等库来创建热图和进行聚类分析。

  3. 代码优化:编写高效的代码来处理和分析数据,尤其是在处理大型数据集时。

  4. 可视化参数调整:调整热图的颜色映射、聚类方法等参数,以获得最佳的可视化效果。