2016-05-16 12 views
1

私はさまざまなデータソースのエンドツーエンドファイル処理を行うpythonファイルをたくさん持っています。ルイージは毎日パンダのスクリプトを実行しますか?

たとえば、survey.pyはファイルをpandasで読み込み、列を追加したり、名前を変更したり、計算したり、変更したファイルをディスクに保存したりします。

driver.pyは、そのファイルに対して同じプロセスを実行します。これと同じ構造が数十のファイルに対して行われています。

私はprocess_allというファイルを持っていますが、基本的には各pythonファイルを特定の順序で実行します(いくつかのファイルは他のファイルに依存しています)。さらに研究を重ねると、私はluigiと呼ばれるライブラリを見つけました。これは、規模を拡大する必要がある場合、この同じタスクをより堅牢に完了させるように思えます。

質問:データを処理するために別々の.pyファイルを書き続けるのですか、それともすべてのものをluigiのクラスに入れるのですか?私は、処理するrawファイルごとに1つのクラスがあると仮定しますが、正しいのでしょうか?

また、以下のCleanDriverクラスのように、luigiクラス内のすべての処理ステップを書き留めていますか?これは、これらの個々のコードファイルの多くがそれぞれ20〜50行であり、数十があるので、非常に長くなるようです。

class CleanSurvey(luigi.Task): 
    date_interval = luigi.DateIntervalParameter() 

    def run(self): 
     os.system('../py_files/run_ftp.py') 

    def output(self): 
     return luigi.LocalTarget(path + 'test_survey.csv') 

class CleanDriver(luigi.Task): 
    date_interval = luigi.DateIntervalParameter() 

    def run(self): 
     df = pd.read_csv('../file.csv') 
     df['col5'] = do stuff 
     df.rename(columns={:}, inplace=True) 

    def output(self): 
     return luigi.LocalTarget(path + 'test_driver.csv') 

if __name__ == '__main__': 
    luigi.run 
+0

ああ、ところで。文字通り私のコードの中でクラスを使用したことはありませんので、私は正直にそれに慣れていません。 – trench

答えて

1

これに入る前にobject orientation in Pythonを学ぶことをお勧めします。ルイージと協力することは役に立ちます。

ルイージは実際にデータ処理パイプラインの作成を手伝ってくれます。パイプラインはタスクで構成されています。 (これは、おおよそ1ステップあたりのクラスです)。

これらのステップをクラスにラップする方法に関するご質問に関しては、 YMMV。私はルイージ・クラスをシングル・マネジメントの原則に従うことが好きです。それはそれぞれのタスクが1つのことをしますが、正しいことです。将来的にデバッグして変更する方が簡単です。

最後に、あなたが言及した例では、requires()のないクラスがあります。この関数は、あるタスクの出力を別のタスクの出力に与えることができ、適切な依存関係ツリーを作成できるので重要です。

+2

ありがとう、私はリンクを読んだ。私は、ファイルをメモリ(パンダ)に読み込んだり、列の追加/削除、名前の変更、計算の実行、データの集約や結合などの作業を行うことに非常に慣れています。これらのことはすべて、メモリ内にあり、ファイルごとに異なることになります。クラスを使用してファイルをクリーンアップしたり、たくさんのファイルIO操作を行うためのチュートリアルはありますか?いくつかのことは、明示的にする必要があるようです(employee_idに1つのファイルのid_colの名前を変更する、別のファイルのid_colをcustomer_idに名前を変更するなど) – trench

+1

私は通常、パイプライン自体とビジネスロジックを分割します。 'do_stuff()'関数を持つ別のpythonファイルを作成し、それをインポートしてluigiタスク内で実行します。このようにして、データパイプロジックとビジネスロジックを混乱させず、できるだけタスクを維持します。 –

関連する問題