Pythonによるデータ解析では下記のライブラリがよく使われます。
ライブラリ | 説明 |
---|---|
pandas | データ操作を行うライブラリ。データを1次元(Series)と2次元(Dataframe)のオブジェクトとして利用 |
NumPy | 高速な数値計算を行うライブラリ。サイズの大きい行列・ベクトルの計算を高速に行える |
matplotlib | グラフ描画を行うライブラリ。棒グラフや折れ線グラフ、ヒストグラムや複数のグラフをまとめて描画可能 |
scipy | 数学や工学向けの数値計算ライブラリ |
scikit-learn | 機械学習ライブラリ。クラスタリングや機械学習アルゴリズムとサンプル用のデータセットを備える |
加えて、ブラウザ上で使えるプログラム実行環境である「Jupyter Notebook(旧: ipython notebook)」というアプリケーションがよく用いられます。
「Jupyter Notebook(旧: ipython notebook)」では、ノートブックと呼ばれるドキュメントを作成し、プログラムの記述と実行、メモの作成、保存と共有などをブラウザ上で行うことができます。
スポンサードリンク
このライブラリと「pivottablejs」を使って、Excelのようなピボットテーブルを作る方法をまとめています。
データは青果物情報センターのサンプルCSVを利用(UTF-8に変換)しています。
Pythonを利用したことがない人は、インストール手順のページを見て下さい。
Jupyter NotebookはShellのようなものであり、インタプリタ環境で使うものです。
パスが通っていなければ、次のように実行します。
$ /c/Python36/Scripts/pip install jupyter
これで完了です。
pivottable.jsはもともとjavascriptのパッケージです。
インタラクティブにデータを可視化したり、集計することが可能になります。
pythonではpivottablejsというモジュールを導入することで使用することができます。
インストール方法は次のようになります。
# /c/Python36/Scripts/pip install pivottablejs Collecting pivottablejs
まずは、Jupyter Notebookのファイル(Notbook)を置くフォルダを作成します。
パスが通っていたら、次のように起動します。
$ cd <Notbookを置くフォルダ> $ jupyter notebook
パスが通っていなければ次のように起動します。
$ cd <Notbookを置くフォルダ> $ /c/Python36/Scripts/jupyter-notebook
これにより、ブラウザが立ち上がり、Jupyter Notebookのホーム画面が「http://localhost:8888/tree」のアドレスで起動します。
「New」をクリックして「Notebook」から「Python3」を選びます。
Untitledという空のNootbookが「http://localhost:8888/notebooks/Untitled.ipynb?kernel_name=python3」で作成されると同時に、Notebookの編集画面に移ります。
以降はここで、データ分析を行います。
UntitledをクリックしてNotebookの名前を更新しておきましょう。
Jupyter Notebookを利用したコードの書き方は次のようになります。
import pandas as pd from pivottablejs import pivot_ui df = pd.read_csv("./SJH2011011.CSV") pivot_ui(df)
実行ボタンを押してみましょう(In [数字]の左か、メニューバーから選択できます)。
Excelのようなピボットテーブルが表示されました。
この状態で、マウスを使ってExcelのピボットテーブルのように利用します。
デフォルト状態だと、出力画面が狭いです。
その場合には、「~/.jupyter/custom/custom.css」を作成して次のようなスタイルシートを記載します。
#notebook-container { width: 95% !important; }
pivot_ui(pivotUI)の記述は次のようになります。
pivot_ui(input [,options [,overwrite]])
それぞれのオプションに指定可能な文字列をまとめます。
詳しくは「公式ページ(英語)]]を参照ください。
指定可能なKey | 説明 |
---|---|
rows | 行に自動指定するKey |
cols | 列に自動指定するKey |
vals | 集計欄に自動指定するKey |
aggregators | どのKeyについて集計をするか |
aggregatorName | valsで指定した方法をどうやって集計するか |
renderers | 表示関数の指定 |
rendererName | テーブルの表示方法を指定 |
rowOrder | 行の表示を指定("key_a_to_z", "value_a_to_z", "value_z_to_a") |
colOrder | 列の表示を指定("key_a_to_z", "value_a_to_z", "value_z_to_a") |
derivedAttributes | 自前の処理結果のカラムを追加 |
dataClass | レンダリングに渡されるデータクラスのコンストラクタ |
filter | 各レコードで呼び出され、レンダリング前にレコードを入力から除外する場合はfalse、それ以外の場合はtrueを返す |
inclusions | レンダリングに含めるレコードを示す属性値の配列 |
exclusions | レンダリングに含めないレコードを示す属性値の配列 |
hiddenAttributes | UI上から非表示とするKey |
hiddenFromAggregators | aggregatorsの引数を省略する属性名 |
hiddenFromDragDrop | drag&drop UIが表示を省略する属性名 |
sorters | 属性名で呼び出し、array.sortの引数として使用できる関数を返す |
onRefresh | レンダラーの更新 |
menuLimit | ダブルクリックメニューに表示する最大値の数(50) |
autoSortUnusedAttrs | 未使用の属性がUIでソートされているかどうかを制御する(false) |
unusedAttrsVertical | 水平方向のデフォルトではなく、未使用の属性が垂直に表示されるかどうかを制御 |
showUI | drag&drop UIが表示されるかどうかを制御 |
rendererOptions | レンダラーのオプション |
localeStrings | UI表示用文字列 |
例として、デフォルト値を記載すると次のようなフォーマットになります。
pivot_ui(df, cols = [], rows = [], vals = [], derivedAttributes = {}, hiddenAttributes = [], hiddenFromAggregators = [], hiddenFromDragDrop = [], menuLimit = 500, rowOrder = "key_a_to_z", colOrder = "key_a_to_z", exclusions = {}, inclusions = {}, unusedAttrsVertical = 85, autoSortUnusedAttrs = False, showUI = True, sorters = {}, inclusionsInfo = {}, aggregatorName = "Count", rendererName = "Table" )
オプション名 | 説明 |
---|---|
count | レコードの総数 |
countUnique | valsで指定した値の一意なデータ総数 |
listUnique | valsで指定した値の一意なものをカンマで区切ったリストで表示 |
sum | valsで指定した値の合計 |
intSum | valsで指定した値の合計の小数点無し |
average | valsで指定した値の平均 |
sumOverSum | ある値xの和をある値yで割った値 |
sumAsFractionOfTotal | Total(行列)を100%としたときの合計比率 |
sumAsFractionOfRow | Total(行)を100%としたときの合計比率 |
sumAsFractionOfCol | Total(列)を100%としたときの合計比率 |
countAsFractionOfTotal | Total(行列)を100%としたときのカウント比率 |
countAsFractionOfRowl | Total(行)を100%としたときのカウント比率 |
countAsFractionOfRow | Total(列)を100%としたときのカウント比率 |
オプション名 | 説明 |
---|---|
Table | 通常のテーブル |
Table Barchart | セル内に棒グラフ |
Heatmap | ヒートマップ |
Row Heatmap | 行基準のヒートマップ |
Col Heatmap | 列基準のヒートマップ |
Horizontal Bar Chart | 水平棒グラフ |
Horizontal Stacked Bar Chart | 水平積み上げ棒グラフ |
Bar chart | 棒グラフ |
Stack Bar Chart | 積み上げ棒グラフ |
Line chart | 線グラフ |
Area chart | 面グラフ |
Scatter Chart | 散布図 |
Treemap | カーペットチャート |
TSV Export | Tsv形式の出力 |
スポンサードリンク
import pandas as pd from pivottablejs import pivot_ui # サンプルデータ取り込み data = "./SJH2011011.CSV" df = pd.read_csv(data, index_col=None, header=None) names = ['市場コード', '市場名', '年月', '旬', '国内外区分', '国内産・国外産の表示', '品名コード', '品名', '本年数量', '本年金額', '本年価格', '前年数量', '前年金額', '前年価格', '終了マーク'] df.columns = names # Jupyter上で可視化 pivot_ui(df) # 独立HTMLの出力(データセット内包) pivot_ui(df, outfile_path="output.html")
【結果】
機械学習のライブラリ「scikit-learn」には実験用に7つのデータ・セットが付属しています。
データ | 内容 | 用途 |
---|---|---|
Boston house-prices | ボストン市の地域別住宅価格データ | 回帰向き |
Breast cancer | 乳がん患者の診断データ | 分類向き |
Diabetes | 糖尿病患者の診断データ | 回帰向き |
Digits | 手書き数字のデータ | 分類向き |
Iris | アヤメの計測データ | 分類向き |
Linnerrud | 成人男性の生理的特徴と運動能力のデータ | 回帰向き |
Wine | ワインの成分データ | 分類向き |
基本的には機械学習向けのデータ・セットですが、データ分析・統計解析の練習にも使えます。
import pandas as pd from pivottablejs import pivot_ui # サンプルデータ取り込み data = "https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv" df = pd.read_csv(data, index_col=None, header=None) names = ['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species'] df.columns = names # Jupyter上で可視化 pivot_ui(df) # 独立HTMLの出力(データセット内包) pivot_ui(df, outfile_path="iris.html")
inclusions/exclusions を利用すれば、ピボットテーブル上で表示したいパラメーターだけを選択できます。
import pandas as pd from pivottablejs import pivot_ui df = pd.read_csv("./SJH2011011.CSV", index_col=None, header=None) names = ['市場コード', '市場名', '年月', '旬', '国内外区分', '国内産・国外産の表示', '品名コード', '品名', '本年数量', '本年金額', '本年価格', '前年数量', '前年金額', '前年価格', '終了マーク'] df.columns = names pivot_ui(df) # 独立HTMLの出力(データセット内包) pivot_ui(df, cols= ["市場名"], rows= ["国内産・国外産の表示"], rendererName= "Bar Chart", inclusions = { '国内産・国外産の表示': ['国内産', '国外産'], } )
【結果】
スポンサードリンク