Lesson 10

有名なライブラリ

Lesson 10 Chapter 1
はじめに

このレッスンではPythonで使用される有名なライブラリについて紹介していきます。ここで紹介するライブラリは主にAI機械学習・データ分析の分野で使用されることが多いです。 基本的なデータ操作としての便利な機能が備わっていますので、これらの分野に携わらない方も学んでおくと良いでしょう。 また、ここでは Google Colaboratoryという環境で実行していますので、こちらも実際に手を動かして基本的な使い方を学んでいきましょう。

Lesson 10 Chapter 2
Numpy

NumPyは、高速で計算をする際に使用されるライブラリです。配列や行列の演算、統計処理を簡単に行うことができます。Google ColaboratoryでNumPyを使用するためには、以下のようにインストールします。

!pip install numpy

これにより、NumPyがGoogle Colaboratory上にインストールされます。次に、NumPyをインポートします。

sample.py
import numpy as np

asとはモジュール名を改名する役割を持ち、numpynpという名前に改名しています。必ず改名する必要はなく、 np以外の自由な名前に改名することも可能です。ですが、ここでは一般的な npという改名で進めていきます。

これでNumPyを使用するための準備が整いました。

配列の操作と演算

NumPyには通常のPythonの配列とは別に、配列や行列を扱うためのndarrayというクラスがあります。このクラスを使用することで、Numpyで配列や行列を扱うことができます。

配列を作成する方法には複数ありますが、以下はリストからndarrayを作成する方法の一例です。

sample.py
# リストからndarrayを作成
a = np.array([1, 2, 3])

print(type(a))
print(a)

出力結果

<class 'numpy.ndarray'>
[1 2 3]

変わらず、配列としての性質を持ちますが、通常のList型ではなくnumpy.ndarray型になっていることが確認できます。

以下は、2次元配列を作成する方法の一例です。

sample.py
# 2次元配列を作成
b = np.array([[1, 2], [3, 4]])
print(b)

出力結果

[[1 2][3 4]]

これらのndarrayは配列や行列の演算をするための、様々な関数が用意されています。以下は、行列の積を計算する例です。

sample.py
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.dot(a, b)
print(c)

出力結果

[[19 22][43 50]]

このように通常のPythonの演算では表現が困難な「行列乗算」もdot()関数を利用することで簡単に計算結果を求めることが出来ます。

また、統計処理や配列の演算に便利な関数も用意されています。以下は、配列の平均値を計算する例です。

sample.py
a = np.array([1, 2, 3, 4, 5])
mean = np.mean(a)
print(mean)

出力結果

3.0

多次元配列の構造を確認する

配列の要素数,形状に関する情報も取得することもできます。以下は、配列の行列数を取得する例です。

sample.py
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)

出力結果

(2, 3)

出力結果からaという配列は、2行3列で構成された二次元配列ということが確認できます。 Numpy自身は、Pythonより処理が高速な"C言語"というプログラミング言語によって実装されており、大量のデータを短時間で処理できることが特徴です。配列や行列の演算や統計処理を行う際にはNumPyを使ってみましょう。

Lesson 10 Chapter 3
Pandas

Pandasは主に、データ分析や処理に利用されます。データの読み込み、表示、データの集約ができます。また様々なデータソースを扱うことができ、主にCSV形式のデータやExcel形式のデータを扱います。 Pandasで扱うデータ構造として"DataFrame"と"Series"があります。 DataFrameは複数の行と列を持つ2次元のデータを表現します。Excelのシートと似た構造であり、CSVファイルやExcelファイルから読み込むことができます。一方、Seriesは1行または1列の一次元データで、DataFrameの単一の行または列として扱います。

それでは実際にPandasを利用するための準備をしていきましょう。以下のコマンドでインストール出来ます。

!pip install pandas

補足としてPandasはNumpyに依存しているため、Pandasインストール時にNumpyも一緒にインストールされます。次に、Pandasをインポートします。

sample.py
import pandas as pd

ここでもNumpy同様に、一般的なpdという改名で進めていきます。これでPandasを使用するための準備が整いました。

ファイルを読み込む

Pandasでは様々なデータ形式のファイルを読み込むことが出来ますが、まずエクセルファイルを読み込んでみましょう。
このチャプターで利用するエクセルファイルの中身は以下のテーブルが記載されています。
Excelファイルをダウンロード

pd01.png

Pandasでエクセルファイルを取り込み、出力してみましょう。読み込むにはread_excel()関数を使用します。

sample.py
import pandas as pd

df = pd.read_excel("pandas.xlsx")
print(df)

出力結果

Unnamed: 0    名前  年齢  性別       趣味
0                1    太郎  20   男     サッカー
1                2    次郎  18   男       野球
2                3    三郎  15   男      バスケ
3                4    花子  25   女       読書
4                5  パイソン  33  不明  プログラミング

このように自動でテーブルを認識して、表として出力されている事が確認できます。また、read_csv()関数にてcsvファイルも読み込むことが出来ます。

以下のCSVファイルを使用して確認してみましょう。
CSVファイルをダウンロード

pd02.png

sample.py
df = pd.read_csv("pandas.csv")
print(df)

出力結果

     名前  年齢  性別       趣味
0    太郎  20   男     サッカー
1    次郎  18   男       野球
2    三郎  15   男      バスケ
3    花子  25   女       読書
4  パイソン  33  不明  プログラミング

このように、自動で行のインデックス番号や列のカラム名を認識して表示していることが確認できます。次はこれらのデータをベースに、条件によって出力するデータを絞って見ましょう。

条件からデータを抽出する

それでは、先程使用したpandas.xlsxファイルを使用してデータの抽出をしていきましょう。まずは、列名(カラム名)を指定してみます。

sample.py
df = pd.read_excel("pandas.xlsx")
column = df["名前"]
print(column)

出力結果

0      太郎
1      次郎
2      三郎
3      花子
4    パイソン
Name: 名前, dtype: object

"名前"というカラムを認識して、それに属するデータを抽出する事ができました。ここから更にインデックスを指定して、"次郎"というデータのみを指定してみましょう。
方法としては、"名前"というカラムのインデックス番号"1"を指定します。

sample.py
〜省略〜
data = df["名前"][1]
print(data)

出力結果

次郎

インデックスの注意点として、Pythonの配列のインデックスと同じように"0"から開始している点に注意してください。
では次に、行を指定してそのレコードを取得してみましょう。こちらはデータフレームに対して.loc[行番号]という方法で指定することが出来ます。ここでは"三郎"のレコードを取得します。

sample.py
〜省略〜
row = df.loc[2]
print(row)

出力結果

Unnamed: 0      3
名前             三郎
年齢             15
性別              男
趣味            バスケ
Name: 2, dtype: object

このように各カラムに対するデータが一覧で取得できていることが確認できます。また、こちらもカラム名も一緒に指定することで、特定のデータのみを取得することが出来ます。

sample.py
〜省略〜
data = df.loc[2]["名前"]
print(data)

出力結果

三郎

以上がPandasのデータフレームを使用した、基本的なデータの抽出方法になります。最後に、実際に抽出したデータの集計方法について学んでいきましょう。

抽出したデータの集計

ここでもpandas.xlsxファイルを元にデータの集計を行っていきます。まずは、全員の合計年齢,平均年齢,データの個数を求めてみましょう。

sample.py
〜省略〜
total_age = df["年齢"].sum()
mean_age = df["年齢"].mean()
mean_age = df["年齢"].count()
print(total_age)
print(mean_age)

出力結果

111
22.2
5

このように各数値を簡単に求めることが出来ます。また、通常の演算子を使用した計算も出来ます。以下は"太郎"と"次郎"の年齢差を求める例です。

sample.py
〜省略〜
diff_age = df.loc[1]["年齢"] - df.loc[2]["年齢"]
print(diff_age)

出力結果

3

このようにPandasでは、テーブル形式でデータを管理するRDBと同じデータ操作をすることが可能です。

以上がPandasに関する基本的な説明と使い方です。ここで紹介した機能はほんの一部分ですが、これらの機能を使用することで効率的なデータ分析を行うことができます。実際に使ってみて、データ分析のスキルを向上を目指してみましょう。

Lesson 10 Chapter 4
matplotlib

Matplotlibは主にデータの視覚化や分析、研究に使用されるグラフ描画ライブラリです。2次元グラフ、3次元グラフ、円グラフ、ヒストグラムといった様々なタイプのグラフを描画することができます。

それでは実際にMatplotlibを利用するための準備をしていきましょう。以下のコマンドでインストール出来ます。

!pip install matplotlib

Pythonでのインポートは以下のように記述します。

sample.py
import matplotlib.pyplot as plt

こちらも一般的な改名であるpltという名称で進めていきます。そして、Matplotlibではグラフの元データとなる配列が必要となります。

折れ線グラフの描画

まずは一般的なplot()関数を使用して折れ線グラフを描画してみましょう。グラフの元データと記述方法については以下の通りです。

sample.py
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)

出力結果

plt01.png

配列xをX軸、配列yをY軸、としてグラフが描画されている事が確認できます。また、各軸のラベル名やグラフのタイトルも設定することが出来ます。

sample.py
〜省略〜
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.title('line plot')
plt.plot(x, y)

出力結果

plt02.png

このようにタイトルや軸の名称が表示されます。注意点として、標準では日本語は文字化けを起こしてしまいます。これを解消するには別途モジュールをインポートしたり、フォントの設定が必要となりますので必要となればそちらも調べてみてください。

散布図の描画

散布図を描画するにはscatter()関数を使用します。先程のデータでは情報が少ないので、今回はrandomというモジュールを使用して、元データを生成します。

sample.py
import matplotlib.pyplot as plt
import random

x = [random.randint(0, 100) for i in range(1000)]
y = [random.randint(0, 100) for i in range(1000)]
plt.scatter(x, y)

出力結果

plt03.png

元データは0~100の整数値をランダムに1000個配列に格納した物となっており、まんべんなく点が描画されている事が確認できます。

棒グラフの描画

棒グラフを描画するにはbar()関数を使用します。1〜10の整数が昇順に格納されているxに対して、0〜100のランダムな整数が10個格納されているyを元データとした棒グラフになります。

sample.py
x = [i + 1 for i in range(10)]
y = [random.randint(0, 100) for i in range(10)]
plt.bar(x, y)

出力結果

plt04.png

ヒストグラムの描画

ヒストグラムを描画するにはhist()関数を使用します。こちらは少し特殊で、ヒストグラムに必要なビンをbinsと呼ばれる引数に設定する必要があります。今回は、ビンを格納したxと、ビンの範囲内でランダムに生成される各データを格納したyを元データとして使用します。

sample.py
x = [i + 1 for i in range(100)]
y = [random.randint(0, 100) for i in range(1000)]

plt.hist(y, bins=x)

出力結果

plt05.png

このようにyに格納された各整数値の個数がヒストグラムとして描画されていることが確認できます。

以上が、NumPy、Pandas、Matplotlibの基本的な使い方についての説明となります。これらのライブラリを使用することで、より効率的かつ簡単にデータ分析やグラフ作成タスクを行うことができるようになります。機械学習の分野を学ぶ際に使いこなせるよう頑張りましょう。