如何解决标准化分类值
现在我正在处理开放数据集,其中一项任务是“标准化”值。我们只关心“年龄”、“性别”、“种族”、“民族”和“国家”属性。
对于“国家”,我们可以将“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 包结合使用。这将允许您找出哪些字符串更相似,然后以这种方式解析它。然而,这需要更多的细节工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。