标签: data-cleaning

个人人口统计信息的模糊数据匹配

假设我有一个数据库,其中包含具有以下数据元素的人员:

  • PersonID(无意义的代理自动编号)
  • 中间初始
  • 名称后缀
  • 出生日期
  • 备用 ID(如 SSN、军人 ID 等)

我从各种格式中获取了大量数据,其中包含您能想到的这些信息的各种合理变化。一些例子是:

  • 全名、出生日期
  • 全名,最后 4 个 SSN
  • 第一个、最后一个、出生日期

当这些数据进来时,我需要写一些东西来匹配它。我不需要或期望获得超过 80% 的匹配率。自动匹配后,我会将不确定的匹配显示在网页上,供某人手动匹配。

其中一些复杂性是:

  1. 有些数据匹配比其他数据匹配更好,我想为这些数据分配权重。例如,如果 SSN 完全匹配,但由于有人使用中间名而导致姓名被关闭,那么我想为该匹配分配比名称完全匹配但 SSN 关闭时更高的置信度值。
  2. 名称匹配有一些困难。John Doe Jr. 与 John Doe II 相同,但与 John Doe Sr. 不同,如果我得到 John Doe 而没有其他信息,我需要确保系统不会选择一个,因为无法确定选择谁。
  3. 名字匹配真的很难。你有鲍勃/罗伯特、约翰/乔恩/乔纳森、汤姆/托马斯等。
  4. 仅仅因为我有一个包含 FullName+DOB 的提要,并不意味着每条记录都会填充 DOB 字段。我不想仅仅因为不匹配的 DOB 破坏了匹配的分数而错过链接。如果缺少某个字段,我想将其从可用于匹配的元素中排除。
  5. 如果有人手动匹配,我希望他们的匹配影响所有未来的匹配。因此,如果我们再次获得相同的精确数据,下次没有理由不自动匹配它。

我已经看到SSIS有模糊匹配,但我们目前不使用SSIS,而且我发现它非常笨拙并且几乎不可能进行版本控制,所以它不是我的首选工具。但如果这是最好的,请告诉我。否则,是否有任何(最好是免费的,最好是基于 .NET 或T-SQL 的)工具/库/实用程序/技术用于解决此类问题?

.net c# algorithm string-matching data-cleaning

5
推荐指数
1
解决办法
3056
查看次数

如何删除数据框中的回车

我有一个包含名为id,country_name,location和total_deaths列的数据框.在进行数据清理过程时,我偶然发现了一个'\r'连接的值.完成清理过程后,我将生成的数据帧存储在destination.csv文件中.由于上面的特定行已\r附加,因此它始终会创建一个新行.

id                               29
location            Uttar Pradesh\r
country_name                  India
total_deaths                     20
Run Code Online (Sandbox Code Playgroud)

我想删除\r.我试过了df.replace({'\r': ''}, regex=True).它不适合我.

还有其他解决方案.有人可以帮忙吗?

编辑:

在上面的过程中,我迭代df以查看是否\r存在.如果存在,则需要更换.这里row.replace()row.str.strip()似乎没有工作,或者我可能以错误的方式做到这一点.

我不想在使用时指定列名或行号replace().因为我无法确定只有"位置"列才会有\r.请在下面找到代码.

count = 0
for row_index, row in df.iterrows():
    if re.search(r"\\r", str(row)):
        print type(row)               #Return type is pandas.Series
        row.replace({r'\\r': ''} , regex=True)
        print row
        count += 1
Run Code Online (Sandbox Code Playgroud)

python replace carriage-return pandas data-cleaning

5
推荐指数
1
解决办法
2万
查看次数

Pandas - 从列中的浮点数中删除字符串

我有一个如下所示的数据框:

plan type  hour status     code
A    cont   0    ok       010.0
A    cont   2    ok      025GWA
A    cont   0    notok   010VVT
A    cont   0    other     6.05
A    vend   1    ok        6.01
Run Code Online (Sandbox Code Playgroud)

列代码有几个字母不同的字符串字符。最后我想将“代码”列转换为浮动。我试过:

df['code'] = df['code'].str.extract('(\d+)').astype(float)
Run Code Online (Sandbox Code Playgroud)

但这样我得到了:

plan type  hour status     code
A    cont   0    ok        10.0
A    cont   2    ok        25.0 
A    cont   0    notok     10.0
A    cont   0    other      6.0
A    vend   1    ok         6.0
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到如下结果?

plan type  hour status     code
A    cont   0    ok       10.00
A    cont   2 …
Run Code Online (Sandbox Code Playgroud)

python pandas data-cleaning

5
推荐指数
2
解决办法
9016
查看次数

从 R 中的整个数据框中删除特殊字符

问题:

如何使用 R 快速高效地从数据框中删除所有特殊字符?

进步:

这篇 SO文章详细介绍了如何删除特殊字符。我可以将 gsub 函数应用于单列(图像 1 和 2),但不能应用于整个数据帧。

问题:

我的数据帧由 100 多列整数、字符串等组成。当我尝试在数据帧上运行 gsub 时,它不会返回我想要的输出。相反,我得到了图 3 中所示的内容。

df <- read.csv("C:/test.csv")
dfa <- gsub("[[:punct:]]", "", df$a) #this works on a single column
dfb <- gsub("[[:punct:]]", "", df$b) #this works on a single column
df_all <- gsub("[[:punct:]]", "", df) #this does not work on the entire df
View(df_all)
Run Code Online (Sandbox Code Playgroud)

df - 这是原始数据框:

原始数据框

dfa - 这是应用于 b 列的 gsub。好的!

gsub 应用于 b 列

df_all - 这是应用于整个数据帧的 gsub。坏的!

gsub 应用于整个数据帧

概括:

有没有办法 gsub 整个数据帧?否则,应该使用 apply 函数吗?

r data-cleaning data-science

5
推荐指数
2
解决办法
2万
查看次数

熊猫| 将逗号分隔的组的所有值分组

根据应用程序的要求,我需要以逗号分隔格式显示所有组成的数据,以便管理员可以做出决定,我是Python的新手,不知道如何做到这一点.

样本可重复的数据

import pandas as pd

compnaies = ['Microsoft', 'Google', 'Amazon', 'Microsoft', 'Facebook', 'Google']
products = ['OS', 'Search', 'E-comm', 'X-box', 'Social Media', 'Android']

df = pd.DataFrame({'company' : compnaies, 'product':products })
-----------------------------------------------------------------   
    company     product
0   Microsoft   OS
1   Google      Search
2   Amazon      E-comm
3   Microsoft   X-box
4   Facebook    Social Media
5   Google      Android
Run Code Online (Sandbox Code Playgroud)

现在我按照这个代码计算公司集团的数量

df.groupby(['company']).count()
Run Code Online (Sandbox Code Playgroud)

我需要下面提到的格式的数据,但不知道如何获得它

期望的输出

company    count product
Amazon      1    E-comm
Facebook    1    Social Media
Google      2    Search, Android
Microsoft   2    OS, X-box
Run Code Online (Sandbox Code Playgroud)

python pandas data-cleaning

5
推荐指数
1
解决办法
2760
查看次数

如何将当前行的负值传输到数据框中的上一行?

我想将当前行的负值传递到上一行,方法是将它们添加到每个组中的上一行.以下是我的原始数据示例:

raw_data <- data.frame(GROUP = rep(c('A','B','C'),each = 6),
                   YEARMO = rep(c(201801:201806),3),
                   VALUE = c(100,-10,20,70,-50,30,20,60,40,-20,-10,50,0,10,-30,50,100,-100))
> raw_data
  GROUP YEARMO VALUE
1      A 201801   100  
2      A 201802   -10
3      A 201803    20
4      A 201804    70
5      A 201805   -50
6      A 201806    30
7      B 201801    20
8      B 201802    60
9      B 201803    40
10     B 201804   -20
11     B 201805   -10
12     B 201806    50
13     C 201801     0
14     C 201802    10
15     C 201803   -30
16 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr data.table data-cleaning

5
推荐指数
1
解决办法
77
查看次数

处理 Logistic 回归的 NaN(缺失)值 - 最佳实践?

我正在处理患者信息数据集,并尝试使用 MATLAB 根据数据计算倾向得分。删除具有许多缺失值的特征后,我仍然留下几个缺失(NaN)值。

当我尝试使用以下 Matlab 代码(来自 Andrew Ng 的 Coursera 机器学习课程)执行逻辑回归时,由于这些缺失值,我会遇到错误,因为我的成本函数和梯度向量的值变为 NaN:

[m, n] = size(X);
X = [ones(m, 1) X];    
initial_theta = ones(n+1, 1);
[cost, grad] = costFunction(initial_theta, X, y);
options = optimset('GradObj', 'on', 'MaxIter', 400);

[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
Run Code Online (Sandbox Code Playgroud)

注意:sigmoid 和 costfunction 是我为整体易用性而创建的工作函数。

如果我将所有 NaN 值替换为 1 或 0,则可以顺利执行计算。但是我不确定这是否是处理此问题的最佳方法,而且我也想知道我应该选择(通常)什么替换值获得使用缺失数据执行逻辑回归的最佳结果。使用特定数字(0 或 1 或其他数字)替换数据中所述缺失值有什么好处/缺点吗?

注意:我还将所有特征值标准化为 0-1 范围内。

对于这个问题的任何见解都将受到高度赞赏。谢谢

machine-learning nan missing-data logistic-regression data-cleaning

5
推荐指数
1
解决办法
2218
查看次数

Python用相同的键对Dataframe中的行求和

我想总结数据框中具有相同行键的行。

目的是缩小数据集的大小。

例如,如果数据框看起来像这样。

Fruit       Count

Apple         10

Pear          20

Apple          5

Banana         7

Banana         12

Pear           8  

Apple          10
Run Code Online (Sandbox Code Playgroud)

我希望最终的数据框看起来像这样。

Fruit       Count

Apple         25

Pear          28

Banana        19
Run Code Online (Sandbox Code Playgroud)

我正在使用Python的pandas、numpy、matplotlib和其他数据分析包。有没有办法在 python 中使用这些包中的函数来做到这一点?

这是创建示例数据框的代码。

df = pd.DataFrame([["Apple", 10], ["Pear", 20], ["Apple", 5], ["Banana", 7], ["Banana", 12], ["Pear", 8], ["Apple", 10]], columns=["Fruit", "Count"])
Run Code Online (Sandbox Code Playgroud)

python statistics numpy pandas data-cleaning

5
推荐指数
2
解决办法
6635
查看次数

将向量中的值插值/拉伸到指定长度

我有不同长度的向量例如,

a1 = c(1,2,3,4,5,6,7,8,9,10) a2 = c(1,3,4,5) a3 = c(1,2,5,6,9)

我想将 a2 和 a3 拉伸到 a1 的长度,因此我可以对其运行一些要求向量长度相同的算法。我会将 a1 截断为与 a2 和 a3 相同,但最终会丢失有价值的数据。

即也许 a2 可能看起来像 1 1 1 3 3 3 4 4 5 5 ?

任何建议都会很棒!谢谢

编辑:我需要它适用于具有重复值的向量,例如 c(1,1,2,2,2,2,3,3) 和延伸值来表示原始向量中重复值的数量,例如,如果我将示例向量拉伸到 100 的长度,我会期望 2 的数量多于 1 的数量。

interpolation r data-manipulation data-processing data-cleaning

5
推荐指数
1
解决办法
438
查看次数

在 R 中将完整年龄从字符转换为数字

我有一个数据集,其中人们的完整年龄为 R 中的字符串(例如,“10 年 8 个月 23 天)”,我需要将其转换为有意义的数字变量。我正在考虑将其转换为有多少天人的年龄(这很困难,因为月份有不同的天数)。因此,最好的解决方案可能是创建一个双变量,将年龄显示为 10.6 或 10.8,一些数字变量携带 10 年 8 个月 5 天大于的信息10年7月12天。

这是我当前变量的示例

library(tibble)

age <- tibble(complete_age = 
             c("10 years 8 months 23 days",
               "9 years 11 months 7 days",
               "11 years 3 months 1 day",
               "8 years 6 months 12 days")) 

age

# A tibble: 4 x 1
  complete_age             
  <chr>                    
1 10 years 8 months 23 days
2 9 years 11 months 7 days 
3 11 years 3 months 1 day  
4 8 years …
Run Code Online (Sandbox Code Playgroud)

r lubridate stringr data-cleaning data-wrangling

5
推荐指数
1
解决办法
905
查看次数