前回まででラップデータを一括してダウンロードできました。
これに日付情報を付けて、分析できるようにしようかと思います。
こちらの環境は、macOS Monterey(12.0.1)、GoogleChrome(97)、ターミナル(Bash)で実行しています。
Bashでコマンド打ち込んでるだけなので、Linuxの方はそのまま使えるような気がします。
Windowsの方は、Windows Subsystem for Linux(WSL) を入れて、Bashを使えるようにすると同じようにできるかも。こちらに環境ないから、知らんけどw
詳しくは[Windows10 Bash]で検索をお願いします。
- アクティビティIDとトレーニング開始日時が記録されたcsvファイルの作成
- ラップデータcsvの各レコードの先頭にアクティビティIDを追加
- ラップデータcsvをヘッダ行を削除して結合
- ファイルを統合して日付入りのラップデータcsvを作成
アクティビティIDとトレーニング開始日時が記録されたcsvファイルの作成
トレーニングの日時を調べる方法は無いかと調べていると、tcxファイルにもgpxファイルにも日時は記録されているようです。どちらもベタベタのxmlファイルです。tcxファイルの方がトレーニング日時のタグが取り出しやすいのでこちらを使ってみます。
落ちてきたファイル名の数字部分はアクティビティIDで、これはcsvと同じです。
では、tcxを持ってきましょう。
前回のcsvを取ってきたスクリプトのcsvをtcxに置き換えて同じように流します。
そうするとダウンロードフォルダに大量のtcxファイルが落ちてきます。
落ちてきたtcxファイルをcsvファイルと同じフォルダに放り込んでおきます。
試しにtcxファイルを1つ開いてみると、トレーニング日時は、<Id>タグに入ってました。
2022年の1月3日、5時49分32秒にスタートしています。
この日時は世界時(UTC)のようで、日本時刻より9時間遅れています。この例だと実際に走り出したのは、午後3時ちょっと前。日本での早朝ランの記録は前日で記録されていることになります。
タグで挟まれているので、grepとsedで取り出し可能です。
試しにコマンドで打ち込んでみる。
お〜ちゃんと日付が出てきた。
これをカレントフォルダ内の全てのtcxファイルにforループで適用します。
cutコマンドでファイル名からアクティビティID部分だけを切り出し、アクティビティIDと日時の2列が記録されたcsvファイルを作ります。ここではdateId.csvとします。←ネーミングセンス無し。
ラップデータcsvの各レコードの先頭にアクティビティIDを追加
上で作ったファイルとアクティビティIDでぶつけるため、ラップcsvファイルの各行の先頭にアクティビティIDを含むファイル名をくっつけます。awkでやってみます。元のcsvファイルには16列あったので、それをファイル名の右に全部出力します。
これだと1つのファイルしか処理されません。また、ファイル名が全部出てしまうので、アクティビティIDのみにします。
ファイル名からcutコマンドでアクティビティIDの部分のみを取り出し、フォルダ内のactivity_で始まるcsvファイルにforループで適用します。出力ファイルには、頭に"id_"を付けておきます。
ラップデータcsvをヘッダ行を削除して結合
もう、これで材料は揃いました。それでは大量のcsvファイルを1つに繋げます。catでも繋がるんですけど、2つめ以降のファイルのヘッダが邪魔です。awkで除きましょう。もちろんcatで繋げてから表計算ソフトで加工してもできます。
はい、つながりました。
ファイルを統合して日付入りのラップデータcsvを作成
では2つのファイルをアクティビティIDをキーに統合して1つのcsvにしましょう。もちろん、シェルでやらなくても表計算ソフトでvlookup()でもいけます。
できあがりです。あとはexcelで自由に扱えます。
1年間で3117ラップ。これで分析しやすくなりました。
これで、1年間のラップペースごとに結果をみてみるとこれ。
EとLSDペースで76%。Mペース、Tペースって順番に少なくなって行ってます。お〜ちゃんとできたっぽい。
前はこれだったので、ちゃんと分かるようになりました。満足です。