上下文
我为数据专有的客户进行了分析。我想与其他人分享一些使用的方法,但用我自己生成的数据替换数据。作为一个例子,我想计算两个特征之间的比值比,“蠕虫”和“蠕虫”。和' 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
答案 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