【Python】Pythonことはじめ

PythonのTopに戻る


 

 そもそも「Python」って?

「Python」は1991年に公開された汎用のプログラミング言語。コードが極力シンプルになるよう(半ば強制的に)設計されており、一目で分かりやい&少ない行数でプログラミングできるというのが大きな特徴である。

他の言語などに比べて変数の「型」や配列に必要な「メモリ」などの管理が簡単であるため、プログラミング初心者ならまずPythonを、といった具合で近年、世界的に見ても爆発的に普及しているプログラミング言語である。巷で流行りのAI(人工知能)、ビックデータ解析、マシンラーニング(機械学習)と相性が良く、エンジニアなら書けない人はいないほど広く使われている。

Pythonのコーディングでは、C言語のように “{…}” で括らずに構文をインデントで制御するため、スクリプトの見た目が非常にキレイである(誰が書いてもほぼ統一された見た目になる)。そのため、他のプログラミング言語使用者がPythonのスクリプトを見ると良くも悪くも「お行儀の良い」プログラムだと感じられることだろう。これがPython最大の特長だと思う。

C言語やシェルスクリプトなどであればワンライナーで書けるものも、Pythonではこのインデントの制約のために1行でまとめてギッシリと書くことは許されない。そういう人には向いていないが、慣れればかなり使いやすい言語であることは間違いない。Pythonは初心者向けのプログラミング言語と言える。

2021年9月現在、公式にリリースされているPythonの最新バージョンは3.9である(3.10は開発者版)。Python2系はWebプログラミング界隈ではまだまだ現役だが、これからPython使いを目指すという方であればPython3系を勉強されることを強くオススメする。

 

 Pythonのコーディング規約「PEP 8」

PEP 8」(外部リンク) というPythonのコーディングスタイルガイドラインが知られており、Pythonによるコーディングにおけるコモンセンスとなっている。

代表的なものを以下に掲載しておく。

    • インデントは空白4つ。タブは使わない。
    • すべての行の長さを最大79文字までとする。必要に応じて行を折り返す。
    • 関数やクラス、比較的大きいコードブロックの区切りには適宜空行を使う。
    • コメントはできるだけコードと同じ行に書く。該当するコードを書き換えた場合はコメントを更新せよ。
    • docstringを使う。
    • 演算子の前後とコンマの後には空白を入れ、括弧類のすぐ内側には空白を入れないこと。(例えば、「a = f(1, 2) + g(3, 4)」のようにする)
    • クラスや関数には一貫性のある名前を付ける。

などなど。開発チームによっては独自のルールでコーディングすることがあるかもしれないが、基本的には第三者にも読みやすいコーディングを心掛ける、というスタンスで良いと思われる。pycodestyle (外部リンク) というパッケージを使えば PEP 8 のルールに則っているかチェックできる(pipでダウンロード可能)。…らしいが、管理人はズボラなので特に使用したことはない。

 

 Pythonは計算が苦手?

C言語に比べてオリジナルのPythonは演算が遅いということを聞いたことがある人は多いだろう。実際、処理能力には結構差があり、計算量によってはC言語のプログラムに比べて数倍~数十倍(時には数百倍以上)もの時間が掛かってしまうこともある。これはPythonが型を明示せずに変数を宣言可能な、動的型付け言語という仕様なのが理由の一つとされる。

これを改善すべく、Pythonには「numpy」と呼ばれる数値計算を効率的に実行するための拡張モジュールが用意されている。

開発環境で使えるように

pip install numpy

でインストールすると、

import numpy

で使えるようになる。詳しく解説しているサイトは幾らでもあるので、そちらを参照されたい。

なお、実用レベルのPythonのコードにおいては「Pythonは遅い」という言説が必ずしも当てはまらないことに注意しておこう。なぜなら、科学技術計算ルーチンを実行するライブラリの多くは内部がCやC++などの高速な言語で記述されているからである。Python自体は確かに遅い面があるが、広く使われているnumpyなどのライブラリ内部はかなり最適化され、高速化されている。尤も、Pythonは「グルー言語」の筆頭であり、処理スピードではなくライブラリの多様性や接続性、機能性にその魅力がある言語なのである(「グルー」は「糊」の意味)。そもそもプログラミング言語というものはその用途に応じて使い分けるべきで、「Pythonは遅いから使えないよね」といった見方は本質的ではない。

※ そもそも特定のプログラミング言語の悪口を言うのは無用な争いの種であり、色々な意味で生産的でないので極力控えるようにしよう。

 

 ライブラリのインストール

Python最大の強みとも言えるのが、そのライブラリの充実度である。Pythonはそれ単体で使われることはほとんどなく、numpyのようにサードパーティー製の様々なライブラリをインポートすることで多様な操作が可能となる。こうしたライブラリはPython Package Index(通称PyPI)において配布されており、ここにアクセスすれば誰でも自由にパッケージをインストールすることができる。

ライブラリのインストールするためのインストーラが必要だが、多くの場合は「pip」が用いられる。pipのインストールはこちら(外部リンク)。基本的には

pip install [ライブラリ名]

というコマンドでインストール可能。PCのローカルに置く場合はコマンドプロンプトを開いてpipすればOK


 ただし、PyPIからインストールされるライブラリのバージョンと、その他のパッケージングされたライブラリのバージョンと異なる場合があることに注意しよう。
 例えば、データサイエンスに特化したPythonディストリビューションである「Anaconda」を導入した時にまとめてインストールされるnumpyのバージョンと、pipしたときにインストールされるnumpyのバージョンは異なることがある。こうした現象は別にnumpyに限らず発生し得る。
 また、複数の同一のライブラリが共存していると、プログラム中でライブラリを読み込む際に参照可能なパスが混在してしまい、予期せぬエラーの原因となることがある。こうした状況はライブラリ間の相互関係やバージョン依存性を損なうことにも繋がるため、環境構築の際は十分慎重になるに越したことはない。
 将来的に同じPC内で様々なPythonの使い方が想定される場合は「Docker」などを適宜利用して、開発環境をきちんと整理して管理することが望ましい。

 それから、PCを自作している人などにありがちなのがRyzenのCPUを乗せたマシンを使っている場合にNumpyなどの数値計算の速度があまり出ないというものである。これは恐らくpipで行列演算ライブラリ「openBLAS」を参照するバージョンのNumpyを入れていることによると思われる。AnacondaパッケージにはIntelの数値計算ライブラリ「MKL」が同梱されているため、AnacondaのNumpyは「MKL」参照するバージョンになっている。MKLによる計算は比較的速く、他の計算機と比べて計算速度に違いが生じている可能性がある。Numpyのケースに限らず、PyPIに登録されているライブラリとAnacondaパッケージのライブラリはセッティングが異なる、という事実は何かとstuckの原因になる場合があるので覚えておきたい。


以下に管理人が便利だと思うパッケージを列挙しておく。コマンドプロンプトで「pip list」コマンドを叩けばpipを通して導入したパッケージ一覧が表示される。

    • numpy:数値計算を効率的に行うためのライブラリ
    • sympy:数式の処理や演算を効率的に行うためのライブラリ
    • scipy:数値計算を効率的に行うためのライブラリ
    • matplotlib:グラフ描画ライブラリ(インタラクティブなグラフを生成可能)
    • requests:インターネット接続のためのHTTPライブラリ(ファイルのダウンロード・ウェブページ(HTTP)の取得など)
      urllibでもhttpの取得などは可能
    • beautifulsoup4:HTMLやXMLからデータを抽出する
    • lxml:xmlやhtmlを扱うためのライブラリ
    • PyPDF2:PDF関係をいじる(結合・分割・挿入・ロックなど)
    • Pillow:画像処理のためのライブラリ
    • plotly:画像処理のためのライブラリ
    • seaborn:画像処理
    • pandas:データ解析を支援するライブラリ

環境変数Pathに

C:\Users\(user名)\AppData\Local\Programs\Python\Python36-32\Scripts

とか

C:\Users\(user名)\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts

のように “Scripts” まで通しておくこと。

システム環境変数「Path」の追加方法は以下の通り。

    1. [Win+x] を押す(ショートカットキー)
    2. 検索窓で「システム環境変数…」とタイプして「システム環境変数の編集」へ移動
    3. 「詳細設定」の下の方の「環境変数」をクリック
    4. 「システム環境変数」の「Path」を選択して「編集」をクリック
    5. 右上の「新規」でパスを追加できる

※ (user名) の部分は各自で書き換えること。

 

 開発環境の構築

孤高のミニマリストに言わせれば「『メモ帳』さえ使えればプログラミングはできる」のかもしれないが、テキストエディタ選びはコーディングする上でかなり重要である。個人的には「Atom」というエディタが取っ付きやすいと思っているが、環境構築の容易さで言えばMicrosoftの「Visual Studio」が恐らく最強。「Jupyter Notebook」などを使っても良いだろう。基本的にエディタは使えれば何でも良い。

必要な分だけパッケージをインストールして自分好みにカスタマイズ可能。補完機能やハイライト機能が充実しており、日本語化パッケージもあるので初心者にもお勧めできる。ありがたいことにpythonの開発環境構築を指南するウェブサイトや書籍は世の中にゴロゴロ転がっているので、そちらを参考にして頂ければ良い。「Atom」や「Visual Studio Code」を導入する方法を解説しているサイトは世の中に沢山あるので、OSに応じて対応して下さい。

※Atom内で日本語を含むスクリプトを実行すると標準出力が文字化けする場合がある。これは初期設定が日本語に対応していないためである。C:/Users/(ユーザー名)/.atom/init.coffee の中に

process.env.PYTHONIOENCODING = "utf-8";

と書いてAtomを再起動すると日本語が問題なく表示できるようになる。

余談:現在筆者のAtomに導入されているパッケージは以下の通り。全く使用していないものや、何のために入れたのかよく分からないものも含まれているが、Pythonでコーディングするなら太字で示したパッケージくらいは導入した方が便利。

atom-julia-run
autocomplete-java
autocomplete-python
autocomplete-R
go-plus
gpp-compiler
hyperclick
indent-detective
ink
japanese-menu
julia-client
language-julia
latex-completions
linter
linter-gcc
script
tool-bar
uber-juno

なお、Atomのすべてのパッケージは .atom/packages/ に収納されている。

 


PythonのTopに戻る