継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Python の基礎力を証明する「Python3 エンジニア検定」を受験した

タダです。

5/11 に「Python3 エンジニア検定」を受験し,合格しました.受験前の勉強ログは,note に書きましたが今回は受験の振り返りをします.受験を考えている方や興味ある方が何か参考になれば嬉しいです.

note.mu

試験結果の振り返り

700 点の合格ラインに対し 750 点でした.ギリギリ合格ですw 分野別の得点率も出るのですが次の通りです. 5,6,9,11がイマイチですね...勉強し直します.

該当章 獲得率
1章 食欲をそそってみようか 100%
2章 Pythonインタープリタの使い方 100%
3章 気楽な入門編 100%
4章 制御構造ツール 67%
5章 データ構造 57%
6章 モジュール 50%
7章 入出力 100%
8章 エラーと例外 100%
9章 クラス 50%
10章 標準ライブラリめぐり 75%
11章 標準ライブラリめぐり─PartII 0%
12章 仮想環境とパッケージ 100%
14章 対話環境での入力行編集とヒストリ置換 100%

勉強法の振り返り

勉強法は,公式テキストのオライリー本を出題率の高い章を重点的に繰り返し読みました.GW中に受験日を決めて勉強し始めたので網羅的に本を理解するより得点率の高いところを狙う戦略でした.出題の割合が高いのは3,4,5,8,10章なので結果的には取りこぼしたものもあったものの,割合高い分野を中心に勉強して合格できたので戦略としてよかったのかなと思います.

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版

また,プログラム言語の試験なので如何に本に書いている Python コードを実践した かが鍵ですね.僕は試験に近づくにつれてコードを書く時間が少なくなっていったので受験を考えている方は受験日に向けて手を動かして臨むことオススメします.

模擬試験

模擬試験は受験せずに終わりました.合格しましたが受験してみたかったので後日受験してみます.

diver.diveintocode.jp

次に受験したい試験

今年の夏にデータ分析試験がリリースされるとのことなので受験してみたいと思っています.リリース情報は 公式サイト,Twitter,Facebookなどで公開されるそうなので要チェックです.

www.pythonic-exam.com

公式サイト

www.pythonic-exam.com

Twitter

twitter.com

Facebook

www.facebook.com

まとめ

Python3 エンジニア検定」を受験した結果と勉強したことの振り返りました.普段業務で Python を扱わない僕で 約20時間 ほど勉強時間に充てました.今年の夏にリリースされるデータ分析試験にも臨みたいので引き続き Python の勉強を続けていきます!

参考情報

受験に関して以下にまとめます.

「【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門」で扱ったデータ分析のコーディング手法をまとめる

タダです。

この記事は「後回し改善ウィーク」の3日目の記事です。機械学習やデータ分析の勉強目的で Udemy で購入したまま進んでなかった「【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門」に取り掛かっています。

Python の文法やデータ解析で使うライブラリやコーディングを学び、Kaggle 日本語版である SIGNATE の練習問題を解いてコンペに参加するのが本講座の特徴です。また、数式や論文も使わないため初学者の方にとっても取っ掛かりやすいのも良いポイントです。

www.udemy.com

signate.jp

この記事では、これから SIGNATE や Kaggle に挑んでいきたいため、本講座で学んだ Python でのデータ分析に用いたコーディングをまとめて知識を整理します。

開発環境の紹介

開発環境は、 Anaconda を導入して行います。このツールを入れることで、データ解析としてスターダードな JupyterNotebook や Python の各種数理ライブラリも既に入っているので導入後即座に開発できる状況です。

利用したライブラリについて

本講座で扱ったデータ解析のためのライブラリは、以下のものになります。それぞれのライブラリで使った処理別にまとめていきます。

  • numpy
  • pandas
  • matplotlib
  • scikit-learn
    • LiniearRegression
    • DecisionTreeClassifier

CSVの読み出し / 書き出し

データが入ったCSVを読み出したりするときは、pandas を使います。

import pandas as pd

# 読み出し(ヘッダー情報を無しにしたい場合はオプションを指定)
sample = pd.read_csv("sample.csv", header=None)

# 書き出し(ヘッダー情報やインデックスを無しにしたい場合はオプションを指定)
sample.to_csv("sample2.csv", header=None, index=None)

データの中身を確認する

データの中身を確認する方法はいくつかあります。

# 先頭5行を表示する
sample.head()

# 最終5行を表示する
sample.tail()

# 行数と列数を確認する
sample.shape

# 基礎統計量を確認する
sample.desctibe()

# データの型を確認する
sample.info()

データの最大値、平均値、最小値を確認する

データの最大値、平均値、最小値を確認する際は、max()、mean()、min() で行います。

# sample の中にある test のデータの最大値を確認する
sample["test"].max()

# sample の中にある testのデータの平均値を確認する
sample["test"].mean()

# sample の中にある testのデータの最小値を確認する
sample["test"].min()

グラフの描画

データの可視化として、グラフを描画するのに役立つのがmatplotlibです。以下のコード例では、デフォルトの折れ線グラフを表示する例ですが、この他にヒストグラムや箱ひげ図、グリッド線の描画も可能です。

import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline

sample = pd.read_csv("sample.csv")

# y のデータを描画
sample["y"].plot()

# y のデータを描画して横12インチ、縦4インチのサイズのテストと言うグラフを描画
sample["y"].plot(figsize=(12,4), title="テスト")

データの欠損値を確認し、補完する

データの中には、データが欠損しているものがあり、これを確認し、補完するテクニックも学びました。データ操作において影響を及ぼすため、まずはその有無を確認し、欠損値を補います。

# 欠損値の有無の確認
sample.isnull()

# 欠損値がない列の確認
sample.isnull().any()

# 欠損値の合計数の確認
sample.isnull().sum()

# 欠損値の補完(以下の例では欠損値を0で補完している)
sample.fillna(0)

# 欠損値補完後の値の確認
sample.value_counts()

データのモデルを作り、予測する(単回帰、重回帰)

単回帰の場合と、重回帰の場合にわけて、処理の流れをまとめます。単回帰は、説明変数が1つで、重回帰は説明変数が2つ以上の場合の回帰になります。2つの処理の違いで異なるのは、重回帰の場合、質的データ(天候、性別など数字に表現しないデータ)をダミー変数化して数値データで扱えるようにするところにあります。

単回帰の場合

import pandas as pd
from sklearn.linear_model from LiniarRegression as LR

sample = pd.read_csv("sample.csv")
x = sample["x"]
y = sample["y"]

# 回帰モデルの箱を作る
model = LR()

# モデルを作る
model = model.fit(説明変数,目的変数)

# 傾きと切片の確認
model.corf_ # 傾き
model.intercept_ #切片

# モデルを予測する
model.predict(説明変数)

重回帰の場合

import pandas as pd
from sklearn.linear_model from LiniarRegression as LR

sample = pd.read_csv("sample.csv")
x = pd.get_dummies(sample[["x", "z"]]) # ダミー変数化
y = sample["y"]

# 回帰モデルの箱を作る
model = LR()

# モデルを作る
model = model.fit(x,y)

# 傾きと切片の確認
model.corf_ # 傾き
model.intercept_ #切片

# モデルを予測する
model.predict(x)

データのモデルを作り、予測する(決定木)

講座でモデルを作るときにもう1つ学んだ手法が決定木になります。決定木は、質問に対する分岐を階層的に作ることで、判別/回帰を行うモデルです。基本的に2択の選択肢を作るため人間は判別しやすいが、調整しすぎると過学習になりやすいのが注意点です。Graphviz を使って決定木を作ります。

import pandas as pd
from sklearn.tree import DecisionTreeClassifier as DT
from sklearn.tree import export_graphviz
import pydotplus
from IPython.display import Image

sample = pd.read_csv("sample.csv")

# 説明変数化したいカラムを一気に選択する
x = sample.iloc[:,0:10] # iloc[ 開始行:終了行, 開始列:終了列 ]で選択可能

x = pd.get_dummies(sample[["x", "z"]]) 
y = sample["y"]

# 決定木のモデルの箱を作る
model = DT(max_depth=2, min_samples_leaf=500)

# モデルを作る
model.fit(x,y)

# モデルから決定木を表示する(dot ファイルに決定木を表示する)
export_graphviz(model, out_file="tree.dot", feature_names=x.columns, class_names=["0","1"], filled=True, rounded=True)

# モデルから決定木を表示する(JupyterNotebook 上に dot ファイルを表示する)
g = pydotplus.graph_from_dot_file(path="tree.dot")
Image(g.create_png())

まとめ

データ解析のための Python で扱った、頻出コーディング例をまとめました。今回は扱ったのは一例に過ぎないと思うので今後もいろんな表現を学んでいきたいと思います。また、Kaggle や SIGNATE のコンペに参加していって、そこで学んだこともまとめていきます!

機械学習開発のコーディングをサポートしてくれる「Kite」

タダです。

今回は、 機械学習Python コーディング補完ツール「Kite」について紹介します。

Kite とは

Kite」とは、統合開発環境と連携し、機械学習Python コード補完ツールです。 kite.com

統合開発環境としてサポートされているのは、Atom, Pycharm, Sublime, VS CodeVim になります。また、サポートされているのは記事記載時点で Windows 7以降と macOS 10.10以降がサポートされています。

https://help.kite.com/article/53-quickstart

統合開発環境との連携

普段は、VS Code を使っているので VS Code に連携してみます。プラグインは以下のリポジトリのものになります。

github.com

VS Code の画面からも検索可能なので、検索してインストールします。 f:id:sadayoshi_tada:20190420233058p:plain

実際にコーディングして試してみる

Kite」の良さはコーディング補完の側面ですので、実際に簡単なコードでコーディングしてみました。numpyライブラリをインポートしようとした時に、import numpy as np まで補完してくれました。いつもは自分でコーディングしていたことを先回りしてリストしてくれるのは嬉しいですね。

f:id:sadayoshi_tada:20190420234146p:plain

また、matplotlib で描画する際のメソッドもさくっと出してくれました。 f:id:sadayoshi_tada:20190420234339p:plain

簡単なコードですが、コード補完してもらうといつもより簡単にかけた印象です。描画もできています。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1)
y = np.sin(x)
plt.plot(x,y)

title = "kite"
filename = "kite.jpg"

plt.title(title)
plt.savefig(filename)

f:id:sadayoshi_tada:20190420234856j:plain

まとめ

Kite」について紹介させてもらいました。サポートされている統合開発環境を使っていて、かつ、機械学習Python でコーディングする時にサポートしてくれるツールとして試しに使ってみてもらって良いかと思いました。このツールを使って僕も機械学習のコーディングを頑張って行きます。

Python の可視化フレームワーク「Dash」

タダです。

機械学習やデータ分析の勉強の過程で Python を使ってデータの可視化をやることが増えました。これまでは、「Matplotlib」のみを使っていましたが、別の手法として今回「Dash」というフレームワークを使ってみます。 plot.ly

Dash とは

Dash」とは、Web アプリケーション 用 Python フレームワークです。Flask 、Plotly.js 、および React.js 上に書かれた「Dash」は、Web ブラウザのデータ可視化ができます。

plot.ly github.com

データ可視化の例

サイトにデータ可視化の例が載っていて、様々なデータのビジュアライズができることがわかります。 dash.plot.ly

セットアップ方法

「Dash」のセットアップは簡単です。以下の2つのコマンドを実行すれば終わりです。

$ pip install dash==0.39.0
$ pip install dash-daq==0.1.0

参考情報

dash.plot.ly

サンプルデータの可視化

早速、サンプルデータを可視化してみます。

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()

app.layout = html.Div(children=[
    html.H1(children='Hello Dash'),
    html.Div(children='Dash: A web application framework for Python.'),

    dcc.Graph(
        id='example-graph',
        figure={
            'data': [
                {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
                {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
            ],
            'layout': {
                'title': 'Dash Data Visualization'
            }
        }
    )
])

if __name__ == '__main__':
    app.run_server()%

コードを書いたら実行してみます。

$ python app.py
 * Debug mode: off
 * Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)

http://127.0.0.1:8050/ にアクセスしてみます。このように簡単にデータを Web ブラウザ上に表現することができました。

f:id:sadayoshi_tada:20190329230725p:plain

まとめ

Python のデータ可視化フレームワークの「Dash」を簡単に紹介しました。

Web ブラウザ上に表示できるのでアプリケーションと組み合わせて、Web サイトなどに組み込んでみると面白いかもしれません!

今回は簡単な紹介にとどまりましたが、「Dash」を使って可視化の手法を今後も学んでいければと思います。

AI 技術の基礎から勉強する「秒速DEEP LEARNING -Colaboratoryで入門〜応用ひとっ飛び-」を読んだ

タダです。

機械学習ディープラーニング(深層学習)の技術に興味があり、勉強をしています。

今回は、そんな僕のような方々にぴったりの書籍を紹介します。

それは、「秒速DEEP LEARNING -Colaboratoryで入門〜応用ひとっ飛び-(以下、本書)」です。

本書は、@tomo_makes さん執筆で、技術書展5で配布されていたのですが、下記サイトでも購入可能です。 booth.pm

読了後、ご本人からリプライいただきまして情報が古い部分があるとのことなので参考記事を教えていただきました。

参考記事 qiita.com

更に、商用本としても発刊予定とのことです。おめでとうございます!

今回は、本書を通じて学べることを、特にコードを記述する部分にフォーカスしながらまとめていきます。

本書のターゲット読者

まず、本書の読書層として以下のように列挙されています。 AI の領域に興味をもった僕にも合いそうです。

  • 人工知能/深層学習で、今日、数年後何がどこまでできるのか、色々な人、メディアで言っていることが違い、全体像が掴めない
  • 自分で「理論や数式からを一から学ぶ」のはハードルも高い
  • ハンズオンで試すも環境構築で行き詰まった
  • MNIST 手書き数字認識、犬猫や Imagenet の学習済モデルを用いた画像分類とお決まりのものは多いが、その先やそれ以外のドメインとなると情報がない
  • そもそも手元の GPU がないと、やれることが限られる
  • データ分析コンペに出てみたいが、どこから手をつけていいかわからない
  • 最先端の論文がオープンアクセスとはいえ、技術、英語両面で現実的でない

本書では、論文や数式も出てこないため苦手意識ある方も読みやすいかと思います。

本書の構成

次に、大きな章立てですが次のようになっています。

  • 第I部 準備運動
  • 第II部 機械学習とは何か
  • 第III部 機械学習を使う様子を掴む
  • 第IV部 Colab でいろいろ動かしてみる

本書で学べること

本書を通じて学べることは以下のものになります。

  • 今後の学習のための3つの地図について
  • AI 関連の各種事例や情報収集の方法
  • Google Colaboratory」によるサンプルコードを使った機械学習、深層学習(ディープラーニング)の取り組み方の紹介
    • Validation と optimizer、学習率の変更などパラメーターチューニング
    • データ分析コンペへの取り組み方( SIGNATE を例に)
  • Google Colaboratory」で様々な分析の実践
    • Google Colaboratory」の利用の Tips

3つの地図を持つこと

本書では、読了後にさらに勉強を続けていくための「3つの地図」を持つことが提示されます。

ここでいう「3つの地図」とは、次の通りです。

  1. 深層学習(ディープラーニング)を学ぶ道筋 : 深層学習(ディープラーニング)を学習したいモチベーションを維持し、学び続けるための Tips の紹介
  2. 機械学習の活用の流れ : 機械学習システムを構築していくためのフローの紹介
  3. 深層学習(ディープラーニング)モデルについて : 深層学習(ディープラーニング)モデルを構成するためのフローの紹介

AI 関連の各種事例

各種事例からどのような技術の活用がなされているかを学べます。

トピックとして次の領域の説明がされています。様々な事例が載っており、興味を惹かれましたので、興味のある方は購入を検討ください。

  • 数値系
  • 言語系
  • 画像/映像系
  • 音声/音楽系
  • 強化学習

関連記事

僕が個人的に面白いと思った取り組みは、社内勉強会の資料でも紹介させていただきました。 sadayoshi-tada.hatenablog.com

情報収集の方法

技術手法や近年の事例を学ぶだけでは、学習の次の一歩が踏み出しにくいです。

本書では、情報収集の方法も解説されており、フォローすべきメディアと学会、発表会などカンファレンスの情報が載っています。

すぐにでも始められそうなところを簡単に紹介すると、 @piqcy さんの週刊メーリングリストへの登録です。 www.getrevue.co

基本的には無料ですが、サポート料を支援できる方はこちらからできます。 www.getrevue.co

また、学会関連の情報として産総研の神嶌さんのサイトが紹介されてます。 www.kamishima.net

現在、様々な AI メディアが出回っており、どこから情報を浚うといいかは人それぞれだと思います。

このようなノウハウを共有し、学習を後押しをしてくださる @tomo_makes さんの配慮に感謝ですね。

Google Colaboratory でのサンプルコードを使った分析

本書のコードの実行環境は、「Google Colaboratory」になります。

無料かつ環境構築不要で、機械学習開発環境を手に入れられるため利用します。

特に、第III部からのコードを実際に扱うところで活用します。

関連記事

なお、「Google Colaboratory」については下記の記事でも試した結果を載せています。 sadayoshi-tada.hatenablog.com

パラメーターチューニングの実践

MNIST(手書き数字)データセットを使って、「Google Colaboratory」で開発を行なっていきます。

コードとしては、 Tensorflow のサンプルコードを使います。 www.tensorflow.org

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

コードをそのまま実行すると、「Epoch(以下、エポック)」の各処理で13秒から14秒くらいで約98%ほどの精度が得られました。

ここでやっているのは、以下のことです。

  • 60,000枚の学習用の手書き数字画像を、5エポックかけて学習
  • 10,000枚のテスト用の手書き数字画像を、正しく分類できるか試したら、約98%の精度が得られた

f:id:sadayoshi_tada:20190327070118p:plain

参考記事

なおエポックとは、「一つの訓練データを何回繰り返して学習させるか」の数のことです。

深層学習(ディープラーニング)では、訓練データを何回も繰り返していくことでパラメータをうまく学習する必要があります。

そのために、汎化可能なモデルを作るために適切なエポック数を設定していきます。 www.st-hakky-blog.com

パフォーマンスが高い実行環境を変更

さて、ここからいろいろと「Google Colaboratory」でチューニングを行なっていきます。

まず、実行環境を GPU 環境に変更します。

ランタイムのタイプの変更」から「ハードウェア アクセラレータ」を GPU に変更します。

f:id:sadayoshi_tada:20190327071253p:plain f:id:sadayoshi_tada:20190327072143p:plain

そして、再度コードを実行してみると、エポックの処理時間が8~9秒で処理されています。さすが、 GPU という感想ですね、早い!

パラメーターチューニングの実践(Validation と optimizer、学習率の変更)

Validation を導入することで、機械学習過学習(学習モデルを汎化させるために必要)をさけ、精度の向上が期待できます。

model.fit(x_train, y_train, validation_split=0.1, epochs=5)

Validation を使うことで学習モデルの評価の要素が増えました。 f:id:sadayoshi_tada:20190327074240p:plain

次に、 optimizer を Adam から SGD に変更します。アルゴリズムの変更ですね。

参考記事

qiita.com

モデルを再度作ってみると精度が落ちてしまいました。 f:id:sadayoshi_tada:20190327080335p:plain

エポック数をあげてみます。エポック数をあげると、精度が戻ってきました。 optimizer はその種類によって、得手不得手があることがわかります。 f:id:sadayoshi_tada:20190327080544p:plain

最後に、学習率を変更してみます。

学習率とは、機械学習の最適化においてどのくらい値を動かすかというパラメーターです。

学習率を大きくしすぎると発散し、小さくしすぎると収束まで遅くなるので適切な値を決める必要になります。

一般には1以下にして、「0.1」が適切な値のようです。

極端に、学習率を0.001にした時と10に変動して精度を確認しました。精度が大きく外れているので、学習率を大きすぎても小さすぎても不適切なのを実感できます。

0.001の場合 f:id:sadayoshi_tada:20190327185715p:plain

0.1の場合 f:id:sadayoshi_tada:20190327220428p:plain

10の場合 f:id:sadayoshi_tada:20190327185729p:plain

Google Colaboratory で様々な分析の実践

さらに、分析の実践ということで大きく次の2点の紹介がされています。

東大 松尾研究室の講座

データ分析のための勉強にあたり、東大 松尾研究室の「GCIデータサイエンティスト育成講座」が紹介されています。

こちらの講座で教材で提供されているのはipyファイルは「Google Colaboratory」で読み込ませて教科書のように読み進められます。

章立てとしては次のようになっており、分析を行うのは3章以降で話が出て来ます。それ以外もデータサイエンスに必要な技術が列挙されているため僕自身勉強していきます。

  • 第1章 JupyterNoteBookの使い方とPythonの基礎
  • 第2章 Numpy・Scipy・Pandas・Matplotlibの基礎
  • 第3章 実際のデータを使った記述統計学と回帰分析(NumpyやPandas等の利用)
  • 第4章 確率統計の基礎
  • 第5章 NumpyやScipy
  • 第6章 Pandasを使ったテクニックの紹介
  • 第7章 データの可視化(Matplotlib)について
  • 第8章 データベースとSQLの基礎スキル
  • 第9章 SQLの応用的な処理
  • 第10章 MongoDBのNoSQLについて
  • 第11章 教師あり学習
  • 第12章 教師なし学習
  • 第13章 機械学習で学んだモデリングの検証やチューニング方法
  • 第14章 Pythonの高速化や深層学習入門、Spark(Pyspark)の紹介
  • 第15章 総合問題

なお、こちらの講座は書籍化もされました。

Seedbank

また、各種事例で列挙した分野ごとのデータ分析の実践として、以下の Seedbank のデータを使って行います。 research.google.com

Seedbank は 「Google Colaboratory」にコードを展開して、コードもいじれるので興味がある分野を検索して試すことができます。

技術書展6

@tomo_makes さんは技術書展6でも @kirikei さんとの共著で本を販売されるようで、僕も買いたいなと思っています。

techbookfest.org

気になる方は技術書展6を要チェックです!

techbookfest.org

まとめ

本書は次の要望を持っている人に適した本だと思いましたので、興味がある方は購入を検討されてみることをオススメします!

  • AI の技術分野に興味はあるけどどう学んでいくかのパスが不明確な状態に悩んでいる
  • 手元の作業環境は汚さず、すぐにでも機械学習ディープラーニングのコードを書きたい
  • 各種事例、情報の収集方法に触れたい