Многопроцессорная обработка Python для создания фрейма данных из множества файлов - PullRequest
0 голосов
/ 20 октября 2018

Идея заключается в следующем: у меня есть более 1000 файлов (профилей генной экспрессии), которые мне нужно прочитать и вставить соответствующую матрицу данных в общий словарь.Делать это просто с циклом for, но также очень медленно (конечный словарь может быть что-то вроде 10 Гб).Поэтому я посмотрел на модуль многопроцессорной обработки, но получаю список None, а глобальный словарь пуст.В следующем коде, который я сейчас использую.

import os
import GEOparse
import mygene as mg
import pandas as pd
import numpy as np
from multiprocessing import Pool

PATH = '../../data/GEO/'
directory = os.fsencode(PATH)

def get_exprs(filename):
    global dic_df
    global j

    # Import dataset
    gse = GEOparse.get_GEO(filepath=f'{PATH}{filename}', silent=True)

    # Create PD dataframe for each GEO entry (for each use object)
    i = 0
    for name, gsm in gse.gsms.items():
        if (i==0): #We are reading a new file
            dic_df[str(j)] = pd.DataFrame(data=gsm.table.iloc[0:, 0])

        temp = pd.Series(gsm.table.iloc[0:, 1])
        dic_df[str(j)].insert(i+1, str(gsm), temp)
        i += 1 #Update column of matrix to be added to the dataframe
    j += 1 #Update entry dictionary

if __name__ == '__main__':
    pool = Pool(2)
    dic_df = {} #Global dictionary containing matrices
    j = 0 #Initial value for the dictionary
    list_files = [os.fsdecode(file) for file in os.listdir(directory) if file!=b'.DS_Store'] #List of all the files to analyze

    print(pool.map(get_exprs, list_files, chunksize=2))
    pool.close()
    pool.join()

Прежде чем что-то сказать, я знаю, что нет входных данных для его проверки, но я не знаю, как я могу поделиться этими файлами с вами.Мне нужно понять, почему этот код не работает должным образом (на самом деле, вообще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...