~本ブログは、現在「Zwiftの走行データを詳細に確認したいと思った方」向けの内容です。
 バーチャルサイクリングの走行データの加工/編集に興味がない人には全く役に立ちません~

前回は、ZwiftのFitデータをGPSBabelというソフトを用いて、
Garmin Training Center”形式のxmlファイルと
Data Logger iBlue 757”形式のcsvファイルに変換する方法を示しました。
もちろん、必要なデータによっては、別のファイル形式でも構いません。
念のため、各ファイルの(自分なりの理解の)データ形式を以下に詳述しておきます。

まずは読み取りが簡単なCSVは、各行に1秒毎のデータ、(エクセルで開いた場合の)各列には
A列:データ番号(秒数に相当)
C列:日付
D列:GMT時刻
F,G列:緯度
H,I列:経度
J列:高度(m)
K列:速度(km/h)
T列:累積距離(km)
という構成になっています。

xmlファイルも、各行に1秒毎のデータで、エクセルにて「読み取り専用」として開いた場合、
A-W列:スタート地点の経度・緯度、心拍・ケイデンス等の平均値、多分不要。
X列:高度(m)
Z列:ケイデンス(rpm)
AB列:速度(m/s、3.6倍すると時速に変換できます)
AD列:パワー(W)
AG列:心拍数(bpm)
AJ列:緯度
AK列:経度
AM列:GMT時刻
という構成で、どれも2回重複して記録されています。

ここから先はだいぶ細かい話になるため、結論は次回ブログの最初に記載しておきますので、
マニアックな方以外は読み飛ばしてください。

csvファイルの保存データは、累積距離以外はxmlファイルに含まれていることが分かります。
しかも、速度を積分すれば「距離」になるので、csvファイルは一見不要に思えます。
なぜ、わざわざFitデータの変換の手間が増えるにも関わらず、csvファイルを保存したのでしょうか?
それは「データサンプリング(データの取得間隔)」を考慮したためです。
csvファイル、xmlファイルとも、サンプリング周波数は1Hz(1秒間に1回データを取得)です。
しかしながら、走行中の負荷(パワー、ケイデンス等)は1秒間隔で変化するわけではなく、
その結果としてZwift上で算出される(アバターの)速度も1秒の間に変化します。
例えば、実際の走行中に、99秒~100秒までの速度が、
 99.0秒-30㎞/h
 99.1秒ー31km/h
 99.2秒ー31km/h
 99.3秒ー31km/h
 99.4秒ー31km/h
 99.5秒ー31km/h
 99.6秒ー31km/h
 99.7秒ー31km/h
 99.8秒ー31km/h
 99.9秒ー31km/h
 100.0秒-31㎞/h
と変化した場合、大体のソフトウェアはサンプリング時刻の「瞬時値」を記録します。
そのため、記録データの上では
 99秒-30km/h
 100秒-31km/h
となり、この1秒間の平均速度は30.5km/hとなってしまいます。
そのため、xmlファイルで速度を積分して算出した距離は、実際の距離との誤差が大きくなる可能性があります。
では具体的に見てみましょう、
下表は、公称8.8kmの市街地コースの距離を、xmlデータの速度積分およびcsvデータから詳細に求めたものです。
1日に3周走行し、念のため2日分(計6周分)のデータとしてまとめました(単位はkm)。

csvデータの方が、xmlデータよりデータのバラつきが小さく、標準偏差は5mです。
時速36km/h=秒速10mですので、csvデータのバラつきは「測定分解能」によることが明確です。
筆者がなぜ“距離情報”に拘っているかについては、次回に記載します。