扭曲你的数据,让其变得具有视觉吸引力

前言

本文算是一篇娱乐型的文章吧,并没有牵扯到太多技术性的东西。

本文主要写的是如何扭曲你的数据,在不影响结果和其他属性的情况下,使得你数据画出来的图更加好看。

本文以“兔子”数据为例。

下文分享链接密码均为: yjoy

正文

经常有这样的情况,你用数据画出图像有看起来会很丑,如何让你的图像变得好看一点呢?需要修改点一点。 且这个修改是不能在数据的属性基础上进行修改。在现实生活中该方法的用处在于在做一些数据报表的时候可以令你的报表变得更加清晰好看明了。或者是开发相关数据绘图软件,对数据画出的图进行优化。

上图为“兔子”数据优化后的示例

一、AUTODESK软件介绍(思路)

这是它们的官网

本文的思路来源于AUTODESK

AUTODESK主要是做出计算和图表,致力于让结果更加人性化

左:Anscombe的四张图表

右:非结构化的四张图

两边数据集是相同的,但最终的图像明显存在根本结构和视觉区别。

如今数据的可视化重要性越来越高且越来越流行

在他们的官网上你可以下载到“恐龙”的数据集

下面也给出了“恐龙”数据

数据库集。 虽然形状不同,但每个数据集具有相同的小数点后两位的统计信息(平均值,标准偏差和Pearson相关指数)

对左侧的数据集进行一些小的更改,同时保持相同的统计属性(小数点后两位)

将随机的点转换为圆,同时保证数据具有相同的特征

**创建数据集。 输入是左侧的“恐龙”数据集,中间是一组目标形状。 最终数据集显示在右侧。 所有数据集和动画的所有帧具有相同的统计

其中(x mean = 54.26,y mean = 47.83,x SD = 16.76,y SD = 26.93,Pearson's R = -0.06)。**

下图为最终整合在一起的结果

好了,其它更多的你们可以去它的官网看

开始写代码(本文使用R语言)

先说说想法

将x的数据和y数据之比稍微修改少量,以确保数据的准确性

下文对数据修改称为扰动

check_prop=function(new_pts, is_x)
{
if (is_x)
   return(abs(myx_mean-stat_cond(new_pts)) < 0.01)
else
   return(abs(myy_mean-stat_cond(new_pts)) < 0.01)
}
 
 
mv_pts=function(pts)
{
repeat
   {
   new_x=pts$x+runif(num_pts, -0.01, 0.01)
   if (check_prop(new_x, TRUE))
      break()
   }
 
repeat
   {
   new_y=pts$y+runif(num_pts, -0.01, 0.01)
   if (check_prop(new_y, FALSE))
      break()
   }
 
return(data.frame(x=new_x, y=new_y))
}

我们需要改动的数据点,在下面称为扰动点

然后需要计算扰动点与目标点位置之间的距离。 对于每个扰动点,需要找到目标中最近的邻居并计算距离。 这可以在nlog(n)中使用K-D tree(一种数据结构)完成,当然还有一个R语言的相关包,RANN,这样做(在nn2函数中实现)。 下面代码尝试了最小化距离之和,还有另一种方法是最小化平均距离:

mv_closer=function(pts)
{
repeat
   {
   new_pts=mv_pts(pts)
   new_dist=nn2(rabbit, new_pts, k=1)
   if (sum(new_dist$nn.dists) < cur_dist)
      {
      cur_dist <<- sum(new_dist$nn.dists)
      return(new_pts)
      }
   }
}

现在它就变成了一个循环迭代次数的问题,如果距离低于某个限制标准,则存在

iter_closer=function(tgt_pts, src_pts)
{
cur_dist <<- sum(nn2(tgt_pts, src_pts, k=1)$nn.dists)
cur_pts=src_pts
for (i in 1:5000)
   {
   new_pts=mv_closer(cur_pts)
   cur_pts=new_pts
   if (cur_dist < 13)
      return(cur_pts)
   }
return(cur_pts)
}

此代码处理单个属性。 上面AUTODESK的开发者利用原始模型在实施该过程中花费了一个多小时的时间,同时处理多个属性,并使用模拟退火算法来防止死循环在本地的最小值中。

下面是例子,原始点位黄色

对图像进行修理一下就可以变得很好看

相关下载

这是“恐龙”数据

这是“兔子”数据

这是“本文代码”

说明

这个方法对于那些对数据精度要求很高的系统是不能使用的

理由很简单:)

YingJoy

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

核心算法|谷歌如何从网络的大海里捞到针

2098
来自专栏章鱼的慢慢技术路

解救小哈——DFS算法举例

2398
来自专栏AI研习社

Github 项目推荐 | 基于 PyTorch,面向 AI 系统加速研究与开发的深度学习框架

TorchFusion 基于 PyTorch 并且完全兼容纯 PyTorch 和其他 PyTorch 软件包,它供了一个全面的可扩展训练框架,可以轻松用开发者的...

1042
来自专栏落影的专栏

OpenGL ES实践教程(四)VR全景视频播放

教程 OpenGL ES实践教程1-Demo01-AVPlayer OpenGL ES实践教程2-Demo02-摄像头采集数据和渲染 OpenGL ES实践...

3954
来自专栏有趣的Python

TensorFlow应用实战-18-Policy Gradient算法

5764
来自专栏机器之心

教程 | 如何保持运动小车上的旗杆屹立不倒?TensorFlow利用A3C算法训练智能体玩CartPole游戏

本教程面向所有对强化学习感兴趣的人,不会涉及太深的机器学习基础,但主题中涵盖了高级策略网络和价值网络的相关知识。此外,我建议阅读 Voldymyr Mnih 的...

1313
来自专栏华章科技

核心算法:谷歌如何从网络的大海里捞到针

作 者: David Austin,Grand Valley State University

1008
来自专栏IT派

用python怎样识别验证码?(含源码)

验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套...

2330
来自专栏大数据挖掘DT机器学习

文本自动分类案例(源码)

使用机器学习方法 做文档的自动分类 套路: 1.根据每个文件 生成该文件的一个特征 2.根据特征 选择 分类器 进行文本分类 3.(可选)根据 2 步结果,调...

42512
来自专栏专知

100个GitHub Star数上升最快的深度学习开源项目

截止7月18日,Star数上升最快(与6月10日相比)的100个GitHub Star数上升最快的深度学习开源项目,按Star数排序。

1143

扫码关注云+社区