はじめに
今回は Udemy で Python のデータサイエンス入門をやったので、その内容を記事にまとめました。
- 受講した Udemy のコース
【ゼロから始めるデータ分析】 ビジネスケースで学ぶ Python データサイエンス入門
Udemy のコースの内容は、3つの記事に分けて投稿します(今回は、その1)。
その1. Amazon SageMaker の環境構築、事前準備、基礎分析と可視化について ←【本稿】
その2. 線形回帰を用いたお弁当の売り上げ予測
その3. 決定木を用いた銀行の顧客ターゲティング
※ Udemy では Anaconda を使用してますが、自分は Amazon SageMaker を使用しました。
※環境構築についても Amazon SageMaker を使用した手順を記載します。
本稿の内容
- Amazon SageMaker で Python を使うための環境構築
- 利用するデータのダウンロードと Jupyter にアップロード
- 使用する Python の基本コードについて紹介
本稿は Python 未経験の方でも、進められる内容となっております。
前提
環境構築
Amazon SageMaker で環境構築
Amazon SageMaker でノートブックインスタンスを作成し、Jupyter を開いて、フォルダの作成をします。
![02.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F9390cb35-82ec-f361-a353-b190ce473a3e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=035d4816da11b6d74574a729bc42003b)
- 右上のノートブックインスタンスの作成を選択。
![03.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Face5e78d-f254-3774-8645-e2249346610e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=801573366805e72b9661d7192c01694a)
- ノートブックインスタンス名を入力(インスタンス名は任意)
![04.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F01e9eed7-90c2-5ca3-0648-928bfd77ce80.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0b4d94d8dee3a47075252706bf6892e9)
- 下にスライドして、上の赤枠の部分を選択して、新しいロールの作成を選択。
![05.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fb51137c6-8778-562a-b3f6-3f50e7d2426a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=cd514e7f933399febb23287293ad2054)
- 任意の S3 バケットを選択し、ロールの作成を選択します。
※今回は任意の S3 バケットを選択していますが、実際に運用する際は適切な IAM ロールを設定して下さい。
![06.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F61c5db44-47cd-e465-b4f6-ee0ae8092711.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6665accea1935934234d248e8102be94)
- 赤枠のように表示されたら IAM ロールの作成は成功です。
![07.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fb41dec27-393d-27df-09a9-8956e3392622.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=77b069789222da2313c5c42f25361ecb)
- 下にスライドして、ノートブックインスタンスの作成を選択。
![08.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Faaf23425-ea75-8d93-1501-81a4a6af2f4a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=42e778f39c5171ca218091841e15710d)
- 画像上部の赤枠のように表示されたらノートブックインスタンスの作成は完了です。
ステータスが「 Pending 」 → 「 InService 」 になるまで待ちます。
![09.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F27fecd7c-e779-1ec6-0bee-847ec01e1ac4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=28c3bdfc5341b8fa7d0900424bd93ea9)
- ステータスが InService になったら、開く Jupyter を選択して Jupyter を開きます。
![10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F38a2eaa4-3d55-7056-9c9e-ffffa2a846f4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b140193c21f2487203e70cf3e155cae0)
- Jupyter が開けたら、この後ダウンロードしたデータを保存するフォルダを作成します。
Newを選択。
![11.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F2ea2a072-8545-ed1d-0b18-2338880af423.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1da2c7b48826eca0625cc59bea3622fe)
- Folder を選択。
![12.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F461bc1d8-cddb-92e9-6b4d-c2adce71575c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b86074cd2f3979f7cb883ce14c905180)
- 作成したフォルダを選んで、Rename を選択。
![13.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fd29e25ef-e577-9b4f-8338-a4d6ed4e99db.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2dbccf6f7b076c3c187f2a95d50c97a1)
- 名前は case1 として、Rename を選択。
![14.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fddd7cb89-c279-9a2f-4620-8c738158a152.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9eaff2e770e4a0693c9c0aeae9c8ae3b)
- これでフォルダができました。case2 のフォルダも同様に作っておきます。
![15.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F8d3bb883-1217-70ed-87b2-fdca25adee85.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=479013eeb9d4d99d1cb8fa8a9c8ed1b4)
データの準備
データをダウンロードして Jupyter にアップロードします。
データのダウンロード
-
SIGNATEにアクセスする。
アクセスするとこのような画面が出るので、右上のConpetitionsを選択します。
![16.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fc82c5404-be3d-d4b6-d601-372f36ccf302.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=441426bb539b48abb9c82f13741030ea)
- 練習問題を選択。
![17.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F4e22e272-3731-2795-200b-2948877c440c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=db6656f6918a94bd6e9630697043165d)
- 一番下までスクロールするとお弁当の需要予測と銀行の顧客ターゲティングが出てくるので、それらのデータをダウンロードします。
まず、お弁当需要予測からデータをダウンロードするので、お弁当需要予測を選択。
![18.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fd9bc9bdf-5f47-be22-a1c3-497b19ed4a27.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c349b1096795b65c0f143a2e083ed26f)
- データを選択。
![19.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fe6eb4cf9-255c-9c6c-a35f-86822f143f92.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3da0cb43fa211e1638c12617b7946edb)
- 下にスライドして、赤枠で囲んだ中の3つのファイルをダウンロードしてください。
![20.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fe4192474-87fc-7a79-cb31-6af271fd9290.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1a07baccb32c1a50257b26dabd1ad014)
- 銀行の顧客ターゲティングについても同様にデータをダウンロードしてください。
![21.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fb0c68a1f-32af-25d3-a26e-9ac221fc19ce.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dd6ac7e44216199d7b55e76bd97033c0)
![22.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Fa2add3fd-bdbc-a053-6423-834743cb2d7f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=17e0bb0590641e287fb5b9e539ecf46f)
Jupyter にデータをアップロード
- 先ほど Jupyter に作成した case1 フォルダにお弁当需要予測、case2 フォルダに銀行の顧客ターゲティングのデータをアップロードします。
- Uploadからダウンロードしたデータをアップロードします。
![24.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Ffa49d6eb-1956-2bbb-85fb-a2e214bcdc85.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dbe9ea7f7693b6dd0303fac7d824932f)
- ファイルを開くとこのようになるので、それぞれUploadを選択します。
![25.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2Ffeb6522e-e1b4-c1b9-c177-1003a426ffad.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e28c55a914646c1687ce933b33a3223a)
- これで、Jupyterにデータをアップロードできました。
case2のフォルダにも同様に銀行の顧客ターゲティングのデータをアップロードします。
![26.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F390035%2F1cd0017e-f547-1feb-a0dd-06f0d8306638.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9ca7d203cbf083f9e4e8307e0b411c59)
Python コードの紹介
本コースで使用した主要な Python コードをまとめました。
この内容を実際に実行したい場合は、先ほど作成したcase1フォルダ内にnotebookをconda_python3で作成して実行してください。
モジュールのインポートと設定
- データ解析を支援する機能を提供するライブラリ。
import pandas as pd
- 数値計算を効率的に行うためのライブラリ。
import numpy as np
- Python およびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリ。
from matplotlib import pyplot as plt
- Jupyterのnotebook上で画像や図を表示するためのおまじない。
%matplotlib inline
データ(csvファイル)の読み込み
- train.csvを読み込んでtrainに格納する。
train = pd.read_csv("train.csv")
データの表示
- データの先頭を表示。
train.head()
- データの末尾を表示。
train.tail()
- データの行数と列数を表示。
train.shape
- 基本統計量の表示。
train.describe()
- データの情報の確認。
train.info()
- 1つのカラム(列)だけ表示。
trainのy列を表示。
train["y"]
- 複数のカラムを表示。
trainのy、week、temperature列を表示。
train[["y","week","temperature"]]
- データの平均値を表示。
trainのy列の平均を表示。
train["y"].mean()
- データの中央値を表示。
trainのy列の中央値を表示。
train["y"].median()
- 指定した範囲の表示。
trainのy列の値が150以上のデータを表示。
train[train["y"]>150]
- trainのweek列が月のデータを表示。
train[train["week"] == "月"]
- データを昇順、降順で表示。
trainをy列で昇順、降順で表示。
train.sort_values(by="y") #昇順
train.sort_values(by="y",ascending=False) #降順
データをグラフで表示
- 折れ線グラフを表示。
trainのy列を折れ線グラフで表示。
train["y"].plot()
- グラフの大きさを調節。
train["y"].plot(figsize=(12,4))
- グラフにタイトルとx、y軸のラベルを追加。
一度タイトルを付けたグラフを変数に格納し、その後ラベルを追加する。
ax = train["y"].plot(title="test")
ax.set_xlabel("time")
ax.set_ylabel("y")
- ヒストグラムを表示。
trainのy列をヒストグラムで表示。
train["y"].plot.hist()
- ヒストグラムにグリッド線を追加。
train["y"].plot.hist(grid=True)
- ヒストグラムに平均値を表す赤の垂直線を表示。
線を表示した後で、グラフを表示する。
plt.axvline(x=train["y"].mean(),color="red")
train["y"].plot.hist()
- ヒストグラムをpngファイルとして保存。
- ヒストグラムをsample_fig.pngとして保存。
plt.axvline(x=train["y"].mean(),color="red")
train["y"].plot.hist(figsize=(12,4),title="histogram")
plt.savefig("sample_fig.png")
- 箱ひげ図を表示。
yとweekを選択して、x軸にしたいカラムをboxplot(by="")で指定する。
train[["y","week"]].boxplot(by="week")
欠損値の処理
- 欠損値があるか確認。
欠損値の場合、Trueと表示される。
train.isnull()
- 各カラム(列)に欠損値があるかどうか確認。
Trueなら欠損値があるということ。
train.isnull().any()
- 各カラム(列)にいくつ欠損値があるか確認。
train.isnull().sum()
- 欠損値を0で補間。
train.fillna(0)
- 欠損値がある行を削除。
train.dropna()
- ある列に欠損値があった場合のみ、その行を削除するにはオプションのsubset=[]で列を指定できる。
kcal列に欠損値がある行を削除。
train.dropna(subset=["kcal"])
- 列の中の値がそれぞれいくつあるか表示。
soldout列の中の値がいくつあるか表示する。
train["soldout"].value_counts()
相関関係を調べる
- 相関係数の表示。
trainのy列とtemperature列の相関関係数を表示する。
train[["y","temperature"]].corr()
- 散布図で相関係数を調べる。
trainのy列とtemperature列の散布図を表示。
オプションとしてx=、y=でグラフに出力するデータを指定。 figsize=(,)でグラフのサイズを指定
train.plot.scatter(x="temperature",y="y",figsize=(5,5))
おわりに
本稿の内容は以上です。
その2では実践編として、線形回帰を用いたお弁当の売り上げ予測についてまとめていきますので、よろしくお願いします。