数据科学 - 数据可视化(持续更新)

1. 前言​​​​​​​

数据可视化能够将复杂的数据集转化为易于理解的图形、图表或图像。这种直观的表现形式使得人们能够更快地理解数据的分布、趋势、异常值以及数据之间的关系,从而更深入地洞察数据背后的信息。

数据可视化在数据分析和决策制定过程中具有不可替代的作用。它不仅能够帮助人们更好地理解数据、识别模式和趋势、增强沟通效果,还能够辅助决策制定、提升数据质量、激发创新思维和提高工作效率。因此,掌握数据可视化技能对于数据分析师、数据科学家以及任何需要处理和分析数据的人员来说都至关重要。

2. 基础作图

2.1 折线图

在使用python进行可视化操作最离不开的就是我们的matplotlib库

import matplotlib.pyplot as plt

在这个库中有着多种工具帮助我们对数据作出相应的绘图。

#可视化matplotlib
import matplotlib.pyplot as plt
train = pd.DataFrame({'code':[1,2,3,4,5],'price':[222,333,444,555,666]})
train.plot()
plt.plot(train)

自定义一个数据集train,包含code与price,让我们对此简单的作一个图。

直接选用train数据集作图我们可以看出系统自动画了两条折线,plot会默认样本数量为x轴的刻度,y轴就是对应标签属性数。在未指明的情况下,plot会默认创建相应的坐标轴。

2.2 plot参数

如上图所示,这是一个十分简陋的折线统计图,plot函数为我们提供了许多参数可以对图进行进一步调整:

  1. x:指定x轴的数据,可以是一个数组、列表或者NumPy数组。这是绘制图形时横坐标的数据。

  2. y:指定y轴的数据,可以是一个数组、列表或者NumPy数组。这是绘制图形时纵坐标的数据。

  3. linestyle(或简写为ls):指定线条的样式,如实线('-')、虚线('--')、点划线('-.')等。默认为实线。

  4. linewidth(或简写为lw):指定线条的宽度,可以是整数或浮点数。默认为1。

  5. color(或简写为c):指定线条的颜色。可以是字符串(如'red'、'blue'等)、缩写(如'r'、'b'等)或者十六进制颜色代码(如'#FF0000')。默认为蓝色。

  6. marker:指定数据点的标记样式,如'o'(圆圈)、'+'(加号)等。默认为不使用标记('None')。

  7. markersize(或简写为ms):指定数据点标记的大小,可以是整数或浮点数。默认为6。

  8. markeredgecolor(或简写为mec):指定数据点边缘的颜色。可以是字符串、缩写或者十六进制颜色代码。默认为与线条颜色相同。

  9. markerfacecolor(或简写为mfc):指定数据点填充的颜色。可以是字符串、缩写或者十六进制颜色代码。默认为无填充颜色('none')。

  10. label:指定线条的标签,用于图例显示。默认为不显示图例('None')。注意,虽然plot()函数提供了图例标签信息,但需要配合legend()函数才能显示图例。

  11. alpha:指定线条和数据点的透明度,取值范围为0(完全透明)到1(完全不透明)。默认为1。

  12. zorder:指定图层顺序,数值越大,图层越靠前。默认为0。

  13. data = pd.DataFrame([1,4,5,7,9,11,20])
    data.plot(color='red',alpha=0.9,legend=True,marker='o',linestyle='--',markeredgecolor='blue',label=2)
  14. 其他常见参数

  15. xlabel:指定x轴的标签。

  16. ylabel:指定y轴的标签。

  17. title:指定图表的标题。

  18. xlimylim:分别指定x轴和y轴的显示范围。

  19. grid:是否显示网格线,可以设置为True或False。

  20. legend:虽然作为参数传入时通常用于控制图例的显示(但更常见的做法是使用legend()函数),但注意plot函数本身不接受legend作为直接控制图例显示的参数。

  21. figsize:指定图表的大小,以英寸为单位,格式为(width, height)。

2.3 图像调整

在图中看到最下面的一个直线趋近于直线,是因为我们的y轴刻度范围给的太大,这就需要我们进一步对图进行刻画。

作图

plt.plot(color='red')

坐标轴刻度范围

plt.xlim([0,4])
plt.ylim([0,300])

坐标轴刻度

plt.xticks([1,2,10],labels=['a','b','c'],rotation=0)

坐标轴标签

plt.xlabel('sample')
plt.ylabel('amount')

图的标题

plt.title('easy')

请记住,DataFrame的行表示图的横坐标,列为纵坐标

3. 可视化图像

以wine数据集为例

获取到如此庞大的数据集我们一脸懵逼,但通过使用作图的方式我们可以很好的去找到每一个类别中相比较下独特的属性。

例如柱状统计图直观反映各个数据项的比较关系。

3.1 柱状图

3.1.1 离散柱状图

柱状图特别适合用来展示分类变量的数据,所以一般横坐标表示分类变量,柱的高度代表其对应数值。

df1 = data['class'][data['Alcohol'] >13].value.counts() #统计这一列中出现元素的个数
df2 = data['class'][data['Alcohol'] <= 13].value_counts()
train = pd.DataFrame({'>13':df1,'<=13':df2}) #每一个类别有两个柱
train.plot(kind=bar)

上述代码统计每一个类别中酒精度超过13以及不超过13的数量。

离散柱状图作为最常见的柱状统计图,能够一眼看出各个数据的大小,便于比较数据之间的差别。

运行结果如下: 

 上图可以发现类别为1的样本大多数酒精含量超过13,相比之下偏高,类别2则大部分低于13;类别3的样本则是较为均匀,一半一半。

3.1.2 堆叠柱状图

train.plot(kind='bar',stacked=True) #堆叠柱状图

 

 堆叠柱状图可以更加直观看出每一类别的组成成分,以及不同类别之间总量的大小关系。

  • 同类数据对比:在同一根柱子内,不同分类的数据可以直接进行对比,观察者可以清楚地看到哪些分类占据主导地位,哪些分类贡献较小。
  • 跨类别数据对比:通过对比不同柱子(即不同分类或时间点)的高度和构成,观察者可以分析不同分类或时间点之间的数据变化趋势和差异。

3.2 直方图

直方图通过连续变量的区间分布来展示数据的分布情况。它主要用于描述数值变量的分布。

注意区分柱状图bar主要用于描述分类(categorical)变量的数据,统计分类变量的大小。所以为了区分每一类别,bar图不同类别柱都是相隔开的。

data = {'A': [2, 2, 2, 2, 1],  'B': [5, 4, 3, 2, 1],  'C': [2.5, 2.7, 3.0, 3.2, 3.5]}  
df1 = pd.DataFrame(data)  
df1
df1['A'].plot(kind='hist',bins=10,alpha=0.7,align='mid') #alpha控制透明度

调节hist标签位置

上图看出,柱子的中心并没有与x轴标签对齐

调节hist标签位置通常是一个两步过程:首先绘制直方图,然后(可选地)调整x轴的刻度标签位置。

import pandas as pd  
import numpy as np  # 示例数据  
#手动调节对齐
data = {'A': [2, 2, 2, 2, 1],  'B': [5, 4, 3, 2, 1],  'C': [2.5, 2.7, 3.0, 3.2, 3.5]}  
df1 = pd.DataFrame(data)  
df1
#hist默认上下界限为count第一个与最后一个,想要更改x轴标签,需要选中上下限位置中柱体的居中位置的标签修改labels
# 计算直方图的柱子和中心  
counts, bin_edges = np.histogram(df1['A'], bins=11, density=False)  #bins代表柱子个数,一般为间距+1,与计数点一样多
bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2  
print(counts,bin_edges)
print(bin_centers)
# 绘制直方图  
df1['A'].plot(kind='hist', bins=11, alpha=0.7,density=Flase)  #density是否应该被归一化为概率密度# 手动设置x轴的刻度标签(可选)  
plt.xticks(bin_centers,labels=[1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0])  # 显示图形  
plt.show()

hist默认上下界限为count第一个与最后一个,想要更改x轴标签,需要选中上下限位置中柱体的居中位置的标签修改labels。换句话来讲想要通过修改标签位置,实际上是找到柱子中心底座的标签,再将其标签的label进行修改,柱子是不会移动的。 

 ​​​​​​​

这样就是手动对齐直方图与其标签。 

3.3 散点图

3.3.1 分组散点图

plt.scatter(data['class'],data['Total_phenols'],color='red')
plt.xticks(ticks=[1,2,3],labels=['A','B','C'],rotation=-45) #负数为逆时针旋转
plt.xlabel('class')
plt.ylabel('Total phenols')
#plt.grid() 显示网格

scatter(x,y),上述代码中class类别代表横坐标,Total_phenols代表纵坐标。通过散点图,可以直观看出每一个类别中的phenols的分布情况。

如下图所示:

上述散点图得知,class1中phenols含量相对较高,离散程度较小;class2离散程度大,phenols含量每一个样本浮动程度也大;而class3含量相对较低。

通过散点图,可以直观的对数据进行统计分析,较为基础的发现每一类别中数据离散程度,极值的相对大小,数据集中内部关系;但仍然需要进一步计算各个指标得出更精准的结论。 

4. 可视化进阶

4.1 子图

#子图
import pandas as pd
data = pd.DataFrame({'A':[2,3],'B':[1,7]})import matplotlib.pyplot as plt
fig = plt.figure() #创建一张图
ax1 = plt.subplot(1,2,1) #在行为1,列为2(及列方向创建)2个子图
data.plot(kind='bar',ax=ax1) #指定坐标轴
ax1.set_xlabel('Example1')
ax1.set_title('Example1')ax2 = plt.subplot(1,2,2)

单个图形窗口中创建多个子图(即多个图表),允许用户在一个视图内展示多个数据集或数据维度的对比和关联,从而提高数据分析的效率和深度。 

 

创建子图的作用主要是以下三点:

1. 多角度展示数据

  • 数据对比:subplot允许将不同数据集或同一数据集的不同方面在同一图形界面中展示,便于用户直接对比各数据集或数据维度的差异。

  • 多维度分析:在数据分析中,经常需要从多个角度观察数据,subplot提供了一种直观的方式来同时展示这些不同角度的视图。

2. 提高空间利用率

  • 节省空间:相比于分别创建多个独立的图表,subplot能够在有限的图形界面空间内展示更多信息,减少了图表之间的切换需求。

  • 优化布局:通过合理的布局设计,subplot可以使得整个图形界面看起来更加整洁、有序,提高了数据的可读性。

3. 便于故事讲述

  • 连贯性:在数据报告或演示中,subplot可以帮助构建一个连贯的故事线,通过多个子图的相互呼应和补充,使得数据的呈现更加生动、有力。

  • 引导性:通过合理的子图排列和顺序,可以引导观众或读者的注意力,按照特定的逻辑顺序来理解和分析数据。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的7种设计模式原则

一、设计模式前言 设计模式&#xff08;Design Patterns&#xff09;的“模式”指的是一种在软件设计中经过验证的、解决特定问题的方案。它们不是具体的代码&#xff0c;而是解决常见设计问题的抽象方案或模板。设计模式提供了一种标准的方式来组织代码&#xff0c;以提高代码…

为JetBrains IDE设置自定义TODO筛选器(筛选指定的关键字)和Live Templates

为JetBrains IDE设置自定义TODO筛选器&#xff08;筛选指定的关键字&#xff09;和Live Templates 以下内容以搜索关键字 // TODO Zzz 为例&#xff0c;不区分大小写&#xff0c;可以将模板中的 Zzz 换成其他内容。 设置自定义TODO筛选器 在IDE设置中找到TODO选项&#xff0…

AWS注册是否必须使用美元银行卡

亚马逊网络服务(AWS)作为全球领先的云计算平台,吸引了众多企业和个人用户。然而,不少人在注册AWS账户时会产生疑问:是否必须使用美元银行卡?实际上,这种说法并不准确。虽然AWS的主要结算货币是美元,但用户在注册和使用过程中有多种支付方式可供选择。我们结合九河云的分析来告…

程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇

正文&#xff1a; 在这个充满变数的时代&#xff0c;作为一名前端开发者&#xff0c;我经历了行业的起伏&#xff0c;见证了裁员危机和中年失业危机的残酷。在这样的背景下&#xff0c;我开始了利用AI绘画作为副业的探索&#xff0c;不仅为了寻求经济上的稳定&#xff0c;更是为…

DLMS/COSEM中的信息安全:安全密钥(下)

2.5组件B终端实体证书类型要由DLMS/COSEM服务器支持 每个DLMS/COSEM服务器应使用X.509 v3格式&#xff0c;并包含以下任一项&#xff1a; ——具有P-256或P-384 ECDSA功能的签名密钥&#xff1b;或 ——具有P-256或P-384 ECDSA功能的密钥协商密钥。 每张证书均应使用ECDSA进行签…

lvs(linux virtual server)实例

一.lvs概述 1.1什么是lvs LVS&#xff08;Linux Virtual Server&#xff09;是一个基于Linux操作系统的虚拟服务器技术&#xff0c;用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上&#xff0c;从而提高整体服务的处理能力和可靠性。LVS主要有两个组…

蓝桥杯 双周赛 第16场 小白赛 题目复盘 (2024年8月10日)

3. 织女的考验 下面的代码看似很正确&#xff0c;但忽略了一个细节&#xff0c;下面判断是否有字母数量不同时&#xff0c;用abs(cnt[i]) 1判断&#xff0c;这里忽略了abs(cnt[i]) 等于其他值的情况(YES和NO都存在) #include <iostream> #include <cstring> usi…

java: 程序包org.springframework.boot.autoconfigure不存在

通过 mvn -U idea:idea 命令重新加载maven包&#xff0c;具体操作是这样的&#xff1a; 打开cmd窗口cd 到 工程根目录&#xff0c;比如我的工程是&#xff1a;D:\IdeaProjects\demo&#xff0c; 执行 mvn -U idea:idea 命令&#xff0c;完了以后重新运行项目就正常了&#xff…

《网络编程实战系列》(17)网络桥接模式

文章目录 **桥接模式的基本原理****桥接模式的应用场景****桥接模式的优缺点****桥接模式的实现****总结**桥接模式(Bridge Mode)是一种网络配置模式,用于将多个网络接口或网络段连接在一起,使其在逻辑上形成一个单一的网络。这种模式常用于在不同网络之间传递数据包,并使…

树与二叉树、图的基本概念

一、树与二叉树的基本概念和性质 1. 树的的性质 1&#xff09;树中的结点数 n 等于所有结点的度数之和加 1 【说明】结点的度是指该结点的孩子数量&#xff0c;每个结点与其每个孩子都由唯一的边相连&#xff0c;因此树中所有结点的度数之和等于树中的边数之和。树中的结点&…

pr涂鸦转场(喷漆涂鸦效果视频转场过渡效果)mogrt模板

https://prmuban.com/40353.html 主要特点&#xff1a; 与Adobe Premiere Pro 2024兼容 4K分辨率&#xff08;38402160&#xff09; 自动调整大小功能 快速渲染时间 无需额外插件 包括视频教程

240806-在Linux/RHEL开机中自动启动bash脚本

A. 常规方法 要在Red Hat Enterprise Linux (RHEL) 中设置开机启动的bash脚本&#xff0c;可以使用以下方法之一&#xff1a; 方法1&#xff1a;使用/etc/rc.d/rc.local 打开/etc/rc.d/rc.local文件&#xff1a; sudo vi /etc/rc.d/rc.local在文件末尾添加你想要执行的bash脚…

<Qt> 窗口

目录 一、Qt窗口 二、菜单栏 &#xff08;一&#xff09;创建菜单栏 &#xff08;二&#xff09;在菜单栏中添加菜单 &#xff08;三&#xff09;创建菜单项 &#xff08;四&#xff09;在菜单项之间添加分割线 &#xff08;五&#xff09;给菜单项添加槽函数 &#xf…

虚拟机和docker容器的区别

背景 我们知道虚拟机和docker容器中的进程都可以在独立的空间中运行&#xff0c;互不干扰&#xff0c;那么两者主要区别是什么呢 虚拟机和docker容器的区别 虚拟机主要是通过硬件模拟出来一个个操作系统&#xff0c;每个操作系统有自己的的文件和目录&#xff0c;网络设备等…

最新HTML设计搜索表单

设计搜索表单 页眉中包含表单&#xff0c;表单中只需包含label和Input. 实现如下效果&#xff1a;文本框动态变宽效果 代码&#xff1a;6.2.4.设计搜索表单.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title></t…

第R2周:Tensorflow2实现:LSTM-火灾温度预测

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务说明&#xff1a;数据集中提供了火灾温度&#xff08;Tem1&#xff09;、一氧化碳浓度&#xff08;CO 1&#xff09;、烟雾浓度&#xff08;Soot 1&#xff09;随着时间变化数据&#xff0c;我们需要…

Flip PDF Plus Corporate v7.1.25 激活版下载及安装步骤 (PDF电子书翻页)

前言 Flip PDF Plus Corporate 是一款功能强大的PDF翻页工具&#xff0c;也被称为名编辑电子杂志大师。它能够快速将PDF文件转换成具有翻页动画效果的电子书&#xff0c;同时保留原始的超链接和书签。该工具支持将相册、视频、音频、Flash、YouTube视频和链接等内容完全嵌入到…

OpenGL入门一:基础知识及概念

1、什么是OpenGL OpenGL&#xff1a;open graphic library&#xff0c;即开发图形库。它被定义为“图形硬件的一种软件接口”。实质上是3D图形和模型库&#xff0c;它具有高度可移植性&#xff0c;并且具有非常快的速度。可以创建优雅漂亮的3D图形&#xff0c;具有出色的视觉质…

vue3实现video视频+弹幕评论

vue3实现视频加评论 之前写了一篇博客使用了弹幕插件http://t.csdnimg.cn/616mlvue3 使用弹幕插件&#xff0c;今天对这个页面进行了升级 变成了 vue3使用video 这个没有使用插件&#xff0c;昨天看了好多&#xff0c;没发现有用的插件&#xff0c;下载了几个都没办法使用就用…

Linux C++ 多线程编程

Linux C 多线程编程 参考教程&#xff1a; c&#xff1a;互斥锁/多线程的创建和unique_lock&#xff1c;mutex&#xff1e;的使用_mutex 头文件 vcCSDN博客 1. 编写unique_mutex 1.1 创建文件夹 通过终端创建一个名为unique_mutex的文件夹以保存我们的VSCode项目&#xff…