Pythonでできること
2021/08/23 - moriya - ~4 Minutes
Python でできることについて調べている人が多いようなので、 私がどのように使っているかなども交えながら書いてみたいと思う。
応用分野
AI、機械学習
Python が得意な分野とされているが、 説明できるほどの能力が無いので、割愛する。
Keras などが参考になると思う。
WEB アプリ
標準ライブラリだけで作るのは難易度が高い。私が使いやすいと思ったのは次のフレームワークだ。
前者は様々な機能を内蔵した大型のフレームワークで、後者は軽量のフレームワークである。フレームワークを使うことで、リクエスト、レスポンスの記述が簡単かつよりセキュアなものにできる。
特に django は、クロスサイトスクリプティング(XSS)、SQL インジェクション、クロスサイトリクエストフォージェリー(CSRF)、ディレクトリトラバーサル、など セキュリティへの対策が備わっている。
テキスト、データ処理
テキスト処理が簡単で、 リストや、辞書(マップ、ハッシュ)も簡単に作れるので、様々なデータの処理に向いている。
私は次のようなことに使っている。
- WEB サーバ、WEB アプリのログや、syslog などのログ調査。特定パターンを抽出するなど。 正規表現ライブラリ を使用。
- CSV ファイル処理。CSV ファイルを読み出して、必要な変換処理をして、DB に登録するなど。 CSV ライブラリ を使用。
- EXCEL ファイル処理。EXCEL ファイルから読み出してデータを集計したり、EXCEL ファイルに書き出したりする。 openpyxlライブラリ を使用。
- DBからのデータ抽出、登録。mysql へのアクセスは Connector/python 、Postgres へのアクセスは psycopg などを使用。
- json データを解析して必要な部分を抽出する。 JSONエンコーダ/デコーダ を使用。
データの集計、科学計算、統計処理、グラフ作成などには以下のものも使われる。
ネットワークテスト、ペネトレーションテスト
scapy というライブラリを使えば、パケットを受信したり、パケットを加工して送信できる。
Quick Demo にあるが、以下のように書けて便利ではないだろうか。(便利と思ってくれる人はかなり詳しい人か・・・)
>>> Ether(dst="ff:ff:ff:ff:ff:ff")
/IP(dst=["ketchup.com","mayo.com"],ttl=(1,9))
/UDP()
実際、私が python を使おうと思ったのは scapy を見たからだった。
ペネトレーション(侵入)テストツール canvas は python で作られている。
自動化
WEB スクレイピング
プログラムで WEB サイトにアクセスして情報を抜き出すのが簡単にできる。以下のようなライブラリを使う。
前者は、標準ライブラリより簡単に使えるネットワークライブラリ。 後者は、HTML ドキュメントからデータを抽出するライブラリ。
WEB サーバ監視
WEB サーバにアクセスし、結果を AWS の cloudwatch サービスに送信して稼動状況を監視したりしている。
Python で書かれたツール
次のものが有名だろう。
- yum
- awscli
- trac
Python の学習法と注意点
充実したチュートリアルとライブラリーリファレンス
Python はドキュメントが充実しているので、 私は、 チュートリアル を試して、後は ライブラリーリファレンス や Google 検索で十分だった。
ただ、以下の2点をメモ的に書いておこうと思う。
内包表現(list comprehension)
>>> [i*2 for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
なのだが、いつも、「内包表現」という名前が思い出せない。
リスト中の文字列をカンマなどで結合
>>> ','.join(['mya', 'myamya', 'kuromame'])
'mya,myamya,kuromame'
なのだが、今だに何か違和感を感じる。
Python で稼げるのか
Python をメインで使うプロジェクト、というのは、私(大阪在住)はこの約10年では数件だった。それに、スマートフォンアプリ開発で Python を使うという話は聞いたことがない。 とは言え、私自身は、かなりややこしいデータを生成するテストサーバや、監視ツール、解析ツールなどとして使い、無ければ困っていた。
関東方面であったりとか、機械学習の分野であれば、状況は違うかもしれない。
高収入につながるかどうかは怪しいと思っているが、本当に様々なライブラリがあるので、 思いついたことをすぐに試せて楽しいと思う。