标签: dummy-variable

如何在Google BigQuery中为数千个类别创建虚拟变量列?

我有一个包含两列的简单表:UserID和Category,每个UserID可以重复几个类别,如下所示:

UserID   Category
------   --------
1         A
1         B
2         C
3         A
3         C
3         B
Run Code Online (Sandbox Code Playgroud)

我想“虚拟化”该表:即创建一个输出表,该表的每个列都有由虚拟变量组成的唯一类别(0/1,取决于UserID是否属于该特定类别):

UserID    A  B  C
------    -- -- --
1         1  1  0
2         0  0  1
3         1  1  1
Run Code Online (Sandbox Code Playgroud)

我的问题是我有数千个类别(在此示例中不只是3个类别),因此无法使用CASE WHEN语句有效地完成此操作。

所以我的问题是:

1)有没有一种方法可以在不使用数千个CASE WHEN语句的情况下“虚拟化” Google BigQuery中的Category列。

2)这是UDF功能正常工作的情况吗?看起来确实是这样,但是我对BigQuery中的UDF不够了解,无法解决此问题。有人可以帮忙吗?

谢谢。

mysql sql google-bigquery dummy-variable

4
推荐指数
1
解决办法
8660
查看次数

Pandas DataFrame:如何将二进制列转换为一个分类列?

给定一个熊猫DataFrame,如何将几个二进制列(其中1表示该值存在,0表示不存在)转换为单个分类列?

另一种思考方式是如何执行“反向 pd.get_dummies() ”?

这是将分类列转换为几个二进制列的示例:

import pandas as pd
s = pd.Series(list('ABCDAB'))
df = pd.get_dummies(s)
df
   A  B  C  D
0  1  0  0  0
1  0  1  0  0
2  0  0  1  0
3  0  0  0  1
4  1  0  0  0
5  0  1  0  0
Run Code Online (Sandbox Code Playgroud)

我想完成的是给出一个数据框

df1
   A  B  C  D
0  1  0  0  0
1  0  1  0  0
2  0  0  1  0
3  0  0  0  1
4  1  0  0 …
Run Code Online (Sandbox Code Playgroud)

python binary dataframe pandas dummy-variable

4
推荐指数
1
解决办法
1747
查看次数

是否可以在R中使用ifelse()添加第三个虚拟变量?

我正在使用此代码创建一个新的Group列,该列基于在两个组的列var中找到的部分字符串,Sui以及Swe.我不得不添加另一个组,TRD并且我一直在尝试调整ifelse功能这样做,但没有成功.这可行吗?有没有其他解决方案或其他功能可以帮助我这样做?

m.df <- molten.df%>% mutate(
Group = ifelse(str_detect(variable, "Sui"), "Sui", "Swedish"))

Current m.df: 
                          var      value    
  ADHD_iFullSuiTrim.Threshold1 0.00549427     
  ADHD_iFullSuiTrim.Threshold1 0.00513955     
  ADHD_iFullSweTrim.Threshold1 0.00466352   
  ADHD_iFullSweTrim.Threshold1 0.00491633   
  ADHD_iFullTRDTrim.Threshold1 0.00658535    
  ADHD_iFullTRDTrim.Threshold1 0.00609122    


Desired Result:
                          var      value    Group
   ADHD_iFullSuiTrim.Threshold1 0.00549427    Sui  
   ADHD_iFullSuiTrim.Threshold1 0.00513955    Sui  
   ADHD_iFullSweTrim.Threshold1 0.00466352   Swedish
   ADHD_iFullSweTrim.Threshold1 0.00491633   Swedish
   ADHD_iFullTRDTrim.Threshold1 0.00658535    TRD
   ADHD_iFullTRDTrim.Threshold1 0.00609122    TRD  
Run Code Online (Sandbox Code Playgroud)

即使可以使用其他功能完成结果,也可以理解任何帮助或建议.

grouping r dataframe dplyr dummy-variable

4
推荐指数
3
解决办法
230
查看次数

在R中创建虚拟变量的简单方法

我想知道如何简单地创建虚拟变量.我在假人身上发现了许多类似的问题,但要么是基于一些外部包装或技术.

我有这样的数据:

df <- data.frame(X=rnorm(10,0,1), Y=rnorm(10,0,1))
df$Z <- c(NA, diff(df$X)*diff(df$Y))
Run Code Online (Sandbox Code Playgroud)

ž创建在X和变化在Y.变化的DF即产物中一个新的变量现在我想在DF创建一个虚拟变量d使得如果位:Z <0则d == 1,如果Z> 0,则d == 0.

我试过这样的方式:

df$D <- NA
for(i in 2:10) {
if(df$Z[i] <0 ) {
D[i] ==1
}
if(df$Z[i] >0 ) {
D[i] ==0
}}
Run Code Online (Sandbox Code Playgroud)

这不起作用.我想知道为什么上面的代码不起作用(这很容易做到这一点)以及虚拟变量如何在R中创建而不使用任何外部包而只需要一点点解释.

r dummy-variable

3
推荐指数
2
解决办法
223
查看次数

R |中的因子水平默认为1和2 虚拟变量

我正在从Stata转换到R.在Stata中,如果我将因子级别(比如-0和1)标记为(M和F),则0和1将保持不变.此外,在大多数软件(包括Excel和SPSS)中,这是虚拟变量线性回归所必需的.

但是,我注意到R默认因子水平为1,2而不是0,1.我不知道为什么R会这样做,尽管内部(并且正确地)回归假定0和1作为因子变量.我将不胜感激任何帮助.

这是我做的:

尝试#1:

sex<-c(0,1,0,1,1)
sex<-factor(sex,levels = c(1,0),labels = c("F","M"))
str(sex)
Factor w/ 2 levels "F","M": 2 1 2 1 1
Run Code Online (Sandbox Code Playgroud)

似乎因子水平现在重置为1和2.我相信1和2是这里对因子水平的引用.但是,我丢失了原始值,即0和1.

Try2:

sex<-c(0,1,0,1,1)
sex<-factor(sex,levels = c(0,1),labels = c("F","M"))
str(sex)
Factor w/ 2 levels "F","M": 1 2 1 2 2
Run Code Online (Sandbox Code Playgroud)

同上.我的0和1现在是1和2.非常令人惊讶.为什么会这样呢?

Try3 现在,我想知道1和2是否有任何不良影响回归.所以,这就是我做的:

这是我的数据:

> head(data.frame(sassign$total_,sassign$gender))
  sassign.total_ sassign.gender
1            357              M
2            138              M
3            172              F
4            272              F
5            149              F
6            113              F

myfit<-lm(sassign$total_ ~ sassign$gender)

myfit$coefficients
    (Intercept) sassign$genderM 
      200.63522        23.00606  
Run Code Online (Sandbox Code Playgroud)

事实证明,手段是正确的.在运行回归时,R确实使用0和1值作为假人.

我确实在SO上检查了其他线程,但是他们主要讨论R代码如何在不告诉我原因的情况下对变量进 Stata和SPSS通常要求基变量为"0".所以,我想到了这个问题.

我很感激任何想法.

regression r dummy-variable

3
推荐指数
2
解决办法
1693
查看次数

Pandas sklearn one-hot 编码数据帧还是 numpy?

如何将 pandas 数据帧转换为 sklearn one-hot-encoded(数据帧/numpy 数组),其中某些列不需要编码?

mydf = pd.DataFrame({'Target':[0,1,0,0,1, 1,1],
                   'GroupFoo':[1,1,2,2,3,1,2],
                    'GroupBar':[2,1,1,0,3,1,2],
                    'GroupBar2':[2,1,1,0,3,1,2],
                    'SomeOtherShouldBeUnaffected':[2,1,1,0,3,1,2]})
columnsToEncode = ['GroupFoo', 'GroupBar']
Run Code Online (Sandbox Code Playgroud)

是一个已经标签编码的数据帧,我只想对 标记的列进行编码columnsToEncode

我的问题是我不确定 apd.Dataframenumpy数组表示是否更好以及如何将编码部分与另一个部分重新合并。

到目前为止我的尝试:

myEncoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
myEncoder.fit(X_train)
df = pd.concat([
         df[~columnsToEncode], # select all other / numeric
        # select category to one-hot encode
         pd.Dataframe(encoder.transform(X_train[columnsToEncode]))#.toarray() # not sure what this is for
        ], axis=1).reindex_axis(X_train.columns, axis=1)
Run Code Online (Sandbox Code Playgroud)

注意:我知道Pandas: Get Dummies / http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.get_dummies.html 但在我需要这样的火车/测试拆分中效果不佳每折叠一个编码。

python numpy pandas scikit-learn dummy-variable

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

Dask get_dummies 不转换变量

我正在尝试使用get_dummiesviadask但它不会转换我的变量,也不会出错:

>>> import dask.dataframe as dd
>>> import pandas as pd
>>> df_d = dd.read_csv('/datasets/dask_example/dask_get_dummies_example.csv')
>>> df_d.head()
   uid gender
0    1      M
1    2    NaN
2    3    NaN
3    4      F
4    5    NaN
>>> daskDataCategorical = df_d[['gender']]
>>> daskDataDummies = dd.get_dummies(daskDataCategorical) 
>>> daskDataDummies.head()
  gender
0      M
1    NaN
2    NaN
3      F
4    NaN
>>> daskDataDummies.compute() 
  gender
0      M
1    NaN
2    NaN
3      F
4    NaN
5      F
6      M
7      F
8      M …
Run Code Online (Sandbox Code Playgroud)

python pandas dummy-variable dask

3
推荐指数
1
解决办法
6930
查看次数

在Pandas中获取虚拟变量,其中行包含多个变量作为列表?

考虑一个具有列"id"的Pandas数据帧,该列的行包含表示类别的字符串列表.获取虚拟变量的有效方法是什么?

例:

输入:

df1 = pd.DataFrame({'id': ['0,1', '24,25', '1,24']})
Run Code Online (Sandbox Code Playgroud)

输出:

df2 = pd.DataFrame({'0':[1, 0, 0],
               '1': [1, 0, 1],
               '24':[0, 1, 1],
               '25':[0, 1, 0]})
Run Code Online (Sandbox Code Playgroud)

python pandas categorical-data dummy-variable

3
推荐指数
1
解决办法
402
查看次数

如何保存data.frame-to-model.matrix的映射并将其应用于新观察值?

一些建模功能,例如glmnet(),要求(或仅允许)将数据作为预测器矩阵和响应矩阵(或向量)传递,如使用公式所示。在这些情况下,通常情况是该predict()方法(例如predict.glmnet())要求newdata参数提供一个预测器矩阵,该矩阵具有与训练模型相同的特征。

当数据框具有因子(R的分类数据类型)时,创建预测变量矩阵的便捷方法是使用该model.matrix()函数,该函数会自动为分类变量创建虚拟特征:

# this is the dataframe and matrix I want to use to train the model
set.seed(1)
df <- data.frame(x1 = factor(sample(LETTERS[1:5], replace = T, 20)),
                 x2 = rnorm(20, 100, 5),
                 x3 = factor(sample(c("U","L"), replace = T, 20)),
                 y = rnorm(20, 10, 2))

mm <- model.matrix(y~., data = df)
Run Code Online (Sandbox Code Playgroud)

但是,当我引入一个带有新观察结果的数据框时,它仅包含原始数据框中因子水平的一个子集,model.matrix()(可预测地)返回一个具有不同虚拟特征的矩阵。无法使用此新矩阵,predict.glm()因为它没有模型期望的相同功能:

# this is the dataframe and matrix I want to predict on
set.seed(1) …
Run Code Online (Sandbox Code Playgroud)

r matrix prediction dataframe dummy-variable

3
推荐指数
1
解决办法
1432
查看次数

具有虚拟/分类变量的线性回归

我有一组数据。我使用熊猫分别将它们转换为虚拟变量和分类变量。那么,现在我想知道如何在Python中运行多元线性回归(我正在使用statsmodels)?是否有一些考虑因素,或者也许我必须指出我的代码中变量是虚拟的还是分类的?也许变量的转换就足够了,我只需要将回归作为model = sm.OLS(y, X).fit()?运行。

我的代码如下:

datos = pd.read_csv("datos_2.csv")
df = pd.DataFrame(datos)
print(df)
Run Code Online (Sandbox Code Playgroud)

我得到这个:

Age  Gender    Wage         Job         Classification 
32    Male  450000       Professor           High
28    Male  500000  Administrative           High
40  Female   20000       Professor            Low
47    Male   70000       Assistant         Medium
50  Female  345000       Professor         Medium
27  Female  156000       Assistant            Low
56    Male  432000  Administrative            Low
43  Female  100000  Administrative            Low
Run Code Online (Sandbox Code Playgroud)

然后我这样做:1 =男性,0 =女性,1:教授,2:行政,3:助理:

df['Sex_male']=df.Gender.map({'Female':0,'Male':1})
        df['Job_index']=df.Job.map({'Professor':1,'Administrative':2,'Assistant':3})
print(df)
Run Code Online (Sandbox Code Playgroud)

得到这个:

 Age  Gender    Wage             Job Classification  Sex_male  Job_index
 32    Male  450000       Professor           High         1 …
Run Code Online (Sandbox Code Playgroud)

python linear-regression pandas statsmodels dummy-variable

3
推荐指数
2
解决办法
8440
查看次数