u++の備忘録

「Kaggleとは〇〇である」何と言えば一般の人に通じるのか問題

最近Kaggleにハマっているのですが、非エンジニアの友人に「Kaggleとは何か」を説明するのが難しいと感じています。本記事では、僕の試行錯誤と結果をまとめます。もし良い説明方法をお持ちの方がいたら、ぜひ教えてください。

想定する説明の状況

友人「ゴールデンウィークは何をしていたの?」
僕「一度も家を出ずKaggleをしてた」
友人「Kaggleって何?」
僕「・・・」

※ 友人の技術レベル次第な気がするのですが、そこを定義するのは難しすぎるので、一般に「プログラミングにほとんど興味がない」くらいと置きます。

サイトではどういう説明がなされているか?

Kaggle公式

Kaggle: Your Home for Data Science

公式ページ(Kaggle: Your Home for Data Science)には「データサイエンスと機械学習の家」と書いてあります。とはいえ、この"Home"のニュアンスを上手に日本語訳するのは難しそうです。「コミュニティ」くらいだと分かりやすい気はしますが、とはいえ「Kaggleとは何か」の具体性に欠けている気がします。

Wikipedia (2018.07.21時点)

Kaggleは企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社である。

「最適モデル」「予測モデリング」あたりが若干専門用語っぽくて難しい気がします。

Googleで”Kaggleとは”と検索した上位3件 (2018.07.21時点)

世界中の機械学習・データサイエンスに携わっている約40万人の方が集まるコミニティーです。

www.codexa.net

Kaggleは企業と、データ分析のプロであるデータサイエンティストをつなぐプラットフォーム

seleck.cc

Kaggle (カグル)は、世界中の機械学習・データサイエンスに携わっている人が、データ分析力や機械学習モデリング力を競い合うコンペティションまたはそのプラットフォームです。

www.topgate.co.jp

実体験

上記の調査を踏まえ、僕の説明のパターンと結果をまとめます。

機械学習の世界大会」

すごくザックリとしていますが、こちらは「機械学習」があまり通じないので止めました。

「データ分析の世界大会」

何となくは理解してもらえるようで「データ分析って具体的に何するの?」という質問が追加されることが多いです。大抵はタイタニック号の話をすると「そんなの予測できるんだね!」と驚いてもらえる気がします。

「良いAIを作る世界大会」

こちらは前提知識として「この人は何でもAIって表現しがち」という先入観があるときに、たまに使ってしまいます。とはいえ、自分では好きな表現でないので、基本的には使いません。

現時点での結論

会話の展開のきっかけという意味でも、現時点では「データ分析の世界大会」が最善手な気がしています。「世界大会」の部分もツッコミどころがありそうですが、そんなに疑問視されることはない印象です。「機械学習」っていう単語ですら市民権を得ているわけではないので、専門用語っぽい単語は原則として出さないのが良いかなと思っています。

改めて、もし良い説明方法をお持ちの方がいたら、ぜひ教えてください。

Instagramすらやってない20代エンジニアが、10代に人気の「Tik Tok」をやってみた(ダウンロードから投稿まで+感想)

Tik Tokとは

Tik Tokは、端的に言うと「15秒」という短時間限定の動画編集&投稿サイトです。短時間のため投稿や閲覧の障壁が低く、SNS的な要素も併せ持つことで、10代を中心に人気を博しているらしいです。

ダウンロード

AppStoreからダウンロードします。

f:id:upura:20180707000229p:plain

起動

起動した初期画面がこちらです。いきなり音楽とともに動画が流れて面食らいます。

特にアカウント設定をしなくても、動画の閲覧は可能なようです。

f:id:upura:20180707000308p:plain

アカウント設定

下部から別のタブを開こうとすると、アカウント設定を要求されました。今回はTwitter連携でアカウントを作成します。

f:id:upura:20180707000550p:plain
f:id:upura:20180707000602p:plain

無事に設定できました。自動でTwitterのアイコンを連携してくれていますが、なぜか画質がとても悪かったです。

f:id:upura:20180707000824p:plain

アカウント設定をしたことでフォローやダイレクトメッセージのタブも閲覧できるようになりました。単なる動画編集アプリではなく、SNS的な概念も取り込まれていると分かります。

f:id:upura:20180707001014p:plain
f:id:upura:20180707001019p:plain

動画編集

下部の中央にある+マークを選ぶと、動画を撮影できます。既存の動画をアップロードすることも可能です。

Tik Tokで投稿されている動画の大多数は自撮りなためか、いきなりインカメラ状態でカメラが起動して驚きました。需要に合わせて、こちらがデフォルト設定になっているのでしょう。

とはいえ僕には自撮りは無理なので、先日食べた「いきなりステーキ」の動画をアップロードします。

動画編集画面では、手軽に「フィルター効果」や「タイム効果」などの特殊効果を設定できます。

f:id:upura:20180707001421p:plain
f:id:upura:20180707001843p:plain

そして特徴的なのが、さまざまな楽曲を設定できることかと思います。この機能を活用して、ダンスや口パクの動画を投稿している人が多い印象を受けました。

個人的には、楽曲の権利まわりがどうなっているのか気になりました。

f:id:upura:20180707002141p:plain

動画投稿

動画の編集が終わったら、あとは他のSNSと同様に動画を投稿します。Twitterなど連携したSNSにも同時に投稿できます。

f:id:upura:20180707002409p:plain

動画の投稿が完了すると、自動的にスマホのライブラリにも動画が保存されていました。

今回投稿した動画はこちらです。


所感

今回一連の体験をしてみての所感ですが、「顔出しして友達とダンスや口パクの動画を投稿して盛り上がる」という文化に正直馴染めそうにありませんでした。たぶん僕のこの感想こそが、Tik Tokを10代に人気のあるものにしているのだと思いました。

既に市民権を得て幅広い世代に広がってしまったFacebook, Twitter, Instagramとは異なり、Tik Tokは一定の文化を共有する世代のみが集う場所になっています。ここでは親世代からの無用なツッコミを気にする必要もなく、思うがままに内輪で楽しむことができているのでしょう。

Tik Tokがなぜ流行っているか、なんとなく実感することができました。

岡山県&三重県の魅力を語ったプレゼン資料

僕が所属していた研究室には、夏の合宿の行き先をプレゼンで決める文化がありました。

以下は、2年分の僕の発表資料です。こういう叙情的な資料も、たまには作ります。

2年前にAutoencoderをChainerで実装したときの発表資料とコード

Google Driveを整理していたら発掘された。研究室での「Deep Learning勉強会」での発表資料。当時もDeep Learning流行ってた気がするけど、ここまでブーム続くとは思っていなかった。


RとPythonで良さげなラベル付き散布図を書く

今回は、RとPythonで良さげなラベル付き散布図を書く方法についてまとめます。

良さげ=プロットした点とラベルの位置が重ならないよう、適当にズラして表示してくれる

R/ggplot2 にはggrepelというラベルの位置を自動調整してくれるパッケージがあったのですが、下記のツイートを見るまでPythonで同様のパッケージがあると知らなかったので、自分用まとめです。


可視化するデータセット

以下の記事で作成したデータセットを利用します。ちなみにGFは「1試合平均の得点数」、GAは「1試合平均の失点数」を示します。Groupは色分けのための列です。

upura.hatenablog.com

urawa.csv

Name GF GA Group
斉藤 和夫 2.21 1.12 1
ブッフバルト 2.08 1.06 1
ペトロヴィッチ 1.7 1.2 0
原 博実 1.69 1.49 1
ホルガー オジェック 1.62 1.14 1
ホルスト・ケッペル 1.59 1.41 1
ハンス オフト 1.58 1.33 1
チッタ 1.56 1.56 1
ゲルト エンゲルス 1.52 1.21 1
フォルカー フィンケ 1.34 1.24 1
ピッタ 1.33 1.5 1
横山 謙三 1.33 1.9 1
ア・デモス 1.2 1.67 1
ゼリコ・ペトロヴィッチ 1.07 1.21 1
堀 孝史 1 1.6 1
森 孝慈 0.72 2.17 1v

Rでの実装

上述した通り、R/ggplot2 ではggrepelというパッケージを用いることで、良さげなラベル付き散布図を出力できます。

data <- read.csv("urawa.csv", row.names = 1, fileEncoding="CP932")
library(ggplot2)
library("ggrepel")

g <- ggplot(
  data,
  aes (
    x = data[,1],
    y = data[,2],
    colour = data[,3],
    label = rownames(data)
  )
)

g <- g +  geom_point(
  size = 3
)

g <- g + geom_text_repel(family = "HiraKakuPro-W3")
g <- g + xlab("Goal For per Game")
g <- g + ylab("Goal Against per Game")

plot(g)

f:id:upura:20180705150057p:plain

Pythonでの実装

adjustText というパッケージを利用します。使い方はREADMEやWikiが整備されています。

github.com

データの読み込み

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'IPAPGothic'
import pandas as pd

df = pd.read_csv('urawa.csv', encoding="shift-jis")

x = df['GF per game']
y = df['GA per game']
text = df['Name']

通常の場合

プロットした点とラベルが重なってしまっています。

fig, ax = plt.subplots()
plt.plot(x, y, 'bo')
texts = [plt.text(x[i], y[i], text[i], ha='center', va='center') for i in range(len(x))]

f:id:upura:20180705173311p:plain

adjustTextを使った場合

importして、adjust_text()するだけです。

from adjustText import adjust_text
fig, ax = plt.subplots()
plt.plot(x, y, 'bo')
texts = [plt.text(x[i], y[i], text[i], ha='center', va='center') for i in range(len(x))]
adjust_text(texts)

f:id:upura:20180705173540p:plain

ipynbとcsvファイル

こちらに置いておきます。

github.com