[Cloud102]#1 Pythonを始めよう(第1部 Pythonはじめの一歩)

# AGENDA
0.はじめに
1.黒い画面でのPython
2.Jupyter Notebook
3.Pythonはじめの一歩
4.ちょっと脱線
5.参考リンク

#0.はじめに
前回は諸事情あってGCP(Google Cloud Platform)のハンズオンやりました。今回は本来のPythonハンズオンに戻ります（なので 前回は#2でしたが、今回は#1になります:stuck_out_tongue_closed_eyes:)

#1.黒い画面でのPython

前回GAEハンズオン(*)では、Cloud Shellインスタンスを使ってターミナル画面（黒い画面:sweat:)からPython WebアプリをGAEにデプロイしました。
といっても、デプロイするアプリは git cloneでコピって来ただけで、Pythonプログラムは一切見てないので、まず最初に、前回使ったCloud Shell環境でPythonに触ってみましょう。


(*) [Cloud102]#2-2 GCPを始めよう(後半:GAE編)
http://qiita.com/nagahisa/items/a3033b203fa929c8d7ab


##(1)Cloud Shellの立ち上げ

・前回作成したアカウントでGCPコンソールにログインして、みんな大好き Cloud Shellを起動します

![002-2.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/d9a00537-3da3-614e-a97d-3c0089c0400f.jpeg)

・前回のGAE用プログラムが残っています。
![004.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/88e52029-d4c0-4fe7-13a7-a96f94a4bbd0.jpeg)

・適当な作業用ディレクトリ(この例では ~/20161216-python )を作ってそこに移動しておきます（Pythonのパスも確認しています）。

![010-2.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/6c86a176-fd11-6477-8564-be55f3b22b4a.jpeg)

##(2)pythonインタプリタ

python(python3)コマンドは引数なしで実行すると、ユーザ入力を逐次実行するインタープリタ環境として動作します。REPL(Read-eval-print loop)って呼んだりします。
http://d.hatena.ne.jp/keyword/REPL

では python REPLで以下を試してみましょう。

```
x = 10
y = 20
print ( x + y )
```

・python REPL起動（ >>>> がユーザ入力待ち表示です）
![010.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/cfa87b7b-5912-922d-c574-91b7a32a7fe8.jpeg)

・pythonプログラムを実行
![011.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/7a826dfd-108f-6109-d61e-9a3eadfd01d1.jpeg)

REPLの終了は画面のように quit()関数実行の他に、Ctrl-D入力で行います。

##(3)pythonプログラムの作成

前回のハンズオンではCloud Shell上でのファイル編集方法には敢えて触れず、nano/viなどを使ってもらいましたが、なんと Cloud ShellにWeb版エディタが登場してました！
http://googlecloudplatform-japan.blogspot.jp/2016/10/cloud-shell.html

今回はこのコードエディタを使って、先ほど作成した作業ディレクトリに、test.py というpythonプログラムを作成してみます。

・コードエディタ起動
![005.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/1ae190e7-c5ed-3132-9560-aa7812209ff3.jpeg)

・こんな画面がブラウザの別タブで立ち上がります
![006.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/2d74e80a-23aa-30fa-0609-b90e5f8f0175.jpeg)

・ディレクトリを移動して
![007.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/f7e271c0-dd21-f0da-ddf1-f2fbafdc3082.jpeg)

・ファイルの新規作成を選んで
![008.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/02a67677-abab-90fb-1b4c-145c5371001a.jpeg)

・ファイル名を入力 (ここではtest.py)
![009.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/4805dcdd-c65b-61f4-de0b-5097280bce7c.jpeg)

・右ペインに以下のファイルの中身を書いたら、ファイルを保存

```#!/user/bin/python
x = 10
y = 20
print ( x + y )
```
![012.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/d1549df9-2804-56ab-dda3-f5241c7be4b7.jpeg)

・ファイルができていることを確認して、そのファイルをpythonコマンドの引数に指定して実行
![013.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/d8b37956-62ec-6f54-4996-fe2faaeafc79.jpeg)

・ファイル名だけで実行できるようおまじない
![014.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/8e090efe-9c98-a6d3-729b-c8f9daa476ba.jpeg)

こうやってREPLや *.pyファイルを書いて勉強していけば良いのですが、若い皆さんには黒い画面が人気がない:sweat:
なので、ブラウザで同様なこと＋アルファができる jupyter notebookを使ってみます。

#2.Jupyter Notebook

##(1)Jupyter notebookとは

いつものように説明手抜きです。日本語情報もたくさんあるのでググって調べましょう。以前はipython notebookと言っていたので、そちらでググっても良いです。

本家サイト
http://jupyter.org/
![015.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/5fb736a4-0341-3257-4bab-76898810a7ca.jpeg)

ちょこっと試すだけなら本家サイトの以下ボタンから試せます。
(https://try.jupyter.org に移動します）
![016.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/5cffa1b5-13c3-2293-24d5-d7a2f8384a0d.jpeg)

##(2)jupyter notebookサーバの構築
は、面白いハンズオンですが、Pythonの勉強とは直接関係ないので、興味がある方は以下で行ってみてください(AWS無料枠のインスタンスとGCP Cloud Shellを使う例です）。

[Cloud102]#1 Pythonを始めよう(第2部 Jupyter Notebook構築 AWS編)
http://qiita.com/nagahisa/items/92b5fd1cd983751182bb

[Cloud102]#1 Pythonを始めよう(第3部 Jupyter Notebook構築 GCP Cloud Shell編)
http://qiita.com/nagahisa/items/6b11d9edab2b6160ad26

jupyter notebookは最近流行のデータサイエンス系で良く使われるので、今回はMicrosoftの Azure Machine Learning Studioに付属のものを使います（無料です:grin:)

##(3)Azure Machine Learning Studio

Azure ML Studioは（多量の機械学習を行なわなければ）無料で使えるデータサイエンス系のツールです。もちろん本来は機会学習のための使いやすいツール群ですが、jupyter notebookも含まれているので、それを利用します。

・まだ個人のMicrosoft Accountを持ってない方は以下から登録します。
https://www.microsoft.com/ja-jp/msaccount/signup/default.aspx
![024.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/1a02c496-089c-1239-231e-0114c06e18e1.jpeg)

・Azure ML Studioに、Microsoft AccountでSign Inします。
https://studio.azureml.net
![020.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/f83c9e88-c2de-0baa-91a4-499c5dab1a18.jpeg)

・ちょっとつかってみるだけなら8H Evaluationでも良いですが、今回は真ん中の"Free Workspace"で登録します。
![021.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/7062e867-87bf-5098-e393-993b7947f539.jpeg)

・こんな感じの画面が出ればOK
![023.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/13e3a79c-11e3-edf3-3284-03069d227f33.jpeg)

##(4)jupyter notebookの使い方

・左ペインで"NOTEBOOK"に移動します。
![025.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/80d58333-6b20-4385-d5c3-6006aa78bc93.jpeg)
 
・notebookはUploadや新規作成ができるので、ここでは"+NEW"からPytho3の新規作成(Blank notebook)選びます。
![030.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/d8222a42-2975-8441-692f-a02649e8f2ec.jpeg)

・適当なNotebook名（以下では 20161216-Python3)付けます。
![031.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/0fce10dc-e33f-9f7f-011a-256574a33e22.jpeg)

・こんな画面になっています。
![032.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/ece51ec1-206a-0259-9d3e-aed1a05677e6.jpeg)

このNotebookにコメント(Markdown)やプログラムコード(Code)を書いていきます。
まずは、簡単なコメントと簡単なプログラムを書いて実行してみましょう。

なお、以下のような「ちゃんとした」使い方説明を参照してもらえると助かります:sweat:

http://pythondatascience.plavox.info/python%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/jupyter-notebook%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/


・最初のセルは"Code"になっているので"Markdown"に変更
![033.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/b7bf7360-90d5-7f20-6144-eaa7d7752fee.jpeg)

・セルにMarkdown形式でコメント記載、入力後はセル内でCtrl+Enterで実行。（RunボタンでもOK)
 Markdownが解釈された表示になります。（以下は実行前）
```##1.はじめてのJupyter Notebook```
![034.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/c3f58870-8622-c7f3-c834-8d31f36dc3fb.jpeg)

・"+"ボタンでセルを追加して"Code"のままでプログラム記述
![035.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/0778f643-6d3d-a4db-bad1-48df777b7ba1.jpeg)

・Ctrl+Enterでプログラム実行。
![036.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/a1f4917c-8de3-e638-de38-ecf922c01b42.jpeg)

こんな感じでコメント・プログラム・プログラムの実行結果を１つのノート（notebook)として作成できます。

・作成したnotebookを保存
![037.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/a5db765c-ffa4-eddc-de50-559324ab29eb.jpeg)

・Notebookをクローズして一覧に戻ります
![039.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/1b33bc21-1bc0-f5d7-5fb3-c71158b57090.jpeg)

この一覧から作成中のnotebookを開いて更新したり、他の人が作成したnotebookをインポートしたり、notebookをダウンロードしたりできます。

jupyter notebookは、Pythonだけでなく統計処理でよく使われる"R"などにも対応していますので、Excelが得意な方は"R"から勉強するもの良いかもしれません。（希望があれば R HandsOnも企画します）

#3.Pythonはじめの一歩

Pythonハンズオンと言っておきながら、Python文法などの説明は行いません（行えません:sweat_smile:)。後で参考リンクで勉強してください。

## (1)順次・分岐・反復

一般的に、プログラムは３つの動作（順次・分岐・反復）で進んでいきます。
・順次：上から下へ順番に実行します（既にやってますね）
・分岐：ある条件に応じて処理を変えます。
・反復：同じことを処理させるためにグルグル処理をまわします。

以下の画像を見ながら写経して実行してみてください（あえてソースは載せません:smile:)
![040.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/eb2c3edc-5c62-fdd2-856f-c08b5374ede9.jpeg)
![041.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/4bc64206-34b3-fedb-f825-042c79543060.jpeg)
![042.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/329c5d27-238a-2ce2-a496-0dd236ab7973.jpeg)
![043.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/49ed9609-724a-48ee-f9dc-18c638d19f1e.jpeg)

## (2)型

上の例では、x=10, feel="fine"のように変数(x,feel)に値(10,"fine")を代入していますが、これらには「型」があります。
型は type()で確認できるので、以下を参考に色々試してみましょう。
http://www.tohoho-web.com/python/types.html 
![045.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/71bbd7a6-8b5d-1f7b-f421-daaa6da4b263.jpeg)

## (3)リスト・タプル・辞書

Pythonにはリスト・タプル・辞書といった型もあります。
以下を参考にして色々試してみましょう。
http://www.tohoho-web.com/python/list.html

## (4)関数

数学で習った「関数」と似てますが本質的にはちょっと違います。経験豊富な人は「サブルーチン」という言い方を知っていると思いますが、よく使う処理（ルーチン）を再利用可能にするための仕組みです。

以下を参考にして色々試してみましょう。

http://www.tohoho-web.com/python/function.html#function
![046.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/ea6a6863-a7ac-3e10-7488-a59529c0c38c.jpeg)

## (5)パッケージとモジュール

Pythonには便利な「モジュール」が沢山あり、それをimportして使うことができます。
例えば数学系では math モジュールをつかって三角関係などが使えます。

![047.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/b65f9714-5cbb-4f72-0dba-9c0c43bc53f4.jpeg)

なお、複数のモジュールをまとめてパッケージとして公開されているケースも多く、パッケージ内のどのモジュールをimportするか、という指定をする場合もあります。
http://www.tohoho-web.com/python/module.html

## (6)ちょこっと統計処理を感じる

以下を写経して統計処理に触れてみましょう。
![048.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/42ecbe63-f48b-b79f-9ea2-59ebcbfa468f.jpeg)

## (7)Javascriptも使えます
参考： http://enakai00.hatenablog.com/entry/2016/12/10/141301

![JS1.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/72c9b2ca-d6ab-d986-41f2-2a8c5417c154.jpeg)

![JS2.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/cf3de7fe-3353-10c0-39c6-66979ceb1919.jpeg)

こちらもやってみましょう。
Jupyter Notebookを利用してお手軽分析環境構築
https://datumstudio.jp/backstage/795

#4.ちょっと脱線

今回扱うPythonはいわゆる「スクリプト言語」って言われる「コンパイル不要」なやつですが、GCP Cloud Shellには他言語の開発環境も入っているのでちょっとだけ覗いてみます。（説明は口頭で:sweat_smile:)

・機械語にコンパイルするやつ
![gcc.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/19a4d720-bb58-e752-d517-a8e24aa43e9c.jpeg)

・中間言語にコンパイルするやつ
![java.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/3734a5fc-a028-1d27-b782-7101cb8266cb.jpeg)


#5.参考リンク

僕は文法などちゃんと勉強していませんが(必要な時に調べるタイプ:sweat_smile: )、世の中にはちゃんと勉強でいる良い本と良いサイトが沢山あります。
ググって出てきた無料のものを少し紹介します。

(1)Python チュートリアル
この本の内容がWeb公開されています
https://www.amazon.co.jp/exec/obidos/ASIN/4873117534/take1103-22/

http://docs.python.jp/3.5/tutorial/

(2)Dive Into Python 3 日本語版
最初の方ほぼ同じ内容ですが、こちらの方が少し高度。
http://diveintopython3-ja.rdy.jp/

(3)Python Boot Camp Text
http://pycamp.pycon.jp/

(4)Python入門（本コンテンツで参照させていただきました）
http://www.tohoho-web.com/python/index.html

(5)本家のチュートリアル
http://docs.python.jp/3.5/tutorial/

最後に：

FY16上期コース(Cloud101）に参加された方には最初に言いましたが、僕はプログラミング含めたICT技術は恋人と同じかなぁと思っています。どれだけの時間を費やしたか、で自分にとってかけがえのないものになります。

「_君がバラのために費やした時間だけ、君のバラは大切になるんだよ_」　星の王子様より

Enjoy :v: