下采样dask数据帧-可能分层

时间:2018-08-10 13:28:31

标签: python python-3.x dask

我有一个大的dask数据帧,其中有一个因变量Y,可用于二进制概率分类。我想对此进行下采样(理想情况下应基于Y的先验分层)。可以轻松实现吗?任何代码片段将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我用简单的数据帧处理了一个简单的下采样(所有目标事件记录的总响应== 1,以及相等数量的非事件记录)。这是运行Hadoop 2.8.5-amzn-5的AWS EMR集群上的python 3.7.6,pandas 1.0.3,dask 2.15.0。

正如@MRocklin指出的那样,您可以在熊猫中以相同的方式进行操作。与熊猫相比,在dask中完成此操作没有什么独特之处,但它确实可以在dask集群上有效运行。

# build a stratified sample of all the responders and an equal size sample of non-responders
print("Pulling an EDA sample")
ResponderCount = pd_nrm_both_post_encode.query("GrossResponse == 1").shape[0].compute()
TotalCount = pd_nrm_both_post_encode.shape[0].compute()
nr_fraction = ResponderCount / TotalCount
print("Responders count: " + str(ResponderCount))
print("pulling responders")
nrm_responders = pd_nrm_both_post_encode.query("GrossResponse == 1")
print("pulling non-responders")
nrm_nonResponders = pd_nrm_both_post_encode.query("GrossResponse == 0").sample(frac=nr_fraction, random_state=1)
print("appending responders and non-responders")
dd_nrm_eda_train_sample = nrm_responders.append(nrm_nonResponders)