Python seaborn 練習問題

python

【Python】seabornの練習問題【Kaggleに挑戦】

こんにちは。医師で人工知能の研究を行っているTommy(Twitter:@obgyntommy)です。

 

今回は、seabornの使い方の【前編】【後編】で習得した、グラフの描画方法を使って、実際のデータを使った解析をしていきます。

 

seabornの使い方の前編、後編の記事については以下になります。まだ学習していない、という方は先に学習しましょう。

関連記事
Python seaborn 使い方 前編
PythonのライブラリSeabornの使い方【前編】

続きを見る

関連記事
Python seaborn 使い方 後編
PythonのライブラリSeabornの使い方【後編】

続きを見る

 

それでは、早速課題に取り組みましょう。

seabornの練習問題|使用するデータ

Python seaborn 練習問題

UCI(Union Cycliste Internationale)が提供している乳癌の診断データを使用します。

データの大元は以下の2つです。

データソース

[st-card-ex url="https://archive.ics.uci.edu/ml/datasets/breast+cancer" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore="続きを見る"]

Kaggleのデータ

[st-card-ex url="https://www.kaggle.com/uciml/breast-cancer-wisconsin-data" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore="続きを見る"]

今回は、導入のしやすから、「scikit-learn」にあるデータを使います。

 

scikit-learnのライブラリインストールされていない方は、まずインストールしましょう。

In[]

# ターミナル、端末、コマンドプロンプトからは
pip install scikit-learn

# Jupyter note bookからの場合
!pip install scikit-learn

 

seabornの練習問題|データの準備

Python seaborn 練習問題

まずはデータの準備をします。

 

下記の4つのデータを使ってグラフを描画してデータの特徴を捉える練習をしましょう。

  • diagnosis: 乳房組織の診断 0=悪性、1=良性
  • radius_mean: 中心から境界までの平均距離
  • perimeter_mean: 腫瘍のコアの平均サイズ
  • mean area: 平均面積

ライブラリとデータ読み込み

下記を実行してみましょう。

seabornでは pandasのDataFrame を使うことが多いので、まずは以下の様に変換します。

In[]

import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import numpy as np
import pandas as pd

from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()

# numpy to pandas
columns = ['diagnosis', 'radius_m', 'perimeter_m', 'area_m']
bc = pd.DataFrame(columns=columns)
bc['diagnosis'] = data.target
bc['radius_m'] = data.data[:,0]
bc['perimeter_m'] = data.data[:,2]
bc['area_m'] = data.data[:,3]
bc.head()

 

Out[]

Python seaborn 練習問題  pandasのDataFrameを使用して取り込みを行う

 

 

データは569個ずつあります。

また、全データの数と種類も確認してみましょう。

 

In[]

print(data.data.shape)
print(data.feature_names)

 

Out[]

(569, 30)
['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothness error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']

 

30項目のデータがありますね。課題を完了した後も、このデータを自習用に使ってみてください。

 

seabornの課題

Python seaborn 練習問題

以下のグラフを実際に描いてみましょう。

課題のグラフ

  • 棒グラフ
  • 散布図と近似直線
  • ヒストグラムと散布図を並べて表示
  • 相関係数をヒートマップで表示
  • ボックスプロットを3つ並べて表示

 

それでは各々のグラフを描く際の仕様について見ていきましょう。

 

diagnosisの棒グラフ

以下の様にラベル付けを行います。

 diagnosisの定義

  • diagnosisの 0 :悪性の数の棒グラフ
  • diagnosisの 1 :良性の数の棒グラフ

 

散布図と近似直線

以下、2つの散布図と近似直線を書いてみましょう。

  • radius_m vs perimeter_m
  • radius_m vs area_m

 

Tips

  • これを見ることで各々の特徴量の関係性(相関の有無)がわかります。

 

ヒストグラムと散布図を並べて表示

対象データは下記3つです。

  • radius_m
  • perimeter_m
  • area_m

 

Tips

  • これを見ることでそのデータの分布や相関が各変数対応した形でわかります。

 

相関係数をヒートマップで表示

対象データは下記の3つです。

  • radius_m
  • perimeter_m
  • area_m

 

Tips

  • お互いの変数の相関の強さがわかります。

 

ボックスプロットを3つ並べて表示

 

 $x$ 軸と$y$ 軸について

  • $x$ 軸診断結果である diagnosis (0:悪性、1:良性)
  • $y$ 軸には下記それぞれの項目の数値

 

 $y$ 軸の項目

  • radius_m
  • perimeter_m
  • area_m

 

Tips:

  • これを見ることで診断結果と特徴量の関係性がわかります。
  • 例えば、悪性のがん細胞は大きいなどです。

演習

Python seaborn 練習問題

演習のJupyter notebookをご利用される方は演習(google driveリンク)を参照いただければと思います。

 

Google colaboratory の使い方が分からない方は以下の記事を参考にして下さい。

関連記事
Google Colaboratory グーグルコラボラトリー グーグルコラボ 使い方
Google Colaboratoryの使い方【完全マニュアル】

続きを見る

 

diagnosisの棒グラフ

仕様

"""
diagnosisの悪性、良性のカウントの棒グラフを作ってください。
参照:グラフの表示の「countplot(棒グラフ)」
"""

 

Out[]

Python seaborn 練習問題 

悪性と良性のカウントの棒グラフ

 

散布図と近似直線

仕様

"""
「radius_m」と「perimeter_m」を使って、散布図と近似直線を書いてください。
参考:グラフ表示の「seaborn.jointplot」
"""

 

Out[]

Python seaborn 練習問題 散布図と近似直線

散布図と近似直線

 

仕様

"""
「radius_m」と「area_m」を使って、散布図と近似直線を書いてください。
参考:グラフ表示の「seaborn.jointplot」
"""

 

Out[]

Python seaborn 練習問題 散布図と近似直線

散布図と近似直線

 

 

ヒストグラムと散布図を並べて表示

仕様

"""
「radius_m」、「perimeter_m」、「area_m」それぞれのヒストグラムと散布図を描画してください。
参考:グラフ表示の「複数表示」
"""

 

Out[]

Python seaborn 練習問題 ヒストグラムと散布図を並べて表示

ヒストグラムと散布図を並べて表示

 

 

相関係数をヒートマップで表示

仕様

"""
「radius_m」、「perimeter_m」、「area_m」の相関係数のヒートマップを表示してください。
参考:グラフ表示の「ヒートマップ」
"""

 

Out[]

Python seaborn 練習問題 相関係数のヒートマップ

相関係数のヒートマップ

 

 

ボックスプロットを3つ並べて表示

仕様

"""
「radius_m」、「perimeter_m」、「area_m」それぞれのボックスプロット(箱ひげ)を描画してください。
ボックスプロットは横に3つ並べて表示してください。

参考:グラフ表示の「ボックスプロット」
参考:グラフ表示の「複数表示」

注意:subplotsで1行指定している場合は、axesは1次配列になります。
"""

 

Out[]

Python seaborn 練習問題 ボックスプロットは横に3つ並べて表示

ボックスプロットを横に3つ並べて表示

 

解答

Python seaborn 練習問題

演習を行って頂いた方は、解答例(google driveリンク)を参照して下さい。

 

diagnosisの棒グラフ

In[]

"""
diagnosisの悪性、良性のカウントの棒グラフを作ってください。
参照:グラフの表示の「countplot(棒グラフ)」
"""
sns.countplot(x='diagnosis', data=bc)

 

散布図と近似直線

In[]

"""
「radius_m」と「perimeter_m」を使って、散布図と近似直線を書いてください。
参考:グラフ表示の「seaborn.jointplot」
"""
sns.jointplot(x='radius_m', y='perimeter_m', data=bc, kind='reg')

 

In[]

"""
「radius_m」と「area_m」を使って、散布図と近似直線を書いてください。
参考:グラフ表示の「seaborn.jointplot」
"""
sns.jointplot(x='radius_m', y='area_m', data=bc, kind='reg')

 

ヒストグラムと散布図を並べて表示

In[]

"""
「radius_m」、「perimeter_m」、「area_m」それぞれのヒストグラムと散布図を描画してください。
参考:グラフ表示の「複数表示」
"""
sns.pairplot(data=bc[['radius_m', 'perimeter_m', 'area_m']])

 

相関係数をヒートマップで表示

In[]

"""
「radius_m」、「perimeter_m」、「area_m」の相関係数のヒートマップを表示してください。
参考:グラフ表示の「ヒートマップ」
"""
sns.heatmap(bc[['radius_m', 'perimeter_m', 'area_m']].corr(), 
            vmin=-1.0, vmax=1.0, annot=True, fmt=".2f")

 

ボックスプロットを3つ並べて表示

In[]

"""
「radius_m」、「perimeter_m」、「area_m」それぞれのボックスプロット(箱ひげ)を描画してください。
ボックスプロットは横に3つ並べて表示してください。

参考:グラフ表示の「ボックスプロット」
参考:グラフ表示の「複数表示」

注意:subplotsで1行指定している場合は、axesは1次配列になります。
"""
# subplots(行, 列, figsize=(幅, 高さ))
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
sns.boxplot(x='diagnosis', y='radius_m', data=bc, ax=axes[0])
sns.boxplot(x='diagnosis', y='perimeter_m', data=bc, ax=axes[1])
sns.boxplot(x='diagnosis', y='area_m', data=bc, ax=axes[2])

 

今回の課題は以上となります。お疲れ様でした。

 

 

人気記事 機械学習は挫折しやすい【挫折が多い原因と挫折回避の方法を教えます】

人気記事 無料あり:機械学習エンジニアの僕がおすすめするAI(機械学習)特化型プログラミングスクール3社


-python
-, , ,