【问题标题】:How to eliminate suspicious barcode (like 123456) data [closed]如何消除可疑条形码(如 123456)数据 [关闭]
【发布时间】:2018-03-15 08:36:42
【问题描述】:

这是来自pandas 数据库的一些条形码数据

737318  Sikat Botol Pigeon          4902508045506   75170
737379  Natur Manual Breast Pump    8850851860016   75170
738753  Sunlight                    1232131321313   75261
739287  Bodymist bodyshop           1122334455667   75296
739677  Bodymist ale                1234567890123   75367

我想删除像123213132131311223344556671234567890123 等可疑的数据(即重复或连续数字太多)。我非常容忍误报,但希望避免误报(坏条码)尽可能多。

【问题讨论】:

  • 对不起,这不是 pandas 的工作。
  • 我想我需要一些机器学习,但我不知道
  • 在我看来,您可能想要识别高度“非随机”或与该列中的其他数字不同的数字。您最好从 stats.stackexchange.com 等统计来源之一获得初步建议。
  • 您建议采取什么行动,删除此问题并在 stats.stackexchange.com 上发布类似的帖子?
  • 您应该研究长短期记忆 (LSTM) - 使用 Keras 或 Tensorflow 的 RNN

标签: python pandas numpy data-manipulation


【解决方案1】:

如果您担心重复和连续的数字,您可以取np.diff 的数字,然后使用Kolmogorov Smirnov test 与三角分布进行比较。随机数的连续数字之间的差异应遵循-1010 之间的三角形分布,最大值为0

import scipy.stats as stat
t = stat.triang(.5, loc = -10, scale = 20)

将条码变成数组:

a = np.array(list(map(list, map(str, a))), dtype = int)  # however you get `a` out of your dataframe

然后用

构建一个掩码
np.array[stat.kstest(i, t.cdf).pvalue > .5 for i in np.diff(a, axis = 1)]

测试:

np.array([stat.kstest(j, t.cdf).pvalue > .5 for j in np.diff(np.random.randint(0, 10, (1000, 13)), axis = 1)]).sum()

Out: 720

您将有大约 30% 的假阴性率,但 p 值阈值 .5 应该几乎可以保证您保留的值没有太多连续或重复数字。如果你想真正确定你已经消除了任何可疑的东西,你可能还需要 KS 对照stat.uniform(scale = 10) 测试实际数字(以消除1213141516171 和类似的)。

【讨论】:

  • 如果 pandas 向导可以修复我的数据提取 (a = np.array . . . ) 算法以匹配我将永远感激的问题。
【解决方案2】:

作为第一步,我将使用内置在验证机制中的条形码,即校验和。由于您的条形码似乎是 GTIN 条形码(特别是 GTIN-13),您可以使用this method

>>> import math
>>> def CheckBarcode(s):
        sum = 0
        for i in range(len(s[:-1])):
            sum += int(s[i]) * ((i%2)*2+1)
        return math.ceil(sum/10)*10-sum == int(s[-1])

>>> CheckBarcode("4902508045506")
True
>>> CheckBarcode("8850851860016")
True
>>> CheckBarcode("1232131321313")
True
>>> CheckBarcode("1122334455667")
False
>>> CheckBarcode("1234567890123")
False

【讨论】:

  • 好点。如果您首先使用条形码本身的内置错误检查,您可能可以在我的方法中降低 p 值以减少误报。
猜你喜欢
  • 2013-02-02
  • 2012-11-25
  • 2010-09-11
  • 2010-09-11
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多