Python でもやってみる?

 

残り少ない有休消化を残し、現在私は何をしているかというと、就職活動ではありません。(ど、どうしよう。)

本当に久しぶりに新しいことを覚えたい

金融事務方でプログラミングが書けると、いつの間にか、VBAExcel職人になってしまうのですが。個人的には最近のスクリプト言語と比較して、VBAで数値を扱うソースを書くのはとても手間がかかると思ってます。

そこで最近金融でも一般化してきたPythonをちょっと深めておこうかな?

Pythonかぁ、Deep Learningで使ってるよね、、と。特段明確な利用用途があるわけでもなく、間違っても次の職がSEになるとは思えないのですが、今のところDeep Learningを学ぶためにPythonをやってます。

 

その前に、本当に初心者の方へ

全く初心者の方は最近はオンライン学習が発達しているので、いきなり本を買うのでもなく、高額なプログラミングスクールに行くのではなく、Progateのようなサイトを使ってみて相性診断をするのがおすすめです。

prog-8.com

 

実は最近本屋さんに行くと子供向けのプログラミング教材が大量に出ているので、子供にプログラミングでも教えて荒稼ぎしようかしらと思ってたんですね。(基本発想が下衆)

ところが、オンラインですでにこんなものが…。

  • 開発環境を自分で用意しなくていい(ブラウザでできる)
  • テキストを買う必要がない
  • 入門レベルは無料でできるし、月額料金も安価
  • 気を付けるポイントがよくわかっている。(インデント大事)

オンライン学習で強制的にコメントやインデントを教えてくれるとか、開発者にハグしたくなる感じですね。恐らく一般企業で働かないとわからないこの絶望感。

最近はきっと他にもいいオンライン学習サービスが出てきていることでしょう。

したがって、当初の子供向けのプログラミング教えて荒稼ぎの発想は早々に断念しましたが、悔しいので教育関係者の知り合いに愚痴とともに薦めておきました。

まだリサーチ不足なんで他にもっといいサービスあるんじゃないか?とか思ってますが、そもそもの目的から脱線しすぎたので競合他社調査は一旦保留しております…。

使っている書籍など

なお、私はへぼではあるものの、プログラミング初心者ではないため、これまで通り、本使った独習を中心にやってます。

今使っているのはこれですが、もう1冊メモ書き用にPython の言語仕様の本はあってもいいかなと思ってます。

なお、数学の知識が記憶の彼方なので、高校受験とかに使う駿台の数学ハンドブック(絶版による世代バレの危機)を使ってますが、最近はオンラインで大学が色々と資料提供してくれているのでなくても大丈夫そうです。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 (追記)言語仕様やライブラリはチュートリアルを使うことにしました。本家だし、無料です。

3.6.6 Documentation

Quickstart tutorial — NumPy v1.14 Manual

Editorについて

使っているテキストはEditorを前提にしてませんが、今後のことを考えるとEditorを使って練習しています。Microsoftがこんな高機能なEditorを無料出すなんて…。

code.visualstudio.com

Python のインストールについて

パイソンには2系統あり、2系を使う人はビジネス上の理由がない限りいないと思うので、通常は3系をインストールします。なお、6月に3.7が出てますが…。これはちょっとまだ新しすぎるようです。

私は極端な新しいもの信者であり、毎回それで泣きを見るのですが、これを執筆時点で、3.6.xでないと使っているEditorがPythonを認識しませんでした。Editorの推奨バージョンを見ながら進めて下さい。

code.visualstudio.com

www.python.org

 

 ヘルプ > ようこそ のツールと言語のPythonをクリックして拡張機能をインストールで、Pythonの表記をサポートしてくれます。

f:id:dainimora:20180703222144p:plain

 

外部ライブラリを前半の章では2つ使うのであらかじめインストールしておくのを忘れないようにして下さい。

コマンドプロンプトから)

# Windows
pip install numpy
pip install matplotlib
pip install pillow # PILの代替のため、3章で使いました。

利用法が不明であれば、以下を参照

code.visualstudio.com

 

ソースコードと対話モードの組み合わせ

Pythonに不慣れなので、もしかしてもっと簡単な方法があるのかもしれないですが、今のところこの方式で実行中です。(いい方法があったら変更しておきます。)

なお、ファイルに記載して実行する場合、敢えて対話モードを使わなくても、print()で実行させてもいいが、1行ずつ確認した方が動作が学習としてはわかりやすいです。

Visual Studio Code上に、ソースコードは記載して、 sample.py という形式で保存します。(サンプルコードは2章からのもの)

# Sample.py の中身 テキストの2章のコードを参考に記載してます。
import numpy #as np にするよりEditorでは使い勝手がいい
x = numpy.array([0,1]) # 入力
w = numpy.array([0.5, 0.5]) # 重み
b = -0.7 #バイアス

# print()で出力も可能(以下のコードは対話モードを使うなら以下は不要)
print(x)
print(w)
print(x*w)
print(numpy.sum(w*x)
#VS Codeのターミナルで実行する出力例
[実行フォルダ]> python
Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exec(open("./sample.py",encoding='utf-8').read())
>>> x
array([0, 1])
>>> w
array([0.5, 0.5])
>>> w*x
array([0. , 0.5])
>>> numpy.sum(w*x)
0.5

 

Python 組み込み関数のopen()

Pythonのopenコマンドはエンコーディングが指定されていないとプラットフォーム依存になるとのことで、Windowsは通常はShift-JISになっているため、エンコードの指定が必要になります。

 

# encoding='utf-8' の指定がないとUnicodeDecodeErrorが出ることがある。
>>> exec(open("./sample.py").read())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'cp932' codec can't decode byte 0x9b in position 44: illegal multibyte sequence

Shift-JISかどうか確認したい場合、Windowsのシステムツールのコマンドプロンプト上でchcpとtypeして、932と表示されたらShift-JISです。UTF8は65001。

2. 組み込み関数 — Python 3.3.6 ドキュメント

launch.json の配置を忘れずに

私はjsonと聞くと、本当に「13日の金曜日」が先に出てくるレベルで時代に取り残されていました。

JSON  (JavaScript Object Notation)だそうです…。

qiita.com

 datasetフォルダをダウンロードしておく

私と同じテキストを使う人はGithubからdatasetをダウンロードしておきましょう。

github.com

右上の Clone or downloadを選択、Download zipを選択でダウンロード可能です。

f:id:dainimora:20180705161520p:plain

何か動かないな…と思ったら

例えば、3章ではPILでハマった人もいるのでは…。

こちらはGitHubにIssueとして上がってましたので、テキストを進める上で問題があったらIssueを確認してみるといいでしょう。今なら先人がきっと解決してくれている(他力本願)と思います。

3章のMNIST画像の表示にはpillowライブラリが必要なようです · Issue #26 · oreilly-japan/deep-learning-from-scratch · GitHub

 また、私は第二版の時に買って放置していたため、誤植が大量に集約されてました。時折?となったらチェックしてみるといいかもです。

errata · oreilly-japan/deep-learning-from-scratch Wiki · GitHub

今後やっていきたい学習

東京大学の松尾研究室が提供する教材が無償で公開されているようで、自分への覚書。何事も体系的に学べるのは魅力的です。しかも無償公開という…。

グローバル消費インテリジェンス寄附講座演習コンテンツ 公開ページ | 東京大学松尾研究室 - Matsuo Lab