【イベントレポート】Pythonエンジニア勉強会vol.2.0

こんにちは!TECH Street編集部です!

2022年2月10日(木)に開催したPythonエンジニア勉強会。今回は、Pythonの歴史から最新トレンド共有までを行う勉強会イベント第2弾を開催した様子をお届けいたします。

登壇者はこの方!
阿部 一也さん/Institution for a Global Society株式会社

まずは、Pythonの概要と誕生のきっかけをお話いただきました。

そもそもPythonとは

TIOBE Softwareが毎月発表するプログラミング言語の人気ランキング「TIOBEインデックス」では、2022年2月にPythonが1位になりました。数あるレガシーな言語を抜きこの地位までなれたのは、かなり需要があるからだと思います。

Pythonはグルー言語(ノリ言語)と言われています。Pythonや他の言語ライブラリーやパッケージを簡単にくっつけて目的を達成できるからです。

Pythonの進化

Python3のバージョン3.8からは、リリースが年に一度で日付も10月14日と固定化されました。
その前に年に一度もリリースができない年もありました。Python3の前はPython2がありますが、Python2は機械学習のブームで使われており、グルー言語という位置づけだと外部パッケージと依存関係も強くて、Python3が出てもPython2に乗り換えられるところがほとんどありませんでした。

Pythonの複数のプロジェクトをどのように管理すべきかはチームによって方法がバラバラでしたが、バージョン3.3からはPython自体にvenvという機能として提供されたため、管理方法が定まってきました。これはとてもインパクトが大きかったと思います。
3.4からは新たな非同期処理が本体からリリースされました。asyncioなどです。性能改善やWeb制御に使えるのでインパクトが大きかったです。

3.5から型ヒント、3.6からは変数アノテーションという機能が本体から提供されています。Pythonは動的に型を付ける言語なので基本的に型を意識する必要はありませんが、品質を上げるためにこういった機能を利用することもできます。どうしてこれが必要か私なりに判断すると、様々な業務で使っていく中で、型が定まっていないと故障に繋がることが多いからです。元々はサードパーティ・ライブラリとして提供されてましたが、後付けで本体に取り入れたのは型指定による品質向上はプログラミング言語としては重視すべきことだということを表してもいます。

ここからはPythonの各バージョンの変遷と機能の特徴をそれぞれ解説いただきました。

 

Python3の登場

Python3からは文字形式がASCIIからユニコードベースへ変更されたので日本語を利用する私達にはとても便利になりました。この変更は後方互換性もないので、かなり思い切った決断です。Python3の登場の中で一番大きなインパクトだと思います。
またprintが()付きになり、integerの割り算の内容などが変わりました。

Python3.8

Python3.8からセイウチ演算子が登場しました。これはとても便利です。
具体的には、if文の中で判定した値などを、セイウチ演算子を使うことで内部の処理でも利用できるという機能です。

使用されているf文字列(f-string)は、Python3.6から追加されましたが、プリント文を書くときに変数を指定して割り当てて出してくれるので、文字列フォーマットを制御する方法として非常に便利です。

Python3.10 

PythonにはもともとSwitch文はありませんが、3.10からパターンマッチングという機能が追加されました。

これはSwitch文のように一つの変数の内容をただ判定するものではありません。
オブジェクトの状態について判定や比較ができたり、パターンでの判定も行えます。

パターンで判定できることは、オブジェクト指向と相性がよくなります。クラス継承関係の階層でフィルターするようなポリモーフィズムで判定したり、オブジェクトの複数のメンバーからそれぞれ範囲を絞ることもできるので、クラス設計の判定をロジックとして書きやすくなり可読性が上がります。最近注目されているRust言語もこのようなパターンマッチングができるmatch文しかありません。

Python3.11の説明

3.11の変更点も公式サイトに順々に掲載されていってますが日本語訳はされておりません。いまのところ例外が起きたときの説明を分かりやすく改良などが提案されてたり、例外のキャッチを改良することなどが上がってます。

公式サイト以外で各バージョンの新機能の翻訳を出しているサイト発見したのでぜひチェックしてみてください。

https://qiita.com/ksato9700/items/e2356ea9c19c3ff8a467
https://github.com/vinta/awesome-python

 

新機能だけでなく…Pythonでこんなチャレンジをしてみては?

・静的な解析で品質を上げよう

品質向上には静的チェックのライブラリもお薦めです。もしまだやったことがなければ、是非チャレンジしてみてください。

・型を書いて品質を上げる

型のチェックではmypyというライブラリが人気です。特に計算をする場合は型がしっかりしてると品質を劇的に上げられます。ここまですると金融のさまざまな業務でもPythonが使えるようになるのではないでしょうか。

最近のAIや機械学習や論文にはコードも公開されていますがだいたいPythonで書かれてるので、それを試用してよかったものをシステムの中に取り入れたい時には、同じ言語だと移行の負担がかなり減らせられます。

 

Pythonによる可視化

ここからは、Pythonによる可視化とその種類について解説いただきました。

グラフによる可視化以外に、Diaramsなど地図で可視化するものもあります。
どれを使うか迷う場合は、The Python Graph Galleryのサイトなどを見ると参考になります。

Django

まずはPythonで実装されたWebアプリケーションフレームワークDjango。新しいバージョンも出たので、ぜひチャレンジしてみてはいかがでしょうか。

Flask

FlaskはDjangoよりも軽量にアプリケーションが作れる言語。
Djangoはいろいろな機能が最初から入っていてもともと装備されているものですが、そこまで重たくなくても出来るというときにはFlaskでも可能です。Flaskは最低限の機能だが、それなりに使えるものになっています

Streamlit

Streamlitはさらに軽量な可視化。
可視化のパッケージではなく、それを表示するための簡単なWebアプリケーションです。

使い方としては、データ分析した結果を他の人に見せたいときになどに有用で、データやプログラムを直してStreamlitのWebサイトでリロードボタンを押すと、すぐにそれが反映されて見ることが可能です。かなりインタラクティブに、コードの修正などを他の人に見てもらうことができるので、分析環境でとても使い勝手の良いWebアプリケーションです。

Jupyter Lab

Jupyter Labは PythonなどをWebブラウザ上で記述・実行できる統合開発環境です。
今までJupyterは1つの画面でしか分析が見ることができず、たくさん見るためにはブラウザのタブを増やすしかありませんでしたが、Jupyter Labは複数開き横に並べて比較などもできるので分析がさらに便利になりました。

可視化の手法まとめると

伝えたい範囲ややりたいことによって可視化方法も変わるので、その時に最適なパッケージを使うことをお薦めします。

・個人やペアで分析する →Jupyter Lab
・分析をチーム関係者や上司などに見せる→ Streamlit
・カジュアルに一般公開する(軽量型のWebアプリ化)→ Flask
・本格的なサービスとして公開する(本格的なWebアプリ化)→ Django

となるかと思います。ぜひ今後の参考にしてみてください◎

最後にいまどきのデータサイエンスの方法はどのように進化し、そこでPythonがどのように使われてるか、新しいツールなどについても紹介いただきました

 

Pythonによるデータサイエンス

データサイエンティストのスキルはこの図のように分かれてます。私の仕事は主にデータの前処理をしたり、加工なので、スキルでいうと見習いレベルになります。
この見習いレベルには脅威になるものが出てきてるのでいくつかご紹介します。

AIや機械学習という話だとどこから話せばとなるので、テキストマイニング指向のお話をかいつまんでできればと思います。まずはHugguingface Transformesです。

Hugguingface Transformes

事前学習のモデルも入っているので、世の中の論文などで紹介されているものも網羅されています。このライブラリを使えば、都度環境を作る必要がありません。

PyCaret

PyCaretは、データの前処理や可視化モデル開発などを数行のコードなど大体のことをやってくれる点がすごいところです。

機械学習をかけたあとに、どうやって動かすかという解析の可視化も各モデルに応じて用意されていて、しかもボタン1つで操作可能となっています。ちょっとしたAIで分析をしたいという方におすすめです。

toiro

日本語NLPのライブラリもたくさんあります。
2020年のPyConJPで最先端自然言語処理ライブラリの有効な利用方法を発表された方が、作ったパッケージがtoiroです。それぞれの機械学習の日本語の形態素解析器に一通り触れるようなライブラリを用意してくれています。

Janome

Pythonで実装された、形態素解析器です。

Janomeは形態素解析のパッケージです。MecabをPythonパッケージとして移植したものです。
PythonからMecabを使う場合は別途Mecabをインストールする必要がありますが、この環境を作るのに結構ハマります。JanomeはpipでインストールするとMecabとほぼ同様の機能を使えるので、誰でも簡単に形態素解析ができるようになりました。

 

トレンドを素早く知るには!?

機械学習や自然言語処理の進化をリサーチするのは、範囲も広いしスピードも速すぎてとても大変です。
私の場合は、探してる時間や体力もないので有料サイトを活用しています。具体的にはシリコンバレーに住んでいる日本人のブログサイトを購入して読んでます。論文がメインですが、最近のトレンドが分かりやすくまとめられてるので、データサイエンティストでもビジネスマンでも参考になります。

https://ja.stateofaiguides.com/

上記以外では、量子コンピューターのトレンドもリサーチしています。AI関係とは別に発信されてるのでここは自分でリサーチしていますが、予想以上に進化が早まっているので注目する必要性を感じています。

トレンドとは話が逸れますが、量子コンピューターのプログラミングについては、Qiitaという技術投稿サイトへ分かっていることと、分からないことを両方を掲載したことがあります。そうすると、わからない部分のアドバイスをプルリクでもらえて解決することができました。ここでのポイントは分かったことまでは発信し続けたことです。自分が与えることで、与えてもらえる頻度も高まるという経験を何度かしたので、是非、みなさんにもお薦めします。

最後にまとめとなりますが、

・新機能で楽に良くできないか検討
・コンテキスト別に可視化方法を検討
・自動でやってくれるものが増えたので任せるところは任せて本業に専念

以上の3つを念頭において触れるものはぜひ触ってみていただければと思います。

 

まとめ

いかがでしたしょうか。Pythonの最新機能から可視化方法、そしてデータサイエンスの方法まで幅広くお伝えいただいた結果、ここには紹介しきれない内容もあり、盛りだくさんのセミナーでした。
みなさんも本文中に触れているツールにどんどん触れていってみてください!最後に、当日のQ&Aを共有いたします◎

>>次のページへ


 

(Q)あべんべんさん、一番好きなのはPythonですか?他と比べて良い点なんかあればお聞きしてみたい。
(A)PythonのコミュニティをやっているのでPythonが一番好きです。最近はRust言語にチャレンジしています。案件によって使う言語は適切なものを選ぶようにしてます。その中でもPythonは、他の比べて様々な利用シーンがあると思います(AI導入、身の回りの自動化、システム間連携のデータ整備、Webアプリなど)。

(Q)IDEのオススメは何ですか?
(A)私はPyCharm を使っています(JetBrainsが大好き)が、VSCodeも最近人気があります。

(Q)プログラミング未経験で先週始めたばかりで【初心者】を選択したものですが、クラスとかメソッドすらまだイマイチわからないレベルです。アドバイスがあればうれしいです。
(A)Pythonはクラスが分からなくても結構作れるところが魅力だったりもします。クラスじゃなくても、やりたいことができれば最初はいいのではないでしょうか。もっとよくしたい場合には、クラスなどを知るととても便利にできます。

(Q)チャットにもありました「利用しているライブラリがPython3対応とかをしてくれていないのでPython2を使い続けるという判断もありましたね」というのはあるあるですよね。こういうバージョンアップの判断とかで何か良い方法を聞いてみたい。
(A)個人の意見ですが、ドメインに依存すると思います。2でしかできない環境・界隈もあります。前までは機械学習などAIのライブラリが2にしかなかったので、そういう事情に引っ張られる場合があります。現在は2のサポートは終了したのでよほどの理由がない限り使うことはないのではないでしょうか。

(Q)なるほど、型・リスク。そう聞くと、Pythonに合う業務・システムってズバリ言うとどんなのでしょうか。
(A)データ分析や機械学習はPython一択な気がします。より一層DXが入ってくると思うので、そこで機械学習が必要となる部分では活躍すると思っています。この業務と限定できないくらい、活躍する言語ではないかと思っています。

(Q)case _:は、pointの値はどういう場合でしょうか?
(A)case _:は上記以外を指します。今回のサンプルでは、point型のオブジェクトまでは全て網羅されるので、point型以外のオブジェクトがここに入る対象となります。

(Q)今おすすめのPythonの再入門にはどんな本がよいでしょう。Python2の頃の利用者なので、新しいところの知識が足りないです。
(A)Python3への変化を意識して学びたい場合は、「Python 実践レシピ」などがお薦めです。Python認定資格と

(Q)最近どんなPythonプログラムを作りましたか?
(A)データ分析が多いので、自然言語や可視化のところの仕掛けをよく作っています。

(Q)今度はぜひ実演で教えていただきたいです(むちゃぶり)
(A)GPT-3やDALL-Eのような超大規模なもの以外は、一通り動くものを用意してるので機会があればまた発表させていただきたいです。

(Q)Pythonのダメだと思うところはどこですか?
(A)他の言語と比べるとやはり性能面ではないでしょうか。Python自体は遅くても高速なライブラリや特別な仕組みを使って改善することはできますし、3.11のリリースでは高速化を一番重視しているようですが、C++やRustに比べると太刀打ちできません。

イベントレポートは以上になります!今後のイベントもお楽しみに◎