标签: dummy-variable

将字符串列拆分为多个虚拟变量

作为R中data.table包的相对缺乏经验的用户,我一直在尝试将一个文本列处理成大量的指示符列(虚拟变量),每列中有一个1表示特定的子字符串是在字符串列中找到.例如,我想处理这个:

ID     String  
1       a$b  
2       b$c  
3       c  
Run Code Online (Sandbox Code Playgroud)

进入这个:

ID     String     a     b     c  
1       a$b       1     1     0  
2       b$c       0     1     1  
3        c        0     0     1  
Run Code Online (Sandbox Code Playgroud)

我已经弄清楚如何进行处理,但运行时间比我想要的要长,我怀疑我的代码效率低下.我的代码的可重现版本与虚拟数据如下.请注意,在实际数据中,要搜索的子字符串超过2000个,每个子字符串的长度大约为30个字符,最多可能有几百万行.如果需要,我可以并行化并为问题投入大量资源,但我希望尽可能优化代码.我试过运行Rprof,这表明没有明显(对我而言)改进.

set.seed(10)  
elements_list <- c(outer(letters, letters, FUN = paste, sep = ""))  
random_string <- function(min_length, max_length, separator) {  
    selection <- paste(sample(elements_list, ceiling(runif(1, min_length, max_length))), collapse = separator)  
    return(selection)  
}  
dt <- data.table(id = c(1:1000), messy_string = "")  
dt[ , messy_string := random_string(2, 5, "$"), by = id]  
create_indicators <- function(search_list, …
Run Code Online (Sandbox Code Playgroud)

string split r data.table dummy-variable

8
推荐指数
1
解决办法
1105
查看次数

R:根据列表的分类变量*创建虚拟变量*

我有一个带有分类变量的数据框,其中包含可变长度的字符串列表(这很重要,因为否则此问题将与重复),例如:

df <- data.frame(x = 1:5)
df$y <- list("A", c("A", "B"), "C", c("B", "D", "C"), "E")
df
Run Code Online (Sandbox Code Playgroud)
  x       y
1 1       A
2 2    A, B
3 3       C
4 4 B, D, C
5 5       E
Run Code Online (Sandbox Code Playgroud)

并且所需的形式是在任何地方看到的每个唯一字符串的虚拟变量df$y,即:

data.frame(x = 1:5, A = c(1,1,0,0,0), B = c(0,1,0,1,0), C = c(0,0,1,1,0), D = c(0,0,0,1,0), E = c(0,0,0,0,1))
Run Code Online (Sandbox Code Playgroud)
  x A B C D E
1 1 1 0 0 0 0
2 2 1 …
Run Code Online (Sandbox Code Playgroud)

r list dummy-variable tidyverse

8
推荐指数
2
解决办法
4872
查看次数

序数编码或 One-Hot 编码

如果我们不确定分类特征的性质,例如它们是名义特征还是序数特征,我们应该使用哪种编码?序数编码还是单热编码?关于这个主题有明确的规则吗?

我看到很多人在没有方向的分类数据上使用序数编码。假设有一个频数表:

some_data[some_col].value_counts()
[OUTPUT]
color_white    11413
color_green     4544
color_black     1419
color_orang        3
Name: shirt_colors, dtype: int64
Run Code Online (Sandbox Code Playgroud)

有很多人更喜欢在本专栏上进行序数编码。我一心一意地选择 One-Hot-Encoding。我对此的看法是进行序数编码将为这些颜色分配一些有序数字,我暗示了一个排名。而且一开始就没有排名。换句话说,我的模型不应将 color_white 视为 4,将 color_orang 视为 0、1 或 2。请记住,数据描述中也没有任何排名或顺序的提示。

我对这个话题有如下的理解:

既没有方向也没有大小的数字是名义变量。例如,fruit_list =['苹果', '橙子', 香蕉']。除非有特定的上下文,否则该集合将被称为名义集合。对于此类变量,我们应该执行 get_dummies 或 one-hot-encoding

而序数变量有一个方向。例如,shirt_sizes_list = [大、中、小]。这些变量称为序数变量。如果同一个水果列表背后有上下文,例如价格或营养价值,即可以为 Fruit_list 中的水果提供某种排名或顺序,我们将其称为序数变量。对于序数变量,我们执行序数编码

我的理解正确吗?请提供您的反馈 这个主题已经变成了一场噩梦 谢谢!

machine-learning ordinal categorical-data dummy-variable one-hot-encoding

7
推荐指数
1
解决办法
6942
查看次数

将逗号分隔的字符串的pandas列转换为虚拟变量

在我的数据框中,我有一个分类变量,我想将其转换为虚拟变量.但是,此列有多个以逗号分隔的值:

0    'a'
1    'a,b,c'
2    'a,b,d'
3    'd'
4    'c,d'
Run Code Online (Sandbox Code Playgroud)

最后,我想为每个可能的离散值设置二进制列; 换句话说,最终列数等于原始列中唯一值的数量.我想我必须使用split()来获取每个单独的值但不确定之后要做什么.任何提示非常感谢!

编辑:附加扭曲.列具有空值.并且在回应评论时,以下是期望的输出.谢谢!

   a  b  c  d
0  1  0  0  0
1  1  1  1  0
2  1  1  0  1
3  0  0  0  1
4  0  0  1  1
Run Code Online (Sandbox Code Playgroud)

python split pandas dummy-variable

6
推荐指数
2
解决办法
2963
查看次数

tidyverse r 中的虚拟代码分类/序数变量

假设我有一个小玩意儿。

library(tidyverse) 
tib <- as.tibble(list(record = c(1:10), 
                      gender = as.factor(sample(c("M", "F"), 10, replace = TRUE)), 
                      like_product = as.factor(sample(1:5, 10, replace = TRUE)))
tib

    # A tibble: 10 x 3
   record gender like_product
    <int> <fctr>       <fctr>
 1      1      F            2
 2      2      M            1
 3      3      M            2
 4      4      F            3
 5      5      F            4
 6      6      M            2
 7      7      F            4
 8      8      M            4
 9      9      F            4
10     10      M            5
Run Code Online (Sandbox Code Playgroud)

我想用 1 和 0 对我的数据进行虚拟编码,以便数据看起来更多/更少像这样。 …

r dummy-variable purrr tidyverse

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

警告消息 - 来自假人包的假人

我正在使用 dummies 包为分类变量生成虚拟变量,其中一些具有两个以上的类别。

testdf<- data.frame(
  "A" = as.factor(c(1,2,2,3,3,1)),
  "B" = c('A','B','A','B','C','C'),
  "C"= c('D','D','E','D','D','E'))
#
#Generate dummy variables:
#
testdf<- cbind(testdf, dummy(testdf$C, sep='_'))
testdf<- cbind(testdf, dummy(testdf$B, sep='_'))
Run Code Online (Sandbox Code Playgroud)

对于这两个命令,我得到:

Warning message:
In model.matrix.default(~x - 1, model.frame(~x - 1), contrasts = FALSE) :
  non-list contrasts argument ignored
Run Code Online (Sandbox Code Playgroud)

结果似乎是正确的。您能否就警告的原因提出建议?

r contrast model.matrix dummy-variable

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

Python中的多季节性时间序列分析

我有一个每日时间序列数据集,我使用 Python SARIMAX 方法来预测未来。但我不知道如何在 python 中编写考虑多个季节性的代码。据我所知,SARIMAX 只处理一个季节性,但我想检查每周、每月和每季度的季节性。我知道要捕捉星期几的季节性,我应该创建 6 个虚拟变量,要捕捉月份的季节性,创建 30 个虚拟变量,并且要捕捉一年中的月份,创建 11 个虚拟变量。但我不知道如何将它与 Python 中的主要 SARIMAX 函数合并?我的意思是 SARIMAX 只是一个执行自回归、移动平均和差分部分的函数,但是我应该如何在使用 SARIMAX 的时间序列分析中包含多个季节性代码?迄今为止,我知道如何为每个类别创建虚拟变量,但不知道如何将其复制到整个数据集?之后我不知道如何编写 Python 代码来执行 SARIMAX 并同时捕获多个季节性。

我需要可以执行此操作的 Python 代码的帮助。

请相应地建议

问候

python time-series dummy-variable data-science arima

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

如何使用熊猫参考一个值创建虚拟变量?

test = {'ngrp' : ['Manhattan', 'Brooklyn', 'Queens', 'Staten Island', 'Bronx']}
test = pd.DataFrame(test)
dummy = pd.get_dummies(test['ngrp'], drop_first = True)
Run Code Online (Sandbox Code Playgroud)

这给了我:

   Brooklyn  Manhattan  Queens  Staten Island
0         0          1       0              0
1         1          0       0              0
2         0          0       1              0
3         0          0       0              1
4         0          0       0              0
Run Code Online (Sandbox Code Playgroud)

我将获得Bronx作为我的参考水平(因为这是删除的东西),如何更改它以指定应该将曼哈顿作为我的参考水平?我的预期输出是

   Brooklyn  Queens  Staten Island  Bronx
0         0       0              0      0
1         1       0              0      0
2         0       1              0      0
3         0       0              1      0
4         0       0              0 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas dummy-variable

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

如何基于 R 中的两列创建虚拟对象

假设我有一个数据框:性别可以将 F 作为女性或 M 作为男性种族可以将 A 作为亚洲人,W 作为白人,B 作为黑人,H 作为西班牙裔

| id | Gender | Race |
| --- | ----- | ---- |
| 1   | F    | W |
| 2   | F    | B |
| 3   | M    | A |
| 4   | F    | B |
| 5   | M    | W |
| 6   | M    | B |
| 7   | F    | H |
Run Code Online (Sandbox Code Playgroud)

我想有一组基于性别和种族的列作为虚拟对象,数据框应该像

| id | Gender | Race …
Run Code Online (Sandbox Code Playgroud)

r dummy-variable

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

如果包含缺失值,如何在 Python 中创建虚拟变量?

如果包含缺失值,如何创建虚拟变量?我有以下数据,我想根据几个条件创建一个虚拟变量。我的问题是它会自动将我的缺失值转换为 0,但我想将它们保留为缺失值。

import pandas as pd

mydata = {'x' : [10, 50, np.nan, 32, 47, np.nan, 20, 5, 100, 62], 
          'y' : [10, 1, 5,  np.nan, 47, np.nan, 8, 5, 100, 3]}
df = pd.DataFrame(mydata)

df["z"] = ((df["x"] >= 50) & (df["y"] <= 20)).astype(int)

print(df)
Run Code Online (Sandbox Code Playgroud)

python nan missing-data dummy-variable

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