PyConJP 2021 参加レポート

10月15、16日Pythonに関するイベント「PyConJP」のカンファレンスが開催されました。昨年は完全オンラインでしたが、今年は1日目だけオンサイト参加が可能みたいでした。私が参加したセッションは以下の通りです。

  • Day1
    • Keynote: 谷合 廣紀氏
    • scikit-learnの新機能を紹介します
    • 位置データもPythonで!!!
  • Day2
    • Keynote: Mr. Brandt Bucher
    • 実践Streamlit & Flask – AIプロジェクトのプロトタイピングから本番運用までをいい感じにするPythonicなやりかた

それぞれに関して簡単に感想を書いていこうと思います。

Keynote: 谷合 廣紀氏(資料)

講演タイトルは「将棋とPythonの素敵な出会い」でした。将棋のプロ棋士でりながらエンジニアである谷合さんのお話でした。

印象に残った言葉は「エンジニアの強みは大体のものが作れてしまうこと」という言葉です。

世の中には色々便利なツールなどがありますが、「自分の環境だとうまく動かないんだよな」「この機能もあったらいいのにな」など思うことがあります。谷合さんはPythonに出会い、ディープラーニングに出会ったことで好きな将棋に対して疑問に思ったことをエンジニアリングで解決してしまうというのが素敵だなと感じました。

そもそも、色々なことをしながら、大体のものが作れるまでのエンジニア力があることが凄すぎます!

scikit-learnの新機能を紹介します

機械学習ライブラリであるscikit-learnの様々な機能を紹介していただけました。具体的には、

  • ColumnTransformer
  • HistGradientBoosting
  • HalvingGridSearchCV
  • sklearn.set_config

LavelEncoderやtrain_test_splitくらいでしかscikit-learnを使ったことがなかったのですが、機械学習における前処理、学習、ハイパーパラメータ探索において使える機能がたくさんあるんだということが知れて良かったです。(Pipelineとか全然使ったことなかった。。。)

エンジニアをしていると特定の処理系のパッケージは少なくしたいという気持ちになり、scikit-learnには豊富に機械学習系で必要な処理が揃っているので、統計的な機械学習手法でのモデル作成などであれば完結できそうだなと思いました。

位置データもPythonで!!!(資料)

扱う位置データの種類の話や、Pythonで可視化するためのパッケージの話、活用事例紹介などがありました。そもそも位置情報の表現の定義方法が色々あることに驚きました。定義方法は大きく2つに分かれていて、地理座標系と投影座標系というものがあることがわかりました。

東京スカイツリー
地理座標系北緯 35.71034 度
東経 139.8112 度
投影座標系X – 32167.859 m
Y – 2046.668 m

距離計算をする時には投影座標系に変換すると計算しやすいなども学べました。

また、地図データがラスタ形式の場合はxarray、ベクタ形式の場合はgeopandasを使うと良いなどのことも学べました(geopandas一択だろと思っていましたが、データの形式が異なることを知らなかった)。

foliumという地図の可視化のためのライブラリも紹介していました。ただ位置情報を描画できるだけでなく、folium.pluginsを使うことでヒートマップや時系列ヒートマップ、位置情報のクラスタ化など分析のために使える機能を備えていることがわかりとても感動!(こちらの記事などで凄さがわかると思います。)

Keynote: Mr. Brandt Bucher

Python 3.10より採用されたStructural Pattern Matchingの開発者Brandt Bucherさんによる講演でした。

Structural Pattern Matchingで重要なのは「パターンとして置けるのが式ではない」こと

import collections

meal = ["spam", "egg"]

# Python 3.9
if (
    isinstance(meal, collections.abc.Sequence)
    and len(meal) == 2
):
    entree, side = meal
    print(entree, side)

# Python 3.10
match meal:
    case entree, side:
        print(entree, side)

上記の例のように、以前のif分の中には式が置かれていましたが、Structural Pattern Matchingでは式が置かれていません。パターンとして置けるものは様々で、公式のチュートリアルPEP636やこちらの記事などが参考になります。

また、Soft Keywordsなるものも導入されたようで、構文かキーワードかを自動で判別してくれるらしいです。

match = ["spam", "egg"]

match match:
    case case:
        print(case)
> ["spam", "egg"]

こんなことができちゃいます!(本人はこんな書き方はおすすめしないよと言っていました笑)

講演中に例として出すコードには「spam」という文字がたくさんあったのですが、Structural Pattern Matchingからきているとおっしゃっていた時には会場が湧きました

現在はPython3.11の開発をしているそうで、Structural Pattern Matchingの改善も行なっているそうです。

meal = ["spam", "egg"]

output = ""
match meal:
    case _, _:
        output = "case 1"
    case "spam", _:
        output = "case 2"
    case _, "egg":
        output = "case 3"
print(output)
> case 1

現在、上記のようなコードでは、case 2やcase 3には到達しないコードとなっていますが、警告なしに実行することができます。Python 3.11ではこのようなパターンにエラー?警告?が出たようになったりとバグを生みづらい書き方ができるようになるそうです。

実践Streamlit & Flask – AIプロジェクトのプロトタイピングから本番運用までをいい感じにするPythonicなやりかた(資料)

AIプロジェクトをアジャイルにどうやって進めていくのが良さそうなのかという話でした。AIオオタニさんというアプリをもとに解説していただきました。(コードを公開していただけていることにとても感謝)

興味深かった点は「AIプロジェクトだからそこ動くソフトウェアを元に開発する」ということです。確かに、「とりあえずAIを使ってみたい」や「AIってなんでもできるんでしょ」のような感覚で話をされたりして、実際どのようなプロダクトか想像できていない場合が多いような気がします。なので、とりあえず動くアプリケーションを元に会話することで、何ができて何ができないのかなどの認識が合うのでとても良いなぁと思いました。また、AIプロジェクトに動くアプリケーションがあることがとても重要なんだなと感じさせられました。

また、実際にPoCからプロダクトとしていく際に大切なこともお話しされていました。具体的には以下の2点、

  • コードを分割する(データの処理、モデルの処理、予測結果の確認)
  • テストを書く

お話を聞いて、テストが1つでもあるのかがとても重要だと感じることができました。実際にコードも公開していただいているので、コード分割の仕方やテストの書き方を参考にしてみようと思っています!

最後に

オンライン開催であることによって、当日に予定が入っていても気軽に参加できることがとても良かったなと思いました。久しぶりのカンファレンスの参加でしたが、勉強のモチベーションも上がるしやっぱりいいものだと実感しました。また、色々なイベントに参加していこう!(登壇もしたい!)

コメント

タイトルとURLをコピーしました