見出し画像

Python 使ってます? (2024.04.28)

扉の写真は、仕事で使っているマイ・コンピュータセットである。
メインマシン M1 MacBook Pro 14”、サブモニター Intehill 4K+ Portable Monitor U13NA、キーボード MX Mechanical Mini for Mac、Magic Trackpad、Stream Deckである。M2 iPad Pro 11”はメールチェックや調べ物などで独立して使っている。

さて、ふとしたことからnoteでPythonで検索してみると、結構多くの方々が関連記事を投稿していたので、私も現在メインのプログラミング言語として使っているPythonについて、書いてみることにした。

Pythonでやっていること

私の仕事は土木関係の設計であり、仕事柄多くの技術計算・グラフの作成などを行っているが、これらにPythonを用いている。Pythonを使い始めて、10年以上が経過しただろうか。
近年の若い人たちは、Excelの機能充実もあり、ほとんどのことをExcelでやってしまうようであるが、私は積算など単純計算を除けばほとんどのことをプログラム言語でやってしまう派である。Excelはきれいな表が作れるし、グラフも簡単に作成できるのだが、セルの中身がゴチャゴチャしてしまい、どうも好きになれない。その点プログラミング言語では、コードの中身を見れば何をやっているかすぐに分かるので、こちらのほうが好みである。

どうやってPythonプログラムを実行しているのか?

仕事で計算を行うとなると、複数のプログラムを連続して実行したり、同じプログラムを入力条件を変えて複数ケース動かしたりする必要がある。

このため、Pythonを使い始めた頃は、shell scriptによりそれらを実行していた。ちなみにこのころはすでにMacBookを使っていた。

その後Jupyter notebookの存在を知り、これを盛んに用いた時期もあった。1つのファイルに関連する処理をまとめられるので、その点が気に入っていた。
しかしながら、一度作ったプログラムを使いまわしていくことを考えると、Jupyter notebookの中に保存されているのものを取り出して使っていくのも便利ではない。

よって、今では、shell script と同様の処理ができる、subprocessモジュールを用いたPythonプログラムを作成し、これをTerminalで実行する方法が自分の中では定着している。

例えばこんな感じ。

import subprocess

cmd01='gfortran -o f90_fem_mesh3 f90_fem_mesh3.f90'
subprocess.run(cmd01,shell=True)

cmd1='./f90_fem_mesh3 ../calc/inp_mesh.txt ../calc/out_mesh.txt'
subprocess.run(cmd1,shell=True)

cmd1='python py_fig_mesh.py 3 ../calc/out_mesh.txt ../fig/fig_mesh.png 0'
subprocess.run(cmd1,shell=True)

fr_list=['inp_1.txt','inp_2.txt','inp_3.txt']
fw_list=['out_1.txt','out_2.txt','out_3.txt']
For fnameR, fnameW in zip(fr_list.fw_list):
    cmd='python py_prog1.py {0} {1}'.format(fnameR,fnameW)
    subprocess.run(cmd1,shell=True)

上記Pythonプログラムの詳細は省略するが、GNU gfortranコンパイラも動かせるし、Fortran90の実行ファイルも動かせる。もちろんPythonプログラムも動かせる。入出力ファイルを変えながらのループでの実行も苦労なくできる。
なお、上記で用いている、subprocess.runの中のshell=Trueについてはその使用は推奨できないとの話もあるが、個人的なスクリプトなので気にせず使っている。

Pythonといっしょに使っているソフト

テキストエディタ

MacBookには、Geany、CotEditor、mi、Apple純正TextEditの4種類のテキストエディタを入れている。このうちプログラムの作成・修正、html文書作成、TeX文書作成に用いているのは、主にGeanyとCotEditorである。自分の用途からすると、テキストエディタに必要なのは、見やすさ・軽さ・行番号表示・シンタックスハイライトぐらいのものである。

Python

Pythonの環境はpyenvで構築している。使用している外部ライブラリは以下の通り。
必須
Numpy 数学関数はすべてnumpyのものを使っている。ベクトル演算ができるところがナイス、
Scipy FEMプログラムで疎行列処理のために使っている。多用はしていないが頻繁に使うプログラムに使用されているので必須。
Matplotlib グラフ作成から様々な説明図作成まで、これを駆使して行っている。
結構使う
Pandas 表形式データ読み込み、データフレーム形式でのデータ処理に使用。
Openpyxl エクセル操作に使用。
たまに使う
Scikit-learn 回帰計算に使用。
Cartopy 地図作成に使用。

html

いろいろな計算結果はmatplotlibでグラフ化しjpg形式で保存しているが、複数枚のグラフを並べて見たい場合や、他のグラフを参照しながらプログラムする場合などのために、jpg画像をhtmlに組み込みブラウザで確認できるようにしている。html作成時に一手間が必要であるが、一度作ってしまえば、同じ画像ファイル名で修正していけば、常に最新版が確認できて便利である。また次に述べるTeXによる報告書ドラフト作成も、ブラウザでグラフを表示しながら作業ができるため便利である。

TeX

提出用の報告書はWordとなることが多いのだが、報告書のドラフトはTeXで作っている。TeXを使う理由は以下の3点。

  • グラフや図面類の更新が楽である(グラフや図面を更新する際、同じファイル名で新しいものに差し替えれば再コンパイルですぐに最新版にできる。Wordで手作業で図面の差し替えを行うことと比べれば格段に効率的である。)

  • 数式入力が楽である(計算理論などを説明するため数式を使うことが多く、これを楽に行えることは重要である。)

  • Wordより早い(慣れの問題であるが、Wordでガチャガチャ見出しを設定したりなんだかんだやるよりはTeXのほうが早い。またWordのように挿入した図面がどこかに行ってしまったりソフトがフリーズするようなことは無い。)

設計を行ったら、TeXで詳しくドラフトを作成しておき(文章は自分が分かる程度であまり時間をかけない)、必要時にアレンジしながらWordで清書するというスタイルを取っている。2度手間となるが、実際には提出用文書は何度も見直す必要があるので、完全に無駄な時間とはならない。

作業環境イメージ

下の写真は、右側のサブモニター(ここではiPad Pro 11”)にグラフを表示しながら左のMacBook でプログラム修正を行っているイメージ写真である。

左にコード、右に参照画像を表示

この作業事例からもわかるようにサブモニターは必須である。本来は大型モニターがほしいところであるが、出張中の身であるため、どこにでも持ち歩けるモバイル機器で我慢しなければならないことは承知の上である。

以 上


この記事が気に入ったらサポートをしてみませんか?