Pythonによるプロジェクト3選

ブログ

こんにちは
こーた(@k_ta0306)です。

Pythonは近年、とても人気のあるプログラミング言語になっています。

ウェブ開発からデータ分析までこなせる言語であり、可読性が高いと言われています。

僕が大学院で研究する際も、Ipythonというデータ分析用のプラットフォームを使って分析しています。

そんなPythonを使った3個のプロジェクトを紹介していきます。

Traveling Salesman Project

日本語では巡回セールス問題と呼ばれます。

セールスマンが所定の複数の都市を1回だけ巡回する場合の最短経路を求める組合せ最適化問題

-Wikipedia

この最適化問題もPythonによって解くことが可能になります。

Git上に以下のようなプロジェクトがあります。

この問題はコンピュータサイエンスにおいて非常に有名な問題です。

この問題はNP完全問題であり、セールスマンが訪れる都市の数が増えれば増えるほど最適な経路を見つけるのが難しくなることを意味します。一般的な解決方法というのが存在せず、最適であるらしいとされた解を算出することが目的です。

このプロジェクトでは、Self-Organizing Map(SOM)という技術を使っています。詳しくは以下のサイトにあるので、興味のある方は、参考にしてみてください。

Using Self-Organizing Maps to solve the Traveling Salesman Problem

時間があれば、別の記事で紹介します。

NP完全問題とは?

Wikipediaによれば、NP完全問題(Np-completeness)とはクラスNP(yesとなる証拠があたらえられたとき、その証拠が本当に正しいかどうか多項式時間で判定できる問題)に属する決定問題でかつ、任意のクラスNPに属する問題から多項式時間還元可能(A が B に多項式時間還元可能である場合、B を解くアルゴリズムがあれば、それを応用して A も解ける(不可逆))なものとあります。

顔認識

Pythonを使えば、顔認識のプログラムを書くことも可能になります。RaspberryPi・Webcameraとの組み合わせによって、簡単に防犯カメラのような機能を実装することも可能になります。

顔認識には画像データを取得する必要がありますが、そのようなスクリプトもPythonによって作成することも可能になります。

簡単なコマンドを打ち込むことによって、指定した画像の顔を切り取ることができます。

ブロックチェーンベースでシンプルコイン作成

おそらくPythonでブロックチェーンを構築することは実行速度という点においてナンセンスなのかもしれませんが、それでも可読性の高いPythonでブロックチェーンをシミュレーションすることは可能です。有名なビットコインはC++で書かれています。

プロジェクトの内容を見ると、核となるスクリプトはたった2つだけです。

このプロジェクトの目的としては、ブロックチェーンによる通貨の構造をよりシンプルに学ぶための教育教材のためだそうです。

Miner.py

このファイルが最も重要であると言えます。このスクリプトをサーバーで実行することによって、ブロックチェーンに繋がるノードを作成することができ取引の承認をすることが可能です。

この取引承認の対価として通貨を受け取ることができます。

このスクリプトに繋がるノードが多ければ多いほどブロックチェーンのセキュリティは高くなります。

このスクリプトでは主に2つの動作が同時に動いています。

  1. マイニングのための動作、新しいブロックチェーンを更新し取引を承認する役割
  2. Flaskサーバーを実行し、ノードやユーザーがブロックチェーンに接続するためのハブ

 

Wallet.py

このウォレットは、マイニングをするのではなく通貨を使用するユーザー側のための動作をします。

ユーザーに対して、通貨交換のための新しいアドレスを発行したり取引記録の確認ができます。

ウォレットアドレウが作成されると新しいファイルが作成されます。このファイルは安全に保管しなければなりません。

まとめ

Pythonによる主なプロジェクトを3つほど見てみました。

どのプロジェクトをも最近までメンテナンスされているので、ダウンロードして環境を整えればローカルで実行することが可能です。

研究や自分の趣味でPythonを使うこともできますし、既存プログラムに手を加えて自分のポートフォリオとするのも良いとは思います。

個人的にはSimpleCoinが非常に単純でわかりやすくブロックチェーンの構造を知ることができるので、興味があります。

 

コメント

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