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

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

pythonの活用例について(fit ファイルの利用 その14:Cateye社 Avventuraのデータからーヒルクライムデータ-坂データの比較)

これまでの記事でfitファイルのデータから、様々な解析を行って来ました。特にヒルクライムに関連して、勾配分布や関連グラフ、自作の激坂ファクターの例などを紹介してきました。今回はそれらの集大成(すこし大げさですね)として、いくつかの実際の坂データの比較を行ってみたいと思います。

 以下の2つのデータは著者の近隣の坂のデータを解析した結果になります。一般的によく使われる平均勾配と距離で比較すると「A」と「B]は似たような数値となっていますが、実際に実走すると、明らかに「A」の坂の方がきつく感じます。

 

f:id:winchemwin:20220320105912p:plain

坂データの比較

 fit ファイルの解析結果で勾配分布を見ると「A」の方が10%前後の勾配の坂の割合が多く、「B」と比べると坂全体としてきつい勾配の割合が高いことがわかります。またバリオプロットでも同じような傾向が確認できるのがわかるかと思います。激坂ファクターでもきついの勾配の割合を強調したファクター4、5で「A」の方が大きくなっています。

 このように坂の視覚化という意味ではfitファイルの解析結果は使えるデータもあるかと思いますので、今回までの記事が皆さんの参考になれば幸いです。

 

pythonの活用例について(fit ファイルの利用 その13:Cateye社 Avventuraのデータからーヒルクライムデータ-激坂ファクター)

 前回までにヒルクライムに参考になる図として、勾配に関する箱ひげ図やバイオリンプロットについて紹介してきました。これらの図は坂全体の様子を把握するには非常にイメージしやすいのですが、実際にいろんな坂を比較して「どのくらいきついの」ということがすぐに分かる数字があればわかりやすいかと思いますが、いかがでしょうか。一般的には平均勾配や最大斜度の数字から判断するかと思うのですが、激坂度を一言で示す「ファクター」があればよりわかりやすいのでは?と思い、「激坂ファクター」なるものを作ってみました。

 以下はそのコードですが、基本的に勾配ごと(3-6%、6.5-9%、9.5-12%、12.5-15%、15.5-18%)の距離(Sumdist)を算出した上で、勾配大きい距離がどのくらいあるかでファクターを算出しています。

f:id:winchemwin:20220312042714j:plain

激坂ファクター コード その1(距離の算出)

f:id:winchemwin:20220312042738j:plain

激坂ファクター コード その2 (距離の算出)

 ファクターですが、いくつか算出しています。ファクター1は全体の距離に対する「15.5-18%」の割合、ファクター2は「12.5-15%」の割合、ファクター3は「9.5-12%」の割合を示しています。ファクター1-3は単純にそれぞれの勾配の比率になっていますので、それとは別にファクター4、5は激坂を強調するために勾配の大きい部分に大きな係数をかけて計算してみました。

 具体的にはファクター4ではそれぞれ「9.5-12%」✗1、「12.5-15%」✗2、「15.5-18%」✗3した距離に対する全体の距離、ファクター5ではそれぞれ「3-6%」✗0.5、「6.5-9%」✗1、「9.5-12%」✗1.5、「12.5-15%」✗3、「15.5-18%」✗5した距離に対する全体の距離で算出しています。

f:id:winchemwin:20220312042804j:plain

激坂ファクター コード その3(ファクターの計算)

 以下は、ある坂について激坂ファクターを算出してみた結果になります。数字だけみてもピンとこないかもしれませんが、いろんな坂で比較してみると「激坂ファクター5」が「1」を超えると個人的には「きつーい」坂に分類できているように思います。興味があれば皆さんのデータでも計算されてみてもいかがでしょうか。

f:id:winchemwin:20220312043302j:plain

激坂ファクター?? 算出結果

  次回はよりイメージしやすいようにいくつかの坂でバイオリンプロットと激坂ファクターを計算してみた結果について紹介したいと思います。

 

pythonの活用例について(fit ファイルの利用 その12:Cateye社 Avventuraのデータからーヒルクライムデータ-バイオリンプロット)

 前回の記事で坂の勾配の分布の様子の図示化として、箱ひげ図を紹介しました。今回はバイオリンプロットについて紹介したいと思います。

 バイオリンプロットですが箱ひげ図と同様にデータの分布の様子を図示化するプロットです。箱ひげ図はデータの中心部分を箱で表示しつつ、最大値、最小値までの両端の分布をひげ部分で表示して視覚化したものです。バイオリンプロットは箱ひげ図に加えて、データの確率密度(ヒストグラムのようなイメージ)が加わったような図となっています。真ん中の線の太い部分が箱ひげ図の「箱」に当たる部分で同様にデータの中心部分の分布を示しています。それに加えて、バイオリンプロットの場合は両側に曲線が図示されており、この曲線がデータの確率密度を表しています。数値だけでなく、データの分布の様子が視覚的にイメージできて、坂の全体の勾配の様子もイメージしやすいのではないでしょうか。

 

f:id:winchemwin:20220306055017p:plain

バイオリンプロット図 説明

 バイオリンプロット作成のコードは簡単で、前回の箱ひげ図作成のコードでプロットの命令のところをplt.violinplot(変数) とするだけで作成できます(このコードで作成した図が上の説明図になります。但し、説明用のコメント(最大値、中央値・・・・など)は表示されません)

f:id:winchemwin:20220306061130j:plain

バイオリンプロット作成 コード

  

 上記の坂の平均勾配は8.5%、最高斜度は17%程度ですが、これらの数値やだけではイメージできない坂全体の様子がよりイメージしやすくなっているのではないでしょうか。あまり見かけないプロットですが、ヒルクライムに関して坂の情報を視覚的に捉える有効な手法のひとつとして紹介させていただきました。

 次回は激坂度の指標となる「激坂ファクター」なるものを作ってみましたので、その事例について紹介したいと思います。

pythonの活用例について(fit ファイルの利用 その11:Cateye社 Avventuraのデータからーヒルクライムデータ-箱ひげ図)

前回までの記事でヒルクライムに参考になるデータとして、坂の平均勾配や勾配のばらつきを示す標準偏差の算出、斜度ごとのグラフ化を紹介してきました。今回は坂の勾配の分布の様子の図示化について紹介したいと思います。

 まずひとつ目は箱ひげ図になります。箱ひげ図はデータ分布の把握に使われる図表のひとつです。箱部分でデータの真ん中の50%部分の分布を示し、直線の部分で最大値、最小値までの両端の25%の分布を示しています。真ん中の赤い線は中央値を示しています。

 

f:id:winchemwin:20220305044616p:plain

箱ひげ図説明

 一つの図表で全体数値の分布がわかるので、統計データの表示にはよく利用される図表になります。

 箱ひげ図の作成はmatplotlib ライブラリーを使って簡単に行えます。以下はそのコードですが、プロットの命令のところをplt.boxplot(変数) とするだけで作成できます(このコードで作成した図が上の説明図になります。但し、説明用のコメント(最大値、中央値・・・・など)は表示されません)

f:id:winchemwin:20220305045005j:plain

箱ひげ図作成 コード

 坂の勾配のメインが3%〜9%程度ですが、最大17%ぐらいのところがあるということが視覚的に感じ取れるのではないでしょうか。ヒルクライムデータで箱ひげ図が使われているのはあまり見たことはありませんが、視覚的に見やすい図表として活用してみるのもいいかもしれません。

 次回はもうひとつの別の図表の作成について紹介したいと思います。

 

pythonの活用例について(fit ファイルの利用 その10:Cateye社 Avventuraのデータからーヒルクライムデータ-斜度ごとの距離)

 前回の記事で、坂の平均勾配と勾配のばらつきを示す標準偏差の算出について紹介しました。今回は前回のコードで得られたデータをもとに、坂の各斜度ごとの距離のグラフ化を行ってみます。坂の斜度がゆるいところの距離が長ければ、斜度のきつい区間が一部あったとしても坂全体として比較的のぼりやすいかな?というイメージがわくかと思います。以下のコードでは前回までのコードで得られたSumdist(各斜度ごとの距離)を縦軸にして、棒グラフ(ax.bar)を作成しています。

f:id:winchemwin:20220226045700j:plain

斜度毎の距離のグラフ作成コード

 作成したグラフは以下のようになります(横軸:斜度、縦軸:距離)。それぞれの斜度の長さが視覚的にイメージしやすいのではないでしょうか。

f:id:winchemwin:20220226050824j:plain

斜度毎の距離のグラフ

  坂の様子はGPSのデータである程度確認はできるかと思いますが、斜度別でのイメージはし難い部分ともあるかと思います。今回の記事が参考になればと思います。

 次回はこれまで算出してきたデータの別の図の表記について紹介したいと思います。

pythonの活用例について(fit ファイルの利用 その9:Cateye社 Avventuraのデータからーヒルクライムデータ-平均勾配、標準偏差)

 前回はヒルクライムデータとして斜度別平均速度について紹介しました。今回は坂の状態を示すのによく利用される平均勾配の算出を行ってみたいと思います。また合わせて統計処理でよく算出される標準偏差の算出も行っています。

 平均勾配ですが、下記のコードでは各斜度ごとのの距離(sumdist)を算出したあとに(一つめのfor文)、その距離に応じた頻度だけ(1mにつき1回としています)、その斜度が現れたとして斜度の分布(ForStd)を作成しています(2つめfor文)。最終的に斜度の分布データから、平均勾配と標準偏差を算出しています。

 尚、距離については、使用したfit データではスピード(m/s)が1秒毎に記録されていたので、スピード=距離(1秒で進んだ)として距離を算出しています。Sumdistは各斜度ごとのトータル距離をカウントしてますが、今回の記事では利用していません。

f:id:winchemwin:20220223041243j:plain

平均勾配、標準偏差算出のコード

 上記のコードで算出した平均勾配、標準偏差は以下のようになりました。

 

f:id:winchemwin:20220223044536j:plain

算出した平均勾配、標準偏差

 

 自分が普段走っている坂の状態の確認の参考にはなるのではないかと思います。

 あと、「標準偏差」と聞くと難しそうなイメージを持たれるかたもいるかもしれませんが、データのばらつきの様子を示す指標と捉えてもらったらと思います。

 平均値±標準偏差値で概ね全体の68%のデータを締めているという感じになりますので、上記データの場合、平均勾配は8.57%ですが、坂全体としては6.04〜11.1%に斜度の主要な部分があるということになります。坂全体として、斜度が一定でばらつきがなければ標準偏差は小さくなりますし、ゆるい坂と急坂が入り交ざった坂ですとばらつきが大きく標準偏差が大きくなることになります(例えば平均勾配5%の坂でも、4%〜6%の坂が続くような坂であれば標準偏差は小さくなりますが、1%の坂、10%の坂が入り混じった坂ですと標準偏差は大きくなります)。

 坂の情報については、一般的には平均勾配で表されることが多いのですが、平均だけでは表せない部分もあるかと思いますので、今回は「標準偏差」も算出してみました。

 ただ「標準偏差」というと難しいイメージがあるかもしれないので、「坂の分布」などわかりやすい指標として示した方がよいかもしれませんね。

 今回は以上になります。次回は上記コードで作成したSumdistの値と利用した各斜度ごとの距離のグラフの作成を行いたいと思います。

 

pythonの活用例について(fit ファイルの利用 その8:Cateye社 Avventuraのデータからーヒルクライムデータ-斜度別平均速度)

 前回の記事で、ヒルクライム関連するデータとして斜度のヒストグラムの作成を紹介しました。今回はヒルクライムデータの分析として、坂の斜度ごとの平均速度の算出を行ってみます。坂の斜度に応じてどのぐらいのスピードで走っているか興味のある方の参考になればと思います。

f:id:winchemwin:20220220050350j:plain

斜度ごとの平均スピードの算出-コード

 最初に平均速度のデータを格納するリスト(AveSpeeds)を用意しておきます。Avventuraでは斜度は0.5%刻みで記録されているので、for文以下で(上記コードでは記載していませんが、予めnumpyをインポートしておく必要があります)斜度0.5%〜18%までの0.5%刻みのスピードの値を取得した上で、平均値を算出しています。スピードはm/sで記録されているので、km/hに変換した上で、AveSpeedsに格納しています。

 得られたAveSpeedsのリストは改めてpandas のデータフレームとして処理し、各斜度ごとの平均スピードを打ち出しています(下図)

f:id:winchemwin:20220220051307j:plain

斜度別の平均スピード 1

f:id:winchemwin:20220220051336j:plain

斜度別の平均スピード 2

 斜度に応じた自分の実際のスピードが詳細に把握できます(私自身のスピード値が遅いのはお恥ずかしい限りですが・・・)。当然ながら斜度がきつくなるに従ってスピードが落ちてきています。この様子をグラフで表したのが下図になります。

f:id:winchemwin:20220220051849j:plain

斜度別の平均スピードのグラフ

  ヒルクライム時の斜度に応じたスピードの変化の様子が詳細にわかるかと思います。走行時にもある程度はスピードの把握はしているかと思いますが、改めてデータとして確認するには役立つのではないかと思います。ご参考になれば幸いです。

 次回は平均斜度、斜度の分布のデータの算出について紹介したいと思います。