インストール〜基礎 | 第1回pythonリモート社内勉強会

「python社内勉強会＆ハッカソン」の公開ログになります。

これまでの勉強会の過去ログはこちら。
第1回 : https://qiita.com/classfox/items/edba3e8971aaa067b88b
第2回 : https://qiita.com/classfox/items/095c4f4b8aa9247a4392
第3回 : https://qiita.com/classfox/items/825116980ac7ca255a13
第4回 : https://qiita.com/classfox/items/9a4b8a513fd5b642534d

# この勉強会について
各回30〜60分程度。ダラダラとはやらずpythonのwhy、whatを共有していく時間になります。
基本的なプログラミングなどの実装は会内はやらず、実行デモ程度を予定しています。宿題も特にありませんので各自勉強したことを再学習していってください。

# 前半（基礎編）
前半は座学メインの基礎編です。
なお、pythonのバージョンは「3.6.3」を用いて学習する。

python入門リファレンス
https://docs.python.jp/3/library/index.html

## pythonとは？
Pythonはさまざまな分野のアプリケーションで使われている、極めてパワフルな動的プログラミング言語です。Pythonはよく、Tcl、Perl、Scheme、Javaなどと比較されます。Pythonには次のような特徴があります:

1. とてもクリーンで読みやすい文法
2. 強力な内省(イントロスペクション)機能
3. 直感的なオブジェクト指向
4. 手続き型のコードによる、自然な表現
5. パッケージの階層化もサポートした、完全なモジュール化サポート
6. 例外ベースのエラーハンドリング
7. 高レベルな動的データ型
8. 事実上すべてのタスクをこなせる、広範囲に及ぶ標準ライブラリとサードパーティのモジュール
9. 拡張とモジュールはC/C++で書くのが容易(JythonではJava、IronPythonでは.NET言語を利用)
10. アプリケーションに組み込んでスクリプトインタフェースとして利用することが可能

https://www.python.jp/about/

## pythonの歴史

1991年にオランダ人のグイド・ヴァン・ロッサム氏によって開発されたスクリプト言語。
名前の由来は、非常にユニークで映画監督のテリー・ギリアムもかつてメンバーとして出演していたイギリスのBBCが製作した大ヒットコメディ「空飛ぶモンティ・パイソン」から来ている。

1991年のバージョン0.90以来オープンソースとして配布。
現在では「2.x」系ではバージョン2.7x、「3.x」系ではバージョン3.6.xという2つのメジャーバージョンが併用リリース。

Google社内で使用される3大言語（Python、Java、C）の1つ。
Google AppEngine、YoutubeやDropboxなどのサービスなどもpythonで実装されている。

https://mayonez.jp/topic/1555

## pythonの特徴

1. 2017年現在、もっと使用されている言語とも言われている。ただし、文献によっては異なる。
2. 簡潔で読みやすい文法
3. スクリプト言語なので、コンパイルが不要
4. マルチプラットフォームにも対応しており大規模開発にも対応
5. インデントを用いてブロック構造を定義
6. デメリットとしては、実行速度がCやJavaなどと比較して遅い

![MjkyNzIzNQ.jpeg](https://qiita-image-store.s3.amazonaws.com/0/59118/44438681-f35f-a80b-ce37-835f16bd6a4a.jpeg)
https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages

<img width="953" alt="スクリーンショット 2017-12-02 18.33.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/59118/584bcb3e-70f5-4135-64d8-366c1945e2c8.png">
https://www.tiobe.com/tiobe-index/

## pythonにおける周囲の印象（discuss:ear:）

最近流行りの機械学習、AI関連でよく使用されている。
Cを使っている人も時々いる。Cでアルゴリズムなどを勉強してからpythonしていくのもアリ。
IoTの分野でも。Rasberry Piでもpythonが採用されている。

## python環境の構築

### anaconda

anacondaを入れるのが最も簡単。python周辺のライブラリも容易にインストールでき統合されている。
https://www.anaconda.com/download/

※以下、mac版の場合のanaconda
1. anacondaをダウンロードしてインストール
2. anaconda-navigatorを起動
3. 「Environments」タブをクリック
4. 下にある、「Create」ボタンを押す
5. project nameを入力（例：study）して、「Create」ボタンを押す
6. 作られたprojectの▶ボタンを押す
7. 「Open Terminal」を選択するとターミナルが立ち上がる

※windows版はこちらなどを参考
https://pythondatascience.plavox.info/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-windows

### pycharm

python開発のIDEとして著名。anaconda対応も行われているので、今回も使用することが可能。
https://www.jetbrains.com/pycharm/

#### anacondaとpycharmの連携

1. PyCharmを立ち上げる
2. 「Create New Project」をクリックする
3. 「Location」を入力
4. 「Interoreter」でanacondaを選択する 
5. 「Create」を押して実行

## pythonの実行

terminal上で、`python`と打つと起動。pythonプログラムを実行することができる。
anacondaの場合、navigator上からも立ち上げることができる。

<img width="729" alt="スクリーンショット 2017-12-02 18.27.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/59118/3160ca4a-3219-358e-502e-ff123ab7fb21.png">

## python基本構文

https://qiita.com/yayo256/items/d5135d5255549964fe83

### hello worldしてみよう（work:point_up:）
```hello.py
#coding: UTF-8

print("Hello World!") # Hello World!と表示
print("こんにちは世界") # 日本語も確認
```

### 四則演算（work:point_up:）

https://www.pythonweb.jp/tutorial/num/index2.html

```enzan.py
#coding: UTF-8

print("10 + 8    = ", 10 + 8)
print("10 + 8.0  = ", 10 + 8.0)
print("10 / 3    = ", 10 / 3)
print("10 / 3.0  = ", 10 / 3.0)
print("10.0 / 3  = ", 10.0 / 3)
print("17 / 5    = ", 17 / 5)
print("-17 / 5   = ", -17 / 5)
print("10.0 // 3 = ", 10.0 // 3)
print("10 // 3   = ", 10 // 3)
print("10 % 3    = ", 10 % 3)
print("5 ** 3    = ", 5 ** 3)
```

## if〜、elif〜、else文

※switch文は存在しないらしい。

https://www.pythonweb.jp/tutorial/if/index8.html

```ifelse.py

#coding: UTF-8

domain = "kr"

print(domain + "ドメインは", end="")
if domain == "jp":
  print("日本です。")
elif domain == "kr":
  print("韓国です。")
elif domain == "cn":
  print("中国です。")
else:
  print("その他の国です。")

domain = "com"

print(domain + "ドメインは", end="")
if domain == "jp":
  print("日本です。")
elif domain == "kr":
  print("韓国です。")
elif domain == "cn":
  print("中国です。")
else:
  print("その他の国です。")
```

## ループ文

http://python.keicode.com/lang/control-flow-loop-for-while.php

```loop.py
#coding: UTF-8

# 掛け算九九の行列
for i in range(1,10):
    for j in range(1,10):
        print(i * j, end=' ')
    print()

print(" ")

# else, breakの例
for i in range(3):
    print(i)
    if 1<i:
        break;
else:
    print('else... i=', i)
```

第1回はここまで。次回以降のラインナップは以下を参照ください。
※内容が変更となる場合もあります。

これまでの勉強会の過去ログはこちら。
第1回 : https://qiita.com/classfox/items/edba3e8971aaa067b88b
第2回 : https://qiita.com/classfox/items/095c4f4b8aa9247a4392
第３回 : https://qiita.com/classfox/items/825116980ac7ca255a13
第4回 : https://qiita.com/classfox/items/9a4b8a513fd5b642534d

## DB接続

https://qiita.com/zaburo/items/55347181be742b5109ea

```py3:database.py
```

## 文字列処理

```py3:string.py
```

## データ型

https://docs.python.jp/3/library/datatypes.html

```py3:datatype.py
```

## 数学関数

https://docs.python.jp/3/library/numeric.html
https://docs.python.jp/3/library/math.html

```py3:math.py
```

## ファイル・ディレクトリ制御

https://docs.python.jp/3/library/filesys.html

```py3:file.py
```

## 関数型プログラミング

https://docs.python.jp/3/library/functional.html

```py3:functional.py
```

## 並列実行

https://docs.python.jp/3/library/concurrency.html

```py3:parallel.py
```

## デバッグ・プロファイラ

https://docs.python.jp/3/library/debug.html

```py3:debug.py
```

## メール・JSON・API

https://docs.python.jp/3/library/netdata.html

```py3:api.py
```

# 後半（応用編）の予定

1. DBを用いたクエリビルダ
2. WEBアプリケーション
3. API実装
4. csvファイル制御
5. tensorflow
6. レコメンドエンジンの実装（スコアリング）
7. 自然言語処理プログラムの実装（※mecab等も活用？）
8. 画像処理エンジンの実装（※deep learningを実装？）
9. 回帰分析などの統計プログラムの実装
10. その他アルゴリズムの構築、ハッカソン形式