Python 用户以与用户密钥无关的方式随机采样面板数据

Python 用户以与用户密钥无关的方式随机采样面板数据,python,random,bigdata,Python,Random,Bigdata,摘要: 如何在不加载到内存的情况下从大型面板数据集中执行组级别的随机采样 请注意,因为我不加载到内存,所以我不想 验证id键。我也不一定确定id的格式。在这些条件下是否可以进行随机抽样 注意:我使用python-3.x 详细信息: 我有一个大的dataframe/csv文件(>20GB),无法放入内存。数据的结构是一个面板,这意味着它由具有相同id的观察组组成。例如,有2000万人,每人有100次观察 我想在用户级别对进行采样,这意味着对于任何样本,它都应该包括每个用户的所有观察结果 创意: 以

摘要:

如何在不加载到内存的情况下从大型面板数据集中执行组级别的随机采样

请注意,因为我不加载到内存,所以我不想 验证
id
键。我也不一定确定id的格式。在这些条件下是否可以进行随机抽样

注意:我使用python-3.x

详细信息:

我有一个大的dataframe/csv文件(>20GB),无法放入内存。数据的结构是一个面板,这意味着它由具有相同id的观察组组成。例如,有2000万人,每人有100次观察

我想在用户级别对进行采样,这意味着对于任何样本,它都应该包括每个用户的所有观察结果

创意:

  • 以与
    id
    格式无关的方式对
    id
    进行散列(合理范围内)。例如,id可以是按数字或某些字母数字顺序排列的用户列表

  • 然后,我将使用一个
    filter
    函数过滤这个散列,该函数接受其中的%

  • 然后在每个观察值上运行
    过滤器
    ,构建一个数据帧

  • 问题是我对第一步或第二步没有信心。我不知道如何为所有合理的统计目的创建一个随机的散列


    我相信这是一个解决了的问题。有人有什么想法吗

    有很多方法可以做到这一点。最简单的方法之一是使用
    random
    模块生成随机数,而无需重复。然后,您可以使用这些数字来提取与这些数字对应的行(人员):

    import random
    
    random_list = random.sample(range(20000000), 100)
    # From your 20 million people, grab the indices for 100 of them.
    
    random_people = []
    
    with open(file.txt) as f:
        idx = 0
        for line in f:
            if idx in random_list:  # Check if the person matches one of the random ones.
                random_people.append(line.strip())
    

    当然,您可以根据实际行数、样本中所需的人数等调整数字。

    嗨,贾里德,随机样本是个好主意,但如果ID是字母数字字符,或者如果我不能确定所有ID的格式都相同,这将不起作用。为什么不呢?这将从数据帧中随机抽取行。由于您没有给出示例,我假设您的观察结果就是这样设置的(每行后跟观察结果的
    id
    (或用户))。不是这样吗?这与您的ID的格式无关,也与它们是什么无关。如果你想得到更具体的答案,请举例说明你所拥有的和你想要的。