第12回 データビジュアライゼーション2
データサイエンス/2022|2022.12.07
出席確認・その他
Zoomミーティングに参加する
- 演習の成果は、学科サイトの各自のページにリンク掲載して下さい。
学科サイト|受講生一覧
> Recording
CONTENTS
はじめに
進捗確認
- 第8回 データサイエンスとPython 演習1・2
- 第9回 Python によるデータ解析1 演習3(オンデマンド)
- 第10回 Python によるデータ解析2 演習4
- 第11回 データビジュアライゼーション1 演習5
- 第12回 データビジュアライゼーション2 演習6
- 第13回 データビジュアライゼーション3 演習7
- 第14回 機械学習・序説
https://design.kyusan-u.ac.jp/socialdesign/?JohnSmith/DataScience
オブジェクト指向プログラミングについて
プログラミングにおける重要な概念として、前回は「関数」について説明しましたが、今回は「オブジェクト指向プログラミング」について説明します。
データの集合体(プロパティ)と、それを操作する手続き(メソッド)を、ひとまとめにしたものをオブジェクトと言います。オブジェクト指向プログラミング(OOP)とは、このオブジェクトを要素単位として、それらの関係を記述するプログラミング手法です。
プロパティやメソッドを利用する際は、以下のように [ . ] 接続で記述します。
- オブジェクト名.変数名:プロパティ
- オブジェクト名.関数名( ):メソッド
Pythonによる統計グラフ2
今回は seaborn というライブラリを使った応用的なグラフ描画を体験します。
seabornについて
seabornは Python の可視化ライブラリで、matplotlib が内部で動いています。
- 公式サイト:https://seaborn.pydata.org/
- seabornの長所
- 美麗なグラフを描くことができる
- matplotlibと比較すると少ないコードで描画できる
- seabornの利用には、Pythonのバージョンが3.6以上であることが必要
Google Colab は問題ありません。
ヒストグラム
- 量的変数のヒストグラム
sns.displot( ) sns.histplot( )
Web検索では dis t plot が表示されることが多いようですが、dis t plot は将来削除される予定で、代わりに以下の関数を利用することが推奨されています。
https://seaborn.pydata.org/generated/seaborn.distplot.html- displot( )
sns.displot( df['total_bill'] , bins=20 , color='#0033AA' )
- histplot( )
例えば以下のように書くと、曜日ごとのデータを色違いに重ねてくれます。sns.histplot( data = df , x= 'total_bill' , bins=20 , hue = 'day' )
- displot( )
- 質的変数のヒストグラム
sns.countplot( )
ボックスプロット
sns.boxplot( )
散布図
質的変数の違いを色・形で区別、また量的変数をドットのサイズで表現可能
sns.scatterplot( )
散布図行列
相関行列同様に、量的項目間の相関を一括表示
sns.pairplot( )
ヒートマップ
2次元の表の値を色の差( 青:小 ←→ 赤:大 など)で表現
sns.heatmap( )
棒グラフ・円グラフ等
seaborn ライブラリーによる棒グラフの表示は煩雑、また seaborn には円グラフを描く機能が実装されていないため、ここでは省略します。
Pythonによるビジュアライゼーション体験2
seaborn を用いたグラフィック
ノートブックの新規作成
- Google Colaboratory でノートブックを新規作成
- Untitled0.ipynb というファイル名を変更 > StatisticalGraphics02.ipynb
サンプルデータ
いずれも https アクセスでプログラム内で直接読み込むので、ダウンロードする必要はありません。
- サンプル1:tips.csv(前回同様)
レストランにおける総支払額、チップの額、テーブルサイズ等
https://github.com/mwaskom/seaborn-data/blob/master/tips.csv
- サンプル2:covid-19.csv(ヒートマップ作成サンプルとして使用)
covid-19 陽性者数(都道府県別・月別)
https://github.com/koichi-inoue/DataScience2022/blob/main/covid-19.csv
オリジナルは以下、厚生労働省が公開しているオープンデータのページで、ページの先頭にある「新規陽性者数の推移(日別)」を変形したものです。
https://www.mhlw.go.jp/stf/covid-19/open-data.html
サンプルコード
JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience2022/blob/main/StatisticalGraph02.ipynb
学科サイトにリンク掲載(演習6)
ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。
- 1. 自分のノートを開いた状態で、右上の「共有」をクリック
- 2. 共有設定を変更して、以下のように表示される状態にします。
このリンクを知っているインターネット上の全員が閲覧できます。
- 3. 「リンクをコピー」をクリックして、そのアドレスを、以下の形式で、学科サイトの「Jupyter Notebooks」の部分に掲載して下さい。
-[[StatisticalGraphics02>https://colab.research.go・・=sharing]]
- 4. 以下のようになればOKです。
https://design.kyusan-u.ac.jp/socialdesign/?JohnSmith/DataScience
プログラムの解説
ライブラリーの読み込み
冒頭で、グラフ描画用のライブラリ matplotlib、seaborn とデータ解析用のライブラリ pandasを読み込んでいます。
# matplotlib パッケージ から pyplot モジュールを plt として import import matplotlib.pyplot as plt # seaborn ライブラリを sns として読み込み import seaborn as sns # seabornの機能を有効化 sns.set() # pandasライブラリの読み込み import pandas as pd
ヒストグラム
- 量的変数(総支払額)のヒストグラム
sns.displot( )
- df['total_bill']:対象となるカラム項目
- bins=12:階級の分割数
- color='#0033AA':グラフの色
- height=6 , aspect=2:グラフのサイズ指定(高さとアスペクト比)
アスペクト比は 幅/高さ - kde=True :確率密度関数の曲線を重ねて表示
- 質的変数(曜日別)のカウントをヒストグラム化
sns.countplot( )
- data = df:データとして データフレーム df を使用
- x = 'smoker':喫煙者か非喫煙者で分布を比較
- order = ['Yes', 'No'] :喫煙者、非喫煙者の順に表示
- hue = 'day':曜日を色で区別
ボックスプロット
sns.boxplot( )
- data = df:データとして データフレーム df を使用
- x = 'day':横軸は「曜日」
- y = 'total_bill':縦軸は「総支払額」
- order = ['Thur','Fri','Sat','Sun']:木金土日の順に表示
散布図
- 一般的な散布図
sns.scatterplot( )
- data = df:データとして データフレーム df を使用
- x = 'total_bill':横軸に「総支払額」
- y = 'tip':縦軸に「チップの額」
- 質的変数の違いを色・形で区別
- hue = 'day':曜日の違いを色で区別
- style = 'time':ディナーを◯、ランチを × でプロット
- s = 100:ドットのサイズ指定
- 量的変数をドットのサイズで表現(バブルチャート)
- size = 'size':テーブルサイズ(人数)をドットのサイズに反映
- sizes = (100,1000) :ドットのサイズは 100 〜 1000 に割り当て
- alpha = 0.5:不透明度 0.5
散布図行列
相関行列同様に、量的項目間の相関を一括表示
sns.pairplot( )
- data = df:データとして データフレーム df を使用
- hue = 'day':曜日の違いを色で区別
- height = 4 , aspect = 1 :グラフのサイズ指定(高さとアスペクト比)
アスペクト比は 幅/高さ
ヒートマップ
このサンプルでは、covid-19 の陽性者数を「横軸:年月、縦軸:都道府県」というかたちで2次元の表にしたデータ(df2)を利用しています。
sns.heatmap( )
- df2:データフレーム df2 を使用
- linewidths=.5:ヒートマップの各データ間に線を描く
- cmap = "coolwarm":ヒートマップの色の組み合わせ(青 - 赤)
- fmt="d":表示フォーマット 10進数
- annot = True:セルに値を出力
- robust = True:極端に大きな値や小さい値の影響を受けないように処理
ロバスト推定とは「外れ値に影響されにくい推定」を意味します。
ファイルの保存について
GoogleColab のファイル操作のためのライブラリを読み込むことで、描画されたグラフを画像ファイルとしてダウンロード保存することができます。
- ライブラリの読み込み
from google.colab import files
- matplotlib の機能を使って画像に名前を付けて保存(内部的に保存されます)
plt.savefig('heatmap.png')
- GoogleColab の機能を使ってファイルをダウンロード
files.download('heatmap.png')
APPENDIX|WordCloud
ワードクラウドとは
ワードクラウドは、文章の中に含まれる単語をカウントして、どのような単語が多く含まれるかを視覚的に表現します。
英語の場合は、単語間にスペースがあるので、解析が簡単ですが、日本語の場合はオリジナルの文章から単語間がスペースで区切られた「分かち書き」の状態に変換する作業が必要になります。
ライブラリ
- 公式サイト:https://amueller.github.io/word_cloud/
- ライブラリの読み込み
import wordcloud
サンプルデータ
以下のような一般のテキストデータが利用できます。
- https://en.wikipedia.org/wiki/Python_(programming_language)
- https://www.aozora.gr.jp/cards/000148/files/776_14941.html
サンプルコード
JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience2022/blob/main/WordCloud.ipynb
- カラーマップには以下のものが利用できます。
https://matplotlib.org/stable/tutorials/colors/colormaps.html
例:'viridis', 'plasma', 'inferno', 'magma', 'cividis'