标准化分类值

问题描述

现在我正在处理开放数据集,其中一项任务是“标准化”值。我们只关心“年龄”、“性别”、“种族”、“民族”和“国家”属性

对于“国家”,我们可以将“united-states”、“united states”、“usa”、“us”作为与“US”匹配的有效表达式。还有很多其他国家在不同的数据集中有不同的表达值。

目标是将所有这些值“转换”为例如“US”。但是,我不知道其他数据集中是否存在“US”的其他表达方式。所有数据集的存储量为 2.3 TB。我无法迭代所有数据集以获取“US”的所有不同表达式,然后再次迭代以转换所有值。

有什么工具可以检测和转换这些东西吗?

现在一切都在 Python 下。

最佳

最大

解决方法

“标准化”值的唯一方法是知道要匹配和替换什么,这涉及“循环”您的数据以查找存在的值。一旦你有了这个列表,你就可以设计合适的匹配字符串来替换。

所以在这里,我们可以“循环”遍历数据框(即,使用为我们执行循环和计数的函数)并计算列中的值。一旦我们有了那个计数表,我们就可以复制和粘贴哪些值看起来与我们的国家名称相匹配。您可以手动完成此部分,因为此时它比自动化更容易。此步骤的一个重要部分是将值小写(使用 import java.io.*; import java.text.*; import java.util.*; import javax.imageio.ImageIO; import java.awt.image.*; public class RandomColour { public static void main(String[] args) { int w = 100; int h = 100; int arr[] = new int[w*h]; for (int i = 0; i < arr.length; i++) { int r = (int) (Math.random() * 254); int g = (int) (Math.random() * 254); int b = (int) (Math.random() * 254); arr[i] = 0xFF000000 | (r << 16) | (g << 8) | b; } BufferedImage outputImage = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB); WritableRaster raster = outputImage.getRaster(); raster.setSamples(0,w,arr); try { ImageIO.write(outputImage,"png",new File("output.png")); } catch(Exception e){ System.out.println(e); } System.out.println("Finished generating a random image."); } } ),以便您可以更好地比较和计算字符串。

.str.lower()

在此处阅读更多信息https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html

上述解决方案仅适用于 >>> df = pd.DataFrame({'Country': ['united-states','usa','USA','UNITED STATES','united states','us','us']}) >>> df Country 0 united-states 1 usa 2 USA 3 UNITED STATES 4 united states 5 us 6 us 7 us >>> df['Country'].value_counts() us 3 united states 1 usa 1 united-states 1 UNITED STATES 1 USA 1 Name: Country,dtype: int64 >>> # Take a look at values above to generate replace list >>> df['Country'].str.lower().replace(['united-states','united states'],'us') 0 us 1 us 2 us 3 us 4 us 5 us 6 us 7 us Name: Country,dtype: object 列,但对于您数据的任何其他列,这可能会失效。这很乏味,但这种数据整理必须手动完成,否则,您可能会丢失本应标准化的数据。如果您最初未能捕捉到其中一些值,您将需要投入更多时间来修复那些缺失的值。

如果您的数据碰巧定期更改,这个故事就会发生变化。在这种情况下,上述将是一个很好的第一种方法。但是,您应该能够将 fuzzy matching 之类的技术与 Country 之类的 Python 包结合使用。这将允许您找出哪些字符串更相似,然后以这种方式解析它。然而,这需要更多的细节工作。