第五章 变量间关系可视化

Author

学号+姓名

1 解释原始数据

1.1 mtcars

  • mtcars 是R自带的数据集,该数据集摘自 1974年《美国汽车趋势》杂志,包括32款汽车(1973~74款)的油耗、汽车设计和性能等共11个指标。根据该数据集绘制本次练习图形。
  • 指标解释:cyl、vs、am、gear和carb作为因子变量,其余可看作数值变量。

    • mpg: 燃油效率(英里/加仑),数值越高越省油。

    • cyl: 发动机气缸数(4/6/8缸),缸数越多通常动力越强。

    • disp: 发动机排量(立方英寸),排量越大动力越强,油耗越高。

    • hp: 发动机马力(马力),数值越高动力越强。

    • drat: 后轴传动比(比值),影响加速和燃油经济性。

    • wt: 车重(千磅),重量轻的车通常更省油。

    • qsec: 1/4英里加速时间(秒),时间越短动力越强。

    • vs: 发动机类型(0=V型,1=直列),V型多见于高性能车。

    • am: 变速器类型(0=自动,1=手动),手动挡通常更省油。

    • gear: 前进挡位数(3/4/5挡),挡位多可能更平顺省油。

    • carb: 化油器数量(1-8个),数量多可能提升动力。

1.2 diamonds

  • diamondsRggplot2包内置的经典数据集,记录了约 54,000 颗钻石的物理属性和价格信息。数据集包含 10 个变量,4个分类变量,6个数值变量。
  • 指标解释:cut、color、clarity为因子变量,其余可看作数值变量。
    • carat: 钻石重量,单位是克拉(1克拉=0.2克),数值越大钻石越大越贵。
    • cut: 切工质量,分为5个等级:Fair(一般)、Good(良好)、Very Good(很好)、Premium(优质)、Ideal(完美),切工越好钻石光泽越强。
    • color: 颜色等级,从D(无色,最佳)到J(浅黄色),颜色越接近无色价值越高。
    • clarity: 净度等级,分为8级:I1(内含物明显)、SI1-SI2(小内含物)、VS1-VS2(极小内含物)、VVS1-VVS2(极微小内含物)、IF(内部无瑕),净度越高钻石越纯净。
    • depth: 总深度百分比(%),计算公式为z/(x+y)/2*100,影响钻石的光反射效果。
    • table: 台面宽度百分比(%),指钻石顶部平面相对于平均宽度的比例,影响钻石的外观比例。
    • x: 钻石长度(毫米),物理尺寸之一。
    • y: 钻石宽度(毫米),物理尺寸之一。
    • z: 钻石高度(毫米),物理尺寸之一。
    • price: 钻石价格(美元),反映其综合价值,受carat、cut、color、clarity等因素影响。

2 两变量散点图

2.1 绘图要求

  • 利用ggplot(data,aes(x,y))+geom_point()绘制燃油效率(mpg,横轴)和车重(wt,纵轴)两个变量的散点图;

  • 利用geom_rug()为横轴和纵轴绘制地毯图;

  • 利用stat_smooth()为散点图添加拟合直线;

  • 利用geom_point()为散点图添加均值点;

  • 利用ggMarginal(type="densigram") 为散点图添加边际核密度直方图;

  • 利用ggtitle() 将图标题改为散点图+地毯图+线性拟合+边际图

2.2 作图代码

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

    1. 数据分布

      • 左侧的柱状图显示了数字 5, 4, 3, 2, 1, 10 的分布,其中 10 是一个明显的离群值,与其他数值差异较大。

      • 右侧的散点图展示了 mpg(可能指每加仑行驶英里数)与另一变量(未标注)的关系,数据点集中在 25, 30, 35 附近,呈现可能的线性趋势。

    2. 图形类型选择

      • 柱状图适合展示离散数据的频数或数值大小。

      • 散点图适合观察两个变量之间的相关性或分布模式。

    3. 潜在问题

      • 左侧图中 10 的离群值可能需要进一步分析其合理性。

      • 右侧图的坐标轴未标注完整,缺乏上下文信息(如横纵轴含义)。

3 散点图矩阵和相关系数矩阵图

3.1 绘图要求

  • 利用GGally::ggpairs(columns)绘制除cyl、vs、am、gear和carb外6个变量的散点图矩阵;

  • 修改参数upper=list(continuous = "density") ,将上三角图形改为二维核密度等高线图;

  • 利用ggiraphExtra::ggCor() 绘制除cyl、vs、am、gear和carb外6个变量的相关系数矩阵图。

3.2 散点图矩阵

3.3 相关系数矩阵图代码

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

  • 散点图矩阵

  • 图形观察:关注强相关性和显著性,注意数据完整性和标签清晰度。

  • 代码编写

    • 优先处理缺失值和重复数据。

    • 用热力图直观展示相关性,并通过函数自动化标注显著性。

    • 保持代码可扩展性(如支持更多变量或自定义显著性阈值)。

  • 相关系数矩阵图

  • 图形观察

    • 通过相关系数矩阵快速识别强相关变量(如 mpgwt),注意 p 值验证显著性。

    • 警惕数据对齐和冗余值(如 rvalue 1.0)。

  • 代码编写

    • 优先使用成熟库(如 ggcorrplotseaborn)减少重复工作。

    • 封装函数时需兼容 r 值、p 值的格式化输出。

    • 通过热力图掩膜(mask)优化可视化布局。

4 大数据集的散点图

4.1 绘图要求

  • 利用diamonds数据,绘制carat: 钻石重量price: 钻石价格两个变量的散点图;

  • 利用geom_hex(bins=30,size=0.3,color="black"),将散点图转化为六边形分箱散点图;

  • 利用stat_density_2d(geom="raster",aes(fill=..density..),contour=FALSE) ,将散点图转化为二维核密度图;

  • 利用geom_density_2d() ,在散点图上添加核密度等高线;

  • 利用geom_density_2d_filled(alpha=0.8) ,对核密度等高线区域填充颜色。

4.2 六边形分箱散点图

4.3 二维核密度图

4.4 散点图+密度等高线

4.5 散点图+密度等高线带

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

4.7 六边形分箱散点图

  • 图形观察

    • 复合图表能同时展示原始数据分布和密度趋势,适合分析非线性关系。

    • 需关注坐标轴范围和离群值对结论的影响。

  • 代码编写

    • 优先使用高阶封装函数(如jointplot)快速实现基础图形。

    • 通过kind参数灵活切换图表类型(如reghexkde)。

    • 注释和样式优化可显著提升图表可读性。

  • 二维核密度图

  • 图形观察

    • 核密度图能直观揭示数据的多模态分布和相关性,适合分析连续变量的联合分布。

    • 需结合色标和坐标轴标注准确解读密度值含义。

  • 代码编写

    • 核心函数(如kdeplot)的参数(bw_adjustlevels)对图形效果影响显著,需反复调试。

    • 添加辅助元素(色标、等高线)能提升图表的信息量。

    • 大数据场景下需权衡计算效率与可视化精度。

  • 散点图+密度等高线

  • 图形观察

    • 复合图表能同时揭示数据分布和密度趋势,适合分析非线性关系。

    • 需关注坐标轴范围和标签的准确性,避免误导解读。

  • 代码编写

    • 优先使用高阶封装函数(如jointplot)简化代码,再通过参数微调细节。

    • 数据清洗和可视化优化(如异常值处理、标签补充)是提升图表质量的关键步骤。

    • 根据数据规模灵活选择图表类型(如散点图 vs 六边形分箱图)。

  • 散点图+密度等高线带

  • 图形观察要点

  • 密度等高线能有效揭示数据的集中区域和分布模式

  • 复合图表可以同时展示宏观趋势和微观分布

  • 需要特别注意异常值和坐标轴范围的合理性

  1. 代码编写要点
  • 数据清洗是可视化前的重要步骤

  • seaborn提供了高效的复合图表绘制功能

  • 参数调整(如透明度、颜色映射)对最终效果影响很大

  • 适当的注释和标签能显著提高图表的可读性

5 3D散点图和气泡图

5.1 绘图要求

  • 绘制hp发动机马力、mpg燃油效率和wt车重三个变量的 3D 散点图和气泡图。

  • 采用scatterplot3d(x=hp,y=wt,z=mpg)绘制3D散点图,并添加回归平面。

  • 采用ggplot(df,aes(x=hp,y=mpg,color=wt,size=wt)) 绘制气泡图

5.2 3D散点图代码

5.3 气泡图代码

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

5.5 3D散点图

  1. 数据可视化:代码可以用来生成图形,从而可视化数据。这需要对图形库(如Matplotlib、Seaborn、Plotly等)有一定的了解。

  2. 动态图形:通过编程,可以创建动态图形,比如动画或交互式图表,这可以提供更丰富的数据探索体验。

  3. 自动化分析:代码可以自动化数据分析流程,包括数据清洗、处理、分析和可视化,从而提高效率。

  4. 可重复性:通过代码,你可以确保分析的可重复性,这对于科学研究尤为重要。

5.6 气泡图

  1. 迭代过程:图形观察和代码编写通常是一个迭代过程。我们观察图形,根据观察结果调整代码,然后再次观察新的图形。

  2. 深入理解:通过不断地观察和调整,我们可以更深入地理解数据,发现数据中的模式和异常。

  3. 沟通工具:图形是与他人沟通分析结果的强大工具。通过图形,我们可以更直观地展示我们的发现。

  4. 决策支持:图形和代码可以帮助我们做出基于数据的决策,无论是在商业、科研还是日常生活中。

总之,图形观察和代码编写是数据分析中不可或缺的技能。它们帮助我们从数据中提取信息,理解数据背后的模式,并据此做出决策。通过不断练习和应用这些技能,我们可以提高我们的数据分析能力。

6 分组散点图

6.1 绘图要求

  • 以气缸数(cy1)为因子,绘制车重(wt)和燃油效率(mpg)的分组散点图,添加回归直线;

  • 利用facet_grid(~cy1,scale="free_x") ,按因子变量分面;

  • 利用ggplot(data=df,aes(x=wt,y=mpg,shape=cyl,color=cyl)) ,按形状和颜色分组

6.2 按因子变量分面代码

  • 注意分组变量cyl需要转化为因子

6.3 按形状和颜色分组代码

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

6.5 按因子变量分面

  1. 迭代过程:图形观察和代码编写通常是一个迭代过程。我们通过观察图形来理解数据,然后编写代码来进一步探索和验证我们的观察。

  2. 深入分析:结合图形观察和代码编写,我们可以进行更深入的数据分析,发现更复杂的模式和关系。

  3. 错误检测:图形可以帮助我们检测代码中的错误,例如数据预处理或模型拟合中的问题。

  4. 优化:通过图形观察,我们可以识别代码中可能需要优化的部分,以提高分析的准确性或效率。

  5. 创新:结合图形观察和代码编写,我们可以创新新的分析方法和可视化技术,以更好地理解和展示数据。

总之,图形观察和代码编写是数据分析中相辅相成的两个方面。通过有效地结合这两者,我们可以更全面、更深入地理解数据,从而做出更准确的分析和决策。

6.6 按形状和颜色分组

  1. 迭代过程:图形观察和代码编写通常是一个迭代过程。我们通过观察图形来理解数据,然后编写代码来进一步探索和验证我们的观察。

  2. 深入分析:结合图形观察和代码编写,我们可以进行更深入的数据分析,发现更复杂的模式和关系。

  3. 错误检测:图形可以帮助我们检测代码中的错误,例如数据预处理或模型拟合中的问题。

  4. 优化:通过图形观察,我们可以识别代码中可能需要优化的部分,以提高分析的准确性或效率。

  5. 创新:结合图形观察和代码编写,我们可以创新新的分析方法和可视化技术,以更好地理解和展示数据。

总之,图形观察和代码编写是数据分析中不可或缺的两个方面。通过有效地结合这两者,我们可以更全面、更深入地理解数据,从而做出更准确的分析和决策。