大数据可视化案例分析_Tableau数据可视化分析案例

0x00 Tableau简介

Tableau是一款定位于数据可视化敏捷开发和实现的商务智能展现工具,可用来实现交互的、可视化的分析和仪表盘应用。

Tableau提供了体验感良好且易用的使用界面,在处理大规模、多维数据时,可以即时从不同角度看到数据呈现的规律。操作简单,大大降低了技术门槛,但其呈现出来的效果却十分优秀。

本文围绕一个使用Tableau进行可视化的实例,介绍了Tableau中一些基础概念和绘图的简单操作,下面一起开始可视化之旅吧~

0x01 奥运会数据集可视化

数据来源:Kaggle"120 years of Olympic history: athletes and results"数据集。

包括athlete_events.csv和noc_regions.csv两个文件,有从1896年雅典奥运会到2016年里约奥运会的每一届奥运会的数据。

athlete_events.csv文件包含15个字段、271116条记录。每一条记录对应一位在一项奥运会项目中参赛的运动员。具体字段及对应含义如下:

  • ID - 运动员ID编号
  • Name - 运动员姓名
  • Sex - 性别
  • Age - 年龄
  • Height - 身高(cm)
  • Weight - 体重(kg)
  • Team - 队伍名称
  • NOC - 国家奥委会编码
  • Games - 奥运会年份和季节
  • Year - 年份
  • Season - 季节
  • City - 主办城市
  • Sport - 体育运动
  • Event - 比赛项目
  • Medal - 获奖情况(金、银、铜、未获奖)

noc_regions.csv描述的是国家奥委会编码与具体的国家(/地区)名称的对应关系。包含3个字段,分别是NOC国家奥委会编码、regions国家(/地区)具体名称及notes备注。

1 数据连接与管理

打开Tableau,会进入到数据源界面,可进行如下几个操作:

数据连接

Tableau可连接Excel、文本文件、JSON文件、空间文件(Shapefile、GeoJSON文件等)、统计文件等多种本地数据源。在连接数据源时,如果仅需要使用部分数据,也可对数据进行筛选。

数据整合

Tableau可对来自不同数据表的数据实现多表合并(行)、多表联接(列)及多个数据源的融合。

行合并通过【新建并集】实现,使用并集合并的表需要有相同的结构,即相同字段数,且相关字段名称和数据类型匹配。

列合并通过【联接】实现,需要选择同名字段作为关联字段,有四种联接类型,即内部、左侧、右侧、完全外部联接,默认是内部联接。

注:在2020.2之后的版本中,数据源使用的数据模型具有两个层:一个逻辑层(在其中关联表),一个物理层(在其中联接或合并表)。更推荐使用【关系】来连接数据,关系是一种更灵活、动态的方式,根据关联字段确定联接可能性,而不创建新的固定表。

数据加载

Tableau有两种加载数据的方式,一是实时连接,从数据源获得查询结果;另一种是数据提取,将数据提取到Tableau数据引擎中进行管理。

350d11454888af0f999c76dd7cf3e30c.png

将两张表的数据加载至Tableau,会基于NOC字段自动进行连接。在数据源界面可查看前1000行数据,并进行一些重命名、排序等基本操作。数据预处理导入完毕,下面就可以大展身手,正式开始可视化啦!

2 图表绘制

1) 折线图

基于运动员的ID和年份字段,来绘制一个各届参赛运动员数变化的折线图。

新建一个工作表。可以看到如下几个功能区。

495eb8aaad6bada182d4cdc339b06460.png

数据窗口

导入Tableau的数据会被自动划分为【维度】和【度量】。在连接数据时Tableau会对各个字段评估划分,如果分配与实际情况不符,例如运动员ID被认为是度量,可右键进行转换。

维度通常是分类、时间等定性的离散数据,将其拖放至功能区不会被计算,而会对视图进行分区。度量通常是数值数据,拖放至功能区会默认进行聚合计算(总和、平均值、计数等)。

Tableau支持多种字段类型,维度中包括文本、日期、日期和时间、地理值、布尔值;度量中包括数字、经纬度(当数据包含地理类型名称会自动生成)。

行列功能区

对应X、Y轴数据。

将Year拖至列,运动员ID拖至行,ID被默认为离散类型,生成的图表如下:

c25f7ca0cbba1ed8ced8e04763ac9a81.png

下面将ID的类型改为度量→计数(不同),Y轴即为每届奥运会运动员的总人数。但由于原文件夏季奥运会和冬季奥运会数据是混合的,故折线图形状明显异常。

43b8d60835882bb8236ba639f886eca3.png

标记卡

Tableau中,定义图表中的形状、颜色、大小、标签等属性,通过标记卡完成。

【颜色】和【大小】会根据放入字段数值相应改变。颜色和大小只能放入一个字段,但是【标签】可放入多个。

【详细信息】会根据拖放的字段对视图细化。

【工具提示】即可“对当光标移到视图某个标记显示的标记信息”的内容进行编辑。

将Season拖至标记卡中的【颜色】,就能看到夏季和冬季的数据分成了两条折线,每个类型对应一种颜色,并自动生成图例,完成了一幅基本的折线图。

f1c7b62c3fdda08e7cdc0857081d0b09.png

对图表标题、颜色、坐标轴标签、坐标轴范围等进行设置,只需点选预览即可。最终效果如下:

d973af4abc548eb66fe642a20a030c42.png

同理绘制各届赛事项目数、各界参与国家数折线图。

13da8700a5866453b8a73bffa1418132.png

df107f6cf0f8e3f5a1fb672a60d380a2.png

2) 堆叠面积图

生成过程与折线图基本相同,只需修改图表类型。在Tableau界面右端有一个【智能推荐】按钮,可快速创建基本图形,光标移动到图形上就会显示字段要求。

效果如下:

590c568121a8506c0497e60828e3d08d.png

3) 柱状图/条形图

以绘制奖牌数排名前15国家的得奖情况的柱状图为例。

首先将Medal和Region分别拖入行列功能区,Medal类型改为度量→计数。因为国家数太多,生成的柱状图太长,图表不便于查看,下面基于新建计算字段对显示的国家进行筛选。

dd783a0db8336b342bfb87541aafb04a.png

计算字段

计算字段是根据数据源字段使用运算符和函数构造公式来定义字段。

运算符支持加减乘除等所有运算符。函数包括数字、字符串、日期、类型转换等各类Tableau自带计算函数。

因为预处理对Medal的空缺值进行了填充,若直接对其进行计数,实际上结果等于“各国参与运动员数”,与期待的“各国奖牌数”不符。故先基于Medal新建一个计算字段Medal_Num。在数据区域Medal上右击创建→计算字段,输入表达式如下,然后对Medal计数即可。

b974c933d01eacade18d536b9b98d081.png

7ea490966bc3367d79e8a76a02316620.png

筛选器

筛选器可对全量数据进行筛选,有常规、通配符、条件、顶部四种,可根据各种需要对数据进行筛选。

这里只筛选显示奖牌数前15的国家。将Region拖入筛选器,自动弹出筛选器对话框,选择顶部。按Medal_Num字段,计数,筛选出前15个国家。然后再将国家基于Medal_Num字段降序排序。

311bb3497441616e6c03736cfefa521f.png

将Medal拖入标记卡中的颜色,即可生成堆叠柱状图,其中金银铜及未获奖按不同颜色显示。再将Medal拖入筛选器,选择不显示"No Medal";在筛选器上右键,选择显示筛选器,筛选器就在视图左侧显示。堆叠柱状图效果如下:

cd7cc7095e613502471db07772721b94.png

各届男女运动员人数柱状图、奥运会奖牌数条形图绘制类似。由于时间跨度长,可添加一个基于Year的筛选器,只展示特定时间区间的数据。

4) 箱线图

箱线图可以反映数据的基本统计特征,包括最大最小、上下四分位数、中位数等。以绘制各届奥运会运动员身高分布的箱线图为例。

将Year和Height分布拖入行列功能区,在视图右侧智能推荐选择箱线图,会得到一些离散分布的线。

81ad355bd0eef9f02e4b7cec41473bfc.png

需要在菜单分析栏,取消聚合度量,即可生成一幅箱线图。观察到数据集中于图表上部,对纵轴的坐标范围进行设置,还可添加基于性别的筛选器,最终效果如下:

0ed9a42e8599d956b7377b28da9f0e00.png

5) 饼图

以男女运动员比例饼图为例。

在标记卡中选择饼图,将字段ID拖入角度,数据类型改为度量→计数(不同),会生成一个圆形,但是还未显示男女比。继续将Sex拖入颜色和标签,添加Year筛选器,效果如下:

85c442ee3ee757a3dc785e4a85bdcce4.png

3 图表组合、布局

将上面绘制的图表,按照相似主题,组合成仪表板。

仪表板支持在单一面板多个工作表的集合,便于同时比较监测数据,通过添加筛选器、突出显示等操作,还可实现数据的下钻,交互性更强。

在Tableau中,文本、图像、网页、空白都可被当作对象添加至仪表板中。

【布局容器】是仪表板布局的框架,分为水平和垂直两种,用来放置工作表、筛选器、图例、文本等。

【布局方式】有平铺和浮动两者。默认的平铺方式,即所选工作表或对象平行分布,互不遮盖。浮动布局则更为自由,可随意调整对象大小及位置,以实现更好效果。

布局流程一般是,添加布局容器,然后在容器中添加内容,再添加另一布局容器。

89ee0a2fb8ab82f6c238e183c8757fc2.png

下面以各项目运动员分布情况仪表板为例,其余布局类似。

首先新建仪表板,拖入一个水平容器,添加"参与人数前15的运动项目"气泡图,会默认添加气泡图及图例。然后在下面再添加一个水平容器,添加各届男女运动员人数条形图及比例饼图,如下:

b8cf8263c70786875f5bc300aff74095.png

注:Tableau布局容器和工作表间的包含、并列关系需要小心琢磨,有时候看似一样的布局结构,但是其背后的布局逻辑却是不相同的。

设置仪表板上筛选器的作用范围,应用于仪表板上的所有表,单一筛选器即可对该仪表板上的所用表进行筛选。

172539b8baa884216ae9892133be11ae.png

还可对仪表板上的某一工作表"使用筛选器",那么单击该表部分,其余表则会相应显示该部分的数据。如选中"Swimming",那么另外两个图表则会相应显示Swimming项目各届男女运动员参与人数及比例。

8408d86f905688f0e21cf0cd8c78a047.png

4 可视化结果

经过上面一系列简单的图表绘制、组合的操作,主要围绕奥运会总体情况概览、奖牌总数前15名国家情况、各项目运动员分布情况、运动员身体情况四个主题来创建仪表板,就可以得到以下结果啦!

a. 总体情况概览

d1e2f83246928f4c7e72f32e81834fa8.png

b. 奖牌总数前15名国家情况

bacf8d71fea1e1e823a7113ce70ee650.png

c. 各项目运动员分布情况

cd3e5c45ca1adb1479354f312129e354.png

d. 运动员身体情况

3aca560144e768bc92ec47f56d9a5bc5.png

0x0F 总结

Tableau对数据的管理、呈现类似Excel中的数据透视表,操作简单、易上手,仅需要拖拽字段就可进行可视化分析,效果美观,因此广受欢迎。

本文仅介绍了最基础的部分,实际上Tableau还可进行创建分组、集、聚类分析、回归分析、时间序列等高级操作,大家可以继续探索学习~

其官网提供了丰富的学习资源,对初学者非常友好。不仅如此,学习的另一途径就是模仿优秀作品,Tableau还拥有活跃的、高质量的社群,各路可视化大神都会在上面交流分享自己的作品,对我们开拓思路、精进可视化效果都有很大帮助。

注:本文的Tableau工作簿已经上传至Tableau Public,感兴趣的朋友可以前往查看~

网址:https://public.tableau.com/profile/meetywy#!/vizhome/120yearsofOlympichistory_16069878256050/120yearsofOlympichistory

2829d9b644aeeade3064151120fa6e17.gif·················END·················

推荐阅读

  1. 说说心里话

  2. 写给所有数据人。

  3. 从留存率业务案例谈0-1的数据指标体系

  4. NB,真PDF神处理工具!

  5. 超级菜鸟如何入门数据分析?

b7e056939ed0d1fc863b74bb3e061372.png

欢迎长按扫码关注「数据管道」

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

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

相关文章

1bit和1byte_1byte等于( )bit_学小易找答案

【单选题】WWW上每个资源都有一个唯一地址,称为( )。【单选题】传输层使用( )地址形式区分应用进程?【简答题】习题13【单选题】在网上传输语音和影像,传输层协议一般采用( )。【简答题】分别求出[0,1) 在六个拓扑空间中的内部和闭包。【单选题】以下算法中属于非对称算法的是…

java吃货联盟app讲解_吃货联盟订餐系统——JAVA实现

package com.chihuo;import java.util.Scanner;public class OrderingMgr {public static void main(String[] args){/*数据初始化*/String[] namesnew String[4];//保存订餐人的姓名String[] dishMegsnew String[4];//保存所选信息,包括菜品名及份数String[] addre…

JavaScript-简单的页面输入控制

1.姓名只能是汉字 var nameCheck /^[\u4e00-\u9fa5]{2,21}$/; if(!nameCheck .test(name)){ alert("输入的姓名中含有非汉字字符!"); return false; }2.简单的身份证校验(校验内容包括数字,位数,以及末尾的x,X)  va…

linux 脚本调用企业微信_shell脚本实现企业微信报警

CorpID"ww3c6298264d839e2f"Secret"YvyMQpMRIoXtdQRWo0RNkMBTZnHWKvBwC3ILkyuCsKQ"agentid1000002Ip$(ip a |grep ens33 |grep inet|awk -F "/" ‘{ print $1 }‘ |awk -F " " ‘{ print $2 }‘)/usr/bin/curl --data-ascii ‘{"…

PyTorch深度学习实战(27)——变分自编码器(Variational Autoencoder, VAE)

PyTorch深度学习实战(27)——变分自编码器 0. 前言1. 变分自编码器1.1 自编码器的局限性1.2 VAE 工作原理1.3 VAE 构建策略1.4 KL 散度1.5 重参数化技巧 2. 构建 VAE小结系列链接 0. 前言 变分自编码器 (Variational Autoencoder, VAE) 是一种生成模型&…

mysql function怎么创建_mysql,function_mysql创建函数出现问题?,mysql,function - phpStudy

mysql创建函数出现问题?大家好,帮我看看下面的mysql的函数有什么问题?一直创建不了.DELIMITER $$DROP FUNCTION IF EXISTS check_if_exists$$CREATE FUNCTION check_if_exists(object_name VARCHAR(100),db_name VARCHAR(100),object_type enum(t, f, v, p))RETURNS INTBEGIN…

基于百度AI+jquery-webcam+servlet实现人脸识别登录,兼容各主流浏览器

1、注册百度AI账号,获取到AI开发资格 详情参见个人博客:你的第一个人脸识别demo(http://www.cnblogs.com/guo-eric/p/8109411.html) 2、环境准备 首先按照第一步说明将百度的AI类文件和用到的三方类文件下载到本地,需要…

杨辉三角java代码_【LeetCode】118. 杨辉三角(Pascal#x27;s Triangle)解题思路

题目如下(题目链接戳我):给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 备注:在杨辉三角中,每个数是它左上方和右上方的数的和。示例: 输入: 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],…

Django项目创建图解

注:创建完views.py(也可以不做编写直接测试)就可以运行 python manage.py runserver 来检测服务器是否创建成功了(打开浏览器输入提示的网址即可) 项目创建解析:http://www.cnblogs.com/monkpy/p/8377190.…

mysql1714_linux环境安装mysql

#将rpm包上传到/root/work目录(也可以是其他目录)MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpmMySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm#查看之前是否安装过mysqlrpm -qa | grep -i mysql#如果安装过,执行这行代码,删除之前安装过的mysqlr…

索引会自动更新吗_mysql的B+树中数据存放结构和索引常见问题你会吗?

问题如何理解mysql中 数据存放在B树的叶子节点而不是其他非叶子节点?(InnoDB中)B树的叶子节点一定存放全部的真实数据吗?辅助索引和聚集索引的B树有什么区别?联合索引的B树中数据又有啥区别呢?MyISAM中的索引是什么样的&#xff1…

java8 按条件过滤集合

//黄色部分为过滤条件list.stream().filter(user-> user.getId() > 5 && "1组".equals(user.group)).collect(Collectors.toList()); 示例: public class HelloWorld {public static void main(String[] args) {Random random new Random(…

pandas-事例练习

补充:  DataFrame.dropna(axis0, howany, threshNone, subsetNone, inplaceFalse)功能:根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度参数:axis : {0 or ‘index’, 1 or ‘columns’},或 …

wex5链接mysql_wex5数据库连接自己的数据库在哪里配置的

十二月 19, 2015 8:20:46 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet X5 Baas Takeout Servlet threw exceptionjava.sql.SQLException: Access denied for user rootlocalhost (using password: YES)at com.mysql.jdbc.M…

扒一扒TCP协议与UDP协议

TCP服务的特点 (1)面向连接:使用TCP协议通讯的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP链接是全双工的,即双方的数据读…

linux 查看共享磁盘_如何可视化地查看 Linux 系统磁盘使用情况?

本文介绍一个可视化地查看 Linux 系统磁盘使用情况的工具——Duc。Duc 是一个工具集,可以在类 Unix 操作系统上建立索引、检查和可视化系统的磁盘。与其它相似工具相比,它可以正常工作在超大规模的文件系统上。测试表明,Duc 可以毫无问题地工…

IP 、127.0.0.1、localhost 三者区别

一、Ping命令 1、Ping命令,用来检查两台物理机间的TCP/IP网络是否通畅或者网络连接速度,是TCP/IP协议的一部分。 2、PING (Packet Internet Groper),因特网包探索器,IP层协议通过机器B的IP地址和自己的子网掩码,判断它…

mysql git下载安装_xshell、python、git、mysql安装(玩阿里云的第二天)

2、因为放弃了图形化桌面,所以要找清自己的位置。不清楚自己刚进去时在哪个目录,先ll、ls、cd ..试试3、python安装安装python失败,同时发现自带了2个python版本(python2.7和python3.6);卸载python:sudo apt-get remov…

Tomcat端口冲突

在编码时&#xff0c;有时候会一步小心多开了一个tomcat&#xff0c;而且端口也没改&#xff0c;这个时候就会造成端口冲突问题&#xff1a; 解决冲突问题也很简单&#xff1a;打开 dos窗口&#xff1a;netstat -ano|findstr <端口号> 输入netstat -ano|findstr 加上被冲…

vscode html 格式化_详解VSCode 格式化不符合预期的问题

一句话总结不同格式化程序执行时长不一样&#xff0c;导致文件格式好后和预期不符。请务必保持校验&#xff08;Lint&#xff09;规则和格式化&#xff08;Format&#xff09;规则一致&#xff0c;不然格式化后还是不符合预期是非常讨厌的。本篇主要讲解怎么调教VSCode的保存时…