はじめに
Yellowfin が参照するデータベースにデータを取り込む前に、プログラムで様々な処理を施しておきたい場面は多くあると思います。
例えば、数多くのパターンの相関係数を事前に集計しておけば、その後の実装が楽になり、またパフォーマンスの向上にもつながります。
Python データ処理
データフレームにデータ読み込み
CSV ファイルから、3 名の生徒の各教科の点数を、データフレームに読み込みます。
import pandas as pd
df = pd.read_csv("score.csv")
データフレームの中身は以下のようになりました。
名前 | 教科 | 点数 |
---|---|---|
山田 | 国語 | 60 |
山田 | 算数 | 72 |
山田 | 理科 | 75 |
山田 | 社会 | 97 |
山田 | 英語 | 66 |
榎本 | 国語 | 75 |
榎本 | 算数 | 78 |
榎本 | 理科 | 93 |
榎本 | 社会 | 82 |
榎本 | 英語 | 68 |
北村 | 国語 | 74 |
北村 | 算数 | 74 |
北村 | 理科 | 80 |
北村 | 社会 | 90 |
北村 | 英語 | 84 |
横持ち変換
テータを縦持ちから横持ちに変換します。pivot_table() 関数を使うと、簡単にデータ変換できます。
df_pivot = df.pivot_table(values=['点数'], index=['名前'], columns=['教科'], aggfunc=['mean'])
df_pivot.columns = df_pivot.columns.get_level_values(2)
この時点で、データフレーム内のデータは以下のような形になります。
縦軸に名前、横軸に教科のクロス集計表に、教科の単位で点数の平均を取ったものが配置されました。
教科 | 国語 | 理科 | 社会 | 算数 | 英語 |
---|---|---|---|---|---|
名前 | |||||
北村 | 63.0 | 78.0 | 78.0 | 100.0 | 90.0 |
山田 | 69.0 | 66.0 | 80.0 | 65.0 | 76.0 |
榎本 | 95.0 | 74.0 | 96.0 | 70.0 | 82.0 |
相関係数
corr() 関数を使えば、上記データフレームから、各教科総当たりの相関係数が簡単に算出できます。
df_corr = df_pivot.corr()
結果、データフレームの中身は以下のようになりました。
教科 | 国語 | 理科 | 社会 | 算数 | 英語 |
---|---|---|---|---|---|
教科 | |||||
国語 | 1.000000 | 0.012829 | 0.997131 | -0.538318 | -0.256683 |
理科 | 0.012829 | 1.000000 | 0.088475 | 0.835766 | 0.963123 |
社会 | 0.997131 | 0.088475 | 1.000000 | -0.472988 | -0.182794 |
算数 | -0.538318 | 0.835766 | -0.472988 | 1.000000 | 0.952683 |
英語 | -0.256683 | 0.963123 | -0.182794 | 0.952683 | 1.000000 |
Yellowfin からのデータ参照
データベースへのデータコピー
データフレームの中身をデータベースのテーブルにコピーすれば、Yellowfin がデータを参照できるようになります。
ここまでの説明では、動きを分かりやすく説明するために、少量のデータを使って処理の流れを説明しました。
実際には、大量のデータを使って処理することになるかと思います。大量のデータをデータベースに反映するためのベストプラクティスをこちらにまとめているので、併せてご確認ください。AWS Redshift に格納する場合のベストプラクティスではありますが、他環境においても類似の考え方を持ち込むことは可能だと思います。たぶん。
Yellowfin から参照
その後、データベースにアップロードされたデータを、Yellowfin から参照してチャートやダッシュボードを作成します。
Yellowfin コンテンツの作成に関する詳細は過去の記事をご確認ください。
最後に
統計解析に使える Python ライブラリは数多く存在します。我々は完全にその恩恵を授かってますね。
また、Pandas を用いると、構造化データとしてデータを扱うことができるため、データベースや BI ツールととても相性が良いと感じています (感度には個人差あり)。
便利な世の中になったもんですな。
では皆様、良いデータ分析を!