stackoverflowは読んでるだけでも色々発見があります。
git add -pしたときにy or nキーのみで、Enterキーなしで決定できるようになる設定です。
$ git config --global interactive.singleKey true
クロスバイクを初めて手に入れて、時間があったら自転車に乗って出かけたいと思ってます。そこで困ること第一位は、駐輪場。じゃあってことで、Googleで「駐輪場」と検索してみると近くの駐輪場がいくつか出てきます。よしっと思って行ってみると満車… しょうがないのでもう一つ別の場所に行ってみると、こちらも満車… また別の所に行ってみると平日のみの営業とか、既にサービス終了してるとか、一発で探し当てるのはなかなかハードです。
考えてみると、駐輪場の場所だけでは情報としては不十分で、空いてるかどうかを知りたいわけです。リアルタイムに空き状況を計測して利用者に提示する駐車ガイダンスシステム(Parking Guidance System)は車向けで既に使われてますが、自転車向けにもこういうのが欲しいですね。
海外ではどうだろうと思って調べてみると、ユトレヒトで世界で初めてサービスを開始したというニュースを見つけました。
Bicycle Parking Guidance System in Utrecht | BICYCLE DUTCH
P-route bicycleというシステムで、駐輪場に設置されたセンサーで空き数を計測し、ネットワークを経由して市内各所にあるデジタル掲示板に計測された空き数をリアルタイムに表示するシステムです。空き状況がリアルタイムでわかるし、駐輪場まで行かなくても空きが確認できるので、ほんとに便利そうです。日本にも導入されないかな。
kaggleのデータファイルをwgetで並列ダウンロードする方法を調べた。スクリプトを書いたりすることなく、コマンドラインで完結するのでお手軽。
chromeのデベロッパーツール等で確認、CSSセレクタを使ってアドレスを取り出す。baseのURLはawkで付け足した。
$ curl -s https://www.kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/data | pup 'tbody tr td a attr{href}' | awk '{print "https://kaggle.com" $1}'
結果はこんな感じ。
https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/dev_train_basic.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/cookie_all_basic.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/ipagg_all.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/dev_test_basic.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/property_category.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/sampleSubmission.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/id_all_ip.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/id_all_property.csv.zip https://kaggle.com/c/icdm-2015-drawbridge-cross-device-connections/download/database.sqlite.zip
リダイレクトしてurls.txtに保存する。
ここは手作業で行う。
ompetition rulesを確認するのと、wgetで使うためのcookieを保存する。cookieはchromeのextensionを使う。
こちらも参考に。
xargsとwgetを合わせて使うと並列ダウンロードが出来る!
wgetのオプションで手作業では保存したcookies.txtを指定してあげる。
$ xargs -P 20 -n 1 wget --load-cookies cookies.txt < urls.txt
後はダウンロードが完了するのを待つだけ。
sampleSubmission.csv.zip 100%[======================================================>] 126.38K 336KB/s in 0.4s 2015-06-28 22:11:23 (336 KB/s) - 'sampleSubmission.csv.zip' saved [129409/129409] dev_test_basic.csv.zip 100%[======================================================>] 713.96K 404KB/s in 1.8s 2015-06-28 22:11:25 (404 KB/s) - 'dev_test_basic.csv.zip' saved [731093/731093] dev_train_basic.csv.zip 100%[======================================================>] 2.14M 473KB/s in 4.6s 2015-06-28 22:11:28 (473 KB/s) - 'dev_train_basic.csv.zip' saved [2248158/2248158] property_category.csv.zip 100%[======================================================>] 2.96M 374KB/s in 8.1s s 2015-06-28 22:11:31 (376 KB/s) - 'property_category.csv.zip' saved [3109199/3109199] cookie_all_basic.csv.zip 100%[======================================================>] 34.08M 848KB/s in 40s s 2015-06-28 22:12:03 (863 KB/s) - 'cookie_all_basic.csv.zip' saved [35739382/35739382] ipagg_all.csv.zip 100%[======================================================>] 112.23M 1.05MB/s in 2m 34s s 2015-06-28 22:13:57 (747 KB/s) - 'ipagg_all.csv.zip' saved [117684953/117684953] id_all_ip.csv.zip 100%[======================================================>] 225.42M 876KB/s in 3m 55s s database.sqlite.zip 4%[=> ] 162.76M 738KB/s eta 78m 35s2015-06-28 22:15:18 (982 KB/s) - 'id_all_ip.csv.zip' saved [236366458/236366458] id_all_property.csv.zip 100%[======================================================>] 356.89M 1.53MB/s in 4m 53s s 2015-06-28 22:16:16 (1.22 MB/s) - 'id_all_property.csv.zip' saved [374222833/374222833] database.sqlite.zip 100%[======================================================>] 3.35G 1.59MB/s in 39m 2s s 2015-06-28 22:50:25 (1.46 MB/s) - 'database.sqlite.zip' saved [3594725459/3594725459]
いつも思うことだけど、GoogleやApple、Facebook、Twitterがない世界を想像するのがもはや困難になってしまった位に生活の基盤になった。また、日本ではまだ定着したとは言えないけれど、AirbnbやUberなどのSharingサービスや、CourseraなどのMOOCも徐々に基盤になりつつある。日本ということで考えると、DeNAやGREEなどのソーシャルゲームやCookpadなどの料理検索、LINEやInstagramなどのコミュニケーションサービスもすでに生活の基盤になってる。 さてこれから先はどんなサービスが基盤になるのか?個人的には、ARやVRが情報可視化の基盤として定着するのではないかなと思ってる。使い勝手の良いウェアラブルHWが出ればという条件があるけれど。
bag of visual wordsは多くの場面で出てくるのでさくっと使えるようにしておきたい。numpyとscipyをsklearnを使えば、とても簡単に使えるので流れをまとめておくことにします。
#!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import scipy.cluster.vq as vq from sklearn.datasets import load_digits from sklearn.cross_validation import train_test_split def main(): digits = load_digits() print digits.data.shape # (1797, 64) # split digits data X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target) # computing the visual words K = int(np.sqrt(digits.data.shape[0]/2)) codebook, distortion = vq.kmeans(X_train, K) print codebook # computing the histogram of visual words code, dist = vq.vq(X_test, codebook) vw_hist, bin_edges = np.histogram(code, bins=codebook.shape[0], normed=True) print vw_hist if __name__ == '__main__': main()
といっても、やってることはscipyのvq.kmeansでcodebookを作成、作ったcodebookを元にvq.vqとnumpyのhistogramでbovwベクトルを作成するだけです。ほんとに簡単でした。
CVPR2015のProgramがアナウンスされているみたいなので、論文のタイトルをスクレイピングしてWord Cloudを作ってみました。
論文のタイトルはpupを使って取得しました。Oralの発表者がPosterも発表するケースもあるようなので、sortとuniqも入れてます。
$ curl -s http://www.pamitc.org/cvpr15/program.php | pup 'td > b:first-child' text{} | sort | uniq > cvpr2015papers.txt
pupの書き方についてはこちらを参考にしました。
pythonのWordCloudライブラリを使って作成します。最初に作ったWord Cloudは真ん中にでかく"Image"となっていたので、一つだけstopwordsに追加しています。
#!/usr/local/bin/python # -*- coding: utf-8 -*- import os from wordcloud import WordCloud, STOPWORDS import matplotlib.pyplot as plt def main(): d = os.path.dirname(__file__) DOC_NAME = "cvpr2015papers.txt" text = open(os.path.join(d, DOC_NAME)).read() # adding computer vision specific stopwords stopwords = STOPWORDS.copy() stopwords.add("image") wc = WordCloud(max_words=300, stopwords=stopwords, width=800, height=400) wc.generate(text) wc.to_file(os.path.join(d, "cvpr2015wordcloud.png")) plt.imshow(wc) plt.axis("off") plt.show() if __name__ == "__main__": main()
WordCloudを使う時は、FONT_PATHを設定しておく必要があります。
$ export FONT_PATH=/Library/Fonts/Osaka.ttf
出来た画像はこのような感じです。
まずDeepですが、Deepを含むタイトル数を調べてみると、
$ cat cvpr2015papers.txt | grep -i "deep" | wc -l 57
全体が602件なので約10%がDeepを含んでいることになります。NeuralやNetwork, Convolutionalも大きく表示されていて、2015年も引き続きDeep Learning系は多そうですね。
それから、Videoも大きく表示されています。
$ cat cvpr2015papers.txt | grep -i video | wc -l
47
Action RecogntionやEvent Detection、Video ClassificationをDeep Networkでというタイトルになっているものもあって、SingleフレームからMultipleフレームへもDeep Learningが対象を広げているのでしょうね。
3Dも同じ流れかも。
$ cat cvpr2015papers.txt | grep -i 3D | wc -l
37
細かい所を見るともっと色々な視点で見れそうですが、Deep系はまだまだHotなTopicであることは間違いなさそうです。
これはGW前から読んでいた一冊。まだ読了していないけど、とても興味深かったのが「Internetのインタフェースをどうデザインするか」という箇所。
これを見て思い出したのが、MITの石井教授の「情報は流水で、デバイスは蛇口」の話とかnext.rikunabi.com
Google Glassとか、ちょっと古いけどSixth Senseなど。 www.ted.com
現状のインタフェースの問題は、スマホやタブレットの普及のおかげで日常のあらゆる場面で情報を得ることは出来ても、情報を得て人間が行動し、問題を解決するところまでには至ってないところだとこの書籍では述べられていて、なるほどなと思いました。Apple Watchが発売されて、スマートウォッチ系がホットな話題になってますが、これも一歩進んだ情報の取得手段でしかなくて、アクチュエータ的なインタフェースになってないと考えると、それほどエポックメイキングなデバイスになっていないのではないかという説明が出来る気がしました。
やっぱり、スマートウォッチはまだ過渡期で、ウェアラブルというかユビキタスというか、その辺りを狙う一つのステップなんじゃないかというように思います。