2つのマラソン大会両方に参加しているランナーは10%
昔【ランニングのブログからの個人情報特定の可能性】という記事を書きましたが、実際のところどうかなと思い、ちょっと調べてみました。
調査方法
- 過去一年以内のランニング大会を適当にピックアップ。
- PDFまたはHTMLをダウンロード。
- スクリプトで氏名のみ切り出し。(※ここが一番大変。若干の誤差あり。)
- 各レースに共通の氏名をカウント。
調査結果
No. | レース1 | 人数 | レース2 | 人数 | 両方参加 | [%] |
---|---|---|---|---|---|---|
1 | 関東の有名フルマラソン | 17,173 | 東京郊外30kmレース | 11,355 | 1,095 | 9.6% |
2 | 関東の有名フルマラソン | 17,173 | 都内ハーフA(中規模) | 4,045 | 484 | 12.0% |
3 | 関東の有名フルマラソン | 17,173 | 都内ハーフB(小規模) | 1,447 | 158 | 10.9% |
4 | 関東の有名フルマラソン | 17,173 | 東京郊外トレイルラン30km | 1,161 | 124 | 10.7% |
5 | 関東の有名フルマラソン | 17,173 | 南の島のフルマラソン(小規模) | 792 | 15 | 1.9% |
6 | 東京郊外30kmレース | 11,355 | 都内ハーフA(中規模) | 4,045 | 533 | 13.2% |
7 | 東京郊外30kmレース | 11,355 | 都内ハーフB(小規模) | 1,447 | 156 | 10.8% |
8 | 東京郊外30kmレース | 11,355 | 東京郊外トレイルラン30km | 1,161 | 229 | 19.7% |
9 | 東京郊外30kmレース | 11,355 | 南の島のフルマラソン(小規模) | 792 | 16 | 2.0% |
10 | 都内ハーフA(中規模) | 4,045 | 都内ハーフB(小規模) | 1,447 | 113 | 7.8% |
11 | 都内ハーフA(中規模) | 4,045 | 東京郊外トレイルラン30km | 1,161 | 39 | 3.4% |
12 | 都内ハーフA(中規模) | 4,045 | 南の島のフルマラソン(小規模) | 792 | 3 | 0.4% |
13 | 都内ハーフB(小規模) | 1,447 | 東京郊外トレイルラン30km | 1,161 | 17 | 1.5% |
14 | 都内ハーフB(小規模) | 1,447 | 南の島のフルマラソン(小規模) | 792 | 2 | 0.3% |
15 | 東京郊外トレイルラン30km | 1,161 | 南の島のフルマラソン(小規模) | 792 | 1 | 0.1% |
まとめ
大雑把に言うと、片方が著名な大会なら、数の少ない方の大会の10%前後の方が、両方に参加していました。両方ローカルなレースなら5%、片方がマイナー、遠く、あるいは特殊なレースだったりすると、数%以下に低下しています。仮に2つの10,000人規模のランニング大会の10%が共通のランナーだとすると、5レースを選ぶと、全部に参加しているのが1人になる計算です。5,000人規模で5%が共通だとすると、4レース全部に参加しているのが1人(5,000->250->12.5->0.625)、1000人規模で1%なら3レースで1人になります(1,000->10->0.1)。ランニングサイト、SNS、ブログ等で参加レビュー記事を複数公開すると、ピンポイントで個人情報(名前)の特定に至る可能性は高そうです。
でも、やっぱり全参加者記録は一覧で見たいもの。ゼッケンとパスワードで自分の記録が見られても、それだけでは全体でのポジションが直感的にわからないし、一緒に参加した友人たちのタイムを見て一喜一憂もできず、つまらないですからね。
リスクと利益を天秤にかけると、現状では受け入れられる範囲かな。誰でも簡単にできる方法はないですし、そもそもここに興味を持つ人なんてほとんどいないでしょうからね。
おまけ
いったん氏名の切り出しができてしまうと、絞込み自体はスクリプト言語3行でできてしまいます。以下Pythonの例。共通なランナー数だけ表示しています。(※でも氏名の切り出しには個々のPDFに合わせていろいろと試行錯誤してコードを書かなくてはならず、こちらは一筋縄では行きません。)2大会なら、
>>> lst=[s0,s1,s2,s3,s4,s5] >>> for x in itertools.combinations(lst,2): ... print lst.index(x[0]),lst.index(x[1]),': ',len(x[0].intersection(x[1])) ... 0 1 : 1095 0 2 : 484 0 3 : 158 0 4 : 124 0 5 : 15 1 2 : 533 1 3 : 156 1 4 : 229 1 5 : 16 2 3 : 113 2 4 : 39 2 5 : 3 3 4 : 17 3 5 : 2 4 5 : 1 >>>
3大会でもほとんど同じ。
>>> lst=[s0,s1,s2,s3,s4,s5] >>> for x in itertools.combinations(lst,3): ... print lst.index(x[0]),lst.index(x[1]),lst.index(x[2]),': ',len(set.intersection(x[0],x[1],x[2])) ... 0 1 2 : 107 0 1 3 : 36 0 1 4 : 34 0 1 5 : 3 0 2 3 : 24 0 2 4 : 8 0 2 5 : 0 0 3 4 : 5 0 3 5 : 0 0 4 5 : 0 1 2 3 : 22 1 2 4 : 8 1 2 5 : 1 1 3 4 : 6 1 3 5 : 0 1 4 5 : 0 2 3 4 : 4 2 3 5 : 0 2 4 5 : 0 3 4 5 : 0 >>>
- © のんびりポタ・ランニング 2016 -
pota-run.blogspot.jp
pota-run.blogspot.jp
はじめまして。
返信削除3、4年前から時々読ませていただいています。鶴川在住でベーグル好きのランナー&自転車乗りです。
ワッカベーグルの閉店残念ですね!
今日行ってみようと思います。
Twitter によると28、29も臨時で開けるようですよ。
gwbsさん、コメントありがとうございます。ワッカベーグル閉店は大ショックでした。ぜひぜひ今日行ってきてください。私は今日行けませんでしたが4/29なら行けるかな? しばらくベーグル難民になりそうです。
削除