专栏首页应兆康的专栏扭曲你的数据,让其变得具有视觉吸引力
原创

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

前言

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

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

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

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

相关文章

  • OpenCV+TensorFlow 人工智能图像处理 (1)

    OpenCV是一个开源的计算机视觉库,OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和M...

    YingJoy_
  • 8. 建立一个单一数字的评估指标

    分类准确率是单一数字评估指标(single-number evaluation metric)的示例:你在你的开发集(或测试集)上运行你的分类器,然后得到样本分...

    YingJoy_
  • 建立一个单一数字的评估指标

    YingJoy_
  • 读写二进制文件与文本文件

    文件分为两类:二进制文件和文本文件。所有数据在计算机中均以二进制形式存在,这里所说的二进制和文本是以程序解释文件数据的方式来区分的。

    雪飞鸿
  • ASTMatcher分析函数调用链(下)

    上一篇文章(ASTMatcher分析函数调用链(上))讲到ASTMatcher的原理以及创建,本文将详细介绍ASTMatcher获取函数调用链在iOS app中...

    adding
  • composer 实现自动加载原理

    一般在框架中都会用到composer工具,用它来管理依赖。其中composer有类的自动加载机制,可以加载composer下载的库中的所有的类文件。那么comp...

    lin_zone
  • 报表应用系统中如何正确使用图表功能

    相信对于报表应用系统研发人员而言,都不会对图表功能感到陌生,因为报表数据通常以图表和表格的形式显示。但是,你真的了解为什么需要使用图表功能吗,不同图表类型的最佳...

    葡萄城控件
  • 不怕搞事,自定义View云扩散效果

    用户1907613
  • 重磅 | 奖金200万,千万数据规模,创新工场搜狗今日头条联合发起迄今国内最大AI挑战赛(附详细赛事说明)

    文/周翔 编辑/鸽子 上月,举办了八届的 ImageNet 挑战赛由创始人之一李飞飞博士正式宣布退出历史舞台。虽然 ImageNet 走了,但是今日下午(8 月...

    AI科技大本营
  • 03-Vue入门系列之Vue列表渲染及条件渲染实战

    3.1. 条件渲染 有时候我们要根据数据的情况,决定标签是否进行显示或者有其他动作。最常见的就是,表格渲染的时候,如果表格没有数据,就显示无数据。如果有数据就显...

    老马

扫码关注云+社区

领取腾讯云代金券