为高度倾斜的数据生成直方图

2024-02-03

我在用着dc.js, crossfilter.js and d3.js生成条形图。

条形图表示信用卡交易的数据。它绘制了交易数量(y 轴)与交易金额(x 轴)的关系。

它看起来像这样:

数据数组基本上如下所示:

[
  ...
  {
    txn_id: 1,
    txn_amount: 20
  },
  ...
]

根据不同的商家等,数据变化很大,我无法对分布做出任何假设。

正如您所看到的,由于数据本身的原因,该图并不是那么有用。在这种情况下,有 1 笔交易-$7500 and 2大约$7500.

中间还有其他金额,但大多数交易都集中在$0 - $100你可以看到尖峰的地方。

不幸的是,存在足够的差异,您甚至看不到频率较低的交易金额的条形图。

This answer https://stackoverflow.com/questions/8195820/histogram-in-javascript看起来很接近,但还不够。

我真正想做的是将 x 轴刻度分成 10 个大小合理的块,将交易金额合理地分组,以使图表更有用。

例如,在这种情况下,平均交易金额是$20。极值最小值和最大值是-$7500 and $7500

因此,在这个特定的示例中,我可能希望将 x 轴分成块,如下所示:

Bin 1: -$1000 >= transaction amount
Bin 2: -$100 >= transaction amount > -$1000
Bin 3: -$50 >= transaction amount > -$100
Bin 4: $0 >= transaction amount > -$50
Bin 5: $15 >= transaction amount > $0
Bin 6: $25 >= transaction amount > $15
Bin 7: $40 >= transaction amount > $25
Bin 8: $100 >= transaction amount > $40
Bin 9: $1000 >= transaction amount > $100
Bin 10: transaction amount > $1000

(块/箱的大小越接近我们得到的平均值就越小)。

诚然,我已经很久没有认真研究过统计学了,所以我已经很生疏了。但看来我将数据分解为数据箱/卡盘的方式与数据的标准差有很大关系。

我想我对自己想要的东西有很好的感觉,我只是有点不知道如何使用d3.js (d3.mean(), d3.quantile() ?) and dc.js获得类似于我所描述的直方图。

那么正确的方法是什么,或者我应该使用哪些库:

  1. 根据任意给定的数据集创建 10 个“合理”大小的 bin
  2. 将数据分组到这些容器中(实际上,这部分应该非常简单)

就物理间距直方图的 x 轴而言,我认为没有必要或不需要刻度线间隔不均匀(因此也许它不再是直方图)。

尽管块大小不相等,但我还是希望刻度保持均匀分布。我会确保对刻度进行适当的标记。

任何正确方向的指示将不胜感激。

Update:

所以看来d3.js像往常一样比我先走几步,已经到了我的后面。我相信我可以使用d3.scale.quantile()将 x 轴分成 10 个分位数(十分位数)。事实上,我已经设置了我的分位数比例,它似乎做了正确的事情,当我直接将数字输入到分位数比例函数(通过 JS 控制台)时,它输出正确的存储桶(在 10 个桶中)。

但不幸的是我的图表仍然混乱。这是我的代码:

var datum = crossfilter(data),
    amount = datum.dimension(function(d) { return +d.txn_amount; }),
    amounts = amount.group();

amountsChart = dc.barChart("#dc-amounts-chart");
amountsChart
  .width(defaultWidth)
  .height(defaultHeight)
  .margins({top: 20, right: 20, bottom: 20, left: 50})
  .dimension(amount)
  .group(amounts)
  .centerBar(true)
  .gap(5)
  .elasticY(true)
  .x(d3.scale.quantile().domain(amounts.all().map(function(d) {
                          // d.key is the transaction dollar amount,
                          // d.value is the number of transactions at that amount
                          return d.key;
                        }))
                        .range([0,1,2,3,4,5,6,7,8,9]));

amountsChart.yAxis().ticks(5);

dc.renderAll();

以及结果图表:

我想我已经接近了,但仍然不确定我在哪里转错了方向。


您可以使用异常值测试来修剪异常值,然后将它们添加回极端值箱中。我还将这些 bin 上的文本更改为 y,但这可以通过将一组自定义刻度传递到轴来轻松完成。

我用以下方法模拟了一个例子肖文内准则 http://en.wikipedia.org/wiki/Chauvenet%27s_criterion,众多异常值测试之一。我最初想过使用 Grubbs 测试(或者甚至更好的多个 Grubbs Beck 测试),但需要做一些编码工作。肖文内标准的工作原理非常简单,假设任何大于平均值的 m 个标准差的值都是异常值。

我把这一切放在一起here http://bl.ocks.org/phil-pedruco/6917114函数是:

function chauvenet (x) {
    var dMax = 3;
    var mean = d3.mean(x);
    var stdv = Math.sqrt(variance(x));
    var counter = 0;
    var temp = [];

    for (var i = 0; i < x.length; i++) {
        if(dMax > (Math.abs(x[i] - mean))/stdv) {
            temp[counter] = x[i]; 
            counter = counter + 1;
        }
    };

    return temp
}

这些术语都相当明显,dMax 是标准差的数量,mean 是平均值,stdv 是标准差(或方差的平方根)。

请注意,我没有将异常值添加回直方图中,但这应该很容易做到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为高度倾斜的数据生成直方图 的相关文章

  • 如何在 TypeScript 中获取源代码中的实际行号(用于自定义日志记录)

    参考文献这个问题 https stackoverflow com questions 1340872 how to get javascript caller function line number how to get javascri
  • Vue.JS 2.5.1:未捕获的语法错误:意外的令牌导出

    我试图使用 VueJS 和 Bootstrap Vue 制作一个单选按钮 但是当我制作它时发生了这种情况 我预计这是语法错误 就像它所说的那样 但我似乎找不到任何线索 所以我尝试复制粘贴代码 这是 test radio php 的完整代码
  • 使用 npm 作为构建工具连接文件

    我最近发现我可以使用 npm 作为任务运行程序 而不是 gulp 或 grunt 到目前为止 一切都很棒 lint stylus jade uglify watch 等 但串联部分 我似乎无法实现 gulp 是这样的 gulp task s
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • 拖放区缩略图宽度图像大小

    如何更改上传图像的缩略图大小 我在我的javascript中尝试过thumbnailWidth 350 但是这不会增加缩略图大小 而缩略图只是看起来放大了 如何操作图像缩略图大小 HTML section section
  • 动态表中每个按钮的 Jquery-Ui 对话框表单

    我正在生成一个 HTML 表 每行都有一个按钮 必须打开 Jquery ui 对话框表单 The table table class table table reporting table condensed table striped t
  • 夜间值班。单击带有文本的元素

    我遇到问题 无法单击具有某些独特文本的网页元素 我有这样的结构 div class wg wagon type title Text div 我试试这个 click wg wagon type title contains Text 但我有
  • jQuery 验证日期范围问题

    我的代码中有很多地方有成对的相关开始和结束日期字段 范围 我需要验证开始日期早于结束日期 我正在使用 jQuery 验证插件 这是我的代码 http jsfiddle net jinglesthula dESz2 http jsfiddle
  • Nodemailer:从未收到问候语

    当尝试使用 Nodemailer 在 Node 内发送电子邮件时 https github com nodemailer nodemailer https github com nodemailer nodemailer 调用sendMai
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • 在 IE10 中禁用捏合放大

    在 IE10 触摸模式下 我希望仅使页面的特定部分可缩放 其余的不应该 我找到了这个 http msdn microsoft com en US library ie hh772044 aspx http msdn microsoft co
  • jQuery 检查复选框并触发 javascript onclick 事件

    我正在尝试使用 jQuery 检查复选框并在此过程中触发 onclick 事件 假设我在 html 中定义了一个复选框
  • Rails 递归地包含 javascripts 资源文件夹

    我了解如何将一个 JavaScript 文件添加到 Rails 资产管道中 只需添加 require filename 到 application js 但是如何在一个文件夹下包含多个 javascript 文件 vendor assets
  • 更新 Google 地图流量层而无需重新加载页面

    我的页面中嵌入了 Google 地图 我使用 initMap js 函数来初始化地图 function initMap var map new google maps Map document getElementById t map zo
  • 从网站存储数据的最简单方法(在服务器端)

    我有一个非常简单的网站 实际上是单页 有一个输入字段和一个按钮 我需要将用户提交的数据存储在服务器端的某个位置 完美的方法可能是简单的文本文件 并在每次单击按钮后附加新行 日志文件也可以 据我了解 JavaScript 本身是不可能的 我在
  • 删除 Laravel Mix 中的临时文件

    我想在 laravel mix 构建期间或之后删除临时构建文件 这是我目前拥有的一些代码 但是del不工作 const mix require laravel mix const del require del compile sass i
  • 无法在渲染器进程中使用 Node.js API

    无法在 Electron 中使用任何与 Electron 或节点相关的操作 未定义获取错误过程 我检查了他们指导添加节点支持的各个地方 但这已经完成了 所以卡在这里 我的主要应用程序代码是 const electron require el
  • Phonegap facebook 插件:android 的各种问题

    我正在尝试将 Phonegap 3 1 与 Phonegap facebook plugin 集成 以使我的应用程序能够使用 facebook 登录 https github com phonegap phonegap facebook p
  • 如何使用 Jest 测试对象键和值的相等性?

    我有一个mapModule我在其中导入组件并导出它们 import ComponentName from components ComponentName export default name ComponentName 我该如何测试ma
  • 如何修复nodejs Express服务器中的“MulterError:意外字段”?

    我正在设置一个服务器来从客户端上传 zip 文件 服务器运行express和multer来执行此操作 上传文件时 服务器抛出 MulterError 意外字段 错误 我无法弄清楚是什么导致了它 我尝试过使用 png 图像 效果很好 但对于

随机推荐

  • 无法连接到本地运行时:加载服务器扩展时出错 —

    我正在尝试连接到本地运行时进行编辑Mask R CNN模型 https colab research google com github tensorflow tpu blob master models official mask rcn
  • 如何使用JEST测试递归函数的时间过程

    我使用 JEST 编写测试 我不知道如何在 JEST 中测试承诺递归 在此测试中 执行递归的重试函数是测试的目标 直到 Promise 得到解决 export function retry
  • 如何在记事本++中为每一行添加右大括号

    我有一个用记事本打开的文件 显示如下 insert into agent sales values 61 39858 insert into agent sales values 101 5786 insert into agent sal
  • QT:从资源 QSS 文件中 setStyleSheet?

    在我的小部件中 我可以做类似的事情 MyWindow MyWindow QWidget parent QWidget parent ui setupUi this setStyleSheet QWidget background color
  • 使用pyqt4在python中的QLabel上进行可点击事件?

    我正在使用 pyqt4 库和带有信号和插槽的新库在 python GUI 中工作 我不知道如何将事件放在标签名称上QPLabel 这是我的代码 class Ui Form object def setupUi self Form Form
  • 使用 qt:如何在控制台应用程序之上构建 GUI?

    我有一个从 bison 解析器 生成的控制台应用程序 我想为其构建一个简单的 GUI 这样我就可以将此 gui 的输入发送到控制台 并将控制台的输出获取到 gui 中 我尝试使用 java process 类来做到这一点 但它对我不起作用
  • 多对多实体属性的 Hibernate 标准

    Entity class A ManyToMany private List b list Entity class B 我想使用条件 而不是 sql 查询 从 A 类获取列表 可以这样做吗 在这种情况下投影不起作用 不幸的是 标准只允许选
  • 是否可以在单元测试期间禁用Spring的@Async?

    我有一个方法注释为 Async say Async public void makeFood 但我只是想测试该方法的逻辑 可以同步测试吗 是的 只要你的配置没有 EnableAsync 该方法将同步执行
  • 网页视图无法滚动

    我有这个 Xamarin 表单页面
  • 调用 Time.In 时缺少位置

    当我使用beego orm操作postgresql数据库时 出现这样的错误 调用Time In时缺少位置 代码示例 type dataTest struct Id int pk auto Data time Time orm auto no
  • CodeIgniter + WordPress 集成

    我的网站是用 WordPress 设计的 一些主题页面有一个用于预订的定制 PHP 脚本 我想在 CodeIgniter 中重构它 以获得更大的灵活性 问题 1 如何通过CI的路由系统使用WP中的CI功能 我是否必须制作一个 CI 页面 i
  • 为什么 Swift 中的公共类/结构需要显式公共初始值设定项?

    考虑模块中的以下类 也同样适用于结构体 public class Foo public func bar method body 注意 它没有显式的初始化器 这个例子不需要任何特殊的初始化 该类将暴露给其他模块 因为它被标记为public
  • 删除匹配字符之后的所有字符

    我有一个包含很多行的文件 http example com part 1 this number 1 one http example com part 2 this is number 21 two http example com pa
  • 使用gRPC共享非常大的文件

    我想使用 gRPC 在端点和服务器之间共享非常大的文件 超过 6GB 我当前工作的项目需要一个中央服务器 端点可以在其中上传和下载文件 限制之一是端点彼此不认识 但它们可以从公共总线相互接收和发送消息 为了实现该服务器及其与端点的通信 我正
  • 如何从mongodb中检索数据并显示在ejs页面中?

    我已经向 mongodb 添加了数据 我正在使用猫鼬 我想从 mongodb 数据库获取数据并将其显示在 ejs 页面中 我在互联网上搜索了很多 但在尝试这些时遇到错误 我不明白错误是什么 这是我最近尝试过的 猫鼬模式 var mongoo
  • 在seaborn中绘制多个箱线图

    我想在 pandas 中使用 seaborn 绘制箱线图 因为这是一种更好的可视化数据的方式 但我不太熟悉它 我有三个不同指标的数据帧 我想比较不同的指标 我将循环遍历文件路径来访问它们 for path in paths df pd re
  • 参数数量未知的 C++ 函数指针

    我需要一些关于 C 的帮助 拜托 我正在为一个基于文本的小型游戏编写命令解析器 但遇到了一些问题 解析器应该读取并解析玩家输入的命令 最明显 最直接的解决方案可能是这样的 用伪代码编写 command lt read input from
  • Emacs:组织模式电子表格:通过 hline 定位

    我正在尝试在组织模式下记录我的时间 Bob Johnson Bob s SEO subject time minutes total hours optimization report 2011 07 11 8 10 00 PM PST 1
  • 如何编译适用于 Windows 的 Prometheus UI 静态二进制文件?

    我在尝试着从 Windows 上的 Grafana 访问 GCP 托管 Prometheus 指标 https stackoverflow com q 74563137 20592222 为此我需要为 Prometheus UI 前端编译一
  • 为高度倾斜的数据生成直方图

    我在用着dc js crossfilter js and d3 js生成条形图 条形图表示信用卡交易的数据 它绘制了交易数量 y 轴 与交易金额 x 轴 的关系 它看起来像这样 数据数组基本上如下所示 txn id 1 txn amount