从数据库中获取二进制变量的自动化方法

Automated way to get binary variables from a database

我有一个关于登革热相关数据库的问题。我在这个数据库中有一些变量,其中有变量“病例”,它表示给定时期内的登革热病例数。但是我想对这些数据应用逻辑回归模型,所以想法是让这个变量成为整数,成为一个二元变量,也就是说,对于那个时期没有登革热病例的地方,我想把0代替我已经拥有的数量,对于有案例的地方,请输入 1。由于有 35628 行,我想以自动方式进行,以避免手动进行。任何人都知道如何进行才能将这个想法付诸实践吗?我是编程新手,我正在尝试用 R 语言实现它。如果他们知道可以执行此操作的软件包,那将大有帮助。每个社区都以一个数字为条件。

感谢您的帮助,非常感谢。

neighborhood Dates Cases precipitation Temperature
0 Jan/14 10 149,6 33,25
1 Fev/14 0 254 30,1
2 Mar/14 6 150 25,4
3 Apr/14 0 244,1 32,5
4 May/14 3 44,3 33,2

感谢您的帮助,非常感谢。

抱歉,我没有看到您想用 R 语言实现它。以下是 Python...

中的建议代码

假设 table 在 DataFrame df 中,您可以创建一个新列 'dengue_cases' 没有案例时为 0,有案例时为 1

df['Cases'] = df['Cases'].astype('int')   #to ensure the correct data type in column
df['dengue_cases'] = df['Cases'].apply(lambda x: 0 if x==0 else 1)

以上几行将创建一个新列。如果您要替换原始列,请使用以下行:

df['Cases'] = df['Cases'].apply(lambda x: 0 if x==0 else 1)

R

从中选择

dat$CasesBin1 <- (dat$Cases > 0)
dat$CasesBin2 <- +(dat$Cases > 0)
dat
#   neighborhood  Dates Cases precipitation Temperature CasesBin1 CasesBin2
# 1            0 Jan/14    10         149.6       33.25      TRUE         1
# 2            1 Fev/14     0         254.0       30.10     FALSE         0
# 3            2 Mar/14     6         150.0       25.40      TRUE         1
# 4            3 Apr/14     0         244.1       32.50     FALSE         0
# 5            4 May/14     3          44.3       33.20      TRUE         1

至少在 R 中,我使用过的大多数逻辑回归工具都可以很好地与 integer (0/1) 或 logical 一起使用,但您可能需要使用您将要使用的工具进行验证使用。

数据:

dat <- structure(list(neighborhood = 0:4, Dates = c("Jan/14", "Fev/14", "Mar/14", "Apr/14", "May/14"), Cases = c(10L, 0L, 6L, 0L, 3L), precipitation = c(149.6, 254, 150, 244.1, 44.3), Temperature = c(33.25, 30.1, 25.4, 32.5, 33.2)), class = "data.frame", row.names = c(NA, -5L))

python

In [13]: dat
Out[13]: 
   neighborhood   Dates  Cases  precipitation  Temperature
0             0  Jan/14     10          149.6        33.25
1             1  Fev/14      0          254.0        30.10
2             2  Mar/14      6          150.0        25.40
3             3  Apr/14      0          244.1        32.50
4             4  May/14      3           44.3        33.20

In [17]: dat['CasesBin1'] = dat['Cases'].apply(lambda x: (x > 0))
In [18]: dat['CasesBin2'] = dat['Cases'].apply(lambda x: int(x > 0))
In [19]: dat
Out[19]: 
   neighborhood   Dates  Cases  ...  Temperature  CasesBin1  CasesBin2
0             0  Jan/14     10  ...        33.25       True          1
1             1  Fev/14      0  ...        30.10      False          0
2             2  Mar/14      6  ...        25.40       True          1
3             3  Apr/14      0  ...        32.50      False          0
4             4  May/14      3  ...        33.20       True          1

[5 rows x 7 columns]

数据:

In [11]: js
Out[11]: '[{"neighborhood":0,"Dates":"Jan/14","Cases":10,"precipitation":149.6,"Temperature":33.25},{"neighborhood":1,"Dates":"Fev/14","Cases":0,"precipitation":254,"Temperature":30.1},{"neighborhood":2,"Dates":"Mar/14","Cases":6,"precipitation":150,"Temperature":25.4},{"neighborhood":3,"Dates":"Apr/14","Cases":0,"precipitation":244.1,"Temperature":32.5},{"neighborhood":4,"Dates":"May/14","Cases":3,"precipitation":44.3,"Temperature":33.2}]'
In [12]: dat = pd.read_json(js)