【G's EXPANSION】Python実践プログラムを受講してみた

<h1>はじめに</h>

”セカイを変えるGEEKになろう”を合言葉に、熱量の高い人たちが集まるエンジニア・起業家養成スクール [G's ACADEMY](https://gsacademy.jp/)！！
今回はこのG's ACADEMYが開催している拡張プログラム
【G's EXPANSION】Python実践プログラムを受講したので、その内容についてまとめます。

ちなみに私はこのG's ACADEMYの福岡DEVコースを約4年ほど前に卒業しておりますが、今回受講した拡張プログラムは、卒業後数年経っている私のような人も、そしてG's ACADEMYの生徒ではない人でも、プログラミングの基礎を学んだ人であれば、どなたでも受講できるプログラムとなっております。

https://gsacademy.jp/exp


<h1>講座の概要</h>

<h3>■受講フロー</h3>
①事前学習（オンデマンド動画）<BR>
②オンラインライブ授業（各2.5h×2回）

<h3>①オンデマンド動画にて事前学習＋課題提出（約2週間）</h3>
<p>講座に申し込むと、まずは同じ講座を受講するメンバーが集うSlackワークスペースに招待されます。
そこで動画教材へのアクセス方法と、資料が配布されます。

オンデマンド動画は約10分前後のものが全17回分。
資料もとても細かく丁寧で、コードもしっかりと書いてありましたので、
慣れないうちは何度も写経をするだけでも、かなり勉強になるのではないでしょうか？

また課題は、「チャットボットニュース」を作成。
この課題提出が完了しないと、次のライブ授業へは進めません。

実務でも締切・納品は大切ですので、次のステップへ進むために課題提出が必須なのは、怠け者の私には必要不可欠と感じました。

Slackで皆さんと一緒なのも良いですね！
わからない部分を質問して回答し合ったり、メンバーがどんどん課題提出をしていく中で、私も頑張ろう！という気持ちになり、きちんと課題を提出することができました！</p>

<ol>
<li>Pythonの基礎</li>
<li>環境構築</li>
<li>「チャットボットニュース」作成</li>
<li>GitHubで課題提出</li>
</ol>

<h3>②オンラインライブ授業（各2.5h×2回）</h3>
<p>オンラインでのライブ授業が2回あります。1回あたりは2.5時間で、全2回。
機械学習に挑戦！ということで、まず概念を学んだのち、実際にPythonを用いて、手書き数字を判定するWebアプリケーションを作成します。</p>

1回目：機械学習で手書き判定アプリ制作
2回目：DEPLOYしよう

<h1>講座内容の紹介</h>
<h3>①オンデマンド動画の学習内容</h3>

<ol>
<li>Pythonとは</li>
Pythonの歴史や特徴、メリット・デメリットなどを学習
<li>Python基礎編</li>
言語の特徴、インデントスタイル、データ構造、関数など
<li>モジュールとパッケージ</li>
パッケージの使い方、標準モジュールと外部モジュールについて
<li>Webスクレイピング</li>
“BeautifulSoup”というモジュールを使ってWebサイトから情報を取得<br>
ジーズアカデミーのWebサイトから画像をまとめてダウンロードしてみる<br>
JavaScriptのページレンダリング
<li>Webサーバー </li>
軽量で高機能な“Flask”を使ってWebアプリケーション開発<br>
Cookieやsession、loggingなどを使ってみる<br>
デプロイしてみる！<br>
 ※デプロイはやや難しいので、講師の宗定先生のblogを参考に…<br>

https://www.yoheim.net/blog.php?q=20170206
</ol>

上記内容のオンデマンド動画を学習し、課題を提出しました！<br>
お恥ずかしながらGithubが久々過ぎて若干手こずりましたが、なんとか期限内に無事提出！[提出課題はこちら](https://github.com/majyorika/python_newschatbot)
実際に動くと、楽しくなりますね！Pythonは、とても柔軟で使いやすく、短い文でも色々なことが実現できる有能な言語だと再認識しました！また関数も非常に強力で使いやすいです。<br>Pythonには2系と3系があるというのは、今回の講座で初めて知りました！<br>これを知っているだけでも、自分で学習や情報収集を行う際に、つまずきが少なくなると思いました。

<h3>②ライブ授業の学習内容</h3>
2.5時間ほどのライブ授業が2回ありました！（当日参加できない人にはアーカイブもあります。）
<h5>■1回目：「機械学習で手書き判定アプリ制作」</h5>

①まずは機械学習の概論のお勉強です。
［回帰］と［分類］
回帰は数値を予測、分類はどの分類に当たるかを予測。
［教師あり］と［教師なし］
事前に与えられたトレーニングデータを使って学習を行い、それを元に予測、与えられた未知のデータから、何らかの本質的な構造を導き出して予測。
<ol>機械学習の作業ステップは下記の流れで行われます。
<li>データを入手して理解する</li>
<li>アルゴリズムを決める</li>
<li>特徴量を決める</li>
<li>データのクレンジング・整形をする</li>
<li>学習する</li>
<li>モデルを評価する</li>
<li>モデルを改善する</li>
</ol>

②機械学習を取り巻くPythonライブラリ
行列やベクトルを扱えるもの、グラフを作れるもの、数学計算やデータ処理ができるものなど、いろいろなライブラリを紹介して頂きました。

③SVMを用いた手書き判定アプリを作る
SVMは、「Support Vector Machine」の略で、データの分類をするための機械学習アルゴリズムだそうです。
機械学習の作業ステップに沿って、手書き判定アプリをつくるための流れを学習しました。

機械学習の部分になると、数学的要素も多くて難しかったのですが、宗定先生がとても丁寧に教えてくださいました。
また、講義のアーカイブも提供して頂きましたので、繰り返し見ていくうちに、少しずつ理解できました。

機械学習の流れを学びましたので、次回に向けて手書き判定アプリを作ってくる！という課題が与えられました。写経でもOK！とのことですので、まずはやってみることですね！

またMachineLearningやデータサイエンスについてのオススメサイトや書籍紹介もしていただきました。

<h5>■2回目：HerokuでDEPLOYしよう</h5>
<p>2回目の講義では、1回目に作成した手書き判定アプリを、Herokuでデプロイ予定でしたが、2022年11月頃にHerokuは有料になってしまったため、宗定先生がご準備してくださったサーバーに、GitHubからデプロイしました。</p>

①サーバー上でプログラムが動く仕組みを理解する
［CGI］と［WSGI］
CGIはサーバーを動かすための昔ながらの仕組み。重たいという課題あり。
WSGIはPythonをサーバーで動かすための標準インターフェース。

②デプロイに使用する技術要素を理解する
[Gunicorn]
Gunicornは、PythonのWeb Server Gateway Interface（WSGI）を実装するHTTPサーバー。
下記コマンドでインストールできる。
```
pip install gunicorn
```

③デプロイにチャレンジ！
AWS EC2にデプロイしました。
GunicornやApacheなどのミドルウェアは既にインストールして頂いてました。
こちらに宗定先生のGitHubからSSH接続し、自分用に用意して頂いたフォルダへデプロイしました。

鍵ファイルをダウンロードして、デスクトップに保存。
ターミナルを開き、下記コマンドを実行。
```:MAC
cd Desktop
chmod 400 gs-python-exp-1.pem
ssh -i gs-python-exp-1.pem ec2-user@3.112.XXX.XX
```

SSH接続後、下記コマンドでGitHubからデプロイ！
```
# 作業ディレクトリへ移動
cd /var/www/html/XX
# Github から アプリケーションを取得
git clone https://github.com/yoheimune-python-lecture/hand-written-digit-recognition.git
# practice フォルダまで移動
cd hand-written-digit-recognition/practice
# Gunicornの起動
/usr/local/bin/gunicorn -w 1 -b 0.0.0.0:80XX app:app
```

完成！こんな仕上がりになりました！

http://demo-chatbot-news.paint-ink.com/

※実際に私がデプロイしたサーバーは現在は起動していないので、サンプル用アドレスを載せています。

<h1>応用</h1>
現在、自分のお仕事で、お客様の来客予測を立てたいと思っています。<br>
今回学んだスクレイピングの技術と、これまでの来客者数の履歴などを学習させて、どのくらいの精度が出るかやってみよう！と思っています。

<h1>最後に</h1>
私は、G's ACADEMY卒業後もIT業界には在籍して居るものの、プログラムを書く機会が以前よりも少なくなっていたため、今回のPython講座に参加したことで、自分の手を動かす良い機会となりました。

特に実務で使えそうなスクレイピングの技術や、機械学習の概念などについては、とても理解が深まりました。

・Pythonの概要や活用の仕方を知りたいエンジニアの方
・新しい言語、話題の言語にチャレンジしてみたいエンジニアの方
・書籍などでプログラミングを独学しているが、そろそろ実践的なものを作ってみたいエンジニア志望の方

など、色んなフェーズの方に気軽に参加していただけるオススメ講座だと思います！

Flutter講座なども気になっているので、また近々別の講座にもチャレンジしたいです♪