
UL考 #06 山の斜度を考える編
今回はUL×NOTION×山。以前ご紹介した「UL考 #02 NOTIONで整理」に引き続き、山行のデータベースをNOTIONでつくるというお話しです。
登山アプリの標高グラフっておかしくない?
今回はULとは少し違う話になる。番外編で「山の斜度を考える編」だ。
僕は登山をしていて「おかしい、こんなに急登な山だとは思っていなかった。。。」ってことがよくある。久しぶりの登山、楽めの山を選んだはずなのに、なぜかしんどい。(もちろんリハビリ登山ゆえ、自分の体のせいでもあるが。)そんなことがよくある。奥さんにも行く前に「この前の山とどっちがしんどいの?」と迫られる。「この前よりも楽よ」とか言って、「この前」よりしんどかった日にはしばらく口をきいてくれなくなったりする。

標高グラフの横軸も縦軸も揃っていない
原因は登山アプリの標高グラフだと思う。下の図は先日訪れた、立山・雨飾山・吉野山。ぱっと見、どちらも同じような斜度に感じるが、X軸である水平距離もページ幅にスケールされているので違う。もちろんY軸の標高方向もスケールされていて異なる。いつも登山に行く前になんとなくこのグラフを眺めて「前回よりなだらかだから大丈夫だろう」とか勝手に思い込んでいたわけだ。そりゃー、感覚狂います。

というわけでちゃんとグラフをつくりたい
そう思い立ったわけだ。ついでに「ヤマレコの情報をNOTIONに統合もしていきたいなぁ」と思った。「じゃあNOTIONに山の記録データベースを作って各種情報を統合していこう!」と。梅雨の時期、週末の山行が中止になれば「チャンス!」と思い、早速作り始めた。

餅は餅屋へ、、、、グラフ作成は表計算ソフトへ
グラフを作り出すと奥が深い。色々調べると「餅は餅屋へ」ということらしく、グラフを作りたいのであれば表計算ソフトを用いるのが一番とのこと。力技に出るのであればNOTIONで一山行のデータベースページ対して、距離毎(例えば10Mごと)のプロパティを作りそこに、標高を入れていけば、「Chartbase」でもグラフは作れなくはない。しかし複数の山行を同じグラフで比較するには有料版でないとできないし、何よりプロパティが膨大になるのはおそらく処理が重くなり、非現実的。「MICROSOFT 365」は解約したし、GOOGLEにはお金を払っているので「GOOGLE Sheets」でやるのが現実的と判断した。

Pythonを使ってヤマレコのGPXデータをCSVへ
いつも山行に行く前に、山行計画をヤマレコで作っている。作った山行データのページにいくとGPXデータがダウンロードできる。おそらくこのGPXデータをCSVに変更すればグラフできるなと。。。どうやって変換するんだ!?と壁にぶち当たった。

困った時はChatGPT
困ったのでGPT先生に聞いてみた。そしたらどうもPythonを使えばCSV変換ができるとアドバイスをもらった。プログラムを行う環境は何もなかったので、一から環境を作った。VSCodeをインストールするところから始めた。笑
環境を作るのも、GPT先生の指示に従った。
ちなみに、僕はプログラミングに関する知識はほぼ0。やったこともなかったので、エラーが出るたびにGPT先生にそのエラーを返し教えを乞い続けた。

GPXをCSVに変換
なんとか、GPXをCSVに変更できるようなプログラムができたのだが、なんだか、変換されるデータとそうでないデータがある。なんでだろうと思いGPT先生に二つのデータを渡して解析してもらうも、良い答えが返ってこない。うーんと思い、二つのGPXデータを自分で見比べてみると、GPXデータのバージョンが1.0と1.1があるではないか。なるほど。バージョンの違いをGPT先生に理解させなければならないのかと。GPT先生へ「GPXのバージョンが1.0と1.1、両方読み込めるようにプログラムを修正して」というと、、、なんと!一瞬で全てを変換してくれた。先生と崇めてはいるものの、先生にも聞き方を工夫しないといけないのだなと、なんか実世界と近しい事象に少しほっこりする。

ChatGPT先生に線形補完してCSVへ
そうこうしているとGPXデータがCSVに変換できるコードができた。嬉しくなってGPXデータを変換しまくるも、、、なんだかグラフがおかしい。GPXデータは水平距離の等間隔のデータではなく、任意の座標データを繋ぎ合わせたデータ。つまり、Sheetsでグラフにするときに、X軸をある数で定義してしまうと、一つのグラフ内に複数のグラフを表示するとおかしくなる。これはどうも、Excelだと散布図を利用してグラフを描画するとX軸が異なるデータでも同じグラフで表現できるらしいが、GoogleSheetsではそれができない。解決法をGPT先生に聞いていくと、X軸が異なるデータを線形補完をして10mピッチで標高を割り出したCSVを作ればできるということがわかった。ようは一回グラフを描いて、10mで刻んで標高を割り出していくということ。

NOTIONにCSVを格納
こうして作られたCSVデータをテキストデータとしてNOTIONに保管する。下記の図の値は水平距離10mごとに標高を示している。

NOTIONとGoogleSheetsの連携(MAKEで試みる)
ここまでくればあともう一息、、、「NOTIONとGoogleSheetsを連携すればなんとかなる!」というところまで来た。初めは「MAKE」を使って連携を試みるも手間がかかりすぎて面倒になる。

NOTIONとGoogleSheetsの連携(Sync2Sheets)
色々調べていると「Sync2Sheets」に行き着いた。NOTIONとGoogleSheetsの連携に特化したアプリで、これは良さげだ。CSVをテキストデータで保管した欄をGoogleSheers側でSPLIT関数を使って、分割。

そしてグラフへ
こうして長い道のりを経て、、、X軸方向に水平距離、Z軸方向に標高が同じ軸で表現されているグラフができた。このグラフのリンクをNOTIONに表示すればいつでも山行の斜度がなんとなくイメージできる。いままできつかった登りの斜度がこのグラフの中でどこなのかを思い出しながら、次の参考の計画にいかせるのである。ああ、、、ここまで長かった。笑

最後はヤマレコ情報のAPI連携を目指すも、、、
ここまでくればヤマレコの情報もAPIでNOTIONに連携できないかな!?なんて思い始める。ヤマレコはAPI利用ガイドラインが定められており、申請すればAPIの利用ができるようだ。試しに利用申請を行ってみたが、、、3週間程度待ったが返事が来なかった。

諦めてCSVでの連携に
ここまでか、、、と思ってヤマレコのページを見ていると、登山記録をCSVでダウンロードできるではないか。それであれば「Sync2Sheets」をうまく使ってGoogleSheetsで連携すれば良いかと。まあ、何かサービスを起こすわけでもないので一旦これでやってみることにした。

NOTION「山の記録」ページの完成
こうしてNOTIONのトグルに山行グラフを格納し、いつでも表示できるように。データベースにはヤマレコの情報を読み込み、それぞれリンクさせている。
この山行データに、「山のギア達」データベースをリンクさせてみれるようにするのも面白そうだ。それはまた時間がある時にでもやってみよう。

今回はULとは違ったお話
今回はULとは少し違う話になったが、NOTIONのデータベース機能をうまく使うことや、山を知ること等、、、UL登山に繋がる部分も多少あったように思う。(定量的に物事を把握するという部分くらいか?)皆さんもお時間あればお試しください。