はじめに
先日開催された、みんなのPython勉強会で得られた知見についてまとめます。
毎月開催されている、この「みんなのPython勉強会」。
2019年4月開催の今回は平成最後ということもあり、司会進行と計6人の登壇者全員が平成生まれ縛りとなっていました。
本ブログ記事は全体としては少し長文なので、概要だけをさっと知りたい方は1.1〜1.6までを参照ください。
その後2.1から各登壇内容の詳細レポートが改めて続きます。
1. 各登壇内容からの知見抜粋
1.1. 正規表現
Pythonの正規表現における
\w
がマッチするのは、[a-zA-Z0-9_]
(半角英数字とアンダースコア)だけではないそれ以外にも、かな漢字、ヘブライ文字、アラビア文字などの非常に多くの(20,000種以上の)Unicode文字にマッチする
1.2. 機械学習
- 機械学習におけるデータクレンジングでは、実際の状況(今回であればタイタニック号沈没)を想像しながら特徴量として活用できるものを探す
1.3. Pyramid
過去に自身で開発したDjango製アプリを、情報の少ないPyramidで作ることに挑戦
苦戦はしたが、Djangoの良さ、Pyramidの良さ、それぞれ発見があった
1.4. 環境構築
- 初学者は、Pythonやパッケージのインストール方法をどれか1つだけにするのがおすすめ
- Pythonのインストール
- python.orgからのインストールとAnaconda利用の両方などは避ける
- パッケージのインストール
- Anaconda利用者であれば、
pip install
はconda install
に読み替える
- Anaconda利用者であれば、
- Pythonのインストール
- 次のステップとして仮想環境を利用すると良い
1.5. Falcon
同じ軽量フレームワークであるFlaskと比較して10倍以上高速
RESTfulな機能を持ち、バックエンドAPI開発に適している
1.6. 持っていないものを見つける話
Pythonを含めたオープンソースと、それにまつわるコミュニティは持っていない者の味方
自分の持っていない物が分かれば、自分がどこで活躍すべきかが分かる
目次
- はじめに
- 1. 各登壇内容からの知見抜粋
- 目次
- 2.各登壇内容の詳細レポート
- 3. 最後に
2.各登壇内容の詳細レポート
2.1. Pythonにおける正規表現の話 \wとUnicodeの意外な関係
\w
は、半角英数字とアンダースコア以外の多くのUnicode文字ともマッチする
Pythonの正規表現における
\w
はany word characterと呼ばれる\w
は、[a-zA-Z0-9_]
(半角英数字とアンダースコア)と同義と説明されている場合があるが、それ以外の非常に多くのUnicode文字にもマッチする例えば、日本語のかな漢字にもマッチする
Python3の公式ドキュメントによれば「
unicodedata
モジュールで提供されているUnicode データベースでlettersとしてマークされている全ての文字とマッチする」とある
Unicodeにおいては各文字はLetter, Numberなどにカテゴリ分けされている
- カテゴリはLetter, Number, Punctuationなど
それぞれLx, Nx, Pxと表現される
Lettersもさらに以下に分類される
- Lu(Uppercase:大文字)
- Ll(Lowercase:小文字)
- Lo(Other:その他)
このLoに分類されるのが、かな漢字、ヘブライ文字、アラビア文字などであり、非常に文字数が多い
Numberも以下に分けられる
- Nd(Decimal Digit:10進数)
- Nl(Letter:ローマ数字などの数を表す文字)
- No(Other:分数などのその他の文字)
\w
は全てのLetter, Numberにマッチするわけではなく、一部例外がある
\w
は20,000種以上の文字にマッチするが全てのLetter, Numberにマッチするわけではなく一部例外がある
漢字だけマッチさせたい場合は、Unicode文字ブロパティを使うと良い
- 漢字プラス「々」といった記号だけをマッチさせたい場合は、
regex
モジュールで漢字のUnicodeエイリアスp{Han}
を指定すると良い
>>>import regex >>>regex.findall(r'p{Han}', '堂々') ['堂', '々']
2.2. Pythonと挑んだtitanic 〜 101回目のsubmit 〜
- xxx_boyさん
Kaggleは予測モデリングおよび分析手法関連プラットホーム
- 企業等がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う場
titanicはKaggle内のコンペ
- 沈没したタイタニック号からの生存者を予測する課題
機械学習モデルの作成では最初にデータのクレンジングを行う
- 欠損値補完
- 特徴量作成
- 不使用の特徴量の削除
データのクレンジングにあたっては、実際の状況(タイタニック号の沈没)を想像しながら特徴量として活用できるものを探す
欠損値の補完の一例
年齢の場合
- Miss, Mrs, Mrなどの敬称ごとの平均年齢を算出し補完
特徴量の作成の一例
まず家族の人数を算出し、そこから更に脱出船に乗れる確率を仮定
- 父、母、幼い子2人であれば、子どもから優先して脱出船に乗れると想定
今回の予測モデル作成の詳細記事
2.3. DjangoとPyramidで同じアプリを作った話
既存のDjango製アプリを、情報の少ないPyramidで作ることに挑戦した
過去に自身で開発したDjango製アプリを、他のフレームワークで開発するとどうなるのか疑問に思った
他のフレームワークには、資料の少ないPyramidを選定
Pyramidによる開発で苦戦した点
フルスタックフレームワークであるDjangoと比較すると、Pyramidでは他のパッケージを利用する必要があり、それらの学習コストを要する
- 今回は以下パッケージを使用した
- ORMにOrator
- テストにPytest
- 今回は以下パッケージを使用した
Djangoは比較的「こうあるべき」という指針が明示されているが、Pyramidにはそうしたものが無いので実装時に判断に迷うことがあった
Pyramidで好きな点
- add_request_method
- リクエストオブジェクトにメソッドまたはプロパティを加える
- 簡易な計算結果をモジュールひとつでWebブラウザに表示できる
- 疎結合なアプリケーションを作りやすい
- viewのテスト実行が早い
Django以外のフレームワークでWeb開発する場合のアドバイス
「Djangoでは◯◯ができるのに」という考えは捨てた方が良い
- 比較するにはDjangoは用意された機能があまりにも手厚すぎる
Django経験者にとっては「車輪の再発明」に思えるような開発をすることもあるかもしれないが、それ自体も楽しもう
2.4. P(ython)&I 最初の落とし穴を避け、成功体験を積むために
自身のPython成功体験を支えたのは環境構築
- 最初に手に取った本は「退屈なことはPythonにやらせよう」
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
- 最初の環境構築が上手くいったので、Pythonでの成功体験を積むことができた
Pythonを始めた直後の人は環境構築でつまずきやすい
その後、自身がPythonを初学者に教えるようになって、環境構築でつまずく人が多いことに気付いた
よく見られるのが、Pythonを重複してインストールしているケース
- python.orgからのインストールとAnaconda利用の両方など
Pythonのインストール方法はどれか1つだけにしよう
- 各種チュートリアルの記載の通りに進める姿勢は素晴らしいが、Pythonのインストール方法が自分とは異なる場合は、その部分を読み替えよう
パッケージのインストールはpip install
とconda install
のどちらかに統一しよう
例えば、python.orgからPythonをインストール済みであるところ、Anacondaを利用した機械学習の解説記事を実践してみたくなったら?
- この場合、Anacondaを導入することはおすすめしない
- Anacondaに最初から入っているパッケージ(numpy, scikit-learnなど)は、個別に
pip install
しよう
逆に、AnacondaでPythonをインストール済みであるところ、python.orgからPythonをダウンロードして環境構築している記事を実践する場合は?
- 記事中でパッケージを
pip install
している箇所は、conda install
に読み替えよう
- 記事中でパッケージを
次のステップとして仮想環境を利用しよう
- venvなどを使う
- 詳細はPyNyumonテキストを参照
- Anacondaであれば、
conda create
,conda activate
で環境を作成・切替できる- 詳細はpython.jpのCondaコマンドを参照
2.5. FlaskとDjango以外のAPI開発の選択肢
PythonのWebアプリケーションフレームワークの二大巨頭といえばFlaskとDjango
- Flask
- 軽量、学習コスト低
- Django
- フルスタック、学習コスト高
Flaskの機能は最低限に絞られ、パフォーマンスもさほど良くない
一定の機能を作るには、サードパーティのライブラリをある程度把握する必要あり
他のフレームワークと比べ、パフォーマンスはそれほど良くない
DjangoはバックエンドAPI開発には不要な機能も多い
フルスタック故に他のサードパーティライブラリを入れなくても一通りの開発ができるが、学習コストもそこそこあり、ちょっとしたものを開発するのには不向き
バックエンドAPI開発には不要な機能も多い
Falconはパフォーマンスの良いAPIを開発するのに適している
最近はフロントエンドのSPA化が進み、フロントとバックエンド分離のニーズは高い
FalconはFlaskの10倍以上の速度
FalconのResourceという機能(MVCのCに相当)はRESTfulであり、API開発に適している
Falconの課題はサードパーティの少なさと、しっかりとした設計が求められること
同じ軽量フレームワークであるFlaskよりもサードパーティライブラリが少ない
Flask同様、構成はしっかりと設計する必要がある
- DDD(ドメイン駆動設計)のオニオンアーキテクチャ、クリーンアーキテクチャで設計すると良いかもしれない
今後のFalconはASGI対応予定
- 今後リリース予定の3.0ではASGI対応予定
2.6. 無題(持っていないものを見つける話)
Python, Linux, 初のWebブラウザも平成初期の生まれ
Pythonは1991〜1992年生まれ(平成3〜4年)
Linuxは1991年生まれ(平成3年)
初のWebブラウザ(NCSA Mosaic)は1993年生まれ(平成5年)
平成時代にPythonでWebアプリを作り続けてきた
学生時代にPythonに出会い、様々なWebアプリケーションを作ってきた
就職後も受託開発や自社サービス開発でWebアプリケーションを作る
自分のスキル(Webアプリ開発経験)と会社の強み(Pythonに特化)を活かし、新規ビジネスとなる自社サービスのWebアプリを作ることができた
- 作者: 株式会社ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2018/06/13
- メディア: Kindle版
- この商品を含むブログを見る
持っていない者にとって大切なのは自分らしい物を作ること、オープンソースはそんな持っていない者の味方
大企業のような原資を持たない場合、自社サービスの運営(マーケティングやその他)では制約があるが、そんな中で大切なのは自分たちらしい物を作ること
Pythonを含めたオープンソースと、それにまつわるコミュニティは持っていない者の味方であった
自分の持っていない物が分かれば、自分がどこで活躍すべきかが分かる
失われた時代という平成を生きたからこそ、次の令和に作れるものがある
平成には失われた20年(10年とも30年とも)があるといわれ、これを耳にすると平成で生まれ育った自分は消沈してしまう
しかし、失われた時代に生きたからこそ、次の令和に作れるものがある
3. 最後に
勉強会終了後の私のツイートより。
平成最後の本日のみんなのPython勉強会は、司会進行、登壇者ともに平成生まれ縛りでしたが、いつもに増して学びの多い勉強会でした
— やんばる@Webエンジニア (@shonansurvivors) 2019年4月10日
どの登壇も良かったんですが、特にhirokikyさんの登壇内容は平成最後の締めくくりと令和への幕開けに相応しいグッとくる内容でした
皆さま、お疲れ様でした😌#stapy https://t.co/fEBiwVwYLO
本当に素晴らしい勉強会でした。
主催のStart Python Clubの方々、会場提供のリーディングエッジ社さん、登壇者の方々、また懇親会でお話しさせていただいた方々、ありがとうございました!