数据可视化——一图胜千言

第04篇:数据可视化——一图胜千言

写在前面:大家好,我是蓝皮怪!前面几篇我们聊了统计学的基本概念、数据类型和描述性统计,这一篇我们要聊聊数据分析中最直观、最有趣的部分——数据可视化。你有没有发现,很多时候一张图胜过千言万语?无论是新闻报道、商业分析,还是朋友圈晒步数,数据可视化都无处不在。今天我们就来聊聊,如何用图表让数据"说话"。

🎯 这篇文章你能学到什么

  • 数据可视化的基本概念、发展与作用
  • 常见统计图表的类型、适用场景、优缺点和解读方法
  • 生活化案例与常见陷阱
  • Python可视化代码示例
  • 如何用图表讲好数据的故事

1. 从生活说起:为什么要学数据可视化?

你有没有遇到过这些场景:

📈 看新闻时:一张房价走势图让你一秒看懂十年变化。

🍰 点外卖时:饼图显示不同菜品的销量占比,帮你选出"爆款"。

🏃 刷朋友圈时:步数排行榜一目了然,谁最爱运动一看便知。

其实,数据可视化早已渗透到我们生活的方方面面。它能让复杂的数据变得直观、易懂,也能帮助我们发现数据背后的规律和故事。


2. 数据可视化的核心概念与发展

2.1 什么是数据可视化?

数据可视化,就是用图形、图表等视觉手段,把抽象的数据变成直观的信息。它的本质是"让数据说话",帮助我们更快、更准确地理解数据。

2.2 为什么要做可视化?

  • 直观表达:一张图能让人秒懂数据全貌。
  • 发现规律:图表能揭示数据中的趋势、分布和异常。
  • 辅助决策:可视化结果常常是决策的依据。
  • 沟通交流:图表是团队、公众沟通的"通用语言"。

2.3 可视化的历史与发展

  • 18世纪:最早的统计图表(如威廉·普莱费尔的条形图、折线图、饼图)
  • 19世纪:南丁格尔玫瑰图、约翰·斯诺霍乱地图等推动了数据可视化在医学、社会科学的应用
  • 20世纪:计算机普及,图表类型和交互方式极大丰富
  • 21世纪:大数据、AI、交互式可视化(如Tableau、PowerBI、ECharts、D3.js)成为主流

3. 常见统计图表类型与适用场景

图表类型适用数据主要作用优点局限生活例子
条形图分类/分组比较各类别数量直观、易读类别过多时拥挤各城市人口、不同菜品销量
饼图分类/比例显示各部分占比形象、突出比例类别多时难分辨市场份额、预算分配
直方图连续/分组展示分布形态反映分布、异常只适合数值型成绩分布、身高分布
箱线图数值型展示分布特征和异常值显示中位数、离群值不显示分布细节班级成绩、工资分布
折线图时间序列展示趋势变化反映趋势不适合离散类别股价走势、气温变化
散点图数值型展示变量关系发现相关性变量多时难读身高与体重、收入与消费
热力图分组/矩阵展示分布密度直观、对比强需二维分组城市与性别分布
密度图数值型展示分布平滑曲线细腻、平滑受带宽影响收入分布、消费分布
分组对比分类+数值多组对比直观对比组数多时拥挤各城市步数对比
相关性热力图多变量展示变量间相关性一目了然只反映线性相关多指标分析

4. 实际案例与可视化代码

这里我们用一组模拟数据,展示不同类型的可视化效果。

4.1 生成示例数据

import numpy as np
import pandas as pd
np.random.seed(42)
n = 300
data = {'性别': np.random.choice(['男', '女'], n, p=[0.52, 0.48]),'城市': np.random.choice(['北京', '上海', '广州', '深圳', '杭州'], n),'年龄': np.random.normal(32, 8, n).round(1),'身高': np.random.normal(168, 8, n).round(1),'月收入': np.random.lognormal(9.2, 0.5, n).round(0),'步数': np.random.poisson(8000, n),'消费': np.random.gamma(2, 2000, n).round(0)
}
df = pd.DataFrame(data)
df['年龄'] = np.clip(df['年龄'], 18, 65)
df['身高'] = np.clip(df['身高'], 150, 190)

4.2 条形图:不同城市样本数量

import matplotlib.pyplot as plt
city_counts = df['城市'].value_counts()
plt.figure(figsize=(7,5))
city_counts.plot(kind='bar', color='skyblue')
plt.title('不同城市样本数量')
plt.xlabel('城市')
plt.ylabel('人数')
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

条形图

  • 条形图适合比较各类别数量,直观反映不同城市的样本分布。

4.3 饼图:性别比例

plt.figure(figsize=(4,4))
df['性别'].value_counts().plot(kind='pie', autopct='%1.1f%%', colors=['lightblue','lightpink'])
plt.title('性别比例')
plt.ylabel('')
plt.tight_layout()
plt.show()

饼图

  • 饼图突出比例关系,适合展示性别、市场份额等占比。

4.4 直方图:年龄分布

plt.figure(figsize=(7,5))
plt.hist(df['年龄'], bins=15, color='lightgreen', edgecolor='black')
plt.title('年龄分布直方图')
plt.xlabel('年龄')
plt.ylabel('人数')
plt.tight_layout()
plt.show()

直方图

  • 直方图反映年龄的分布形态,是否偏态、集中或分散。

4.5 箱线图:身高分布

import seaborn as sns
plt.figure(figsize=(6,5))
sns.boxplot(y=df['身高'], color='gold')
plt.title('身高分布箱线图')
plt.ylabel('身高 (cm)')
plt.tight_layout()
plt.show()

箱线图

  • 箱线图揭示身高的中位数、四分位数和异常值。

4.6 折线图:某城市月收入趋势

months = np.arange(1,13)
city_income = np.random.normal(12000, 2000, 12)
plt.figure(figsize=(7,5))
plt.plot(months, city_income, marker='o', color='orange')
plt.title('某城市月收入趋势')
plt.xlabel('月份')
plt.ylabel('月收入 (元)')
plt.xticks(months)
plt.tight_layout()
plt.show()

折线图

  • 折线图适合展示时间序列数据的趋势变化。

4.7 散点图:身高与月收入的关系

plt.figure(figsize=(7,5))
plt.scatter(df['身高'], df['月收入'], alpha=0.6, color='purple')
plt.title('身高与月收入的关系')
plt.xlabel('身高 (cm)')
plt.ylabel('月收入 (元)')
plt.tight_layout()
plt.show()

散点图

  • 散点图揭示变量间的相关性和分布特征。

4.8 热力图:不同城市与性别的样本分布

pivot = pd.crosstab(df['城市'], df['性别'])
plt.figure(figsize=(6,5))
sns.heatmap(pivot, annot=True, cmap='YlGnBu', fmt='d')
plt.title('不同城市与性别的样本分布热力图')
plt.tight_layout()
plt.show()

热力图

  • 热力图适合展示二维分组数据的分布密度。

4.9 密度图:消费分布

plt.figure(figsize=(7,5))
sns.kdeplot(df['消费'], fill=True, color='teal')
plt.title('消费分布密度图')
plt.xlabel('消费 (元)')
plt.tight_layout()
plt.show()

密度图

  • 密度图平滑展示消费数据的分布形态。

4.10 分组对比箱线图:不同城市步数分布

plt.figure(figsize=(8,6))
sns.boxplot(x='城市', y='步数', data=df)
plt.title('不同城市步数分布箱线图')
plt.xlabel('城市')
plt.ylabel('步数')
plt.tight_layout()
plt.show()

分组箱线图

  • 分组箱线图适合多组数值型数据的对比。

4.11 相关性热力图:数值变量相关性

corr = df[['年龄','身高','月收入','步数','消费']].corr()
plt.figure(figsize=(7,6))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('数值变量相关性热力图')
plt.tight_layout()
plt.show()

相关性热力图

  • 相关性热力图一目了然地展示多变量间的线性相关关系。

5. 别被这些误区骗了

❌ 误区1:图越花哨越好

真相:可视化的核心是清晰表达,过度装饰反而干扰理解。

❌ 误区2:图表越多越好

真相:图表不是越多越好,关键是选对、用好。过多的图表反而会分散重点,甚至造成信息干扰。

❌ 误区3:只看图不看数据

真相:图表是辅助理解,关键还是要结合数据本身。

❌ 误区4:图表类型随意选

真相:不同数据类型、分析目的需选用合适的图表。


6. 实际应用建议

  • 选对图表类型,别"乱炖"。
  • 图表要有标题、坐标轴、单位,必要时加注释。
  • 颜色搭配要协调,避免过度花哨。
  • 关注数据分布和异常值,别只看均值。
  • 代码可复用,建议封装常用绘图函数。
  • 结合交互式可视化工具(如Tableau、PowerBI、ECharts、Plotly等)提升分析效率。

7. 练习一下

基础题

  1. 哪些场景适合用条形图?哪些适合用折线图?
  2. 饼图和条形图的区别是什么?
  3. 箱线图能揭示哪些信息?
  4. 热力图和相关性热力图的区别?

思考题

  1. 你在生活中见过哪些有趣或误导的数据可视化?
  2. 如果要展示某公司三年内各部门员工人数变化,应该用什么图?为什么?
  3. 如何判断散点图中的变量是否存在线性相关?

动手题

  1. 用Python画出你自己的步数、体重或消费数据的趋势图。
  2. 用模拟数据画出身高与体重的散点图,并尝试解释相关性。
  3. 试着用箱线图和密度图对比同一组数据的分布特征。

8. 重点回顾

  • 数据可视化让数据"说话",是数据分析的重要环节。
  • 常见图表有条形图、饼图、直方图、箱线图、折线图、散点图、热力图、密度图、分组对比图、相关性热力图等。
  • 选对图表类型,表达更清晰。
  • 图表要关注分布、趋势、异常值。

9. 下期预告

下一篇我们将进入概率的世界,聊聊"概率基础:不确定性的数学"。你将学到:

  • 概率的基本概念和计算方法
  • 生活中的概率现象
  • 概率与统计的关系
  • 常见概率误区

概率是理解统计推断的基石,敬请期待!


📚 参考资料

  • 吴喜之著《统计学:从数据到结论》,中国统计出版社
  • 盛骤等著《概率论与数理统计》,高等教育出版社
  • 作者个人学习和实践经验总结

写在最后:如果你觉得这篇文章对你有帮助,欢迎点赞、收藏和分享!有任何问题或建议,欢迎在评论区留言交流,我会认真回复每一条评论。让我们一起用统计学的眼光看世界,一起进步!📊

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

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

相关文章

1.1 Linux 编译FFmpeg 4.4.1

一、安装编译工具 sudo apt install -y autoconf automake build-essential cmake git pkg-config nasm yasm libtool zlib1g-dev说明: autoconf:生成 configure 脚本,用于自动配置源码。automake:与 autoconf 配合,…

【图片识别改名】如何批量识别大量图片的文字并重命名图片,基于WPF和京东OCR识别接口的实现方案

应用场景 在企业文档管理、数字图书馆、电商商品管理等场景中,经常需要处理大量图片中的文字信息。例如: 电商平台需要将商品图片中的型号、规格等信息提取出来作为文件名图书馆需要将扫描的图书页面识别为文字并整理归档企业需要将纸质文档电子化并按…

简历模板2——数据挖掘工程师5年经验

姓名 / Your Name 数据挖掘工程师 | 5年经验 | 推荐/风控/图模型 📞 138-XXXX-XXXX | ✉️ your.emailexample.com | 🌐 github.com/yourname | 📍 北京 🎯 个人简介 / Summary 5年大厂数据挖掘经验,硕士学历。擅长推…

CSS3 渐变效果

1. 引言 CSS3 渐变能够在指定颜色之间创建平滑过渡效果。这种设计元素不仅能为网页增添丰富的视觉层次,更是现代网页设计的重要组成部分。CSS3 提供两种主要的渐变类型:线性渐变(Linear Gradient) - 沿直线方向进行颜色过渡;径向渐变(Radial…

A Survey on 3D Gaussian Splatting——3D高斯领域综述

原文链接:[2401.03890] A Survey on 3D Gaussian Splatting 动态更新的GitHub仓库(包含性能对比与最新文献追踪): https://github.com/guikunchen/3DGS-Benchmarks https://github.com/guikunchen/Awesome3DGS 摘要&#xff1…

计算机网络 期末实训 eNSP 校园网

eNSP 综合实训 小型校园网 计算机网络期末实训 01 搭建拓扑 1.设计任务 构建一个小型校园网络,涵盖以下设备与区域: 学生宿舍区:50台计算机办公楼区:30台计算机(细分为财务部门、人事部门及其他科室)图书馆:10台计算机教学楼:30台计算机服务器集群:2台服务器,分别用…

Smart Form Adobe form 强制更改内表:TNAPR

强制更改内表:TNAPR se16-> Smart Form总览 Smart form 变量格式说明: &symbol& (括号中,小写字母为变量) &symbol& 屏蔽从第一位开始的N位 &symbol (n)& 只显示前N位 &symbol (S)& 忽略正负号 &symbol (<)& 符号在…

页面配置文件pages.json和小程序配置

页面配置文件pages.json和小程序配置 pages.jsonpagesstyle-navigationBarBackgroundColorstyle-navigationBarTitleTextstyle-navigationStylestyle-enablePullDownRefresh注意事项不同平台区分配置新建页面 globalStyletabBar代码 manifest.json授权web配置代理 pages.json …

Linux网络配置工具ifconfig与ip命令的全面对比

在Linux网络管理中&#xff0c;ifconfig和 ip命令是最常用的两个工具。随着时间的推移&#xff0c;ip命令逐渐取代了 ifconfig&#xff0c;成为更强大和灵活的网络配置工具。本文将对这两个工具进行全面对比&#xff0c;帮助您理解它们的区别和各自的优势。 一、ifconfig命令 …

STM32 实现解析自定义协议

一、环形队列设计与实现&#xff08;核心缓冲机制&#xff09; 数据结构设计&#xff1a; #define BUFFER_SIZE 512 #define BUFFER_MASK (BUFFER_SIZE - 1) typedef struct {volatile uint8_t buffer[BUFFER_SIZE]; // 环形缓冲区&#xff08;大小可配置&#xff09;volati…

NGINX 四层上游模块`ngx_stream_upstream_module` 实战指南

一、模块定位与引入 模块名称&#xff1a;ngx_stream_upstream_module 首次引入&#xff1a;NGINX 1.9.0&#xff08;2015-08-04&#xff09; 编译选项&#xff1a;启用 --with-stream&#xff08;含此模块&#xff09; 作用&#xff1a; 定义后端服务器组&#xff08;upstr…

WinUI3入门2:DataGrid动态更新 添加删除和修改字段

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

基于Python学习《Head First设计模式》第十三章 现实世界中的模式

定义设计模式 设计模式要素 模式名称、分类意图&#xff1a;描述模式是什么动机&#xff1a;描述什么时候使用这个模式&#xff0c;具体场景适用性&#xff1a;描述什么地方使用这个模式&#xff0c;用在什么场合结构&#xff1a;类图参与者&#xff1a;类和对象的责任和角色…

线性代数(1)线性方程组的多种解法

求解线性方程组是线性代数的核心问题之一&#xff0c;根据方程组的类型&#xff08;如齐次/非齐次、方阵/非方阵、稀疏/稠密等&#xff09;&#xff0c;可以采用不同的解法。以下是常见的线性方程组解法分类及简要说明&#xff1a; 一、直接解法&#xff08;精确解&#xff09…

肝脏/肝脏肿瘤图像分割数据集(猫脸码客第261期)

探秘肝脏/肝脏肿瘤图像分割&#xff1a;医学影像技术的新突破 一、引言 肝脏/肝脏肿瘤图像分割在医学领域占据着愈发重要的地位&#xff0c;为肝脏疾病的精准诊断与有效治疗提供了关键技术支撑。随着医学成像技术的飞速进步&#xff0c;如磁共振成像&#xff08;MRI&#xff…

【LLM05---位置编码】

文章目录 位置编码引出Transformer中位置编码方法:Sinusoidal functions两个重要性质位置编码 最近在学习位置编码,想找一个讲的比较透彻的文章或视频,找了半天,满意的一个也没有,所以自己记录一下。 注意,本篇笔记只作为自己的学习记录用,更好的讲解的内容请看链接:位…

pikachu——ssrf

概念补充&#xff1a; 内网&#xff1a;局部范围内的私有网络&#xff0c;比如局域网就是一个小范围的内网&#xff0c;有私有IP&#xff0c;并且内网受防火墙的保护&#xff0c;外网无法直接访问 外网&#xff1a;全球范围的公共网络&#xff0c;公有ip ip地址&#xff1a;…

java 设计模式_行为型_13备忘录模式

13.备忘录模式 模式定义 备忘录模式&#xff08;Memento Pattern&#xff09;模式的定义&#xff1a;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便以后当需要时能将该对象恢复到原先保存的状态。该模式又…

创建postgres数据库失败

异常&#xff1a; postgres# CREATE DATABASE deepflow_agent2; ERROR: source database "template1" is being accessed by other users DETAIL: There are 2 other sessions using the database 如何断联这两个session 要解决 PostgreSQL 中因 template1 数据库…

卧安机器人闯上市:深耕AI具身技术,“大疆教父”李泽湘再落子

撰稿|行星 来源|贝多财经 又一家机器人企业&#xff0c;现身港股资本市场。贝多财经了解到&#xff0c;卧安机器人&#xff08;深圳&#xff09;股份有限公司&#xff08;下称“卧安机器人”&#xff09;于6月8日向港交所提交了上市申请&#xff0c;国泰君安国际、华泰国际为…