2017-08-27 51 views
0

介紹使用芹菜分配數學處理

嗨,我是超新於一般,所以我有一個問題,可能是相當幼稚的芹菜和任務隊列。

我想要一個相當大的.csv文件(將其轉換爲pandas DataFrame)並在所有列對上對其執行皮爾遜測試(統計數學函數)。大約需要9分鐘到一個核心,我們有數百個.csv文件!

所以我想在我們的3臺服務器集羣上的所有內核之間劃分這個處理。這裏有一個原型的我的代碼迄今....

from celery import Celery 
import numpy as np 
import pandas as pd 
import scipy.stats as stats 
import itertools 

app = Celery() 

minute_CSV = pd.read_csv('./test_dataframe.csv') 

cycle_length = 300 
row_max = minute_CSV.shape[0] 
r_vector_data = pd.DataFrame() 

column_combinations = itertools.combinations(minute_CSV.filter(regex='FREQ').keys(),2) 
xy_cols = list(column_combinations) 

@app.task 
def data_processing(minute_CSV, cycle_length, row_max, x, y): 
    return np.array([stats.pearsonr(minute_CSV[x][c-cycle_length:c], 
    minute_CSV[y][c-cycle_length:c])[0] for c in range(cycle_length,row_max)]) 

for i in range(0, len(xy_cols)): 
    x = xy_cols[i][0] 
    y = xy_cols[i][1] 
    r_vector_data[x + ' to ' + y] = data_processing.delay(minute_CSV, cycle_length, row_max, x, y) 

pd.DataFrame.to_csv(r_vector_data, processed_dataframe.csv) 

當我運行此我得到這個消息:

「[1200行×870列]是不是JSON序列化」

的數學

Pearson相關的工作方式如下:取300(對我來說)兩個C的順序排運行相關性並將結果存儲在新的DataFrame(r_vector_data)中。這是對行進行的:(0..299),(1..300),(2..301)等等。

另外,這個腳本只考慮一個.csv文件,但稍後會被修改:)。

關於何去何從的想法?我將如何使用芹菜來完成這一任務,因爲我在文檔中有點迷失。

謝謝!

回答