08. Pythonによる探索的データ分析
8.1 配列とデータフレームの操作
8.1.1 NumPy
本ウェブページは『超入門 はじめてのAI・データサイエンス』第8章に記載されたコードを埋め込んでいます。第4章で使い方を学んだColab上で,Pythonによる探索的データ分析 を行います。
最初は NumPy
ライブラリを用いた配列に関するコードです。下記 コード1 では,NumPy
ライブラリを読み込み,二次元の ndarray
を作成 します。
コード 1
import numpy as np
a = np.array([[1, 2, 3],[4, 5, 6]])
a
コード2 は,a
という行列オブジェクトの形状を返します。
コード 2
a.shape
下記 コード3 は,すべての要素に 1
が入った,引数により指定する形状の行列を作ります。NumPy
の ones
についてもっと知りたい人は こちら を参照して下さい。
コード 3
b = np.ones((2, 3))
b
下記 コード4 では,累算代入演算子
を用いて,行列 b
を定数倍したものを b
に上書きしています。
コード 4
b *= 10
b
下記 コード5 は,b
のデータの型を返します。
コード 5
b.dtype
下記 コード6 は,行列 b
の型を変換するコードの例です。
コード 6
b = b.astype(int)
b
下記 コード7 は,行列加算のコード例です。
コード 7
a + b
下記 コード8 は,配列の形状変換の例です。
コード 8
c = a.reshape(3, 2)
c
コード9 は,行列 c
の各要素に 6
を足すコードです。
コード 9
c = c + 6
c
下記 コード10 は,行列の積を返すコードです。
コード 10
d = np.dot(a, c)
d
下記 コード11 は,行列の要素積を返すコードです。
コード 11
e = a * b
e
下記 コード12 では,配列 e
の平均を返します。
コード 12
e.mean()
下記 コード13 は,配列 e
の axis=0
,縦方向の平均を返します。
コード 13
e.mean(axis = 0)
下記 コード14 は,配列 e
の axis=1
,横方向の平均を返すコードです。
コード 14
e.mean(axis = 1)
8.1.2 Pandas
ライブラリ pandas
は,通常 下記 コード15 のようにエイリアス pd
を付けて読み込みます。第6章でも用いましたし,データ分析には欠かせないライブラリです。これからも事あるごとに使っていきます。
コード 15
import pandas as pd
8.2 Matplotlibによる可視化
8.2.1 Matplotlib の図の構造・種類・オプション
下記 コード16 では,Pythonの可視化ライブラリである Matplotlib
の pyplot
モジュールを読み込みます。pyplot
の subplot
関数で現在の Figure
に Axes
を準備します。
コード 16
import matplotlib.pyplot as plt
plt.subplots()
Matplotlibで日本語を使えるようにする方法の中で,下記 コード17 は外部ライブラリを用いる方法です。3つあるコードのうち,1つ目がインストール,2つ目が読み込みのためのコードです。ここまでで日本語を使うことができなかったら,3つ目の 日本語フォントのための付加的なコード も実行してください。
コード 17a
!pip install japanize-matplotlib
コード 17b
import japanize_matplotlib
コード 17c
plt.rcParams["font.family"] = "Hiragino Maru Gothic Pro"
plt.rcParams["font.family"] = "IPAexGothic"
下記 コード18 は,書籍 p.112 図8.1 の散布図を表示するコードです。
コード 18
g = np.array([3, 4, 5, 5, 6, 7, 7, 8])
h = np.array([2, 4, 4, 6, 5, 5, 7, 9])
plt.scatter(g, h)
plt.title("図タイトル")
plt.xlabel("X軸ラベル")
plt.ylabel("Y軸ラベル")
plt.show()
8.2.2 データの探索
コード19 は,pyplot
に続けて,ペンギンデータセットの入った可視化ライブラリ seaborn
を読み込みます。
コード 19
import matplotlib.pyplot as plt
import seaborn as sns
コード20 は,ペンギンデータセットを読み込んでデータを確認する例です。
コード 20
df = sns.load_dataset("penguins")
df.head()
コード21 は,データ情報を得る別の方法です。
コード 21
df.info()
コード22 では,ペンギンデータセットの2つの文字列データについて調べています。
コード 22
print(df["species"].unique())
print(df["island"].unique())
8.2.3 量的変数の関係の可視化: 散布図
ペンギンのヒレの長さと体重の散布図をつくるコードが下記 コード23 です。
コード 23
X = df["flipper_length_mm"].values
Y = df["body_mass_g"].values
plt.scatter(X, Y)
コード24 のようにして,ドットの色を変えたり,図タイトルや軸ラベルを加えたりしています。図8.2のような散布図ができましたか?
コード 24
plt.scatter(X, Y, color = "darkviolet")
plt.title("ペンギンデータセットのヒレとくちばしの散布図")
plt.xlabel("ヒレの長さ [mm]")
plt.ylabel("体重 [g]")
Figure 8.2 散布図
8.2.4 グループの比較のための可視化: 箱ひげ図と棒グラフ
コード25 は,書籍 p.116 の図8.3をつくる箱ひげ図のコードです。
コード 25
fig, ax = plt.subplots(2, 2)
sns.boxplot(data = df, x = "species", y = "bill_length_mm",
ax = ax[0, 0]).set_title("種別・くちばしの長さ")
sns.boxplot(data = df, x = "species", y = "bill_depth_mm",
ax = ax[0, 1]).set_title("種別・くちばしの縦の長さ")
sns.boxplot(data = df, x = "species", y = "flipper_length_mm",
ax = ax[1, 0]).set_title("種別・ヒレの長さ")
sns.boxplot(data = df, x = "species", y = "body_mass_g",
ax = ax[1, 1]).set_title("種別・体重")
plt.tight_layout()
Figure 8.3 箱ひげ図
コード26 は,島別・種別の棒グラフをつくるコードです。書籍 p.116 の図8.4をつくります。
コード 26
sns.catplot(df, x = "island", hue = "species", kind = "count")
Figure 8.4 島別・種別度数の棒グラフ
コード27 は,カーネル密度曲線でジェンツー種のペンギンの体重をオス・メスで比べるもので,書籍 p.117 の図8.5をつくります。
コード 27
df2 = df[df["species"] == "Gentoo"]
sns.kdeplot(df2, x = "body_mass_g", hue = "sex")
Figure 8.5 ジェンツーのオス・メス体重分布図
8.2.5 Python と SQL の連結
下記の コード28 は,標準ライブラリに含まれている sqlite3
モジュールを読み込んで,PythonとSQLiteを接続するコードです。これは第7章で作成したdbファイルを trial.db
という名前で保存し,それをColab Notebooksの data
ディレクトリに入れておいた場合のコードです。
コード 28
import sqlite3
import pandas as pd
conn = sqlite3.connect("/content/drive/MyDrive/Colab Notebooks/data/trial.db")
下記の コード29 は,接続を切るコードです。
コード 29
conn.close
© Chikako Takeishi. Designed by Chikafumi Nakamura. All Rights Reserved.