标签: data-cleaning

使用数据表对子集执行操作

我有一个广泛的调查数据集.对于特定问题,在原始数据中创建了一组变量,以表示在特定月份询问调查问题的事实.

我希望创建一组具有月不变名称的新变量; 这些变量的值将对应于观察到的月份的月变量问题的值.

请参阅示例/虚构数据集:

require(data.table)

data <- data.table(month = rep(c('may', 'jun', 'jul'),  each = 5),
                   may.q1 = rep(c('yes', 'no', 'yes'),  each = 5),
                   jun.q1 = rep(c('breakfast', 'lunch', 'dinner'),  each = 5),
                   jul.q1 = rep(c('oranges', 'apples', 'oranges'),  each = 5),
                   may.q2 = rep(c('econ', 'math', 'science'), each = 5),
                   jun.q2 = rep(c('sunny', 'foggy', 'cloudy'), each = 5),
                   jul.q2 = rep(c('no rain', 'light mist', 'heavy rain'), each = 5))
Run Code Online (Sandbox Code Playgroud)

在这项调查中,实际上只有两个问题:"q1"和"q2".这些问题中的每一个都被反复询问了几个月.但是,仅当数据中观察到的月份与特定月份的调查问题匹配时,观察才包含有效响应.

例如:对于"May"中的任何观察,"may.q1"被观察为"是".我想要一个新的"Q1"变量来表示"may.q1","jun.q1"和"jul.q1".当月份为"可能"时,"Q1"的值将取"may.q1"的值,而当月份为"jun"时,"Q1"的值将取值"jun.q1"的值.

如果我尝试使用数据表手动执行此操作,我想要的是:

mdata <- data[month == 'may', c('month', 'may.q1', 'may.q2'), with = F] …
Run Code Online (Sandbox Code Playgroud)

r plyr data.table data-cleaning

6
推荐指数
1
解决办法
434
查看次数

确定字符串格式是"2013年5月16日"还是使用Javascript的UNIX时间戳

使用大型数据集进行一些数据争论.该数据具有"日期"字段,该字段在诸如"1370039735000"和"2013年5月16日"之类的格式之间随机切换.到目前为止,我已将其他日期字段转换为其中之一

new Date("May 16, 2013")
Run Code Online (Sandbox Code Playgroud)

要么

new Date(NumberLong(1370039735000))
Run Code Online (Sandbox Code Playgroud)

如何使用正则表达式或其他方法区分两者之间的区别?我正在使用MongoDB,但它都是Javascript.

javascript regex date data-cleaning

6
推荐指数
1
解决办法
1750
查看次数

openrefine标志改变了行

我正在使用openrefine来清理excel数据集.我有大约70个操作,我一直在剪切和粘贴不同的数据集.我保持记录ID并导出到新的Excel工作表.然后我使用记录ID重新加载工作表.

它运行良好,但即使只有少数记录发生变化,我也必须重新加载整个数据库.是否有一种简单的方法来标记更改的记录,因此我只将已更改的记录导出/导入应用程序?

我可以轻松地在70个操作中添加标记以仅标记已更改的记录吗?

opendata openrefine data-cleaning

6
推荐指数
1
解决办法
93
查看次数

如何替换 pandas 中的异常数据?

我有一个从雅虎财经抓取的股票数据,调整后的收盘数据不知何故是错误的。

            adj_close    close     ratio
date                                    
2014-10-16   240.4076  2466.40  0.097473
2014-10-17   245.8173  2521.90  0.097473
2014-10-20   250.4522  2569.45  0.097473
2014-10-21   251.8850  2584.15  0.097473
2014-10-22   251.0175  2575.25  0.097473
2014-10-23   251.3392  2578.55  0.097473
2014-10-27   253.2155  2597.80  0.097473
2014-10-28   258.9616  2656.75  0.097473
2014-10-29   257.6944  2643.75  0.097473
2014-10-30   257.1339  2638.00  0.097473
2014-10-31    26.3450  2702.80  0.009747
2014-11-03    26.5463  2723.45  0.009747
2014-11-05    27.1160  2781.90  0.009747
2014-11-07    26.7320  2742.50  0.009747
2014-11-10    26.7027  2739.50  0.009747
Run Code Online (Sandbox Code Playgroud)

以下是调整后的收盘数据图:

ad_close 数据图

如何使用插值等方法替换这样的数据?

python pandas data-cleaning

6
推荐指数
1
解决办法
4632
查看次数

R - 仅选择数据帧的因子列

我试图从数据框中仅选择因子列。示例如下:

bank[,apply(bank[,names(bank)!="id"], is.factor)]
Run Code Online (Sandbox Code Playgroud)

但代码的行为很奇怪。一步步:

sapply(bank[,names(bank)!="id"], is.factor)
Run Code Online (Sandbox Code Playgroud)

我得到:

age         sex      region      income     married    children         car 
      FALSE        TRUE        TRUE       FALSE        TRUE       FALSE        TRUE 
   save_act current_act    mortgage         pep      ageBin 
       TRUE        TRUE        TRUE        TRUE        TRUE 
Run Code Online (Sandbox Code Playgroud)

看起来不错。现在,我假设我只是将这个 TRUE/FALSE 矩阵传递到下一步并仅获取我需要的列:

bank[,sapply(bank[,names(bank)!="id"], is.factor)]
Run Code Online (Sandbox Code Playgroud)

但结果我得到了与原始银行数据框中相同的列。什么都没有被过滤掉。我以一种或另一种方式尝试过,但找不到解决方案。对我做错了什么有什么建议吗?

r dataframe data-cleaning data-science

6
推荐指数
1
解决办法
8341
查看次数

Python删除标签符号并保留关键字

我想删除主题标签符号 ( '#') 和分隔单词 ( '_') 的下划线

例子: "this tweet is example #key1_key2_key3"

我想要的结果: "this tweet is example key1 key2 key3"

我的代码使用字符串:

#Remove punctuation , # Hashtag Symbol 
translate_table = dict((ord(char), None) for char in string.punctuation)   
cleaned_combined_tweets.translate(translate_table)
Run Code Online (Sandbox Code Playgroud)

这给出了结果: "this tweet is example key1key2key3"

python data-cleaning

6
推荐指数
1
解决办法
6670
查看次数

按名称汇总数据,分隔多个变量

我试图计算每个球员的进球数,助攻数和助攻数.我的问题是我无法理解这一点,因为我想通过(玩家名称)总结的数据列在三个变量(目标,主辅助和辅助辅助)中

这是我可重复的数据(它是来自dput(),所以为混乱道歉).

mydata <- structure(list(primary_assist = c("Dmitry Gilyazitdinov", "Evgeny Orlov", 
"Anton Burdasov", "Sergei Kalinin", "Stanislav Solovyov", "Vasily Streltsov", 
NA, "Bogdan Potekhin", "Bogdan Potekhin", "Vasily Streltsov", 
"Vasily Streltsov", "Viktor Postnikov", "Danil Kaskov", NA, NA, 
"Artemy Panarin"), secondary_assist = c("Andrei Badrutdinov", 
NA, NA, NA, "Danil Gubarev", "Nikita Manukhov", NA, "Evgeny Grigorenko", 
"Daniil Apalkov", "Ivan Boiko", NA, "Viktor Antipin", "Vitaly Sychov", 
NA, NA, "Stanislav Levin"), goal = c("Vitaly Kropachyov", "Dmitry Kozlov", 
"Stanislav Solovyov", "Kirill Polyansky", "Anton Burdasov", "Ilya Solodov", 
"Alexander Antropov", …
Run Code Online (Sandbox Code Playgroud)

r dplyr data-cleaning

6
推荐指数
1
解决办法
81
查看次数

如何遍历各列,检查某列中是否存在特定值,对新列进行突变,如果存在则输入1,否则输入0?

我正在做一个研究项目,并且输入的表格中的一种还不太适合分析,因此我试图对其进行重组。当前,每一行都是考生,每一列都是他们错误回答的问题,以升序输入。因此,对于第一行,条目可以分别读取第一,第二和第三列的“ Q1”,“ Q3”,“ Q9”等。总共有25个问题。

我的目标是重组数据,以便每个问题都有一列。如果考生正确回答了该问题,则相应列的条目为1,否则为0。

有一种蛮力的方法似乎起作用。可以分别更改每列并检查每列中的每个值。但是,这里有25个问题,所有这些键入似乎效率都很低,所以我怀疑必须有更好的方法。

暴力代码如下所示:

df %>%
  mutate(Q3 == ifelse(col1 == "Q3" | col2 == "Q3" | col3 == "Q3", 0, 1))
Run Code Online (Sandbox Code Playgroud)

在这里,col1,col2,col3都是可能包含Q3的所有列,这可能是测试者出错的问题。如果其中有一个,我们输入0。否则,我们输入1。

有25个问题,代码变得太长。

编辑:数据框的示例如下所示。

sample <- "ID   Col1  Col2  Col3  Col4
1          100   Q1     
2          101   Q3    Q4
3          102   Q2    Q3    Q4   
4          103   
5          104   Q4
6          105   Q1    Q2    Q3    Q4 "
Run Code Online (Sandbox Code Playgroud)

所需的输出如下:

sample <- "ID    Q1    Q2    Q3    Q4
1          100   0     1     1     1
2          101   1     1     0     0
3          102 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr data-cleaning

6
推荐指数
1
解决办法
152
查看次数

旋转数据框以保留 R 中的列标题和子标题

我正在尝试旋转一个包含标题和副标题的表格,以便标题进入“日期”列,并且副标题是两列而不是重复。

这是我的数据的示例。

这是使用 生成的dput(),因此在原始 Excel 文件中,每个日期都跨越两个子标题(“蓝色”和“绿色”),在 R 中,这些空白单元格被重新命名为 X.1、X.2、 ETC。

table <- "          X    X.1 X02.Jul.12   X.2 X03.Jul.12   X.3 X04.Jul.12   X.4
1  category number       blue green       blue green       blue green
2         G      1          1     0          1     0          1     0
3         G      2          2    99          2    99          1    99
4         G      3          1     1          1    99          1    99
5         G      4          1     1          1     1          2    99
6         G      5          1     0          1     0          1    99
7         G      6 …
Run Code Online (Sandbox Code Playgroud)

pivot pivot-table r tidyr data-cleaning

6
推荐指数
1
解决办法
1037
查看次数

处理 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
查看次数