あるケミストの独り言(winchemwinの日記)

ケミスト(化学者)の視点で、面白そうな情報(シミュレーション関係など)を発信

量子化学計算ソフトPsi4の実行(Jupyter notebookの導入から)

  前回までの記事でPsi4のインストールまで実施できましたので、いよいよプログラムを実行してゆきます。

 Ubuntu 環境でコマンドラインで入力してもOKなのですが、このブログでは入力やエラーが出た際の対処なども含め、効率的にプログラムの実行、検証を行えるJupyter notebookを利用した環境でPsi4を実行してゆきます。

 Jupyter notebookはPythonなどをWebブラウザ上で記述、実行できる環境です。Psi4はPythonベースで実行できるようになっていますので、Jypyter notebookの環境で問題なく実行できます。

 Jupyter notebookですが、Anacondaをインストールされている方であればすでにインストールされているのですが、私の場合はminicondaをインストールしましたので、個別にインストールする必要がありました。

 インストールですがUbuntu先に作成した仮想環境下でpipコマンドでインストールを行ってゆきます。まず、下記のコマンドで念の為、pipのモジュールのアップグレードをしておきます。

f:id:winchemwin:20210926133142j:plain

pip upgrage

  問題なくバージョンアップされると下記の表示などが表示されるかと思います。

f:id:winchemwin:20210926133351j:plain

pip upgrage バージョン表示

 続いて、Jupyter notebook のインストールを行います。先程upgrade確認をしておいたpipコマンドでインストールできます。

f:id:winchemwin:20210926134122j:plain

Jupyter notebookのインストール

 自動的にインストールが進むかと思いますが、問題なくインストールできているかは「conda list」のコマンドで確認できます。結果表示で「notebook」の表示があればOKかと思います。

f:id:winchemwin:20210926135150j:plain

Jupyter notebook インストールの確認(conda list コマンド入力後)

 インストールが確認できたら、いよいよJupyter notebookを立ち上げますが、その前にconfig ファイルの作成とパスワードの設定をしておきます。

 他の方のブログでも紹介されているかと思いますが、

 

 ・jupyter notebook --generate-config

    ・jupyter notebook password

    

  を入力して ファイルの作成とパスワード設定をしておきます。パスワードはjupyter notebook 立ち上げ時に聞かれるので忘れないようにメモしておきます。

 Jupyter notebookの立ち上げは設定した仮想環境下で下記のコマンドを入力することで行なえます。ただ、PCの環境によっては自動的にブラウザが立ち上がらないこともあるようです。

f:id:winchemwin:20210926135437j:plain

Jupyter notebook の起動

 私の場合も立ち上がらなかったので”Kupenon's通り”さんの下記の記事を参考に設定を行いました。(ただし、自動立ち上げにはブラウザとしてFirefoxをインストールしておく必要があるようです。他のブラウザでばさらに別途設定が必要かもしれません。私の場合はchromeで行おうとしましたがうまく行かず、最終的にFirefoxをインストールして解決しました。)

cuxe.livedoor.blog

 

 jupyter notebook が立ち上がると下記のようなパスワードを入力する画面になりますので、設定しておいたパスワードを入力します。

f:id:winchemwin:20210926135626j:plain

Jupyter notebookの起動画面1

 

  下記はjupyter notebookの起動画面(起動画面2の画像)ですが、ここから左端のNewと記載されている場所ののプルダウンからPythonを選択して(Pythonの選択の画像参照)、Pythonの利用環境へ移ります。

f:id:winchemwin:20210926140045j:plain

Jupyter notebookの起動画面2

 

f:id:winchemwin:20210926140331j:plain

Pythonの選択

   初期入力画面は以下のようになり、In[ ]:と書かれたところにコマンド、プログラムを記載してゆきます。

f:id:winchemwin:20210926140944j:plain

初期入力画面

 今回は最初ということで、Psi4のチュートリアルにも記載されている水のエネルギー計算を行ってみます。入力画面で下記のように、Psi4のインポート、メモリの設定、水の座標設定、計算モードの指定を入力(チュートリアルのファイルからコピー、ペーストできます)して、シフト+リターンキーで実行します。

 

f:id:winchemwin:20210926141119j:plain

デフォルト計算の実行1

 問題なくスタートすれば、下記の表示が現れます(デフォルト計算の実行2)。

f:id:winchemwin:20210926141156j:plain

デフォルト計算の実行2

無事計算が終了すれば、下記(デフォルト計算の実行3)のようにエネルギー値が表示されます。

 

f:id:winchemwin:20210926141234j:plain

デフォルト計算の実行3

 

 以上の計算がエラーなく実行できれば、Psi4の利用実行環境は問題なく構築できているかと思います。

 今回は、jupyter notebookの導入からデフォルトのテスト計算の実行について記載させていただきました。次回からインプットファイルの作成や構造最適化計算等の実施の記事を記載してゆきたいと思います。

 

Pythonの活用例について(fit ファイルの利用 その7:Cateye社 Avventuraのデータからー斜度のヒストグラムの作成)

 前回まではfit ファイルから取得したデータでスピード、斜度などに関してグラフを作成してきました。普段のサイクリングやロングライドを楽しまれる方はスピードや距離の情報があれば十分という方も多いかと思いますが、ヒルクライムをされる方は坂に関する詳しい状況を知りたいいう方もいるかと思います。今回以降は坂に関する情報について、紹介してゆきたいと思います。

 「fitファイルの利用 その5」の記事で斜度に関するグラフを紹介しました。サイクリングの行程の中でどの程度の斜度の坂があったかというのを確認するには良いのですが、坂の斜度の分布を確認するには別のグラフで表した方がわかりやすいです。今回はヒストグラムの形式で視覚化します。やり方は簡単で、matplotlib のライブラリーはヒストグラムの表示にも対応していますので、

f:id:winchemwin:20220219035550j:plain

斜度のヒストグラム作成のコード

上記のコードでax.hist(x)とするだけで基本的にはOKです(前回はax.plotだったかと思います)。作成したヒストグラムは下図のようになります。

f:id:winchemwin:20220219043025j:plain

斜度のヒストグラム

 平地の部分が多いので0%が多くなっていますが、坂に関しては斜度5から15%の分布の様子が視覚化できて登った坂のどの程度の坂だったのか、わかりやすくなっているのではないでしょうか。

 ただ、同じ坂を下っているので−5〜-10%あたりのヒストグラムも上りと同様の分布になってもよさそうに思われるかと思いますが、収集データは1秒ごとに測定された斜度のデータになるので、下りはスピードが早く観測頻度が上りに比べて相対的に少なくなったため、このような形になっています。

 次回は斜度ごどの平均スピードの数値化、グラフ化を行いたいと思います。

Pythonの活用例について(fit ファイルの利用  その6:Cateye社 Avventuraのデータからーグラフの重ね合わせ(スピード、標高、勾配))

 前回までの記事で時間、距離、スピード、標高、斜度などの関係をグラフ化を行ってきました。それぞれの単一のグラフでも十分データの視覚的に見やすくなっているのですが、2つの指標のグラフを同じグラフ内で重ねて見たい場合もあるかと思います。今回はグラフの重ね書きについて試した結果について紹介します。

 一つめは横軸が距離で、縦軸がスピードと標高のグラフを重ね合わせたグラフになります。重ね合わせグラフを作成したコードは以下のようになります。

f:id:winchemwin:20220212101506j:plain

距離/スピード、標高 グラフ 重ね書きのコード

 重ね書きをするためにax2を設定し、twinx()でX軸を共有する設定にしています。また、重ねたときに区別しやすいように、’C1'で線の色赤色にしています。複数のグラフを並べるわけではないので必要ないかもしれませんが、’constrained_layout=True'にして、グラフが見やすく配置されるようにしています。

 

f:id:winchemwin:20220212102533j:plain

距離/スピード、標高のグラフ 重ね書き

 重ね書きのグラフは上図のようになります。Y軸の左側にはスピードの目盛りが、右側には標高の目盛りが配置されています。重ね合わせてみると標高が上がる場面ではスピードが落ちて、下がる場面ではスピードが上がっているのがわかるかと思います(当たり前のはなしですですね)。

 2つ目は横軸が距離で、縦軸がスピードと斜度のグラフを重ね合わせたグラフになります。重ね合わせグラフを作成したコードは以下のようになります。

 

f:id:winchemwin:20220212103200j:plain

距離/スピード、斜度 グラフ 重ね書きのコード

  1つ目のコードとはほとんど変わっていませんが、違うのはax2にGrade(斜度)を設定している点です。作成したグラフは以下のようになります。

f:id:winchemwin:20220212103537j:plain

距離/スピード、斜度のグラフ 重ね書き

  こちらもY軸は2つ設定されていて、左側がスピード、右側が斜度になって

います。斜度の大きいところではスピードが減少し、斜度がマイナス(下り坂)のところではスピードが上がっているのが一目瞭然ですね(当たり前ですが・・・)。

 matpoltlib, seabornを利用した重ね書きについて紹介させていただきました。

 次回以降は坂に関するデータ(ヒルクライムの参考になるかもしれません)について、データの加工も含め紹介してゆきたいと思います。

Pythonの活用例について(fit ファイルの利用  その5:Cateye社 Avventuraのデータからー坂の斜度のグラフ)

 前回まではfitファィルの読み込みデータから、時間、距離と標高、スピードの関係についてグラフ化を行ってきました。今回は斜度との関係のデータをグラフ化したいと思います。ロードバイクに乗られている方であれば、上り坂の指標となる斜度のデータは非常に気になるところではないでしょうか。サイクルコンピューターの種類にもよるかと思いますが、私の使っているCateye社さんの Avventuraでは斜度のデータも取得されていますので、そのデータのグラフ化をしてみたいと思います。

 

f:id:winchemwin:20220211044603j:plain

時間ー斜度のグラフ(コード)

 グラフ化は読み込んだデータフレームの中の斜度に関する”grade"のデータをy軸に設定してグラフ化を行います。

f:id:winchemwin:20220211044842j:plain

時間ー斜度のグラフ(図)

 縦軸に斜度、横軸が時間のグラフが作成できています。走行した坂の大凡の様子がわかるのではないでしょうか(斜度10%超えの区間が結構あり、貧脚の私にとっては結構きつい部類の坂です)。

 これまでの同じように時間との関係ではイメージしにくい場合もあるので、横軸を距離にする場合は以下で行えます。

f:id:winchemwin:20220211045507j:plain

距離ー斜度のグラフ(コード)

 この場合、前回までと同様にX軸に距離のデータ”distance"を使うことで距離と斜度のグラフを作成できます。

 

f:id:winchemwin:20220211045705j:plain

距離ー斜度のグラフ(図)

 2回同じ坂を登って下っているのですが、2回めは疲れてかなりゆっくりになってしまっているので、横軸(X軸)が時間の場合は1回目と2回目は少し異なる感じになっていますが、横軸を距離にすると2回同じパターンが繰り返されており、同じ坂を登り下りしたのをイメージしてもらいやすいかと思います。

 今回は以上です。次回はグラフの重ね書きの例を紹介したいと思います。

 

 

 

Pythonの活用例について(fit ファイルの利用  その4:Cateye社 AvventuraのデータからーSeabornでのグラフ化)

 

 これまでは解析したデータのグラフ作成について、Pyhton ライブラリーのmatpoltlibを用いて行ってきました。より綺麗にまたっ複雑なグラフの作成、描画が可能なライブラリーとして、seaborn がよく知られています。今回はseaborn ライブラリーを利用した描画結果について簡単に紹介したいと思います。seaborn ライブラリーについては、デフォルトでは入っていないことが多いですが、pip コマンド等でインストール可能です。インストール後、以前に紹介した各種ライブラリーのインストールのコマンドにseaborn の記述を加える(import の一番下の行)ことでseaborn のライブラリーが使用可能となります。

f:id:winchemwin:20220206125723j:plain

seaborn ライブラリーの利用

 インポートしたseaborn のライブラリーですが、いろんなスタイルを設定できるのですが、今回は比較的見栄えのするdarkgridを設定しました。seaborn の利用の詳細については、下記の他の方の記事などを参照してもらえればと思います。

 

https://blog.amedama.jp/entry/seaborn-plot

 

 前回まで紹介したグラフを同様に作成した結果は以下のようになりました。

 単純なグラフなのであまり変わった感じはしないかもしれませんが、少しスタイリッシュなグラフになった気がするのは私だけでしょうか。

 

 

f:id:winchemwin:20220206132941j:plain

距離/時間のグラフ

f:id:winchemwin:20220206133039j:plain

標高/距離のグラフ

  次回以降はグラフ作成についてはmatplotlibとseabornを活用して作成したものを中心に紹介してゆきたいと思います。

Pythonの活用例について(fit ファイルの利用 その3:Cateye社 Avventuraのデータからースピードデータのグラフ化)

 前回までは標高のデータを基にグラフの作成を行ってきました。今回はスピードのデータのグラフ化を行いたいと思います。スピードの場合は基のデータの単位が[m/s]のため、見慣れた[km/h]の方がイメージしやすいかと思います。そのため、標高データの場合はデータをそのままプロットすればよかったのですが、スピードの場合[km/h]に変換する必要があります。ただ、変換といっても難しいものではなく、下記のコードでy軸に用いるスピードに関するデータに対して(3行目)、km/hに変換する処理をするだけでOKです。

f:id:winchemwin:20220205042547j:plain

スピード/時間グラフ化のコード

 以下が作成したスピードと時間とのグラフになります。坂の上り下り、平坦でのスピードの様子がなんとなく確認できるかと思います。

 

f:id:winchemwin:20220205043253j:plain

スピード/時間のグラフ

 ただ、前回の記事にも書きましたが、横軸が時間だと信号などいろんなシチュエーションで止まったりするのでイメージしずらい面もあるかと思います。そこで、今回も同様に横軸を距離でグラフ化を行ってみました。

f:id:winchemwin:20220205043901j:plain

スピード/距離グラフ化のコード

 前回も説明しましたX軸にデータフレームから「dinstance」の値を設定し、ax.plotにX軸も記載することでOKです。作成したグラフは下図のようになります。

f:id:winchemwin:20220205044225j:plain

スピード/距離のグラフ

  時間のグラフよりは少しイメージしやすくなったでしょうか。次回は勾配データのグラフ化を行いたいと思います。

Pythonの活用例について(fit ファイルの利用 その2:Cateye社 Avventuraのデータからー横軸距離のグラフ作成)

 前回は「fit」ファイルの読み込みと簡単なグラフ(横軸=時間)の作成を行いました。今回は読み込んだデータを少しアレンジしたグラフの作成を行いたいと思います。

 グラフとして、横軸が時間でも視覚化としては問題がない場合も多いのですが、公道を走っている場合、信号などのいろんなシチュエーションで止まったり、速度が意図せず変化することもありますので、他のファクターでグラフ化した方がイメージしやすい場合もあります。今回は横軸を距離でグラフ化してみました。といっても、コード的には特に難しいことはなく、下記コードでX 軸にデータフレームからの「dinstance」の値を設定し、ax.plotにX軸も記載することでOKです。

f:id:winchemwin:20220129051658j:plain

距離と標高 グラフ化 コード

以上のコードでグラフ化したのが、下記のグラフになります。

f:id:winchemwin:20220129053254j:plain

標高のグラフ(横軸=距離)

 前回のグラフ(参考 下記)と比べて、形状が対称形できれいにとなっているのがわかるかと思います。同じ坂を登って、下っているので本来は坂の形としては対称の形状となるはずですが、横軸を時間にすると、坂の上りに時間がかかり、下りは時間がかからないので、いびつな形となってしまっていました。

 

f:id:winchemwin:20220129054051j:plain

標高のグラフ(横軸=時間)- 前回作成のもの

 以上、今回はX軸に時間以外のものを設定したグラフを作成してみました。

  次回はY軸を他のパラメーターにしたグラフの作成について、紹介したいと思います。