初めてデータパイプラインを構築する方法


私は、マシンの学習モデルと信じられないほどのツールによって魅了されています.それらのモデルは、訓練されて、絶えず集められて、データベースに格納されるデータの途方もない量の上でテストされる.
私は本当に生のデータがどのようにプログラムに入るか、そしてどのようなプロセスが、この生のデータを役に立つようにされているかを学ぶことに興味がありました.
予測のために日常的に使用する1種類のデータは気象観測です.明らかに、天気予報は主に複雑な物理式と統計モデルに基づいています.それでも、自分のデータ・サイエンスを実践するために自分の天気データベースを作るのは楽しいと思いました.
私のコンピュータに温度センサーを接続し、自宅で自分の気象ステーションを開く代わりに(私の次のプロジェクトのために非常にクールである可能性がある)、私はそれがどのように行われるかを確認するために簡単なデータパイプラインを構築することを決めた.
私の使命はゼロからパイプラインを構築することでしたOpenWeatherMap 現在の天気Web APIは、データをパンダ(Pythonデータ分析)ライブラリを使用して解析し、ローカルSQLiteデータベースに格納します.
どうやってやったのか

ステップ1 : APIキーを取得する
OpenWeatherMap いくつかの有料APIの計画を提供し、いくつかは非常に強力なツールで毎月のサブスクリプションです.私は、任意の都市から現在の気象データへのアクセスを提供しています無料の計画から始めて満足していた.

ステップ2 : APIキーを秘密にしておく
あなたは、いくつかの見知らぬ人があなたのATMのパスワードを持ってする必要はありません、右?APIキーもあなたの財布から盗むために使用することができます.特に、このAPIを提供するサービスのためのお支払いの顧客である場合は、限られたAPIの呼び出しがある場合.環境変数は、この問題に対処する際に便利になります.なぜなら、変数はプログラムの外部に設定されているのでhere ). 私のAPIキーを環境変数にすることによって、それは私のプログラムの外に隠されて、私の公共のgithubリポジトリにさらされることなく使用されることができます.APIキーを新しいファイルに保存して呼び出しました.環境変数これは内部で見たものです.
api-token = "typeyourapikeyhere"
今、パイプラインのコーディングを開始できます.コーディングする前に、私はプログラムを設計するために少しの時間を要して、結局、責任でファイルに私のプログラムを分けることに決めました.
プログラム設計ガイドラインは以下の通りです.
  • それぞれの関数は一つのことを行います.
  • それぞれの関数は、それが実際に何をすべきかを確認するために、独自にテストされます.また、それは他のバグが積み重なっているときに大きな頭痛を保存し、どの関数が問題の一つであるかを把握する必要があります.ここで私はdoctest 簡単な小さなテストのために.
  • 次の手順で確認します.
  • Python 3とPIPは既にインストールされています.
  • あなたが私のファイルを使用しているならばGitHub repository , 依存関係をインストールするには、次のコマンドを実行します.
  • pip install -r requirements.txt
    
  • 私のプログラムを実行するフォルダでは、datecacheキャッシュというフォルダが必要です.これはすべてのデータがデータベースに格納する前に保存されます.

  • ステップ3 :新しい空のデータベースを作成する
    PythonファイルでSQLite 3ライブラリを使ってSQLiteデータベースを作成しました.
    < div >
    < H >>

    ステップ4 :データを取得し、JSONファイルとして保存する
    <高橋潤子>
    この時点でJSON形式でデータを取得し、JSONファイルとして保存します.各JSONファイルはdatetimeを表す“dt”値の後に命名されます.DateTime形式がUnixエポックタイムスタンプであることに注意してくださいbr/>
    <> P >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/shellyalmo/247723f1e60073e3f38b6863a38e5148.js//>
    < div >
    < H >>

    ステップ5 : JSONファイルからパンダへのデータ入力
    <高橋潤子>
    これは少しsisypheanであるかもしれません、しかし、私はできるだけ多くの「赤ちゃんステップ」にプロセスを壊すことを好みました.私にとって、それは明確に整理され、各ステップを追跡するのに役立ちますbr/>
    <> P >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/shellyalmo/e2cc33f13824ceb737317625a9578a18.js//>
    < div >
    < H >>

    ステップ6 :パンダとのETL
    <高橋潤子>
    etl手順は,解析ニーズに応じてデータを抽出・変換し,データウェアハウスにロードする.私のデータを将来のデータサイエンスプロジェクトのために有用にするために、私は私のデータベースが毎日の温度予測(摂氏の現在の温度、摂氏、湿度、圧力と風の最大温度)のために必要なパラメータを含むと確信しました.また、私のデータベースの主キーとしてDateTime(“dt”)列を行インデックスとして選択しましたbr/>
    <> P >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/shellyalmo/f8be8f8be5d7c5aa4fcf331dadf9cd74.js//>
    < div >
    < H >>

    ステップ7 :データベースの更新
    <高橋潤子>
    現在の気象データがデータファイルに保存されているので、Pandasライブラリを使って簡単にデータベースにロードできますbr/>
    <> P >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/shellyalmo/3bdaf5c5dee868267fe638271eb50826.js//>
    < div >
    柔軟性のために、私はAlgParseライブラリを使いました.コマンドラインからPyを指定し、オプションの引数としてシティIDを与えます.だから私はデフォルトでテルアビブ市を定義したにもかかわらず、ユーザーはまだ世界のどの都市のためのプログラムを実行することができます.たとえば、デトロイト、米国の天気データを取得したい場合は
    <> P >
    クラスをハイライト表示する
    python3 src/main.py --city_id "4990729"
    
    < div >
    メインを実行するとき.Py , step 3 - 7を実行します.
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/shellyalmo/488fd55862c736eeec230fbb8b60bb1e.js//>
    < div >
    < H >>

    完了!
    <高橋潤子>
    あなたはそれを持っている!あなた自身でビルドできるパイプライン.最終的に、プログラムは私の次のデータサイエンスプロジェクトのために時間とともにデータベースを構築する予定で実行されることになっています.今のところWindows Scheduler を開始するには素晴らしい方法ですが、チェックアウトをお勧めしますPython Scheduler 同様に.そこにはいくつかの素晴らしいチュートリアルがあります.p >
    <高橋潤子>
    <ウル>
  • プログラムは、15分ごとにループを使用してデフォルトのスケジュールで実行され、あなたが希望する周波数を設定することができます.たとえば、5秒ごとに実行するには、コマンドを実行します.
  • < ull >
    クラスをハイライト表示する
    python3 src/main.py --frequency 5
    
    < div >
    <ウル>
  • すべてのPythonファイルは現在srcと呼ばれるローカルフォルダに保存されます.次のポストでは、このプロジェクトに必要なPythonファイルと依存関係をコピーするだけのDockerイメージを作成する方法について説明します.
  • < ull >