您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

在R、Python和Julia中常用的数据可视化技术

时间:2020-07-11 10:19:35  来源:  作者:

俗话说“一图胜千言”。通过各种图片和图形化展示,我们可以更清晰地表达很多抽象概念、理论、数据模式或某些想法。在本章中,我们首先解释为什么应该关心数据可视化。然后,我们将讨论几种在R、Python和Julia中常用的数据可视化技术。此外,我们还将介绍几个特殊主题,例如如何生成图形、饼图和条形图,如何添加标题、趋势线、希腊字母,以及如何输出图形。在本章的最后,我们将讨论一个可选话题,即动态表示以及如何将它们保存为html文件。

本章包含以下主题:

  • 数据可视化的重要性
  • R数据可视化
  • Python数据可视化
  • Julia数据可视化

4.1 数据可视化的重要性

对于数据科学和商业分析领域的用户或研究人员来说,使用各种类型的图形、饼图、条形图以及其他视觉手段展示数据中隐含的潜在趋势或模式对理解数据至关重要,同时能够帮助研究人员更好地向观众或客户呈现数据。这样做主要有以下几个原因。

第一,语言有时很难描述我们的发现,尤其是存在几种模式或诸多影响因素时,通过几个单独的图形和一个连接图则可以更好地理解和解释复杂的关系。

第二,我们可以使用图形或图片来解释某些算法,例如二分法(参见4.9节)。

第三,我们也可以使用相对大小来表示不同的含义。在金融领域,一个基本概念叫作货币时间价值(Time Value of Money,TVM),意思是“一鸟在手胜过双鸟在林”。今天的100美元比同等数额的未来现金流更有价值。通过不同尺寸的不同圆圈表示发生在未来不同时间点上的现金流的现值,可以帮助读者更清楚地理解这个概念。

第四,我们的数据可能非常混乱,所以简单地展示数据点可能会使读者更加困惑。如果我们能用一个简单的图形来展示它的主要特征、属性或模式将大有益处。

4.2 R数据可视化

首先,我们来看R中最简单的图形。利用下面一行R代码,我们画出了从

在R、Python和Julia中常用的数据可视化技术

 

在R、Python和Julia中常用的数据可视化技术

 

范围内的余弦函数值:

> plot(cos,-2*pi,2*pi)

对应的图形如图4.1所示。

在R、Python和Julia中常用的数据可视化技术

 

图4.1 余弦函数图

直方图也有助于我们理解数据点的分布。图4.1就是一个简单的例子。首先,我们生成一组服从标准正态分布的随机数。为了便于说明,第一行的set.seed()命令其实是多余的,它的存在将保证所有使用相同seed值(本例中为333)的用户将得到相同的随机数集合。

换句话说,在输入值相同的情况下,直方图看起来将是一样的。在下一行中,rnorm(n)函数画出了n个服从标准正态分布的随机数。接着,最后一行使用hist()函数生成一个直方图:

> set.seed(333)
> data<-rnorm(5000)
> hist(data)

相关直方图如图4.2所示。

在R、Python和Julia中常用的数据可视化技术

 

图4.2 示例直方图

注意,代码rnorm(5000)与rnorm(5000,mean=0,sd=1)相同,其中含义为均值的默认值为0,sd的默认值为1。下一个R程序将为标准正态分布左侧的尾巴填充阴影:

x<-seq(-3,3,length=100)
y<-dnorm(x,mean=0,sd=1)
title<-"Area under standard normal dist & x less than -2.33"
yLabel<-"standard normal distribution"
xLabel<-"x value"
plot(x,y,type="l",lwd=3,col="black",main=title,xlab=xLabel,ylab=yLabel)
x<-seq(-3,-2.33,length=100)
y<-dnorm(x,mean=0,sd=1)
polygon(c(-4,x,-2.33),c(0,y,0),col="red")

相关图形如图4.3所示。

在R、Python和Julia中常用的数据可视化技术

 

图4.3 标准正态分布示例图

注意,根据上面代码中的最后一行可知,阴影区域为红色。

在探索各种数据集的属性方面,R包rattle非常有用。如果rattle包没有预先安装,那么我们可以运行以下代码安装它:

> install.packages("rattle")

然后,运行以下代码启动它:

> library(rattle)
> rattle()

单击回车键后,可以看到图4.4中的结果。

在R、Python和Julia中常用的数据可视化技术

 

图4.4 Rattle包启动界面

首先,我们需要导入某些数据集。我们从7种可能的格式中选择数据源,如文件、 ARFF、ODBC、R数据集和RData文件,并且可以从此处加载数据。

最简单的方法是使用Library选项,它将列出rattle包中所有内嵌的数据集。单击Library后,我们可以看到内嵌数据集的列表。假设单击左上角的Execute后我们选择了acme:boot:Monthly Excess Returns,那么我们将看到图4.5中的界面。

在R、Python和Julia中常用的数据可视化技术

 

图4.5 导入数据集界面

现在,我们就可以研究数据集的属性了。点击Explore后,我们可以使用各种图形来查看数据集。假设我们选择Distribution,并勾选Benford复选框,那么我们就可以参考图4.6来了解更多细节。

在R、Python和Julia中常用的数据可视化技术

 

图4.6 查看数据集属性信息

单击Execute之后,将弹出图4.7所示内容。图4.7上方的红线显示了根据本福特定律(Benford Law)算出的1~9每个数字的频率,而底部的蓝线则展示了数据集的属性。请注意,如果你的计算机系统中还没有安装reshape包,则此命令要么无法运行,要么会请求许可将该包安装到你的计算机上。

在R、Python和Julia中常用的数据可视化技术

 

图4.7 数据集的Benford定律符合情况

在图4.7中,两条线之间的巨大差异表明我们的数据不符合本福特定律建议的分布规律。在现实世界中,我们知道很多人、事件和经济活动是相互关联的,使用各种图形来展示这样一个多节点、相互连接的图像是一个很好的办法。如果没有预装qgraph包,那么用户必须运行以下程序来安装它:

> install.packages("qgraph")

下一个程序展示了从a到b、a到c等节点之间的连接:

library(qgraph)
stocks<-c("IBM","MSFT","WMT")
x<-rep(stocks, each = 3)
y<-rep(stocks, 3)
correlation<-c(0,10,3,10,0,3,3,3,0)
data <- as.matrix(data.frame(from =x, to =y, width =correlation))
qgraph(data, mode = "direct", edge.color = rainbow(9))

如果将数据展示出来,该程序的意义就会更加清晰。相关性展示出这些股票之间联系的紧密程度。注意,所有这些值都是随机选择的,并没有现实意义。

> data
   from  to    width
[1,] "IBM" "IBM"  " 0"
[2,] "IBM" "MSFT" "10"
[3,] "IBM" "WMT"  " 3"
[4,] "MSFT" "IBM"  "10"
[5,] "MSFT" "MSFT" " 0"
[6,] "MSFT" "WMT"  " 3"
[7,] "WMT" "IBM"  " 3"
[8,] "WMT" "MSFT" " 3"
[9,] "WMT" "WMT"  " 0"

第3个变量的值越大表明前面两个变量的相关性越强。例如,IBM与MSFT的相关性更强(值为10),大于IBM与WMT的相关性(值为3)。图4.8展示了这3只股票的相关性强弱程度。

在R、Python和Julia中常用的数据可视化技术

 

图4.8 IBM、MSFT和WMT股票的相关性强弱程度

以下程序展示了5个因素之间的关系或相互联系:

library(qgraph)
data(big5)
data(big5Groups)
title("Correlations among 5 factors",line = 2.5)
qgraph(cor(big5),minimum = 0.25,cut = 0.4,vsize = 1.5,
  groups = big5groups,legend = TRUE, borders = FALSE,theme = 'gray')

相关图形如图4.9所示。

在R、Python和Julia中常用的数据可视化技术

 

图4.9 5个因素之间的相互联系

4.3 Python数据可视化

Python中图形和图像方面使用最广泛的包是matplotlib。下面的程序仅仅包含3行代码,所以可以看作是最简单的生成一个图形的Python程序:

import matplotlib.pyplot as plt
plt.plot([2,3,8,12])
plt.show()

第一行命令会上传一个名为matplotlib.pyplot的Python包,并将其重命名为plt。

注意,我们甚至可以使用其他简短的名称,但通常使用plt表示matplotlib包。第二行绘制了4个点,最后一行总结了整个过程。完整图形如图4.10所示。

在下一个例子中,我们为x和y添加了标签,以及一个标题。所使用的函数是余弦函数,其中输入值范围为

在R、Python和Julia中常用的数据可视化技术

 

在R、Python和Julia中常用的数据可视化技术

 

import scipy as sp
import matplotlib.pyplot as plt
x=sp.linspace(-2*sp.pi,2*sp.pi,200,endpoint=True)
y=sp.cos(x)
plt.plot(x,y)
plt.xlabel("x-value")
plt.ylabel("Cosine function")
plt.title("Cosine curve from -2pi to 2pi")
plt.show()
在R、Python和Julia中常用的数据可视化技术

 

图4.10 matplotlib包生成的图形示例

漂亮的余弦曲线如图4.11所示。

如果我们今天收到100美元,它将比两年后收到的更有价值,这个概念叫作货币时间价值,因为我们现在可以将100美元存入银行来赚取利息。下面的Python程序使用size来说明此概念。

import matplotlib.pyplot as plt
fig = plt.figure(facecolor='white')
dd = plt.axes(frameon=False)
dd.set_frame_on(False)
dd.get_xaxis().tick_bottom()
dd.axes.get_yaxis().set_visible(False)
x=range(0,11,2)
x1=range(len(x),0,-1)
y = [0]*len(x);
plt.annotate("$100 received
today",xy=(0,0),xytext=(2,0.15),arrowprops=dict(facecolor='black',shrink=2))
plt.annotate("$100 received in 2
years",xy=(2,0),xytext=(3.5,0.10),arrowprops=dict(facecolor='black',shrink=
2))
s = [50*2.5**n for n in x1];
plt.title("Time value of money ")
plt.xlabel("Time (number of years)")
plt.scatter(x,y,s=s);
plt.show()
在R、Python和Julia中常用的数据可视化技术

 

图4.11 为图形添加x和y轴标签及标题

相关的图形如图4.12所示。同样,不同尺寸表示它们现值的相对大小。

在R、Python和Julia中常用的数据可视化技术

 

图4.12 货币时间价值概念解释

4.4 Julia数据可视化

对于下面的Julia程序,我们使用了一个名为Plots的包,用于安装此包的命令为Pkg.add("Plots")。这里,我们通过一个Jupyter notebook运行Julia程序。图4.13展示了一个Julia程序。

在R、Python和Julia中常用的数据可视化技术

 

图4.13 Julia程序

单击菜单栏上的Kernel项目,然后单击Restart and Run All,我们得到图4.14所示的结果。

在R、Python和Julia中常用的数据可视化技术

 

图4.14 运行结果图

同样地,srand(123)命令保证使用相同随机种子的任何用户都会得到相同的随机数集合。为此,用户会得到与前面相同的图形。下一个例子是使用Julia包PyPlot绘制的散点图。

using PyPlot
n=50
srand(333)
x = 100*rand(n)
y = 100*rand(n)
areas = 800*rand(n)
fig = figure("pyplot_scatterplot",figsize=(10,10))
ax = axes()
scatter(x,y,s=areas,alpha=0.5)
title("using PyPlot: Scatter Plot")
xlabel("X")
ylabel("Y")
grid("on")

相关图形如图4.15所示。

在R、Python和Julia中常用的数据可视化技术

 

图4.15 Julia包PyPlot绘制散点图示例

下一个Julia程序借鉴自Sargent和Stachurski的程序。

using QuantEcon: meshgrid
using PyPlot:surf
using Plots
n = 50
x = linspace(-3, 3, n)
y = x
z = Array{Float64}(n, n)
f(x, y) = cos(x^2 + y^2) / (1 + x^2 + y^2)
for i in 1:n
  for j in 1:n
    z[j, i] = f(x[i], y[j])
  end
end
xgrid, ygrid = meshgrid(x, y)
surf(xgrid, ygrid, z',alpha=0.7)

令人印象深刻的图形如图4.16所示。

在R、Python和Julia中常用的数据可视化技术

 

图4.16 Sargent和Stachurski程序结果图

本文截选自:《Anaconda数据科学实战》



Tags:数据可视化   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天详解一个 Python 库 Streamlit,它可以为机器学习和数据分析构建 web app。它的优势是入门容易、纯 Python 编码、开发效率高、UI精美。 上图是用 Streamlit 构建自动驾驶...【详细内容】
2021-12-09  Tags: 数据可视化  点击:(24)  评论:(0)  加入收藏
利用Python实现中国地铁数据可视化。废话不多说。让我们愉快地开始吧~开发工具Python版本:3.6.4相关模块:requests模块;wordcloud模块;pandas模块;numpy模块;jieba模块;pyecharts模...【详细内容】
2021-12-08  Tags: 数据可视化  点击:(34)  评论:(0)  加入收藏
今天再给大家分享一个不错的可视化大屏分析平台模板DataColour。 data-colour 可视化分析平台采用前后端分离模式,后端架构设计采用微服务架构模式。 前端技术:Angularjs、Jq...【详细内容】
2021-11-04  Tags: 数据可视化  点击:(40)  评论:(0)  加入收藏
数据可视化是处理数据的基本操作,如果想进一步从数据中获取更多信息,就要先将数据做可视化处理。有一些工具会帮助我们更好的呈现数据,优秀的数据可视化工具有如下:Google Chart...【详细内容】
2021-09-16  Tags: 数据可视化  点击:(61)  评论:(0)  加入收藏
01.什么是大数据?数据是对客观事实进行记录的一种符号,可以是数字、文字,也可以是图片、音频、视频。大数据是指无法在一定时间范围内用常规软件进行捕捉、管理和数据的数据集...【详细内容】
2021-06-25  Tags: 数据可视化  点击:(78)  评论:(0)  加入收藏
数据可视化用专业术语来就是通过视觉的方式向人类展示数据,这种在文本基础上的图表即简单又实用,而且相关性、趋势分析都非常明确,也非常可靠,通过图表一目了然。用通俗的话说就...【详细内容】
2021-06-11  Tags: 数据可视化  点击:(106)  评论:(0)  加入收藏
我是一名数据分析师,常常需要处理大量的数据,苦于找不到合适的工具,一直用的excel做数据分析,但是大家都知道,excel的可视化能力有限,一行行的黑白文字我看到两眼发黑,效率还很低,后...【详细内容】
2021-06-11  Tags: 数据可视化  点击:(106)  评论:(0)  加入收藏
Serial Studio是一个多平台,多用途的串行数据可视化程序。该项目的目标是使嵌入式开发人员和制造商可以轻松地可视化,呈现和分析其项目和设备生成的数据,而无需为每个项目编写...【详细内容】
2021-04-14  Tags: 数据可视化  点击:(644)  评论:(0)  加入收藏
你没看错,全部都是推荐指数五颗星的数据可视化工具,无门槛,不挑人,面向小白和非专业人员,人人可用,按自身适应度及喜好选择即可。 1 Excel惊艳到不认识的数据可视化工具!!这个我们已...【详细内容】
2021-01-27  Tags: 数据可视化  点击:(174)  评论:(0)  加入收藏
时间序列数据在许多不同的行业中都非常重要。它在研究、金融行业、制药、社交媒体、网络服务等领域尤为重要。对时间序列数据的分析也变得越来越重要。在分析中有什么比一...【详细内容】
2020-11-20  Tags: 数据可视化  点击:(68)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条