「Python(パイソン)」は、多くの場面で活用できるプログラミング言語です。
比較的記述がシンプルなのが特徴で、大学などのプログラミング教育でも積極的に取り入れられています。
また、高度なライブラリをもつので、高機能なプログラムをサクッと構築しやすい言語でもあります。
科学技術計算の様々な分野で活用できるライブラリが豊富で、例えば近年盛り上がっている人工知能(機械学習、深層学習)のライブラリでは、TensorFlowやChainerなどが多くの方に使われています。
Pythonはこれから学びはじめるのも、さらに習熟するにも適した言語ではないでしょうか。
本記事の概要
「Python」は「プログラミング初学者」にもおすすめの言語の1つです
プログラミング初学者の中には、コマンドラインから文字を入力することに慣れていないために、つまずいてしまう方もおられます。
なんか真っ黒な画面に、文字を1つずつ打ち込んでみたけど、英語で ”〇〇エラー” とか出てきて結局なんだったのかわからなかった・・・
など、コマンドラインからのプログラミング学習は、特に独学する初学者のハードルになっています。
そういったハードルを下げてくれるのに「IPython」があります。IPythonの “I” は、インタラクティブ(対話的)という意味で、1つの命令を打ち込むと、すぐにその反応を返してくれることを言います。反応がすぐに返ってくるので、プログラミングを勉強しやすくなるわけです。
また「IPython」を使った「Jupyter Notebook」は、プログラミング学習をさらに便利にしてくれます。Jupyter Notebookは、Webページに書き込んでいくような感覚でプログラミングする対話的な環境を提供してくれます。ネット通販で買い物するときに住所・氏名・年齢・・・など書き込んだことがあるかと思いますが、それと同じような感覚で、プログラミングを実行できる環境が Jupyter Notebookなんです。
このように、Pythonは「教育的な面」でも初学者の助けになる仕組みを備えています。
実は Jupyter Notebookは初学者だけでなく、「データサイエンス」を手軽に行えるという大きなメリットも持っています。プログラミング初学者だけど、サクッとデータ分析できるようになりたい!という方にはぜひ試してもらいたいおすすめの環境です。
IPythonを使ったデータサイエンスを学びたい方にはこちらがございます↓
Pythonは「研究開発」の現場でも重宝する言語の1つです
なぜかというと、Python言語本体とは別に、目的に応じた「高度な機能を、簡単に追加して活用できる」からです。
Pythonを数値計算に用いたいのであれば「NumPy」
というライブラリを別途追加して使うことができます。NumPyは、配列演算を高速にできるので、ベクトルや行列計算を多く扱う機械学習や人工知能の技術や、科学技術計算全般で高速化でき、重宝されています。
可視化のための「Matplotlib」
他にも、プログラムの実行結果をより分かりやすく表現するには、グラフなどの視覚化が有効ですが、Pythonには、可視化のための「Matplotlib」というライブラリがあります。Pythonのデータをプロットするためのツールを提供してくれます。サクッと作図できるだけでなく、好みに合わせて微調整もできる機能があり、あなたの思い通りのグラフを描く機能が備わっています。
データ分析をより手軽に行いたいなら「pandas」
というライブラリがあります。データ分析では複雑なデータ構造を扱ったり、データ構造を分析しやすいように変換したりすることがありますが、データの構造を処理をするのに活躍するのがpandasなんです。
pandasでデータ構造をうまく扱いながら、NumPyやMatplotlibと連携し、配列演算を高速に処理して、独特のデータ構造のデータもうまく可視化する、といったデータ分析を助けてくれるうれしいライブラリ群の1つとなっています。
科学技術計算でよく使われる演算は「SciPy」
もしあなたが、科学技術計算をやってみたいなら、Pythonはその手助けになるのは間違いありません。なぜなら、科学技術計算でよく使われる演算は、「SciPy」として、すでにライブラリがあるからです。SciPyは、さまざまな関数から成り立っていて、
- クラスタリング
- 高速フーリエ変換
- 積分と常微分方程式ソルバー
- 線形代数
- 直交距離回帰
- 最適化および解探索ルーチン
- 信号処理
- 統計分布、統計関数
- 空間データ構造とアルゴリズム
などなど、自分でゼロからプログラミングするとなると大変な内容も、SciPyを活用することで、短時間で効率的に目的の機能を構築することが可能となります。
NumPyやpandasの使い方をシッカリ学べます↓
こちら第2版が出ています↓
科学技術計算などでは、NumPyによる高速化が可能ですが、
さらに高速化できないの?
という思われる方もおられるかもしません。
Pythonは「高速化」することも可能です
Pythonは、他言語での高速化と同様に、並列化などで高速化することが可能です。
加えて、それ以外にも、
- Cythonによる高速化
- C/C++ライブラリの活用
といった方法も使えます。
「Cython」は、Pythonのプログラムに特定の記述を加えていくことで、C言語での高速性能を実現するための拡張言語です。
Pythonは動的型付け言語とも呼ばれてますが、これは実行時にデータの型を1つずつ決めて行くわけです。もともとデータに型を与えておけば、処理時間を短縮できるわけで、そういった言語は静的型付け言語と呼ばれていて、たとえば、C言語などがあります。
なので、Cythonは、Pythonの処理で時間のかかる型受けの部分に関連する処理を、前もって人が設定しておくことで省いてやり、その効果で処理を高速化する、という手法になります。
他にも、Pythonから直接「CやC++で記述した(自作)ライブラリを呼び出す」ことによる高速化も可能です。処理がたいへんな部分はPythonでなく、CやC++で記述して代わりにやってもらおう、という発想です。これにより処理のボトルネック解消などが可能です。
Cythonについてはこちらがございます↓
Python高速化の具体的方法がシッカリ記述されています↓
詳しくはこちらの記事にもございます
このように、Pythonは教育的にも使われているように、プログラミング初学者にも向いている言語です。
それに加えて、必要なライブラリを追加することで、その機能をサクッと拡張することができ、かつ高速化もできるという様々な用途で使える言語になっていることがわかっていただけるかと思います。
とくに、科学技術計算に関するライブラリは豊富で、無料(フリー)で使えるライブラリ(ソフト)とは思えないほどの品揃えとなっています。
- これからプログラミング言語をやってみたいという方
- なるべく学びやすい言語はなんだろう?と思われる方
- 科学技術計算にもっと詳しくなりたい方
など、Pythonは一度試してみる価値がある言語の1つです。
でも、学ぶことがたくさんありすぎて、どう学んだらいいの?
と思われるかもしれません。
- 初学者でもPythonの”いろは”から学べるのがいいなぁ
- オブジェクト指向など、プログラミングについても学びたいな
- Pythonを科学技術計算に使うための情報が網羅されているとうれしい
といった方も多いかと思います。
そうかった方におすすめなのがこちらになります↓
本書は、科学技術計算を行うことを目標にして、Pythonの基礎からプログラミングの考え方、Pythonのライブラリ(NumPy, pandasu, Matplotlib, SciPy, IPython)の使い方などを余すところなく網羅した1冊です。
一般に網羅すると内容が薄くなりがちですが、精選された内容がわかりやすく整理されており、詳しい追加情報へのリンクなども豊富に示されています。
辞書的にも使えるので、これからPythonを末永く使っていこうかというあなたにも最適の1冊となっています。
本書の構成は以下の通りです。
本書について
謝辞
本書の構成
本書の想定読者
動作確認に使用したOSとPythonのバージョン等について
本書のサポートページについて
第1章 科学技術計算とPython
1−1、データで見るPythonの今
1−2、Pythonの基礎知識
1−3、科学技術計算とPythonの関わり
1−4、まとめ
第2章 ゼロからのシミュレータ開発
2−1、シミュレータを設計する
2−2、機能分割とファイル分割
2−3、コーディング
2−4、静的コード解析
2−5、単体テスト
2−6、デバッグ
2−7、プログラムの高速化
2−8、まとめ
第3章 IPythonとSpyder
3−1、IPython
3−2、Spyder
3−3、まとめ
第4章 Pythonの基礎
4−1、記述スタイル
4−2、オブジェクトと型
4−3、シーケンス型の操作
4−4、集合型と辞書型の操作
4−5、変数とデータ
4−6、浅いコピーと深いコピー
4−7、演算子と式評価
4−8、フロー制御
4−9、関数の定義
4−10、モジュールとパッケージ
4−11、名前空間とスコープ
4−12、まとめ
第5章 クラスとオブジェクトの基礎
5−1、クラス定義
5−2、継承
5−3、スタティックメソッドとクラスメソッド
5−4、隠蔽の方法
5−5、クラスと名前空間
5−6、まとめ
第6章 入力と出力
6−1、コンソール入出力
6−2、ファイル入出力の基本
6−3、データファイルの入出力
6−4、pandasのデータ入出力状態
6−5、web入力
6−6、まとめ
第7章 NumPy
7−1、NumPyとは
7−2、NumPyのデータ型
7−3、多次元配列オブジェクトndarray
7−4、ユニバーサル関数
7−5、ブロードキャスティング
7−6、まとめ
第8章 SciPy
8−1、SciPyとは
8−2、実践SciPy
8−3、まとめ
第9章 Matplotlib
9−1、Matplotlibとは
9−2、Matplotlibの設定
9−3、実践Matplotlib
9−4、その他の作図ツール
9−5、まとめ
第10章 pandas
10−1、pandasとは
10−2、pandasのデータ型
10−3、データの処理
10−4、まとめ
第11章 プログラムの高速化
11−1、プログラムの高速化の基本
11−2、ボトルネックの解消
11−3、処理の並列化
11−4、まとめ
第12章 プログラム高速化の応用例
12−1、高速ライブラリ(他言語)の活用
12−2、JITコンパイラ利用
12−3、まとめ
Appendix
Appendix A 参考文献&学習リソース
Appendix B 組み込み関数と標準ライブラリ
Appendix C NumPyの関数リファレンス
索引
となっています。
基本文法から、実践テクニックまで、まさにこの1冊で網羅されている、看板に偽りなしの良書です。Pythonを末永く使ってみたいあなたの手元にあって損のない1冊となっています。
こちらもございます↓
Pythonを使った応用を学びたいあなたには、こちらの記事もございます↓
『「線形代数」と「プログラミング」を両方学びたいあなた、同時に学べる効率的なこちらはいかがでしょうか【行列プログラマー:Pythonプログラムで学ぶ線形代数】』
『「ディープラーニング(深層学習)」の理論や応用を学び、「Python」フレームワークで実装したいあなた、こちらはいかがでしょうか【Pythonで体験する 深層学習】』
『「Python」で「データサイエンス」をやってみたいあなた、手を動かしながらサクッと学べるこちらはいかがでしょうか【Pythonデータサイエンス:可視化、集計、統計分析、機械学習】』
『Webから知りたい情報だけをサクッと収集したいあなたはこちらをどうぞ【PythonによるWebスクレイピング】』
『「HTML」や「XMLファイル」を「Python」で手軽に扱いたいあなた「BeautifulSoup」はいかがでしょうか』
こちらの記事もございます↓
『機械学習を無料ではじめてみませんか!?【フリーソフトではじめる機械学習入門】』
『「機械学習」と「深層学習」の理論と実装を、バランスよくサクッと学びたいあなたはこちらをどうぞ』
『「人工知能」の「プログラミング」の本質を、手を動かしながら学びたいあなたはこちらをどうぞ【関数型オブジェクト指向AI プログラミング:Scala による人工知能の実装】』
『バーチャルリアリティ(VR)アプリケーションを開発してみたいあなた、系統的に学べるこちらはいかがでしょうか【UnityによるVRアプリケーション開発】』
『「暗黙知」を科学して、「付加価値の提案」と「生産性の向上」をもたらしたいあなたはこちらはいかがでしょうか【ビジネスマンのための「行動観察」入門】』
『ソフトウェアに関する「特許」「著作権」「商標権」をサクッと出願したいあなたはこちらをどうぞ【知って得する ソフトウェア特許・著作権】』