300億円欲しい

メジャーリーグのデータ解析します

形式的冪級数のライブラリをありがたく使ってAtcoderの問題を解く(つづき)

概要

感謝の続きです
gg-hogehoge.hatenablog.com

ABC159 F - Knapsack for All Segment

どういうDPを書いたらいいのかわからん...
atcoder.jp

概要

$A_1$, $A_2$, $\ldots$, $A_N$ に含まれる全ての区間について考える。

それぞれの区間$[L_i, R_i]$について、
$$A_{x_1} + A_{x_2} + ... + A_{x_k} = S$$
を満たす$L_i \leq x_1 \leq x_2 \leq ...\leq x_k \leq R_i $な$x_i$の組みの数を数えて、その和を求めよ。

立式

あとでかく

提出

この計算が難しい。これは覚えておきたい。
atcoder.jp


ABC169 F - Knapsack for All Subsets

どういうDPを書いたらいいのかわからん...
atcoder.jp

概要

$A_1$, $A_2$, $\ldots$, $A_N$ の全ての部分集合$2^N -1$通りについて考える。

それぞれの部分集合について、
$$A_{x_1} + A_{x_2} + ... + A_{x_k} = S$$
を満たす$x_1, x_2, ..., x_k$の組の数を数えて、その和を求めよ。

立式

$f_i = (1 + T^{A_i})$として、$f_i$について考えるかどうか、$2^N$通りある、ですね。


$$ F = (1+f_1)(1+f_2)...(1+f_N) = (2 + T^{A_1})(2 + T^{A_2})...(2+T^{A_N}) $$

の、$T^{S}$の係数が答え。

提出

書いてみると簡単。
atcoder.jp


ABC171 F - Strivore

コンテストで見た時は手も足も出なかった...
atcoder.jp

概要、立式

maspyさんの素晴らしい解説があるので省略。
maspypy.com

$-K$乗の形はよく出てきます。↓で効率的に計算できます。すごい。

maspypy.com

提出

F問題が7行くらいで解けました。嬉しい。
atcoder.jp

形式的冪級数のライブラリをありがたく使ってAtcoderの問題を解く (解けたら追記)

概要

競技プログラミングの強そうな人が使っている印象がある「形式的冪級数」。よくわかりませんが、名前がかっこいいので使ってみたいです。

形式的冪級数を使うにあたって、大変素晴らしいライブラリも公開していただけています。感謝しながら使っていきます。optさんありがとう。
opt-cp.com

問題リストもあります。すごい。これを参考にして形式的冪級数を使って問題を解きながら、理解を深めていこうと思います。
opt-cp.com

問題リストをAtcoder-problemsのVirtual contestに登録してみました。コンテストは2030年に終了しますので、それまでに頑張りましょう。
https://kenkoooo.com/atcoder/#/contest/show/ec28e88c-2bdf-468e-be30-ab0e599abcd7

本題

急に問題を見ても立式できないことが多かったので、以降にメモを残していきます。

各問題のメモ

TDPC-A コンテスト

準備運動。
atcoder.jp

概要

$N (\leq 100)$問ある問題の$i$番目は$p_i(\leq 100)$点。合計得点は何通りか。

立式

合計$k$点として、$T^k$の係数が非ゼロな$k$の個数を数えればいいです。

\begin{align}
(1 + T^{p_1})(1+T^{p_2})\ldots(1+T^{p_N})
\end{align}

↑を展開して、非ゼロの個数を数えます。

提出

これは簡単。
atcoder.jp

EDPC-M - Candies

これも準備運動。

概要

$N (\leq 100)$人に飴$K (\leq 10^5)$個を配る。$i$番目の人には$0\sim a_i$個配る。配り方は何通りか?

立式

$i$番目の人への配り方は、↓の多項式$f_i$に対応させます。

\begin{align}
f_i = 1 + T + T^2 + ... + T^{a_i} = \frac{1 - T^{a_i + 1}}{1 - T}
\end{align}

全員分を掛け算した$F = f_1 f_2 f_3 \ldots f_N $ の、$T^K$の係数が答えです。

提出

atcoder.jp

TDPC F-準急

これ、DPでも解きたいのですが、頭が混乱します。
atcoder.jp

概要、立式

optさんが書いてくれているので省略。賢い。
opt-cp.com

提出

スッキリです。
atcoder.jp

ABC179 D - Leaping Tak

DP+imos法で、区間更新的なことをする問題だった気がします。
atcoder.jp

概要

1マス目から$N(\leq 2 \times 10^5)$マス目まで進む。

1回の移動の際には、K個の区間 $[L_1, R_1]$, $[L_2, R_2]$, $\ldots$, $[L_K, R_K]$から1つ数字を選び、その数だけ進む。$N$マス目までの進み方は何通り?

立式

1回の移動を、↓の多項式$f$に対応させます。$[L_i, R_i]$の次数の項で、係数を1にします。

\begin{align}
f = T^{L_1} + T^{L_1+1} + ... + T^{R_1} + T^{L_2} + T^{L_2+1} + ... + T^{R_2} + ... + T^{L_K} + T^{L_K + 1} + ... + T^{R_K}
\end{align}

何回か移動するので、それを表す多項式$F$は↓。$N-1$マス進むので、$T^{N-1}$の係数が答え。簡単に表現できて嬉しい。

\begin{align}
F = 1 + f + f^2 + ... = \frac{1}{1-f}
\end{align}


元の問題には$K\leq 10$という制約がありますが、この解き方だと不要ですね。すごい。

提出

10行くらい。助かります。
atcoder.jp

ABC178 D - Redistribution

高校受験でよくやる、ボールと仕切りで考える問題ですよね。
atcoder.jp

概要

全ての項が3以上の整数である数列であって、その総和が Sであるような数列は、何通りあるか?($10^9+7$で割った余り)

立式

慣れてきました。1つの項に対応する多項式は、↓。

\begin{align}
f = T^3 + T^4 + ... = T^3 ( 1 + T + ...) = \frac{T^3}{1-T}
\end{align}

$f$, $f^2$, $f^3$, ... の、$T^S$の係数の和が答えになるので、まとめて考えればいいです。

\begin{align}
F = f + f^2 + f^3 + ... = \frac{f}{1-f}
\end{align}

$F$の$T^S$の係数が答え。

提出

7行くらい。
atcoder.jp




一旦終わり

DPを書いてバグらせて時間が溶ける...のが悲しいので、形式的冪級数でシュッと解いていきたいですね!

感謝を込めてもう一度リンクを貼ります。ありがとうございました。
opt-cp.com


以降、解けたら追記する

問題

URL

立式

式を書く

提出

ACしたコードを貼る

AtCoderで緑色になるまでにやったこと

はじめに

ABC165でやっと緑色になりました。 f:id:gg_hatano:20200503132306p:plain

競技プログラミングを割とちゃんと始めてから、これまでにやってみたことを書いておきます。

初心者が陥りがちなポイントをまとめておけば、これから始める人に役立てるかなと思いました。

目次

環境の話

いろいろ揃っていて、いい時代ですね。本当に。

[環境] けんちょんさんその他、先人のみなさまの記事を読む

情報が充実しています。大変助かりました。

qiita.com qiita.com

10回くらい読みました。

qiita.com

この記事を読んで、とりあえず800問解こう!と思いました。あと350問(2020/05/02現在)です。

[環境] C++11の環境をつくる@macOS

仮想マシンで環境構築する用のスクリプトを置きました。 atcoder利用で戦う環境 · GitHub

便利に戦える様に、c++11以上を使って、bits/stdc++.hをインクルードしたくなります。

ローカルでやるには色々面倒でしたので、仮想マシンを使いました。

↑の内容を、vagrant 2.2.6 とvirtualbox6.0.4で動かしています。

VScodeでRemove Developしたりするといいと思います。

[環境] atcoder-toolsは便利なので使う

使いましょう。便利です。

[環境] atcoder problemsは楽しいので使う

f:id:gg_hatano:20200503133709p:plain

進捗が閲覧できて楽しいです。学校の勉強もこんな感じでやりたかった。 https://kenkoooo.com/atcoder/#/user/gghatano?userPageTab=Progress+Charts

[環境] atcoder problemsのバーチャルコンテストは楽しいので開催する

たのしい!!!自分でコンテストを立てれば、自分がまだ解いていない問題を、指定した難易度の問題からランダムに選んでくれます。超絶便利です。

参加する時間が他の人とずれていても、パフォーマンスの数字で競えるのも良いですね。

社内では、バーチャルコンテスト実施->リモート会議で時間を合わせて感想戦、を繰り返しています。強い人たちと直接話して、何を考えながら解いているのかを聞けると学びが多いです。

C++の話

こういうことを書き出すとキリがありませんが、3つだけ書いておきます。

[C++] 大きな桁の数字の扱いに注意する

普段の業務では、int, long, doubleくらいしか使っていなかったせいか、大きな桁に慣れていませんでした。積極的にlong longを使っています。

[C++] 出力する少数の桁に注意する

cout << setprecision(10); などとしておきましょう。 ちゃんと計算しても、欲しい精度で出力しないと正解できません。

[C++] powが遅いので自分で書く

TLEするので、↓を用意しました。標準で用意されたものが遅いってどういうことだ。

typedef long long ll;
ll mypow(ll x, ll n){
  if(n == 0)
    return 1;
 
  if(n % 2 == 0)
    return mpow(x * x, n / 2);
  else
    return x * mpow(x, n - 1);
}

他にも、long long用のgcdとか、mod(109+7)上での組み合わせとか、いろいろ準備しておくと戦いやすいです。

競技プログラミング特有(?)の話

[競プロ] まずは全探索する

最初はきれいな解法を探しがちでした。

最近は、まずは全探索前提で考える、ダメなら制約を見ながら工夫する、という手順で考えられるようになりました。

Atcoderの解説PDFもそういう流れで書いてあることが多いです。全探索最強です。

[競プロ] (a+b-1)/a する

こういう便利なものは知っておきましょう。

[競プロ] コーナーケースに気を付ける

おそらく、↓の問題の話です。アホですね。 atcoder.jp

Atcoderはテストケースが親切で、色々気づかせてくれます。 とはいえ、際どいケースはケアしないと爆死します。↓とか。気をつけます。 atcoder.jp

[競プロ] 速く解く練習をする

解ければいいやと思っていましたが、それだとレートが上がりません。

速く解くのは大事。

[競プロ] 過去の皆さんの実装を参考にする

これのことですね。

この記事のことだと思います。

アルゴリズムはわかっても、実装で詰まって進めないことがよくあります。今後もあります。 自分で考えるのと並行して、人の実装を参考にするようにしました。いろいろな工夫がつまっています。

さいごに

[競プロ] AtCoderはすごい

atcoder.jp ほぼ毎週、オンラインのコンテストを無料で開催して、教育的な問題と解説を準備してシステムを運用して...ってちょっと考えられません。

コロナ対応のStayHome生活は、Atcoderのおかげでかなり充実しています。

引き続きどうかよろしくお願いいたします。

メモ

企業コンで関われるといいな。社内に最適化マラソンマッチのネタがあるはず...

GSuiteを使って簡単にコンテストをやろう (学会運営 Advent Calendar 2019)

概要

この記事は、学会運営 Advent Calendar 2019の記事です。

adventar.org

私は、セキュリティのワークショップ Privacy Work Shopの運営に携わりました。
他のメンバの皆さん、ありがとうございました。引き続きどうかよろしくお願いいたします。

その中で、データの匿名加工と再識別の技術を競うコンテスト「PWS Cup」を開催しました。

こんなコンテストです。

pwscup紹介
f:id:gg_hatano:20191225142751p:plain

学会の参加者どうしで交流する一手段として、コンテストはよく行われます。結構盛り上がります。
例えば、データ分析のKDD CUPは有名です。
www.kdd.org

ただ...運営は結構大変です。学会運営にあまりお金は出ませんし、時間もありません。

ルール設計も大変ですが、システム構築も大変です。ちゃんと作らないと、コンテストにならなくて楽しくないです。

今回は、GoogleのGsuiteを利用して、割と簡単にコンテストを実現するシステムについて、紹介します。

PWS Cup とは

こんなコンテストです。

昨年のAdvent Calendarで紹介しました。もしご興味があれば、↓のスライドを見てください!

www.slideshare.net

運営がやること

運営視点で、システムでやることは、

  1. アカウント管理:運営が参加者にコンテスト用アカウントを発行する
  2. データ配布  :運営が参加者のみにデータを配る
  3. データ受付  :参加者が投稿したデータを受け付ける
  4. データ評価  :投稿されたデータを運営が評価する
  5. 結果公開   :評価した結果を参加者に通知する

基本的にはこれだけです...これだけなのですが、ちゃんとやらないと、コンテストが成立しません。

各項目ごとに重要度を付けてみると、↓みたいな感じになりました。

f:id:gg_hatano:20191225153734p:plain
検討事項

アカウント管理。
今回は「セキュリティのワークショップ」のコンテストなので、そこでセキュリティの事故が起きたら面白すぎます。
極力、手で実装したくないです。どんな穴があるのかわからないので...。

データの配布。
参加者だけに渡したいです。特に、今回のコンテストは特別に、参加者毎に渡すデータが異なる、という要件がありました。
アカウント毎に、正しくデータが配布できるような仕組みが必要でした。

投稿データのフォーマットチェックの自動化、は結構重要です。
参加してもらって折角投稿したのに、フォーマットがダメで評価できません...は頻繁にあります。
個別に修正箇所を指摘するのは超絶大変です。

また、データ配布・受付のシステムダウンが起きないことも重要です。
特に締め切り間際に投稿が相次ぎます。投稿データが大量に降ってくるとシステムのパフォーマンスが落ちます。
「システムのせいで投稿できませんでした」はかなり興ざめです。

予算。人件費は出ません。ボランティアベースで参加していますし、実装の工数に費用は出てきません。
可能な限り、ありものを使うのが良さそうです。サービス利用費...としてなら、費用の請求はしやすいと思います。

実現手法

比較します どうやったらできるか。

  • プロの力を借りる:コンテスト運営サービス
    • 〇 kaggleやtopcoderやsignateなど、有名なコンテスト事業者に協力してもらいます。プロの力で、いい感じにやってもらえます。
    • ✕ 予算感が分かりません...学術目的なら安くできたりするかな...?分かりません。(企業案件だと1千万円オーダーという声もあります)
  • 既存のシステムを使う:EvalAI
    • 〇 データ分析の予測モデル構築コンテスト...は、EVALAIというツールを使えば作れそうです
    • ✕ 予測モデル構築コンテストではない場合、システム改修が必要です。これは大変そう。
  • [今回採用] 既存のツールを組み合わせる : Gsuite
    • 〇 ところどころ人力を入れながら、ある程度は自動化します 今回はこの内容を紹介します
    • ✕ 規模が大きくなってくると、人力が無視できません。予算感も合わないかもしれません。
  • 一から全部自分で作る
    • 〇 何かを買う必要はありません。サーバ代くらいです。安く済みます。頑張れば、自分が欲しいものが作れます。
    • ✕ 労力はかかります。労力は抑えたいです...。

EvalAIはかなりいい感じだったのですが、コンテストの仕様と合わなかったので止めました。
↓の記事が参考になります。AWSとかでEvalAIを動かしておしまい、にしたかった。
qiita.com

今回は、Gsuiteを使って、簡単にコンテストシステムを作りました。

理想

こんな感じです。

f:id:gg_hatano:20191225154141p:plain
PWSCUPシステム(理想)

現実

  • Gsuiteでアカウント管理
  • Google driveでデータを配布 (フォルダのアクセス権限をいい感じに設定しておく)
  • Google Form + GAS で投稿時のフォーマットチェック
  • [変更] 運営のローカル環境に投稿データをダウンロードして、評価用スクリプトを回して、結果をgithub pagesで公開

f:id:gg_hatano:20191225154201p:plain
PWSCUPシステム(現実)

GCEからgoogle driveを見に行くのはちょっとアレなので、gcsに移して...とか考えるのが面倒なので、手元にダウンロードしてやりました。
投稿したらすぐに評価して表示したい場合は、いろいろ工夫が必要でしょうけど、今回は数日に1回評価すればよかったので、頑張りませんでした。

実装が必要なものは、

くらいです。簡単ですよね。

費用

  • Gsuite利用料は、1アカウント700円/月くらい
    • 25チームが2か月やって、700 x 25 x 2 = 35,000円くらいでした。

まとめ

コンテストは楽しいです。学会は盛り上がります。
でもシステムは面倒です。お金を多少使って、労力を最小化しましょう。

来年はEvalAI使いたい...

おまけ

  • 会社proxyのせいでGoogle Formが見られません、という参加者が...
    • メールで提出してもらいました。お互い頑張りましょう

参考記事

  • kaggle でコンテストをホストする
    • ↓からkaggleに申し込みができるみたいです。

www.kaggle.com

匿名化・再識別コンテスト「PWS Cup」の紹介

この記事は

(非公式) NSSOL Advent Calendar 2018の、12/08担当分でした。
qiita.com

昨日は、データ分析のライフサイクル管理を効率化する「MLFLOW」紹介の記事でした。

qiita.com


明日は、「PPTを使って動画を作った時の苦労話(手順)」です。

(後でリンクを貼る)

研究紹介スライドから、それっぽく見える動画にするための手順...のはずです。

かなり苦労して最終的に得られたベストプラクティスの紹介です。楽しみですね!


以上です。

NBAのデータ分析がしたい(データ準備編)

はじめに

この記事は、R advent calendar 2016 12/18 の担当分です。

qiita.com

ですが、Rとかクリスマスとか、どうでもいいのです。NBAを観ましょうNBA

12月26日の朝4時30分から、キャバリアーズvsウォリアーズの試合があるのです。

watch.nba.com

最近はこの試合を楽しみに生きています。寂しくないです。

2015-2016年シーズンファイナルの激闘は、みなさんの記憶にも新しいはずです。

最終第7戦の最後まで目が離せない、最高の戦いでした。

www.nba.co.jp

今年はウォリアーズに、2013-2014シーズンMVPであるケビン・デュラントが加わりました。

ステファン・カリー、クレイ・トンプソン、ドレイモンド・グリーンとデュラントのオールスター選手4人が所属しており、

史上最強の呼び声も高いです。12月17日現在で23勝4敗、ウェスタンで1位です。

faknowledge.info

一方キャバリアーズは、昨年パッとしなかったケビン・ラブの調子が良く、

レブロン・ジェームズ、カイリー・アービングと共にBIG3で立ち向かうことができそうです。

12月17日現在で18勝6敗、イースタンで1位です。

興奮してきました。NBAのデータ分析しましょう。

NBAのシーズンデータ

まずはNBAについてどのようなデータが取得できるか、調べてみました。

シーズンの選手別成績は、SportsAnalyticsパッケージの関数を使って取得できます。

library(dplyr)
library(SportsAnalytics)
## データの取得
nbadata <-  data.frame()
for (year in 0:15){
  ## シーズンを指定するための引数を作る
  ## 2015-2016シーズンだったら "15-16"
  fetch.nbadata.arg <- paste(
    sprintf("%02d", year),
    sprintf("%02d", year+1),
    sep="-"
  )
  ## データの取得
  nbadata.year <- 
    fetch_NBAPlayerStatistics(fetch.nbadata.arg)
  ## シーズンを表す列を作る
  nbadata.year$Year <- 2000 + year
  ## 結合する
  nbadata <-
    rbind(nbadata, nbadata.year)
}
## 内容確認
> nbadata %>% names
 [1] "League"              "Name"                "Team"                "Position"           
 [5] "GamesPlayed"         "TotalMinutesPlayed"  "FieldGoalsMade"      "FieldGoalsAttempted"
 [9] "ThreesMade"          "ThreesAttempted"     "FreeThrowsMade"      "FreeThrowsAttempted"
[13] "OffensiveRebounds"   "TotalRebounds"       "Assists"             "Steals"             
[17] "Turnovers"           "Blocks"              "PersonalFouls"       "Disqualifications"  
[21] "TotalPoints"         "Technicals"          "Ejections"           "FlagrantFouls"      
[25] "GamesStarted"        "Year"  

総得点の推移

シーズン別の総得点を集計してみます。

nbadata <- read.csv("nbadata_2015_2016.csv")

library(ggplot2)
## 総得点
nbadata.points <- 
  nbadata %>% 
  group_by(Year) %>% 
  summarise(Points = sum(TotalPoints))

## 総得点の可視化
nbadata.points %>% 
  ggplot(aes(x = Year, y = Points)) + 
  geom_line() + 
  geom_point() + 
  ggtitle("Total Points")

f:id:gg_hatano:20161218111111p:plain

NBAは1シーズン82試合なのですが、2011-2012シーズンは66試合しか行われませんでした。

その影響で、シーズン総得点は2011年に落ち込んでいます。

しかし、全体として得点は増加傾向にあります。

オフェンスの効率が上がっているのか、ディフェンス力が低下しているのか。

今回は、オフェンスに注目してみます。

3ポイントシュートの成功率、成功数

昨今、色々なチームがウォリアーズの真似をしているのか、3ポイントシュートの数が増えている気がします。

最近も、ロケッツが1試合で24本の3ポイントが決め、歴代記録が更新されました。

www.nba.co.jp

そこで、確認のために、3ポイントシュートの成功率、成功数の推移を調べてみます。

## 3ポイントの集計
nbadata.threepoints <-
  nbadata %>% 
  group_by(Year) %>% 
  summarise(ThreesAttempted = sum(ThreesAttempted), 
            ThreesMade = sum(ThreesMade))

## 3ポイントの成功率
nbadata.threepoints %>% 
  mutate(ThreesRate = ThreesMade / ThreesAttempted) %>% 
  ggplot(aes(x = Year, y = ThreesRate)) + 
  geom_line() + 
  geom_point() + 
  ggtitle("Three Point Shot (Rate)")

f:id:gg_hatano:20161218111130p:plain

## 3ポイントの成功数
nbadata.threepoints %>% 
  ggplot(aes(x = Year, y = ThreesMade)) + 
  geom_line() + 
  geom_point() + 
  ggtitle("Three Point Shot (Made)")

f:id:gg_hatano:20161218111026p:plain

3ポイントの成功数は、増加傾向にありそうです。

また、3ポイントの成功率は、2015-2016シーズンには増加しています。

闇雲に3ポイントを狙っているのではない、ということでしょう。3ポイントは得点力向上に寄与していそうです。

NBAのplay-by-play データ

次は、シーズンのデータではなく、もっと細かい、試合中のデータも扱いたいです 。

ただ、バスケでそれができるでしょうか。

状態変化が離散的であるスポーツは、データが作りやすそうです。

例えば、野球のデータは、80年分くらいが公開されています。

gg-hogehoge.hatenablog.com

しかし、連続的に変化するバスケの試合を表現するようなデータは、ちゃんとお金を払わないと使えなさそう...

探してみたら、ありました。

なんと、試合中の各時刻における全選手の座標を取得することができます。

library(RCurl)
library(jsonlite)
## NBA_SportVUをクローンします。
## system("git clone https://github.com/rajshah4/NBA_SportVu")
source("./NBA_SportVu/_functions.R")

ここを参考にしながら、 昨年の12/24の、キャバリアーズvsウォリアーズの試合データを取得してみました。

Rで扱いやすいように、dataframeにします。

## all.movements <- sportvu_convert_json("../data/0021500438.json")

1試合分で13列256万行。すごい。220MBありました。内容を見てみます。

all.movements <- read.csv("movements.csv")
all.movements %>% names
 [1] "X"          "player_id"  "lastname"   "firstname"  "jersey"     "position"   "team_id"   
 [8] "x_loc"      "y_loc"      "radius"     "game_clock" "shot_clock" "quarter"    "event.id"  

各時刻(0.04秒刻み?)で、コート上の全選手とボールの位置情報(x_loc, y_loc)がわかります。

...すごそう...

一旦、プレイを可視化してみます。

4Q3:30前後の、レブロンジェームズのダンクまでの動きを、プロットしてみます。動画だと、このプレイです。

stats.nba.com

サイドからセンターにドリブルで移動、そこからドライブインしてダンク、という動きでした。

## データの抽出
movements.493.lebron <- 
  all.movements %>% 
  filter(lastname == "James") %>% 
  filter(event.id == 493) 
## 可視化(y座標は、ビデオの向きに合わせて調整する)
movements.493.lebron %>% 
  ggplot(aes(x = x_loc, y= 50-y_loc, group = lastname)) + 
  geom_path(aes(color = game_clock)) + 
  ylim(c(0,50)) + 
  ylab("y_loc")

f:id:gg_hatano:20161218110837p:plain

すごい!ちゃんとできています。

総移動距離

座標が取れているので、色々なことが分かりそうです。

例えば、各選手が1試合でどれくらい移動したのか、見てみましょう。

## 総移動距離の計算
data.travelDist <- 
  all.movements %>% 
  group_by(firstname, lastname) %>% 
  summarise(totalDist = travelDist(x_loc, y_loc))
 
## kmに調整して、上位10人を出す
data.travelDist %>% 
  mutate(totalDist_km = totalDist * 30 / 100 / 1000) %>%
  select(-totalDist) %>% 
  arrange(desc(totalDist_km)) %>% 
  head(10)

## 上位10人
        lastname    firstname[f:id:gg_hatano:20161218110837p:plain]    totalDist_km
1         NA        ball     8.711633
2      Kevin        Love     4.896590
3     LeBron       James     4.668445
4   Draymond       Green     4.631822
5    Stephen       Curry     4.534497
6       Klay    Thompson     4.498305
7    Matthew Dellavedova     4.075169
8       Iman    Shumpert     3.820774
9      Andre    Iguodala     3.736349
10   Tristan    Thompson     3.676420

...ボールにもセンサーがついていたのですね。

ボールの総移動距離は8.7km。ケビンラブは4.9kmも移動した、とのことでした。

おわりに

今年のお正月はNBAのデータで遊びましょう!

ところでこの記事は、R advent calendar 2016 12/18 の担当分でした。

qiita.com

明日は@siero5335さんの「森をさまよう」です。

qiita.com

...なんでしょう。怖い話でしょうか。楽しみですね。

以上です。

Oracle Master 12c Silver合格しました

はじめに

gg-hogehoge.hatenablog.com

あれから2ヶ月経ちまして、なんとか合格しました。

合格点67%のところを67%。ちょうどでした。

対策

受験を延期して、ソフトバンクから白い対策本が出版されるのを待つ方がいいと思います。

僕は何をしたらいいのか分からなすぎて、自転車を乗り回して筋トレをしたら合格できました。

みなさんも自転車に乗りましょう。

文句

3月に受験した時は2セクションあったのですが、今回は1セクションしかありませんでした。

試験形式変更のアナウンス、あったのかな。

試験問題内容も、3月の時と全然違いました。

expdpでダンプファイルの名前が被っていたらどうなるか?知らんがな。

おわりに

Goldまで頑張れる気がしません。これでOracleの試験は一区切りにします。

そろそろデータ分析します。NBAのデータをいじります。

以上です。

追記

2016年5月に合格ライン変更がありますよ、というニュースがありました。

2016年2月に。そんなん見ないよ...

新着ニュース | Oracle University