LogoMark.png

DataVisualization のバックアップソース(No.6)

#author("2021-11-15T16:08:04+09:00;2021-02-11T19:11:36+09:00","default:inoue.ko","inoue.ko")
#settableborder(line)

*可視化
Data Visualization
~

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

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

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

~

***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};
~

-__[[データインク比>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 };
~
~

**Python ビジュアライゼーション
~

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

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

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


***ビジュアライゼーション用のライブラリの読み込み
-[[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)からフォークされたライブラリ);
~
~

***データの準備
はじめに対象となるデータを''データフレーム''として読み込む必要があります。データの読み込み方法については、__[[Pandas]]__ のページをご覧下さい。
 df = pd.read_csv( '/path/to/xxxxxx.csv' )
~

***ヒストグラム
#image(DataVisualization/hist.png,right,30%)
データフレーム(以下 df )からヒストグラムの生成は非常に簡単です。
 df.hist( ) 全項目一挙表示
 df[ 'XXX' ] .hist(  ) 特定カラムの表示
~

***ボックスプロット
#image(DataVisualization/box.png,right,30%)
対象カラム(XXX)を、グループ別(AAA)に分けて表示します。
 df.boxplot( column='XXX' , by='AAA' )
~

***散布図
#image(DataVisualization/scatter.png,right,30%)
x軸とy軸にカラム項目を指定して表示します。
 df.plot.scatter( x='XXX', y='YYY' )
~

***折れ線グラフ・棒グラフ・円グラフ
これらのグラフは項目間の推移や比較を見るために使います。数万件もある全レコードを表示しても視覚的に読み取ることはできないので、グラフにしたい内容によって、事前に「データの平均値を出す」、「クロス集計する」といった処理を行った後、それを新たなデータフレームとしてグラフの表示に利用するのが一般的です(以下、棒グラフの事例です)。

 # 性別ごとに国語・英語・数学の平均値を算出
 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|

#image(DataVisualization/bar.png,right,30%)
生成された df_mean を使うと、簡単に積み重ね棒グラフができます。
 df_mean.plot.bar( stacked=True )
&small(stacked=True は、積み重ねを有効にする・・という意味です。);

~
~
~