LogoMark.png

データサイエンス/08

第8回 Pythonによる統計グラフ

データサイエンス/2024受講生一覧汎用シート



サンプル修正版|2024.11.11

サンプルプログラムにミスがありましたので、以下修正版に更新しました。
https://github.com/koichi-inoue/DataScience/blob/main/StatisticalGraph.ipynb

修正点は「グラフ用のデータフレーム の作成 」の部分の以下のコードです。

誤:df2 = df.groupby( 'day' ).mean( ) 
正:df2 = df.groupby( 'day' ).mean( numeric_only=True ) 

以前は、上の書き方でも動いていました(数値項目のみが自動的に選択されていました)が、現在では「カテゴリ項目の列が含まれる場合」は、numeric_only = True を明示的に記載する必要があるようです。



統計グラフ

様々なグラフ

統計グラフ表示のためのライブラリ

Pythonを用いた統計グラフには、様々な関連ライブラリーのインポート、データの読み込み、各種メソッドの活用が前提となります。以下、各種ライブラリの紹介です。

統計グラフの描画体験

はじめに matplotlib と pandas の連携による基本的なグラフ描画を体験します。

データの準備

統計グラフの作成には、対象となるデータをデータフレームとして読み込む必要があります(すでに前回までに確認済み)。

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


ヒストグラム

hist.png

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

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

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

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

ボックスプロット

box.png

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

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

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

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


散布図

scatter.png

散布図(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
bar.png

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

df_mean.plot.bar( stacked=True )

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




演習8|統計グラフ

CSVデータから統計量を視覚化するサンプルです。matplotlib と連携した pandas のグラフ描画機能を使って、様々なグラフの描画を体験します。

ノートブックの新規作成

サンプルデータ

Tips のデータをサンプルとして利用します。
直接読み込むので、ダウンロードの必要はありません。
https://github.com/mwaskom/seaborn-data/blob/master/tips.csv

サンプルコード

JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience/blob/main/StatisticalGraph.ipynb

学科サイトにリンク掲載

ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

演習8|プログラムの解説

ライブラリーの読み込み

冒頭で、グラフ描画用のライブラリーmatplotlibとデータ解析用のライブラリー pandasを読み込んでいます。

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

# pandasライブラリの読み込み
import pandas as pd


ヒストグラム・ボックスプロット・散布図

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


以下は、seaborn というライブラリを活用した事例です
参考情報なので、取り組みは任意です。




Pythonによる統計グラフ+

seaborn というライブラリを使った応用的なグラフ描画を体験します。

seabornについて

seabornは Python の可視化ライブラリで、matplotlib が内部で動いています。


ヒストグラム

ボックスプロット

sns.boxplot( )


散布図

質的変数の違いを色・形で区別、また量的変数をドットのサイズで表現可能

sns.scatterplot(  )


散布図行列

相関行列同様に、量的項目間の相関を一括表示

sns.pairplot( )


ヒートマップ

2次元の表の値を色の差( 青:小 ←→ 赤:大 など)で表現

sns.heatmap( )


棒グラフ・円グラフ等

seaborn ライブラリーによる棒グラフの表示は煩雑、また seaborn には円グラフを描く機能が実装されていないため、ここでは省略します。



演習8+|統計グラフ+

ノートブックの新規作成

サンプルデータ

いずれも https アクセスでプログラム内で直接読み込むので、ダウンロードする必要はありません。

サンプルコード

JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience/blob/main/StatisticalGraphPlus.ipynb

学科サイトにリンク掲載

ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

演習8+|プログラムの解説

ライブラリーの読み込み

冒頭で、グラフ描画用のライブラリ 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.boxplot( )

散布図

散布図行列

相関行列同様に、量的項目間の相関を一括表示

sns.pairplot( )

ヒートマップ

このサンプルでは、covid-19 の陽性者数を「横軸:年月、縦軸:都道府県」というかたちで2次元の表にしたデータ(df2)を利用しています。

sns.heatmap( )

ファイルの保存について

GoogleColab のファイル操作のためのライブラリを読み込むことで、描画されたグラフを画像ファイルとしてダウンロード保存することができます。




APPENDIX

数理グラフ

数式等を用いたグラフ表示のサンプルです。時間に余裕のある方のみお試しください。取り組みは任意です。

https://github.com/koichi-inoue/DataScience/blob/main/Plotting.ipynb




PAGES

GUIDE

DATA

Last-modified: 2024-11-11 (月) 15:42:21