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

前言

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

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

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

下文分享链接密码均为: 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 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

如何用Python和深度神经网络识别图像?

视觉 进化的作用,让人类对图像的处理非常高效。 这里,我给你展示一张照片。 如果我这样问你: 你能否分辨出图片中哪个是猫,哪个是狗? 你可能立即会觉得自己遭受到...

3349
来自专栏人工智能LeadAI

深度学习与TensorFlow:VGG论文复现

上一篇文章我们介绍了下VGG这一个经典的深度学习模型,今天便让我们通过使用VGG开源的VGG16模型去复现一下该论文.

1023
来自专栏人工智能头条

详解TensorBoard如何调参

793
来自专栏AI研习社

Github 代码实践:Pytorch 实现的语义分割器

使用Detectron预训练权重输出 *e2e_mask_rcnn-R-101-FPN_2x* 的示例

1392
来自专栏玉树芝兰

如何用 Python 和 gensim 调用中文词嵌入预训练模型?

利用 Python 和 Spacy 尝试过英文的词嵌入模型后,你是不是很想了解如何对中文词语做向量表达,让机器建模时捕捉更多语义信息呢?这份视频教程,会手把手教...

781
来自专栏量子位

深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

问耕 编译自 Source Dexter 量子位 出品 | 公众号 QbitAI 作者简介:akshay pai,数据科学工程师,热爱研究机器学习问题。Sour...

4789
来自专栏人工智能

使用10几行Python代码,快速建立视觉模型识别图像

视觉 进化的作用,让人类对图像的处理非常高效。 这里,我给你展示一张照片。 ? 如果我这样问你: 你能否分辨出图片中哪个是猫,哪个是狗? 你可能立即会觉得自己遭...

2529
来自专栏企鹅号快讯

opencv是Python处理图片的利器!Python大牛教你玩转opencv!

opencv作为我最常用的图像处理库,当然第一个介绍,并且介绍得比较全面。毋庸置疑,opencv是今天介绍得所有图像库中最全面也最强大的库,如果我们只想掌握一个...

3595
来自专栏ATYUN订阅号

基于计算机视觉和OpenCV:创建一个能够计算道路交通流量的应用

本文将介绍如何在不需要大量的深度学习算法的情况下,基于计算机视觉来计算道路交通流量。本教程只使用Python和OpenCV,在背景差分算法的帮助下,实现非常简单...

2716
来自专栏用户2442861的专栏

基于级联分类器的多目标检测

原文地址:http://blog.csdn.NET/ariesjzj/article/details/8639208

571

扫码关注云+社区