Доступ к данным панд в миллион раз - для повышения эффективности

sm544 спросил: 03 февраля 2018 в 09:57 в: python

Я биолог, пытающийся проверить эксперимент. В моем эксперименте я обнаружил 71 мутацию после определенного лечения. Чтобы определить, действительно ли эти мутации связаны с моим лечением, я хочу сравнить их с набором случайно сгенерированных мутаций. Мне было предложено, чтобы я попытался создать миллион множеств из 71 случайных мутаций для статистического сравнения.

Для начала у меня есть dataframe с 7000 генами в интересующем геноме. Я знаю их начальные и конечные позиции. Первые пять строк блока данных выглядят следующим образом:

    transcript_id   protein_id  start   end kogClass
0   g2.t1   695054  1   1999    Replication, recombination and repair 
1   g3.t1   630170  2000    3056    General function prediction only 
2   g5.t1   695056  3057    4087    Signal transduction mechanisms 
3   g6.t1   671982  4088    5183    N/A
4   g7.t1   671985  5184    8001    Chromatin structure and dynamics 

Теперь о миллионах наборов из 71 случайных мутаций: я написал функцию, которую я называю миллион раз, и кажется, что нет чтобы быть очень эффективным, потому что через 4 часа это было всего лишь 1/10 пути. Вот мой код. Если кто-то может предложить способ ускорить дело, я должен вам пиво! И моя оценка.

def get_71_random_genes(df, outfile):
    # how many nucleotides are there in all transcripts?
    end_pos_last_gene = df.iloc[-1,3]    # this loop will go 71 times
    for i in range(71):
        # generate a number from 1 to the end of all transcripts
        random_number = randint(1, end_pos_last_gene)
        # this is the boolean condition - checks which gene a random number falls within 
        mask = (df['start'] <= random_number) & (df['end'] >= random_number)
        # collect the rows that match
        data = df.loc[mask]
        # write data to file.
        data.to_csv(outfile, sep='\t', index=False, header=False)

0 ответов