【Python】FisPoint Estimation Systemその1<ポイントの計算法>

FIS pointは、選手の競技毎の成績を、世界統一尺度で数値化してます。その数値が少ないほど速い選手ということになります。信州MAKERSでは、レース毎に、いち早く見積値を計算してます。一秒でも早く現在のポイント知りたいレース関係者のための計算システムです。
百聞は一見にしかずで、試験稼働動画アップしました。

本開発の計算システムの仮の名称を”FPE” ”FPEシステム” ”Fis Point Estimation System”と3種類で呼びます。
※有名な米国のスーパースターShiffrin選手のFISポイントはSL=0,GS=0,SG=0.75、DH=7.11です(2024年5月1日FIS NL LIST)
①ポイントリストの入手
Fis points lists ページには、2001年から直近の南半球でのレースのファイルLINKまで膨大なファイルが収録されてます。
https://www.fis-ski.com/DB/alpine-skiing/fis-points-lists.html
北半球のシーズンは、11月第2週末に始まり、終わりが4月30日で7月1日に翌年用のベースリスト(BL)が発行されます。
南半球のシーズンは、7月1日に始まり、10月15日に終わる。

BL以降、レースのデータがノーマルリスト(NL)に収録されて1シーズンで20-22個NLが発行されます。
FPEシステムとして、事前に該当シーズンの全ポイントリストファイルをダウンロードして所定フォルダに格納しておきます。
●ポイントリストの検索と使い方
レースポイントとNLリストのポイントとBLリストのポイントの3か所のポイントから比較計算する。
本開発では、レースポイントを算出することを目的としているが、選手によって、NLとBLのポイントで決まる場合もあるため、3つのリストを一覧表にしてます。
①:NL(ノーマルFIS ポイントリスト)

レースの期日がポイントリストの期間より以前であるポイントリストを検索します。FIS points listページに行くと列名が下記の表がでます

FIS points list         Valid from   Valid to    Download links
リストの名称         開始日     終了日     CSVファイルをダウンロード
points list番号でシーズン通し番号ですが、CSVファイル名には、通し番号が表記されてません。
例えば 2024年の3月24日のレースの計算に使うファイルを探すには、期間内にはいるファイルを探します。

19th FIS points list 2023/2024     14-03-2024    27-03-2024

=>19thリストだと3月14日~3月27日まで有効です。ここにあるCSVをダウンロードします。
ダウンロードするファイル名:FIS-points-list-AL-2024-388.csv  と19thの文字がありませんので、判りにくいです。
そこで、NLの表題番号とファイル名の番号が違うのでファイルを探すのに手間取りますので、索引表を作成しました。
換算表ファイルは作成日時のタイムスタンプがついていて、これをプログラムに読み込んで当該レースのポイントリストを検索して計算の元データとして使用します。2024年7月17日作成の索引表のzipファイルです。    FIS_FileSet_2024-7-17-17-27

●ノーマルポイントの制限:ノーマルポイントがBLより悪かったらNLにBL値が採用される。

②:BL(ベースポイントリスト)
シーズン開始の7月1日に発行されるNLの元になる前シーズンの結果で、都合があって通常のレース参戦ができなかった選手への
NLポイントを決める元になるリスト。(この道、数十年の横田様でも滅多におめにかからないLISTだそうです)

ベースポイントリストは前シーズンの各競技の結果中ベスト、2番目のベストの平均値をBLのポイントとなってます。
・:ノーマルポイントがBLより悪かったらNLにBL値が採用される。
・BLがない人:BLが無い場合は、レースポイントが20%加算される

 

③レースポイント
そのレースでの、結果をポイントで表す
一位のタイムを基準に比率の1との差をとって、競技別の係数F値とかけて算出
一位のTotalタイム=T0
その選手のTotalタイム=Tx
F値;DH=1250、SL=730、GS=1010、SG=1190、AC=1360

   レースポイント=(Tx/T0ー1)*F

④ペナルティポイント(これがFIS pointの面白い特徴です)
その競技のFIS大会におけるレベルをポイントで表す、レースポイントに加算されて、
  選手のFISポイントとしてNL作成時の計算に使われる。
  参加選手のFISポイントレベルによって、ペナルティポイントが大きく変わる。
  オリンピック、ワールドカップなどは、ペナルティは、ゼロ点  
  国際大会では、min15~999まで
 ローカル大会では、min23~999までとなる。ローカル大会に10ポイントの選手がでると
  ペナルティが23以下になることがあるが、その場合は、min23ポイントとなる。
  10ポイントの選手は、1位をとっても23ポイントとなるので、NLポイントは更新にならない
 から、ローカル大会に出場して1位をとっても、FISポイントが良くならない。Fis points Rule pdfの11ページに表がある。
  https://assets.fis-ski.com/f/252177/x/e861922b42/fis_points_rules_12-07-2024.pdf

A値、B値、C値については文章でしか説明がなくて、複雑ですので、図を作成しました。

Excelなら、ソート機能をよく使います。Pythonなら、pandas DFをたくさん使います。

 

ちなみに、FISpoint値とあるレースのRank(着順)を相関図でみると 着順20位以内でFISpoint 上位5人が入っていました。しかし、B値の計算では、必ず出走全員のFISpointでソートしないといけません。

⑤本開発でのポイントは、 レースポイント+ペナルティポイントです。
選手は、レースポイントは、すぐわかるのですが、ペナルティポイントが判らないので、速く知りたいとなります。
ペナルティポイントが気になるのは、ローカルレースですので、本開発の対象選手は、若い発展途上の選手達と
なります。オリンピック、ワールドカップはペナルティゼロですので、レースポイントだけでNLが決まります。
⑥Pythonプログラムでの苦労した点
コードはこちらですが、未だデバッグ中ですが、計算方法とかデータ照合方法などは完成してます
https://gist.github.com/dj1711572002/540d5f82623a265683bd23434fdef972

 

難点1:漢字読みをローマ字に変換しても変換ミスが多くFISリストのローマ字と合わない場合が多くFIScodeを探すためのプログラミングがそれなりに手間がかかります。
特に、韓国選手のローマ字が大会での登録名とFISでの登録名が違うことが多く、FISと手動で合わせて
その選手がでたときは、プログラムで個別名を検出して、修正するという手間をかけてます。
2024年の1月4月までの大会で韓国人選手7名のローマ字綴りがFISリストと違っていました。
難点2:レースでの漢字の名前とSAJの漢字の名前が違っている場合があって、その選手のIDが検索できないことがあります。

難点3: SEIKO SPORTS LINKをスクレイピングするのですが、動的ページですが、seleniumuを使わずに、
chrome driverでページを表示してもらってから、ctrl-a ctrl-c でクリップボードにコピーして
それをtextにして、データを拾うという原始的な方式をとってます。ですので、非常に時間がかかります。
拾うのに待ち時間を10秒くらいとらないとネットの状態によってページ表示が遅くなるので、
その点で、不安定要素があります。

コツをメモしておきます。

コツ1:FISリストの名前綴りでの照合は難しいので、日本人は、SAJに加入している人がFISに加入しているので
まずは、SAJの会員リストからSAJidとFISidを検索して、FISidをFISlist検索に使います。
SAJの名簿は、 バイオグラフィーというページにあります。
https://sajdb.shikuminet.jp/alpine/biography

コツ2:参照するリストファイルがたくさんあるので、設定ファイルを作成して、プログラムで使用するリストファイルのパスとファイル名を記述してあります。
設定ファイル名:set_idf-ptf-base24.txt には 3個のファイル名が記述されてます
E:\FIS\SAJ_Biography/SAJ_Biography_List_2024-7-15-17-17_.csv,

E:\FIS\FIS-points-list-AL/FIS_FileSet_2024-7-17-17-27.csv,

E:\FIS\FIS-points-list-AL/Base-FIS-points-list-AL-2024-.csv,

 

コツ3:レースの日とNLリストの番号を合わせる処理、上記FIS_FileSet_2024_7-17-17-27.csvファイルに
2024年分のNLリストの表題とダウンロードファイル名と有効期間の日付が書いてあるので
このファイルを見ながら、どのNLを使えばいいか判定してます。
コード  rev.016までデバッグが進んでいて、2024年12月からFISに登録される大会は4月まで全部
計算させて、FISのオフィシャルポイントと一致していることを確認しました。

 

1)SEIKO SPORTS LINK にいって、みたい大会の結果ページを閲覧
デバッグとして、2024年シーズン国内初GSレース
DOTO Series The 26th Nukabira Gensenkyo GS Race
  https://seikosportslink.com/sias/201/?i=20008468&s=SI&d=AS&g=M&e=030&c=04&p=1&u=00

2)これをスクレーピングして、計算してHTMLにしてサーバーにアップした結果が下記です。

https://shinshu-makers-ski.qc-plus.jp/Test_+_df_result_df_SEIKO_2023122829DOTO%20Series%20The%2026th%20Nukabira%20Gensenkyo%20GS%20Race_28MAN.html

3)この値とFISのオフィシャルページにいって、同競技をみると FIS  Calendar  resultのページにいきます。
 https://www.fis-ski.com/DB/alpine-skiing/calendar-results.html?noselection=true&mi=menu-calendar

ここの検索で seasonを2024  NationをJPN とすると日本における2024年FIS登録大会がでます。
34競技大会しあk登録されてないので、探すのは簡単です。
上記DOTO Series The 26th Nukabira Gensenkyo GS Raceは、FISでは
 https://www.fis-ski.com/DB/general/results.html?sectorcode=AL&raceid=119375

ここで、計算があっているかは、一位のポイントを見ればわかります。一位のポイントがペナルティポイント
なので、計算が複雑な値なのでこれがあっていれば計算はOKと判定します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です