【发布时间】:2022-09-23 16:09:23
【问题描述】:
语境
应用分层抽样的常见场景是选择一个随机样本,该样本大致保持所选变量的分布,使其具有代表性。
目标:
目标是创建一个函数来执行分层抽样,但提供了一些所考虑变量的比例,而不是原始数据集的比例。
功能:
def stratified_sampling_prior(df,column,prior_dict,sample_size):
...
return df_sampled
-
column:这是一个用于执行分层抽样的分类变量。 -
prior_dict:它包含所选变量中按类别划分的百分比。 -
df:输入数据集。 -
sample_size:这是我们希望获得样本的实例数量。
例子
在这里,我提供了一个工作数据示例:
import pandas as pd
priors_dict = {
\"A\":0.2
\"B\":0.2
\"C\":0.1
\"D\":0.5
}
df = pd.DataFrame({\"Category\":[\"A\"]*10+[\"B\"]*50+[\"C\"]*15+[\"D\"]*100,
\"foo\":[\"foo\" for i in range(175)],
\"bar\":[\"bar\" for i in range(175)]})
使用定义了sample_size 的传统分层抽样,我们将得到以下输出:
df[\"Category\"].value_counts()/df.shape[0]*100
D 57.14
B 28.57
C 8.57
A 5.71
但是,使用prior_dict 时的预期结果是输出的比例为:
df_sample = stratified_sampling_prior(df,\"Category\",prior_dict,sample_size=100):
df_sample[\"Category\"].value_counts()/df_sample.shape[0]*100
D 50.00
B 20.00
C 10.00
A 20.00