Pythonでデータ分析する次の一歩(実行環境、Jupyter Notebook編)

| Topic path: Top / 機械学習 / Pythonでデータ分析する次の一歩(実行環境、Jupyter Notebook編)

*はじめに [#a1c5f28b]
*目次 [#ya4da2dc]
#contents

ここでは、Pythonでデータ分析を行うために必要な、基本的なことを説明します。

pandasはデータを扱うためのライブラリー、scikit-learnは機械学習のためのライブラリー、Jupyter Notebookは、Pythonの実行環境です。
*はじめに [#a1c5f28b]

scikit-learnは、数値計算のためのライブラリーであるNumPyを使います。

そこで、ここでは、Jupyter Notebook、NumPy、pandas、scikit-learnを使うにあたって、最初に知っておくと良いことを説明します。



*Jupyter Notebook [#a4302dac]

Jupyter Notebookは、Pythonの実行環境です

Jupyter Notebookを起動すると、ローカルにWebサーバーが起動し、Pythonを実行するためのWebページが生成されます。
Webブラウザで、このページにアクセスし、Pythonを実行します。

Pythonはインタープリター方式なので、コンパイラー形式のC言語やJavaのようにプログラムを最初から最後まで全部作って実行するのではなく、少しずつプログラムを作って実行することができます。

Jupyter Notebookを使うと、少しずつプログラムを作って実行しやすいので、Pythonプログラムがものすごく作りやすくなります。


*画面 [#m5e4e7dc]
&ref(./Jupyter_Notebook.png,50%,nolink);

上のように、Jupyter Notebookは、セルと呼ばれる区画に分けてプログラムを記述します。

プログラムをセルごとに実行します。
セルを削除したり、連続したセルを一つに結合したり、セルの順序を入れ替えたり、途中にセルを追加することができます。

Jupyter Notebookで作成したプログラムは、この状態でも保存できますし、Pythonのプログラムとして書き出すこともできます。



*NumPy [#mf7338a7]

NumPyは、数値計算のためのライブラリーです。

機械学習のためのライブラリーであるscikit-learnはNumPyを使いますので、NumPyを少し理解しておかないと、scikit-learnが使えません。

NumPyの基本は、配列です。

NumPyの配列は、numpy.ndarrayというクラスで表されます。
n次元配列 (n-dimensional array) という意味です。

**配列を作る [#u04a1960]
配列は、numpy.arrayで作ります。
#geshi(python){{
import numpy as np
a = np.array([1, 2 ,3, 4, 5, 6, 7, 8])
a
}}
#geshi(txt){{
array([1, 2, 3, 4, 5, 6, 7, 8])
}}


**配列の要素数を調べる [#p1e4c34d]

配列の要素数は、numpy.ndarrayのshape属性に格納されています。
#geshi(python){{
a.shape
}}
#geshi(txt){{
(8,)
}}

numpy.ndarrayのshape属性はタプルなので、数値で取り出すには、要素番号を指定します。
#geshi(python){{
a.shape[0]
}}
#geshi(txt){{
8
}}


**配列の形を変える [#ec3c0207]

配列の形を変える(例えば、全体の要素数を変えないで二次元配列にする)には、numpy.reshape関数またはnumpy.ndarrayのreshape関数を使います。
#geshi(python){{
np.reshape(a, (2, 4))
}}
#geshi(txt){{
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
}}

#geshi(python){{
a.reshape((4, 2))
}}
#geshi(txt){{
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
}}

三次元配列にもできます。
#geshi(python){{
np.reshape(a, (2, 2, 2))
}}
#geshi(txt){{
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])
}}

要素数が合わないと、エラーになります。
#geshi(python){{
a.reshape((4, 1))
}}
#geshi(txt){{
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-19-7c07ecbec7bf> in <module>()
----> 1 a.reshape((4, 1))

ValueError: cannot reshape array of size 8 into shape (4,1)
}}

要素数に-1を指定すると、配列全体のサイズに合わせて調整してくれます。
#geshi(python){{
a.reshape((4, -1))
}}
#geshi(txt){{
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
}}

**二次元配列の要素を取り出す [#w9406008]
説明のため、二次元配列を用意します。
#geshi(python){{
m = a.reshape((2, -1))
m
}}
#geshi(txt){{
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
}}

要素を取り出すには、取り出したい要素の行番号と列番号を指定します。
#geshi(python){{
m[0, 1]
}}
#geshi(txt){{
2
}}


**二次元配列の行を取り出す [#dee1f720]

行を取り出すには、行番号に取り出したい行の行番号を指定し、列番号には全てを表す : を指定します。
#geshi(python){{
m[0, :]
}}
#geshi(txt){{
array([1, 2, 3, 4])
}}

**二次元配列の列を取り出す [#m413d6ec]

列を取り出すには、行番号に全てを表す : を指定し、列番号には取り出したい列の列番号を指定します。
#geshi(python){{
m[:, 1]
}}
#geshi(txt){{
array([2, 6])
}}

**二次元配列の行を追加する [#iceadf2e]

行を追加するには、np.vstack関数に、同じ列数の二次元配列をタプルで指定します。
#geshi(python){{
np.vstack((m, m, m))
}}
#geshi(txt){{
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [1, 2, 3, 4],
       [5, 6, 7, 8],
       [1, 2, 3, 4],
       [5, 6, 7, 8]])
}}


**二次元配列の列を追加する [#b1fbb5a5]

列を追加するには、np.hstack関数に、同じ行数の二次元配列をタプルで指定します。
#geshi(python){{
np.hstack((m, m, m))
}}
#geshi(txt){{
array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
       [5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8]])
}}



*pandas [#p09db3ef]

pandasはデータを扱うためのライブラリーです。

pandasの基本は、データフレーム (DataFrame) と呼ばれるデータ構造です。

データフレームは、二次元配列の行と列にインデックスが付いたもので、pandas.DataFarameクラスで表されます。



**データフレームを作る [#f2f3a3c6]

データ分析をするときはデータをファイルから読み込むことになりますが、pandasには、read_csv関数というCSVファイルを読み込んでデータフレームを作ってくれる関数があります。

例えば、次のような data.csv という名前のCSVファイルを考えてみましょう。
#geshi(csv){{
,X1,X2,X3,Y
1,0.1,1.0,1.2,+
2,0.2,0.9,0.8,-
3,0.1,0.9,1.1,+
4,0.3,0.8,1.0,-
}}

これを読み込んでデータフレームを作るには、次のようにread_csv関数を使います。
#geshi(python){{
df = pd.read_csv('data.csv', index_col=0)
}}
index_colオプションは、行(データ)のインデックスを表す列番号を指定します。

すると、見出し(インデックス)付きの表の形になります。
#geshi(python){{
df
}}
||X1|X2|X3|Y|h
|~1|0.1|1.0|1.2|+|
|~2|0.2|0.9|0.8|-|
|~3|0.1|0.9|1.1|+|
|~4|0.3|0.8|1.0|-|


**行のインデックスを取り出す [#faf428fe]

データフレーム・オブジェクトのindex属性に、行のインデックス・オブジェクトが格納されています。
#geshi(python){{
df.index
}}
#geshi(txt){{
Int64Index([1, 2, 3, 4], dtype='int64')
}}

インデックス・オブジェクトのvalues属性には、インデックスの値がnumpy.ndarrayで格納されています。
#geshi(python){{
df.index.values
}}
#geshi(txt){{
array([1, 2, 3, 4])
}}

**列のインデックスを取り出す [#i221162d]

データフレーム・オブジェクトのcolumns属性に、列のインデックス・オブジェクトが格納されています。
#geshi(python){{
df.columns
}}
#geshi(txt){{
Index(['X1', 'X2', 'X3', 'Y'], dtype='object')
}}

行のインデックスと同様に、インデックス・オブジェクトのvalues属性には、インデックスの値がnumpy.ndarrayで格納されています。
#geshi(python){{
df.columns.values
}}
#geshi(txt){{
array(['X1', 'X2', 'X3', 'Y'], dtype=object)
}}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS