「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は企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社である。
「最適モデル」「予測モデリング」あたりが若干専門用語っぽくて難しい気がします。
実体験
上記の調査を踏まえ、僕の説明のパターンと結果をまとめます。
「データ分析の世界大会」
何となくは理解してもらえるようで「データ分析って具体的に何するの?」という質問が追加されることが多いです。大抵はタイタニック号の話をすると「そんなの予測できるんだね!」と驚いてもらえる気がします。
「良いAIを作る世界大会」
こちらは前提知識として「この人は何でもAIって表現しがち」という先入観があるときに、たまに使ってしまいます。とはいえ、自分では好きな表現でないので、基本的には使いません。
現時点での結論
会話の展開のきっかけという意味でも、現時点では「データ分析の世界大会」が最善手な気がしています。「世界大会」の部分もツッコミどころがありそうですが、そんなに疑問視されることはない印象です。「機械学習」っていう単語ですら市民権を得ているわけではないので、専門用語っぽい単語は原則として出さないのが良いかなと思っています。
改めて、もし良い説明方法をお持ちの方がいたら、ぜひ教えてください。
Instagramすらやってない20代エンジニアが、10代に人気の「Tik Tok」をやってみた(ダウンロードから投稿まで+感想)
Tik Tokとは
Tik Tokは、端的に言うと「15秒」という短時間限定の動画編集&投稿サイトです。短時間のため投稿や閲覧の障壁が低く、SNS的な要素も併せ持つことで、10代を中心に人気を博しているらしいです。
ダウンロード
AppStoreからダウンロードします。
起動
起動した初期画面がこちらです。いきなり音楽とともに動画が流れて面食らいます。
特にアカウント設定をしなくても、動画の閲覧は可能なようです。
アカウント設定
下部から別のタブを開こうとすると、アカウント設定を要求されました。今回はTwitter連携でアカウントを作成します。
無事に設定できました。自動でTwitterのアイコンを連携してくれていますが、なぜか画質がとても悪かったです。
アカウント設定をしたことでフォローやダイレクトメッセージのタブも閲覧できるようになりました。単なる動画編集アプリではなく、SNS的な概念も取り込まれていると分かります。
動画編集
下部の中央にある+マークを選ぶと、動画を撮影できます。既存の動画をアップロードすることも可能です。
Tik Tokで投稿されている動画の大多数は自撮りなためか、いきなりインカメラ状態でカメラが起動して驚きました。需要に合わせて、こちらがデフォルト設定になっているのでしょう。
とはいえ僕には自撮りは無理なので、先日食べた「いきなりステーキ」の動画をアップロードします。
動画編集画面では、手軽に「フィルター効果」や「タイム効果」などの特殊効果を設定できます。
そして特徴的なのが、さまざまな楽曲を設定できることかと思います。この機能を活用して、ダンスや口パクの動画を投稿している人が多い印象を受けました。
個人的には、楽曲の権利まわりがどうなっているのか気になりました。
動画投稿
動画の編集が終わったら、あとは他のSNSと同様に動画を投稿します。Twitterなど連携したSNSにも同時に投稿できます。
すごい!u++ さんの動画をチェックして! #TikTok > https://t.co/zKBurXOx7c
— u++ (@upura0) 2018年7月6日
動画の投稿が完了すると、自動的にスマホのライブラリにも動画が保存されていました。
今回投稿した動画はこちらです。
自撮り上げるのは無理だったので、これが #tiktok デビュー動画です。ご査収ください。たぶん引退動画です。 pic.twitter.com/5mYgEWPD3A
— u++ (@upura0) 2018年7月6日
所感
今回一連の体験をしてみての所感ですが、「顔出しして友達とダンスや口パクの動画を投稿して盛り上がる」という文化に正直馴染めそうにありませんでした。たぶん僕のこの感想こそが、Tik Tokを10代に人気のあるものにしているのだと思いました。
既に市民権を得て幅広い世代に広がってしまったFacebook, Twitter, Instagramとは異なり、Tik Tokは一定の文化を共有する世代のみが集う場所になっています。ここでは親世代からの無用なツッコミを気にする必要もなく、思うがままに内輪で楽しむことができているのでしょう。
Tik Tokがなぜ流行っているか、なんとなく実感することができました。
『ウォールストリート・ジャーナル式図解表現のルール』第1章まとめ
下記の本の第1章をまとめて勉強会で発表した時の資料。
2年前にAutoencoderをChainerで実装したときの発表資料とコード
Google Driveを整理していたら発掘された。研究室での「Deep Learning勉強会」での発表資料。当時もDeep Learning流行ってた気がするけど、ここまでブーム続くとは思っていなかった。
RとPythonで良さげなラベル付き散布図を書く
今回は、RとPythonで良さげなラベル付き散布図を書く方法についてまとめます。
良さげ=プロットした点とラベルの位置が重ならないよう、適当にズラして表示してくれる
R/ggplot2 にはggrepelというラベルの位置を自動調整してくれるパッケージがあったのですが、下記のツイートを見るまでPythonで同様のパッケージがあると知らなかったので、自分用まとめです。
A small library for automatically adjusting text position in matplotlib plots to minimize overlaps. https://t.co/FUYXYKOCA7 Inspired by ggrepel package for R/ggplot2 おお、Pythonで散布図のラベルをいい感じに調整してくれるやつや。
— SKUE (@Mr_Sakaue) July 4, 2018
可視化するデータセット
以下の記事で作成したデータセットを利用します。ちなみにGFは「1試合平均の得点数」、GAは「1試合平均の失点数」を示します。Groupは色分けのための列です。
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)
Pythonでの実装
adjustText というパッケージを利用します。使い方はREADMEやWikiが整備されています。
データの読み込み
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))]
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)