会社の中にPythonの仲間を作るための覚え書き（Katacodaとconnpass）

会社の中に「Pythonやってみたいんだけど」という人がいてもいまは直接会ってコーチすることもできない、でも仲間を増やしたい、そんなときに。

##Python チュートリアル
まず、日本語のドキュメントがあることを紹介しておく。
https://docs.python.org/ja/3/tutorial/index.html

https://docs.python.org/ja/3/tutorial/index.html

##Katacoda　：環境を構築するところで挫折させないために
Jupyter notebook の設定でつまづく前にまずはPythonを動かしてもらう。
そのためにKatacodaのこのシナリオ
https://www.katacoda.com/scenario-examples/scenarios/notebooks-py

https://www.katacoda.com/scenario-examples/scenarios/notebooks-py

を使ってもらう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/21e7519b-1a25-62e8-21c6-ca0b1e3d42c6.png)

起動したら「START SCENARIO」を実行。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/f911a427-4d38-4426-0b13-e9f7b499e2cd.png)

せっかくなのでセルをMarkdown に切り替えて実行してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/f6390b27-61f0-e4a9-5304-5e53e645fed9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b9011567-f934-901f-a102-05869487ee2d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/bdec0f96-0734-1fc6-eff1-cd42eb9ae6be.png)

ここまで来たらPython を電卓として使ってみてもらう

```
2 + 2
```
▶実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/946cd345-ab8a-ab76-76ca-2ccbb071b6a4.png)

```
50 - 5*6
```
▶実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/71a9a4d5-1f4d-bd0b-37ac-fb7fc0e01c79.png)

Pythonの構文をちょこっと紹介しておく

```
for i in range(5):
    print(i)
```

▶実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/84bc8f27-dec3-69ec-0b70-2d93420cc880.png)

これに辞書型を組み合わせてみて

```
purple = {"ニックネーム": "れにちゃん",
         "出身地": "神奈川県",
         "キャッチフレーズ": "感電少女",
         "生年月日": "1993年6月21日"}
for key in purple:
    print(key, purple[key])
```
▶実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/d367a99d-2bf7-fb5f-dc46-d13016716278.png)

食欲をそそるためにseabornのタイタニックデータセットを読み込んで表示させてみようとしたけれどそれはできませんでした。

```
import seaborn as sns
titanic = sns.load_dataset('titanic')
print(titanic)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/18f05eb3-0962-2197-1095-44dc892fa205.png)

でもmatplotlibはいけそう。
pandas や scikit-learn も使えるようです。ボストン住宅価格データセットが読み込める。

```
import matplotlib.pyplot as plt
```

```
from sklearn.datasets import load_boston
boston = load_boston()
```

```
import pandas as pd
boston_df = pd.DataFrame(boston.data, columns = boston.feature_names) # 説明変数(boston.data)
boston_df['MEDV'] = boston.target # 目的変数(boston.target)
boston_df.head()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/125066c6-1204-c9d0-19f6-0b8507034609.png)

これで機械学習のハンズオンはできそうです。
それはおいおい準備するとして、まずは可視化ができることを会社の仲間に伝えたい。

```
import matplotlib.pyplot as plt
d = {'apple':10, 'banana':30, 'orange': 40, 'kiwi': 15}
x = [1,2,3,4]
plt.bar(x, d.values(), tick_label=list(d.keys()))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/33353a6f-a39f-9515-2824-c5b0632f736f.png)

これでなんとかいけそうです。

もし、興味を持ってもらえそうな人だったらネットワーク分析とかも。

```
import networkx as nx
import matplotlib.pyplot as plt

ba = nx.barabasi_albert_graph(1000, 3)
plt.subplot(3, 1, 1)
nx.draw(ba, node_size=10, node_color='red')
print(nx.info(ba))
plt.subplot(3, 1, 2)
plt.plot(nx.degree_histogram(ba))
plt.subplot(3, 1, 3)
plt.xscale("log")
plt.yscale("log")
plt.grid(which="both")
plt.plot(nx.degree_histogram(ba))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/da807655-80f7-1d6c-64a9-d736e8a5f0d2.png)

欲を言えば、形態素解析ができるといいな。

```
import MeCab
# MeCabオブジェクトの生成 
tagger = MeCab.Tagger()
# 形態素解析 
result = tagger.parse("コロナ禍でなかなか会えないけれど一緒にPythonを勉強しましょう。")
print(result)
```

```
from janome.tokenizer import Tokenizer

t = Tokenizer()
toks = t.tokenize("コロナ禍でなかなか会えないけれど一緒にPythonを勉強しましょう。")
for tok in toks:
    print(tok)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/cd3b2744-9fea-d5df-9d62-76b02459dcf3.png)


MeCab も janome もダメでした。
Katacoda のこのシナリオは日本人向けに作られた環境じゃないのでしょうね。

WordCloudはどうでしょう。

```
import wordcloud
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/a419ef0e-5d4f-088d-40f8-ef0bfffd5b79.png)
これは無理でした。

##Google Books API 

じゃあ Google Books API を使って、取得した情報を表示することはできるでしょうか。

```
import requests

url = 'https://www.googleapis.com/books/v1/volumes?q=isbn:'

def main(isbn):
    req_url = url + isbn
    response = requests.get(req_url)
    return response.text

if __name__ == "__main__":
    while True:
        isbn_input = input("input ISBN >>>")
        print(main(isbn_input))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/f65e647a-ff1a-b593-dcc2-15a8ef42336a.png)

これは行けそうです。
何でもいいので、手もとにある本のISBNコード（２段バーコードの上段の13桁）を入力してみて貰いましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/4ff7b91f-fb4f-ed9a-cdc7-b583a2241bf2.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ed5fd662-db7f-1c2a-55a0-13dd02ba6bc5.png)


jsonで応答が戻ってきました。
こうすればビッグデータから情報を抽出する最初の一歩を体験してもらうことができます。

```
input ISBN >>>9784163907383
{
  "kind": "books#volumes",
  "totalItems": 1,
  "items": [
    {
      "kind": "books#volume",
      "id": "aIaCtAEACAAJ",
      "etag": "ICKqWNZ3GZI",
      "selfLink": "https://www.googleapis.com/books/v1/volumes/aIaCtAEACAAJ",
      "volumeInfo": {
        "title": "CRISPR究極の遺伝子編集技術の発見",
        "authors": [
          "ジェニファー・ダウドナ",
          "サミュエル・スターンバーグ"
        ],
        "publishedDate": "2017-10",
        "industryIdentifiers": [
          {
            "type": "ISBN_10",
            "identifier": "4163907386"
          },
          {
            "type": "ISBN_13",
            "identifier": "9784163907383"
          }
        ],
        "readingModes": {
          "text": false,
          "image": false
        },
        "pageCount": 333,
        "printType": "BOOK",
        "maturityRating": "NOT_MATURE",
        "allowAnonLogging": false,
        "contentVersion": "preview-1.0.0",
        "panelizationSummary": {
          "containsEpubBubbles": false,
          "containsImageBubbles": false
        },
        "imageLinks": {
          "smallThumbnail": "http://books.google.com/books/content?id=aIaCtAEACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
          "thumbnail": "http://books.google.com/books/content?id=aIaCtAEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"
        },
        "language": "un",
        "previewLink": "http://books.google.de/books?id=aIaCtAEACAAJ&dq=isbn:9784163907383&hl=&cd=1&source=gbs_api",
        "infoLink": "http://books.google.de/books?id=aIaCtAEACAAJ&dq=isbn:9784163907383&hl=&source=gbs_api",
        "canonicalVolumeLink": "https://books.google.com/books/about/CRISPR%E7%A9%B6%E6%A5%B5%E3%81%AE%E9%81%BA%E4%BC%9D%E5%AD%90%E7%B7%A8%E9%9B%86%E6%8A%80%E8%A1%93%E3%81%AE.html?hl=&id=aIaCtAEACAAJ"
      },
      "saleInfo": {
        "country": "DE",
        "saleability": "NOT_FOR_SALE",
        "isEbook": false
      },
      "accessInfo": {
        "country": "DE",
        "viewability": "NO_PAGES",
        "embeddable": false,
        "publicDomain": false,
        "textToSpeechPermission": "ALLOWED",
        "epub": {
          "isAvailable": false
        },
        "pdf": {
          "isAvailable": false
        },
        "webReaderLink": "http://play.google.com/books/reader?id=aIaCtAEACAAJ&hl=&printsec=frontcover&source=gbs_api",
        "accessViewStatus": "NONE",
        "quoteSharingAllowed": false
      }
    }
  ]
}
```

##The Zen of Python ：今はまだ語り過ぎない
そしてPythonの禅について軽く紹介する。

```
import this
```

```
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/1b148402-0bef-058a-e5df-f4152a3c8501.png)

まず仲間になって貰うことが着地点なので、Zenについては熱を入れすぎないようにする。

The UNIX Philosophy とか

https://www.ohmsha.co.jp/book/9784274064067/

C++が歩んだ苦難の道　とか

https://www.sbcr.jp/product/4797328541/

それぞれに敬意を表しながらやってゆこう。

##Jupyter notebook のインストールに誘う

Katacodaのさっきのシナリオではできなかったことがあるのを逆手にとって、
「じゃあ次はJupyter notebook を自分の環境にインストールしましょう」と誘ってみる。

「そうするとこんなことが出来るからね」って伝えることができます。

あいみょんの「マリーゴールド」の歌詞をテキストファイルにしておいて、

```
import wordcloud
import matplotlib.pyplot as plt
import MeCab

bun = ""
with open('あいみょん_マリーゴールド.txt') as f:
    for line in f.readlines():
        bun = bun + line.strip() 
wc = wordcloud.WordCloud(width=1000, height=600, background_color="white",
                        font_path=r"C:\windows\Fonts\meiryo.ttc",
                        stopwords=["いつ", "し", "さ", "よう"])
tagger = MeCab.Tagger()
word_kaiseki = tagger.parse(bun)
lines = word_kaiseki.split('\n')
selected = []
for line in lines:
    feature = line.split('\t')
    if len(feature) == 2:
        info = feature[1].split(',')
        hinshi = info[0]
        if hinshi in ('名詞', '形容詞', '動詞'):
            selected.append(feature[0])
wc.generate(" ".join(selected))
plt.imshow(wc)
plt.axis("off")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/2762c7f0-2170-f9a2-3fb4-b29911349d0f.png)



「マリー」と「ゴールド」が「マリーゴールド」になるようにするにはどうしたらいいのかな、とか、名詞だけを抽出してみたいとか、サビのところをもう少し大きくするためのチューニングはどうしたらいか、などと少しずつプログラムのほうに興味を持ってもらいます。

https://www.youtube.com/watch?v=0xSiBpUdW4E

ほかにも新しい仲間の興味に応じて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/a430e1da-618c-1d3d-f2aa-aa5890e03246.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/80300c85-cf9c-9c12-4a84-e458d5557abd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/90c0c2be-9e78-c166-c14e-6c32198b1581.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/f42fb63d-446e-328e-224e-cb08147973e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/7547fe0c-bb9c-67cf-1c22-24fdefdee194.png)

これはコンピュータビジョンを用いた画像認識の例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b02f74bd-b80e-83ca-3fb9-6505c4209c77.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/04f13b5b-96bf-3b41-68dc-cd34edb8b2bc.png)


##ここから先は、あれこれ伝え過ぎると混乱させてしまうので辻慎吾先生一択で紹介してみます

##Youtubeや書籍を紹介する
仲間になってくれる人がプログラム言語やオブジェクト指向に慣れていない人だったらこれがいいかも。

https://www.youtube.com/watch?v=VCOXtOicsRA&t=3160s

https://gihyo.jp/book/2018/978-4-7741-9643-5

##connpass　：コミュニティを紹介する

https://startpython.connpass.com/

過去の状況も動画で保存されているので観てもらおう。

https://www.youtube.com/channel/UCoKjZ7BAdDrV1nwJdADv0Fw/videos
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/e58dbd52-6317-d956-4ed0-1055132beed3.png)

この回は私の推しです。

https://www.youtube.com/watch?v=w7CxVJb0AJo
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/72552e5b-9b4a-aa87-841c-0252922e33bd.png)



資料がアーカイブされていることを伝えて、興味のあるものを探して貰ってもいいかも。

https://startpython.connpass.com/presentation/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/030d7c95-3e18-909e-3497-a1fae4f8af0d.png)

##connpas おまけ
新しい仲間が女性だったら

https://pyladies-tokyo.connpass.com/

https://pyladies-tokyo.connpass.com/event/216305/

新しい仲間がインフラまわりの自動化に関心があれば

https://ansible-users.connpass.com/

https://www.youtube.com/watch?v=u_MXdLetBq0

資料の質の高さと量の多さだと

https://pyconjp.connpass.com/presentation/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/4e9c97b0-b757-2b77-53ee-00c488e50a24.png)


##言語の人気を知りたいという人には
ワールドワイドで

https://www.tiobe.com/tiobe-index/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/cc7f9e5f-81d0-c755-d5ed-dc8a0d06b683.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/9a9c4f6f-67f0-ffda-ca6c-0c7363e26838.png)

##資格を取りたいという人には

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b4e75e93-817b-b2b6-a107-da0544cbf173.png)

https://www.pythonic-exam.com/

https://www.youtube.com/channel/UCuxAzIZLrNlotkbU4lmWjrA

その先の資格

https://www.jdla.org/

https://www.jdla.org/certificate/engineer/

##参考にさせていただいた情報
[Katacoda](https://www.katacoda.com/)
[connpass](https://connpass.com/dashboard/)
[seaborn Example gallery](https://seaborn.pydata.org/examples/index.html)
[みんなのPython 第4版](https://www.sbcr.jp/product/4797389463/)
[Pythonスタートブック［増補改訂版］](https://gihyo.jp/book/2018/978-4-7741-9643-5)
[Pythonで学ぶネットワーク分析 ColaboratoryとNetworkXを使った実践入門](https://www.ohmsha.co.jp/book/9784274224256/)
[Python 実践データ分析 100本ノック](https://www.shuwasystem.co.jp/book/9784798058757.html)