pandasで外部データベースのデータを取得する

この記事は GMOアドマーケティング Advent Calendar 2019 10日目の記事です。

はじめに

GMOアドマーケティングのS.Sです。
簡単なデータの集計などのためにpandasを使う場面はあるかと思いますが、外部のデータベースの集計結果をcsvファイルに保存してjupyter notebookなどで読み込んでさらに集計や可視化などをするケースだとやや回りくどい感じがします。
ほかにもデータがMySQLやBigQueryなど複数箇所に分散しているケースで両方の結果を使って集計したい場面でかゆいところに手が届かないことがあります。

pandasやそのほかのライブラリなどを用いるとMySQLやBigQuery上のテーブルに対する集計結果をそのままDataFrameとして読み込める機能があるので今回の記事ではその機能について紹介したいと思います。

外部データベースからのデータ取得(MySQL)

はじめに必要なライブラリをインストールします。

まずはSQLAlchemyを利用してMySQLのデータベースから集計結果を取得するクエリを書いてみます。

パスワードはノートブックに直書きすると共有するときなどに消し忘れて困るので、getpassを使います。そうするとjupyter notebookのセルを実行したときにpromptが表示されてパスワードを入力できます。
user, host, ポート番号などは適宜置き換えてください。
SQLAlchemyのengineインスタンスをpandasのread_sql_query関数に渡すと、MySQLでクエリを実行した集計結果がpandas DataFrameに格納されて取得できます。
group_idをカラムとして持つようなテーブルに対して上記のクエリを実行すると次のような結果が表示されます。

次のようにSSHでトンネルをつくると踏み台を経由してサーバーに接続することもできます。

外部データベースからのデータ取得(BigQuery)

BigQueryに対してクエリを投げてpandasのDataFrameとして取得する方法もみていきます。

clientオブジェクトをつくり、queryメソッドにクエリを渡すとBigQueryでの集計結果が取得できます。
結果のオブジェクトはto_dataframeを呼ぶとpandasのDataFrameに変換できます。

BigQueryでクエリを投げる場合は料金も気になりますが、クエリのデータ処理量は次のような形で確認できます。

今回の記事ではMySQLやBigQueryでの集計結果をpandas DataFrameとして取得する方法について紹介しました。

明日は、@fiemonさんによる「Wikipediaデータ MySQLを経由してBigQueryにLoadする」です。
引き続き、GMOアドマーケティング Advent Calendar 2019 をお楽しみください!

■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~
https://www.gmo-ap.jp/engineer/
■Wantedlyページ ~ブログや求人を公開中!~
https://www.wantedly.com/projects/199431
■エンジニア学生インターン募集中! ~就業型インターンでアドテクの先端技術を体験しよう~
https://hrmos.co/pages/gmo-ap/jobs/0000027