使用趋势

时间:2018-03-30 04:01:33

标签: pandas numpy

上下文

我为数据专有的客户进行了分析。我想与其他人分享一些使用的方法,但用我自己生成的数据替换数据。作为一个例子,我想计算两个特征之间的比值比,“蠕虫”和“蠕虫”。和' diahrreal_pathogens'。

问题

我知道如何生成虚假数据,但我不知道如何创建可以产生看似真实的结果的趋势或模式。在我的例子中,我想要“蠕虫”之间的比值比p值。和' diahrreal_pathogens'小于0.05且OR大于1,没有完美的一对一映射。我不是在寻找一个能够很好地调整这个问题的答案,而是提供一种通过趋势创建虚假数据的一般机制。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'sample_date': np.random.choice(
        pd.date_range('2000-01-01', periods=30, freq='D'), 8, replace=False
    ), 
    'age_category': np.random.choice( [1,2,3,4,5] , 8),
    'worms': np.repeat(range(2), 4),
    'diahrreal_pathogens':np.tile(range(2), 4),
    'bhn':np.random.randn(8),
    'latrine':np.random.choice(['improved','basic','none'], 8),
})
>>>df

   age_category       bhn  diahrreal_pathogens   latrine sample_date  worms
0             1 -0.751900                    0      none  2000-01-28      0
1             3  0.619401                    1     basic  2000-01-11      0
2             4  0.085628                    0     basic  2000-01-08      0
3             1  0.564207                    1  improved  2000-01-25      0
4             2  0.701324                    0     basic  2000-01-23      1
5             4  1.237216                    1  improved  2000-01-04      1
6             1  0.000569                    0      none  2000-01-03      1
7             1 -0.324738                    1      none  2000-01-05      1

1 个答案:

答案 0 :(得分:0)

使用二进制数据,您需要确切地确定您想要的关联,并手动编码每个关系的概率。

首先回答以下问题:

有多少蠕虫病患者应该使用diahrreal_pathogens?

60

那些没有蠕虫的人?

20

现在创建一个以diahrreal_pathogens填充这些答案作为概率的函数。

def fillPathogens(row):
    if row.worms == 1:
        return np.random.choice([0,1], size=1, p=[.4,.6])
    if row.worms == 0:
        return np.random.choice([0,1], size=1, p=[.8,.2])

df['diahrreal_pathogens'] = df.apply(fillPathogens, axis=1)

随着假数据集大小的增加,实际关系应该越来越多地反映这些概率。

>>> pd.crosstab(df.diahrreal_pathogens, df.worms)

worms                0  1
diahrreal_pathogens
0                    4  1
1                    0  3