Python 如何消除可疑条形码(如123456)数据

Python 如何消除可疑条形码(如123456)数据,python,pandas,numpy,data-manipulation,Python,Pandas,Numpy,Data Manipulation,下面是来自pandas数据库的一些条形码数据 737318 Sikat Botol Pigeon 4902508045506 75170 737379 Natur Manual Breast Pump 8850851860016 75170 738753 Sunlight 1232131321313 75261 739287 Bodymist bodyshop 1122334455667 7

下面是来自
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

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

如果您担心重复的和连续的数字,您可以取这些数字的
np.diff
,然后使用。随机数的连续数字之间的差值应遵循
-10
10
之间的三角形分布,最大值为
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
应该可以保证您保留的值没有太多连续或重复的数字。如果你真的想确定你已经消除了任何可疑的东西,你可能还想根据
stat.uniform(scale=10)
(消除
1213141516171
和类似的东西)测试实际数字。

如果你担心重复和连续的数字,您可以获取数字的
np.diff
,然后使用。随机数的连续数字之间的差值应遵循
-10
10
之间的三角形分布,最大值为
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
应该可以保证您保留的值没有太多连续或重复的数字。如果你真的想确定你已经消除了任何可疑的东西,你可能还想根据
stat.uniform(scale=10)
(消除
1213141516171
和类似的东西)测试实际数字。

作为第一步,我将使用内置验证机制的条形码,校验和。由于您的条形码显示为GTIN条形码(特别是GTIN-13),您可以使用:


作为第一步,我将使用内置验证机制的条形码,校验和。由于您的条形码显示为GTIN条形码(特别是GTIN-13),您可以使用:


对不起,这不是熊猫的工作。我想我需要一些机器学习,但我不知道你可能想识别高度“非随机”的数字,或者在某种程度上与该栏中的其他数字不同的数字。你最好从一个统计来源获得初步建议,例如。你建议采取什么行动,删除此问题并在stats.stackexchange.com上发布类似帖子?你应该使用Keras或Tensorflow研究长-短期记忆(LSTM)-RNN抱歉,这不是熊猫的工作。我想我需要一些机器学习,但我不知道,在我看来,你可能想要识别出高度“非随机”的数字,或者与该列中的其他数字有所不同的数字。您最好从一个统计来源获得初步建议,例如。您建议采取什么行动,删除此问题并在stats.stackexchange.com上发布类似帖子?如果
pandas
向导可以修复我的数据提取,您应该使用Keras或TensorFlow查看长-短期记忆(LSTM)-RNN(
a=np.array…
)匹配问题的算法我将永远感激。如果
pandas
向导可以修复我的数据提取(
a=np.array…
)匹配问题的算法我将永远感激。非常好的一点。如果您首先使用条形码中的内置错误检查,您可能可以在我的方法中降低p值以减少误报。非常好的一点。如果您首先使用bu,您可能可以在我的方法中降低p值以减少误报ilt在条形码本身的错误检查中。