なぜわたしはPythonが好きなのか 

# はじめに

 本記事は、Pythonすきーな私が、Pythonをより広めるために書いたポエム記事です。Qiitaでこんな感じの記事を書いてもよいかわかりませんが、消してほしい人がいたら言ってください　<(_ _)>　。

Pythonが使われている分野を紹介することで、みなさんが、特にプログラミング初学者がPythonを始めるきっかけになればと思います。多くの分野で使われていることがわかると、初めて学ぶ方々も安心して始めることができると思います。
できるなら一度触れてみていただいて、その素晴らしさを共有したいです笑。

# なぜ初学者はPythonを選択するのか

皆さんが、初めて学ぶ言語は,どの言語でしょうか? 機械系の大学に進学したわたしが最初に学んだ言語はC言語でした。そのときの私は、プログラミングの楽しさというものがわかりませんでした。C言語は、多くのプログラムの基本となりますが、プログラミング初学者にとって、少しの結果を得るために多くの労力を必要とする言語であると感じました。

Pythonは、教育現場でとても人気な言語となってきているのではないでしょうか?　外国では、最初に学ぶ言語として選択されることも多いとも耳にします。初学者にとって重要なことは、なにか実現したいことがあるときに、それをどれだけ素早く、そしてシンプルに実現できるかということだと思います。実際に、Pythonは、学習コストが低く、また、コードがシンプルで、少ないコードで多くの結果を取得することができます。

例えば、dataに入ってる情報をヒストグラムとして可視化する場合、以下のプログラムを実行することで簡単に可視化できます。

```python
import matplotlib.pyplot as plt
...

plt.hist(data)                          
plt.title('タイトル')                     
plt.xlabel('x軸のラベル')
plt.ylabel('頻度')                               
plt.show()   
```

このように、シンプルで簡単なコードで、データの可視化を可能にします。そして、Pythonは、機械学習による予測を実行するプログラムですら、例よりは複雑ですが、簡単にコードを書くことができます。Pythonは、プログラムの中の処理の詳細は分かりづらいかもしれませんが、簡単にそして、素早く結果を取得できる素晴らしい言語です。


# Pythonは機械学習だけではない

Pythonは、機械学習分野の復興を機に人気がでてきた言語です。しかし、Pythonは、機械学習の分野だけでなく、多くの分野で活躍できる言語だと思います。ここでは、Pythonが活躍できるであろう分野をわたしが経験したことも踏まえ、紹介したいと思います。

## ロボティクス

わたしは、大学院では、ロボットやドローンの視覚（カメラ）や聴覚（マイク）に関して研究をしていました。この研究時に使用していた言語がPythonでした。

ロボティクスの研究では、[ROS(Robot Operating System)](https://ja.wikipedia.org/wiki/Robot_Operating_System)を用いることが、多々あります。ROSをロボットの研究に用いる利点は、
1. プログラムが疎結合
2. 高機能なデータロギング＆解析ツール
などです。（[他にも利点](https://myenigma.hatenablog.com/entry/20130208/1360324464)がありますが、わたしは主に上記のメリットの恩恵を受けました）


1.のメリットは、例えば、機能１のプログラムと機能2のプログラムがあると、それぞれ独立したプログラムを書くことができます。そして、これらの機能間は、ROSで決められた形式(カスタム可能)で通信し、情報のやり取りが行えます。
2.のメリットは、メリット１の機能で独立したプログラム間の通信を同時に記録させることが可能です。また、これらの記録情報を同時に再生可能です。

上記の利点のため、例えば、カメラの画像情報を取得する機能、マイクから音情報を取得する機能、画像情報を加工する機能、音情報を加工する機能、画像・音情報を統合する機能、ロボットの行動に反映する機能があるとすると、これらの機能ごとにプログラムを書き、これらの機能間は、ROS形式の通信でやり取りされます。もし、実験を行った際、これらの通信を同時に、記録しておくことができます。そして、実験後、この記録したデータを再生することで、あたかも実験したときと同じようなセンサ情報が取得でき、実験後にシステムを変更した場合でも確認が可能です。

ROSについて少し詳し述べてしまいましたが、Pythonは、ROSで使用できる言語の一つです。他にもC++も使用できますが、速度が必要ではない機能は、Pythonで書き、速度が必要な機能はC++で書くことで、より速くシステムを構築できます。

実際、PythonはOpenCVを用いて画像の加工もできますし、音響処理のライブラリも多くあり、前章で示した例のように短いコードで情報の加工ができます。

## IoT

昨今、IoTも流行っているのでは、ないでしょうか。わたしが、会社に勤めていたとき、工場自動化の一環として、工場内の情報を取得するシステムの構築を行いました。その際、少しの情報を集めるためにPLC(プログラマブルロジックコントローラ)を用いていました笑。これは、情報に対して価値が見合っていないように感じました。しかし、いままでの工場に導入した実績から情報取得の用途にPLCを導入せざるをえませんでした。
しかし、今後は、PLCを用いず、安価・省スペースで情報取得に使えるマイコン等も使用していくべきではないのかとも考えています。特に、実際に情報が取得できなくても工場が止まるわけではない場合、導入も検討して良いと思っています。
Pythonでマイコンで調べると、Raspberry Piなどが出てきます。実際に、Pythonにより実装したシステムをRaspberry Pi上に実装した例が多くあり、画像認識やIoTに使用されています。わたしがいた研究室では、ドローンにRaspberry Piとカメラ・RLF(レーザーレンジファインダー:距離計...)をのせ、カメラによる画像情報とRLFによる距離情報をマイコン上に記録させるシステムの構築をされていたと記憶しています。
このように、Pythonはマイコンにも使用できる言語でもあり、IoTにも使われます。

## ブロックチェーン

正直、ブロックチェーンは、あまり馴染みがありません。しかし、わたしがよく学ぶUdemyの講座で特に好きな講師である酒井氏による[現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門](https://www.udemy.com/python-blockchain/)のように、Pythonを使用したブロックチェーンの開発も行われているのではないでしょうか。

## web

ブロックチェーンとともに、この分野も馴染みがありません。しかし、約一ヶ月、web周辺の技術とPythonにおけるwebフレームワークである、Djangoを勉強し、システムを構築してみました(ポートフォリオレベルですが、、、)。
Djangoはよく、その他マイクロサービスアーキテクチャのフレームワークと比較して、遅いと言われるそうです。実際に、システム構築してみて、遅いと感じることはないですが、高速なレスポンスが必要なアプリケーション等では、欠点になるかもしれません。しかし、高速なレスポンスが必要な部分だけgolang等で実装し、その他の部分は、Djangoで実装することで、高いセキュリティを持つシステムが簡単に実装できるはずです。

また、ecサイトなどでは、推薦システムが必要かと思います（実際はどうか知りません）。これに加え、ユーザの挙動などの解析は、将来の顧客につながる重要なファクターの一つになります。Pythonは、機械学習やデータの分析に長けた言語で、推薦システムを簡単に実装できるライブラリとして、scikit-surpriseというライブラリも提供されています。実際にシステムに導入しない場合でも、顧客の分析等に使用し、傾向を掴むだけでも、今後ユーザを増やすために何をすべきか指針を立てやすくなるかもしれません、、、


## やっぱり機械学習

最後に、機械学習です。Pythonは機械学習分野の実装において、デファクトスタンダードな言語です。単純な機械学習の場合、かなり簡単に実装できます。
わたしが以前勤めていた会社でも、機械学習で製品に傷があるかどうか分類するシステムを導入し、工場自動化を図っていました。その際、システムの構築を行ったのは、機械学習に関してほとんど初学者の人でした。この人は、簡単なチュートリアルを行い、半年ほどでPythonを用いて実装し、工場に導入し、以前の機械学習を使用していないシステムより、高い検出率を誇るシステムが構築されました。この際の工夫は、機械学習のアルゴリズムではなく、機械学習に用いるデータ量を増やすことと、機械学習前の画像を学習しやすい形に変換したことでした。
このとき使用したアルゴリズムは、単純なCNNです。Pythonで実装することは、何ら難しいことではありません。そのため、今後導入に必要なことは、多くの必要なデータを集め、正しく情報を加工することであり、データを集めるハードルを超えることができれば、Pythonによる実装は簡単で、試してみる価値があるものになると思います。
もちろん機械学習部分のパラメータチューニング等も必要となりますが、、、これは、データが集まってからだと思います。

# 最後に

上記のように並べると、本当に多くの分野で使われてきている言語だと思います。

Pythonの利点は、少し複雑なくらいだったら、素早く簡単にシステムを構築できる分野が多いことです。最近は、Pythonに関する本も多く、初学者にもとても優しい言語です。
いろいろ書きましたが、皆さんにPythonを使ってほしいです!!レッツPythonです!!

以下、わたしが初めてPythonを学んだ本の最新版です。
[Pythonスタートブック [増補改訂版] ](https://www.amazon.co.jp/Python%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-%E8%BE%BB-%E7%9C%9F%E5%90%BE/dp/4774196436/ref=dp_ob_title_bk)

その他、Udemyの酒井氏の講座　[現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル](https://www.udemy.com/course/python-beginner/)がおすすめです。たまに割引があり、1500円くらいになります。