LogoMark.png

DataVisualization のバックアップ(No.7)


可視化

Data Visualization

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

DataInformation(構造化) → Knowledge(知見)→ Wisdom(知恵)



はじめに

様々なグラフ


Topics

1024px-Nightingale-mortality.jpg
以下、Python によるビジュアライゼーションについて概説します。




可視化に必要なライブラリ

代表的な Python ライブラリと、その読み込み方を紹介します。

基本データ処理用のライブラリ

ビジュアライゼーション用のライブラリ

基本的なグラフの描画

データ解析ライブラリ pandas のメソッドを用いたのグラフ描画の方法を紹介します(pandas は matplotlib を用いてグラフを描画しています)。

ライブラリの読み込み

最低限必要なのは、matplotlib と pandas です。以下典型的な記載例です。

import matplotlib.pyplot as plt
import pandas as pd


データの準備

はじめに対象となるデータをデータフレームとして読み込む必要があります。データの読み込み方法については、Pandas のページをご覧下さい。

df = pd.read_csv( '/path/to/xxxxxx.csv' )


ヒストグラム

#image(): File not found: "hist.png" at page "DataVisualization"

ヒストグラム(柱状グラフ、度数分布図)は、横軸に階級、縦軸に度数をとった統計グラフで、データの分布状況を可視化するために用いられます。

データフレームからヒストグラムを生成するコードは非常に簡単です。

df.hist( ) 全項目一挙表示
df[ 'XXX' ] .hist(  ) 特定カラムの表示

df はデータフレーム変数の例です。

ボックスプロット

#image(): File not found: "box.png" at page "DataVisualization"

ボックスプロット(箱ひげ図)は、データのばらつきを可視化する統計グラフで、箱(box)と、その両側に出たひげ(whisker)で表現されることからその名が付けられています。

一般に以下の五数が要約(five-number summary)されて表示されます。

以下のコードは、対象カラム(XXX)をグループ(AAA)別に表示します。

df.boxplot( column='XXX' , by='AAA' )


散布図

#image(): File not found: "scatter.png" at page "DataVisualization"

散布図(scatter plot)は、縦軸、横軸に2つの量的データ項目を対応させて、各レコードのデータを点でプロットしたものです。項目間の相関の有無が可視化されます。

以下のコードは、x軸とy軸にカラム項目を指定して表示します。

df.plot.scatter( x='XXX', y='YYY' )


折れ線グラフ・棒グラフ・円グラフ

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

# 性別ごとに国語・英語・数学の平均値を算出
df_mean = df.groupby( 'Gender' , as_index=False ).mean( ) 
df_mean
GenderJapaneseEnglishMathematics
0F62.35000058.47500039.800000
1M56.42045541.14204539.539773

#image(): File not found: "bar.png" at page "DataVisualization"

生成された df_mean を使うと、簡単に積み重ね棒グラフができます。

df_mean.plot.bar( stacked=True )

stacked=True は、積み重ねを有効にする・・という意味です。




応用的なグラフ描画

Pythonの可視化ライブラリ seaborn を用いた様々な描画方法を紹介します。

(書きかけです)

ライブラリの読み込み

以下、ライブラリーの読み込み記載例です。

# matplotlib パッケージ から pyplot モジュールを plt として import
from matplotlib import pyplot as plt

# seaborn ライブラリを sns として読み込み
import seaborn as sns
# seabornの機能を有効化
sns.set()

# pandasライブラリを pd として読み込み(データフレームを利用するため)
import pandas as pd


ヒストグラム sns.displot

# seaborn のヒストグラム表示機能を用いた詳細設定
sns.displot( df['total_bill'], bins=12 , color='#0033AA', height=6 , aspect=2, kde=True )


ボックスプロット sns.boxplot

# seaborn の boxplot を用いた「箱ひげ図」の描画
sns.boxplot( data = df , x = 'day' , y = 'total_bill' , order = ['Thur','Fri','Sat','Sun'] )


散布図 sns.scatterplot

# seaborn の scatterplot を用いた「散布図」の描画
plt.figure( figsize=(12, 8) )
sns.scatterplot( data = df , x = 'total_bill' , y = 'tip' )


# カラムの「質的変数」(この例では曜日)の違いを色で区別して描画
plt.figure(figsize=(12, 8))
sns.scatterplot( data = df , x = 'total_bill' , y = 'tip' , hue = 'day' , s = 100 )


# カラムの「質的変数」(この例では ランチとディナー)の違いを形で区別して 描画
plt.figure(figsize=(12, 8))
sns.scatterplot( data = df , x = 'total_bill' , y = 'tip' , style = 'time' , s = 100 )


# カラムの「量的変数」(この事例では「テーブルサイズ」)をドットの大きさを変えて描画する
plt.figure(figsize=(12, 8))
sns.scatterplot( data = df , x = 'total_bill' , y = 'tip' , hue = 'day' , size = 'size' , sizes = (100,1000) , alpha = 0.5 )


散布図行列 sns.pairplot

# seaborn の pairplot を用いた「散布図行列」の描画
sns.pairplot( data = df , hue = 'day' , height = 4 , aspect = 1 )


ヒートマップ sns.heatmap

# ヒートマップの表示
plt.figure( figsize=(16, 24))
sns.heatmap(df2 , linewidths=.5 , cmap="coolwarm" , fmt="d" , annot=True , robust=True )




グラフの書き出し

ノートに書き出されたグラフは、画像としてダウンロードすることができます。以下、Google Colab の場合の事例です。

# GoogleColab のファイル操作機能の読み込み
from google.colab import files

# ヒートマップの表示
plt.figure( figsize=(16, 24))
sns.heatmap(df2 , linewidths=.5 , cmap="coolwarm" , fmt="d" , annot=True , robust=True )

#画像の保存(内部的に保存されます)
plt.savefig('heatmap.png')

# GoogleColab の機能を使ってファイルをダウンロード
files.download('heatmap.png')