LogoMark.png

DataVisualization のバックアップの現在との差分(No.3)


#author("2021-11-04T11:41:33+09:00;2021-02-11T19:11:36+09:00","default:inoue.ko","inoue.ko")
#author("2021-12-06T12:57:44+09:00","default:inoue.ko","inoue.ko")
#settableborder(line)

*可視化
Data Visualization
~

***概要

**概要
可視化とは、物事の関係性を視覚的に捉えられるように、データを画像・グラフ・図表などに変換することを言います。その目的は以下のように、データから価値や知恵を生み出すことにあります。

''Data'' → ''Information''(構造化) → ''Knowledge''(知見)→ ''Wisdom''(知恵)

~

***様々なグラフ
-[[ヒストグラム>GoogleImage:ヒストグラム]]:縦軸に度数、横軸に項目を対応させ、事項間の度数を比較するもの。度数分布図、柱状グラフともいう。 
-[[散布図>GoogleImage:散布図]]:縦軸、横軸に変数を対応させて、データを点でプロットしたもの
-[[ボックスプロット(箱ひげ図)>GoogleImage:箱ひげ図]]:データのばらつきを、箱(box)と、その両側に出たひげ(whisker)で表現する図。特に品質管理でよく用いられる。
-[[円グラフ>GoogleImage:円グラフ]]:円図形を扇形に分割し、事項の構成比率を表すもの
-[[ヒストグラム>GoogleImage:ヒストグラム]]:縦軸に度数、横軸に項目を対応させ、事項間の度数を比較するもの。度数分布図、柱状グラフともいいます。 
-[[ボックスプロット(箱ひげ図)>GoogleImage:箱ひげ図]]:データのばらつきを、箱(box)と、その両側に出たひげ(whisker)で表現する図。特に品質管理でよく用いられます。
-[[散布図>GoogleImage:散布図]]:縦軸、横軸に変数を対応させて、データを点でプロットしたもの。項目間の相関が見て取れます。
-[[折れ線グラフ>GoogleImage:折れ線グラフ]]:時系列の推移を表すもの
-[[棒グラフ>GoogleImage:棒グラフ]]:項目間の値を比較するもの
-[[円グラフ>GoogleImage:円グラフ]]:円図形を扇形に分割し、事項の構成比率を表すもの。

-[[ヒートマップ>GoogleImage:ヒートマップ]]:2次元データの個々の値を色や濃淡として表現したもの

~
~

**Python ビジュアライゼーション
***Topics
#image(https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Nightingale-mortality.jpg/1024px-Nightingale-mortality.jpg,right,30%)
-__[[ナイチンゲールの鶏頭図>GoogleImage:ナイチンゲール 鶏頭図]]__(1858)
クリミア戦争における月別の死因を可視化したもの。赤色が負傷、青が病気、黒がその他を意味していて、グラフからは負傷による死亡よりも病気による死亡が圧倒的に多いことがわかります。
&scale(75){出典:https://commons.wikimedia.org/wiki/File:Nightingale-mortality.jpg};
~

***基本データ処理用のライブラリの読み込み
-[[numpy>https://numpy.org/]]|数値計算
 import numpy as np

-[[pandas>Pandas]]|データフレームの活用
 import pandas as pd

-[[janome>https://mocobeta.github.io/janome/]]|日本語の形態素解析器
 import janome
-__[[データインク比>GoogleImage:Data-ink ratio]]__
エドワード・タフテによる「良いグラフィック」の指標で、「グラフィック全体の印刷にかかったインク量のうち、データを伝えるために用いられたインク量の比率が 1.0 に近いほど良い・・と考えられます。
 Data-ink ratio = Data-ink / total ink used to print the graphic
&scale(75){Edward Tufte, 1992, The Visual Display of Quantitative Information };
~


***ビジュアライゼーション用のライブラリの読み込み
-[[matplotlib>https://matplotlib.org/]]|グラフ描画
 import matplotlib.pyplot as plt

-[[seaborn>https://seaborn.pydata.org/]]|matplotlib をベースにした美麗な可視化
 import seaborn as sns

-[[plotly>https://plotly.com/python/]]|動的グラフ作成

-[[folium>https://python-visualization.github.io/folium/]]|地図・位置情報の可視化

-[[wordcloud>https://amueller.github.io/word_cloud/]]|ワードクラウドの描画

-[[pillow>https://pillow.readthedocs.io/]]|画像処理
&small(開発が停止しているPIL(Python Image Library)からフォークされたライブラリ);

~

&color(red){以下、書きかけです。};
~
~
***データの準備
はじめに対象となるデータを''データフレーム''として読み込む必要があります。データの読み込み方法については、__[[Pandas]]__ のページをご覧下さい。
 df = pd.read_excel('DataSample.xlsx')
~

***ヒストグラム
#image(hist.png,right,30%)
データフレーム(以下 df )からヒストグラムの生成は非常に簡単です。
 df.hist() 全項目一挙表示
 df["GPA"] .hist( ) 特定カラムの表示
**Python ライブラリ
以下、ビジュアライゼーションに関連する Python ライブラリを紹介します。詳細は個々のページをご覧ください。
~

***散布図
#image(scatter.png,right,30%)
x軸とy軸にカラム項目を指定して表示します。
 df.plot.scatter(x='GPA', y='Attendance')
***基本データ処理用のライブラリ
-__[[Numpy]]__|数値計算
https://numpy.org/

~
-__[[Pandas]]__|データフレームの活用
https://pandas.pydata.org/

***ボックスプロット
#image(box.png,right,30%)
対象カラム(GPA:成績)を、グループ別(Prefecture:出身県)に分けて表示します。
 df.boxplot( column="GPA", by="Prefecture")

-janome|日本語の形態素解析器
https://mocobeta.github.io/janome/
~

***棒グラフ
グラフにしたい内容によっては、事前に「データの平均値を出す」、「クロス集計する」といった処理を行って、新しいデータフレーム(表)を作成します。

 # 性別ごとに国語・英語・数学の平均値を算出
 df_mean = df.groupby("Gender", as_index=False).mean() 
 df_mean
||Gender|Japanese|English|Mathematics|h
|0|F|62.350000|58.475000|39.800000|
|1|M|56.420455|41.142045|39.539773|
***ビジュアライゼーション用のライブラリ
-__[[Matplotlib]]__|グラフ描画
https://matplotlib.org/

#image(bar.png,right,30%)
生成された df_mean を使うと、簡単に積み重ね棒グラフができます。
 df_mean.plot.bar(stacked=True)
-__[[Seaborn]]__|matplotlib をベースにした美麗な可視化
https://seaborn.pydata.org/

~
~
-__[[Plotly]]__|動的グラフ作成
https://plotly.com/python/

**サンプルノート
以下に、Matplotlib を用いたグラフ表示のサンプルを掲載しています。
ipynb(JupyterNotebook)形式で、GitHubに置いていますが、レンダリングがタイムアウトする場合は、下の nbviewer 経由でご覧下さい。
-__[[Folium]]__|地図・位置情報の可視化
https://python-visualization.github.io/folium/

-1. 数式(乱数を含む)により生成したデータの可視化
--GitHub:[[DataVisualization01.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/DataVisualization01.ipynb]]
--nbviewer:[[DataVisualization01.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/DataVisualization01.ipynb]]
-__[[WordCloud]]__|ワードクラウドの描画
https://amueller.github.io/word_cloud/

-2. 統計サンプル irisデータの可視化
--GitHub:[[DataVisualization02.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/DataVisualization02.ipynb]]
--nbviewer:[[DataVisualization02.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/DataVisualization02.ipynb]]

-__[[Pillow]]__|画像処理
https://pillow.readthedocs.io/
&small(開発が停止しているPIL(Python Image Library)からフォークされたライブラリ);
~
~
~