/* */ /* */

is_kaggle_kernel()という関数を作ったよという話

これがis_kaggle_kernel()という関数。環境変数を見て該当するkeyがあるかどうかを見てるだけ。

is_kaggle_kernel

Kaggle Kernel上でもTrueになることを確認しています。

www.kaggle.com

KAGGLE_ENV_KEYSはどこからとってきたのか?

Kaggle KernelのScript / Notebookタイプでの環境変数を見て共通する部分を抽出しました。

www.kaggle.com

www.kaggle.com

EPUB形式の電子書籍を読むときにGooglePlayBooksを利用すると便利だったという話

前置き

先日話題の新書である「Kaggleで勝つデータ分析の技術」を購入しました。 Kindle版もあったそうなのですが「Gihyo Digital Publishing」、技術評論社電子書籍販売サイトから購入しました。

gihyo.jp

こちらで購入した理由としては以下の2点が決め手でした。

  1. EPUB形式とPDF形式のDRMフリーでの販売である
  2. Gihyo Digital Publishingのほうが400円くらい安い

本題

前置きはこの程度にして本題に移りますと、せっかくEPUB形式の電子書籍を手に入れたのでいい感じの読書ツールで読みたいというのが今回の趣旨です。 そして結論はタイトルに書いてるとおりで、GooglePlayBooksが便利でした。

support.google.com

やり方としては自身のGooglePlayBooksにファイルをアップロードして、読みたい端末(PC/スマートフォンなど)で読むだけです。

PCで読む場合はこんな感じで読めました。

蛍光色でマークがついてる行がありますがそれはスマートフォンでつけたメモが共有されているためです。

こちらAndroidで読む場合です。 一般的な読書ツールにあると思われる機能、目次ジャンプやしおり、メモ、文字サイズの変更、キーワード検索などは搭載されていました。UIも結構こっていて読むのにいい感じでした。

以上です、EPUB版を買った人の参考になれば嬉しいです。

Machine Learning Casual Talks #9 に参加してきました!

はじめに

Machine Learning Casual Talks #9にブログ枠で参加してきました。

mlct.connpass.com

当日の撮影していた動画がYoutubeにアップロードされたようなのでリンクを貼っておきます。

www.youtube.com

当日の会場はこんな感じでした、結構早く到着したのでガラんとしてる。会場は株式会社メルカリでした、会場提供ありがとうございます。

押すと商品が無限に出てくる販売機。

そして軽食、ごちそうさまでした。

冒頭

Machine Learning Casual Talksをはじめた理由

発表者

Aki Ariga (@chezou)

発表資料

docs.google.com

発表内容

本編

Data Engineering at SmartNews

発表者

@satoshihirose

発表資料

speakerdeck.com

発表内容

感想

株式会社LegalForce

発表者

@ruka_funaki

発表内容

  • Legal(法律) × Tech(テクノロジー) = LegalTech(リーガルテック)
  • 契約書をAIでサポート
    • 契約書はどこでも使われる、需要が高い
  • 法務はいまだアナログの世界、非効率的
  • LegalForceの主な機能
    • 契約書の条文検索機能
    • 契約書の自動検査

感想

LT

Pytorch強化学習フレームワークHorizonのドキュメントを読む

発表資料

speakerdeck.com

Graphの推薦システムへの応用

発表者

発表資料

speakerdeck.com

Webサービスにおけるデータサイクルのデザイン

発表者

発表資料

paper.dropbox.com

「KaggleのKernel機能をうまく使いこなそう」の補足説明

はじめに

先日こちらのもくもく会に参加させていただきました。

ailounge.connpass.com

もくもく会併設のLTに参加し、当日が2019年4月30日だったので平成最後のLTをやってきました。当時LTに使った発表資料はこちらになります。

docs.google.com

発表ではKaggleのKernelを使った便利な機能を紹介しますという話をしました。

具体的にはこれらの機能について話しました。

  • GPU Kernelを豪華に使える」
  • Markdownで書いた見出しを自動的に目次へ変換される」
  • 「Kernelの出力結果を別Kernelから参照できる」

上記アンダーラインを引いた2つの機能について当日あまり詳しく話せなかったので後日ブログのほうで詳細に説明しますと最終スライドでお約束しましたので、今回の記事は上記機能の詳細説明の記事になります。

Kernelの便利な使い方・機能の紹介

KernelはNotebooks / Scripts / RMarkdown Scripts タイプと3種類存在しますが今回はNotebooksのみを対象として話を進めます。

Markdownで書いた見出しを自動的に目次へ変換

NotebooksタイプのKernelにはJupyter Notebooks同様、コードを書けるセルとMarkdownを書けるセルが分かれています。Markdownの見出し(#)を書くと自動的に目次として認識してNotebooks左欄に該当する目次へジャンプするリンクを生成してくれます。

Notebooks左欄に該当する目次というのは下記スクリーンショットの赤枠で囲った部分です。

f:id:wakame1367:20190503185717p:plain

こちらをそれぞれクリックしますと下の例のように該当する目次へジャンプすることができます。

Notebooks内はどう記述されてるのと疑問に思うと思いますのでMarkdown編集時のスクリーンショットをとっておきました。Notebooks内で見出しが一番上位の見出しのみが目次に設定されるという仕組みになっています。また、見出し同士が重複すると最初に見つけた見出しについてジャンプするようになるので、ユニークな文字列を設定することをオススメします。

f:id:wakame1367:20190503185518p:plain

f:id:wakame1367:20190503185616p:plain

スクリーンショット撮影時に使いましたKernelのリンクを一応貼っておきます。

www.kaggle.com

Kernelの出力結果を別Kernelから参照できる

普段リーダーボードへのスコア投稿はKernelの実行後、submission.csvがOutputに出力されるのでそれを投稿していると思います。そのsubmission.csvがKernelの出力結果になります。この出力結果を別のKernelから参照できるようになるということですが我々にとって何が嬉しいのか、以下の点が挙げられると思います。

  • 前処理の途中経過を一時ファイルとして出力することで前処理にかかる時間をスキップできる
  • 学習済みモデルを途中経過として吐き出すことでKernelは予測のみに集中することができる

では具体的にどうやるのかスクリーンショットを交えながら説明します。

あらかじめKernelの出力結果が存在するKernelを準備しておきます。今回は公開Kernelを利用します、もちろん自分で用意したKernelでも問題ありません。

Notebooksを開くとこのような画面になると思います、右上の赤枠で囲んだAdd Datasetを押してください。

f:id:wakame1367:20190503214202p:plain

こんな画面になると思います、こちらの画面から参照したいKernelを選びます。

f:id:wakame1367:20190503214330p:plain

Petfinderの公開カーネルを選んでみます、赤枠で囲ったAddを押してみます。

f:id:wakame1367:20190503214441p:plain

追加後Notebooksに戻ると、Workspaceの部分に追加したKernelのタイトルが表示されていると思います。これで参照できました。

f:id:wakame1367:20190503214636p:plain

一応参照出来ているか確認してみます、%ls ../inputを実行すると追加したKernelのタイトルが設定されたディレクトリが見えると思います。正しく参照出来ていることが確認出来ました。

f:id:wakame1367:20190503214806p:plain

最後に、上記のようにKernelを参照すると元々../input/train.csvのように参照していたファイルパスが変わってしまうので適宜修正するようにしてください。

「手を動かしながら2週間で学ぶ AWS 基本から応用まで」を受講してて気になった・気をつけたほうがよいこと

はじめに

Udemyで配信されている「手を動かしながら2週間で学ぶ AWS 基本から応用まで」という講座を現在受講中で、受講中に気になった・気をつけたほうがよいことをまとめたいと思います。現在受講中なので随時更新してゆきたいと思います。

www.udemy.com

全体的に講座の愚痴みたいになっていますが講座自体の評価は素晴らしいと感じています。ただ前置きで書いておけば、早めに言ってもらえればそんなに気にならなかったのになと思うところが少々ありました。せっかくの素晴らしい講座であるのにも関わらず変なところで評価が下がってしまうのも残念だなと思い記事にしました。

対象読者

対象読者はこれから講座を受けようと思っている方や私と同じく受講中の方になります。

講中気になったこと

音量が小さい

収録環境の関係か講師の方の声がとても小さく、特に講師の方が推奨されていた通勤時での受講(特に電車内)は可能ですが周囲の雑音が大きすぎて聞き取りにくいなと思いました。じゃあ小さいなら音量上げればいいじゃんと思いますが、最大音量まで上げてもなお小さいなと思うレベルなので。

Day8のドメイン名とIPアドレスの関連付けは余裕を持って先にやっておいたほうがよい

Day8-3とDay8-4においてfreenomでフリーのドメインを取得後、Route 53でドメイン名とロードバランサのIPアドレスとの関連付けをするのですがこちらの関連付けに結構な日数を要するようなのです。講師の方の場合2-3日かかったとおっしゃっていました、そのくらいかかるなら先に言っておいてほしかったなと。ちなみに私の場合そこまで時間がかかりませんでした。

GithubのREADMEでよく見るBadgeの設定の仕方について

こんにちわ&こんばんわ、わかめです。

regonn-curry-fmを視聴されてる方はご存知かもしれないですがregonnさんが現在開発中のOSSpolar_bearに絶賛OSS活動中です。

github.com

今回はそのOSS活動中に初めて知りましたGithubのREADMEへのBadgeの設定方法についてまとめます。またpolar_bearPythonのライブラリということで主にPythonに関連のあるBadgeの設定方法についてのみ言及したいと思います。

PyPI

PyPIでの公開が完了している場合、パッケージ名を入力するだけで下記のようなBadgeを作成してくれるようです。

PyPI version

また生成されたMarkdownに記述されるBadgeへのURLがPyPIへリダイレクトしてくれるようです、試しに上のBadgeをクリックしてみて下さい。

[![PyPI version](https://badge.fury.io/py/polar-bear.svg)](https://badge.fury.io/py/polar-bear)

badge.fury.io

PythonVersion

こちらもPyPIでの公開が完了していれば、パッケージ名を入力するだけでライブラリが対応するPythonのVersionをPyPIから取得してBadgeを作成してくれるようです。

Python Versions

[![Python Versions](https://img.shields.io/pypi/pyversions/polar_bear.svg)](https://pypi.org/project/polar-bear/)

shields.io

参考

みてねのMeetup #4に参加してきました!

はじめに

去年の10月頃に転職を果たし、勤務先が渋谷になったので今まで参加できなかった勉強会に積極的に参加しようという気持ちで今回も参加してきました。

mixi.connpass.com

実は「みてね」というサービス自体、独身で接点がないためこのMeetupで初めて知ったという経緯があります。 じゃあなぜ参加したかというと、SageMaker を用いた高速な顔検出 という発表がお仕事の内容にも近い分野でとても勉強になりそうだと思ったからなのです。

mitene.us

サービス紹介

概要

みてねの概要となぜこのサービスを始めたのかを語って頂きました。元々子どもが生まれたことがきっかけ、子どもが生まれると「え!?こんなに写真・動画撮影するの!」ってくらい撮影する。そしてその撮影した大量の写真・動画をどこに保存して、どうやって家族間で共有するか、簡単に保存できて共有できる専用のサービスは現状・・・ない、じゃあ作ろうとなった。現在日本だけでなく海外にも展開中、北米・英語圏も順調なユーザの増加、世界共通で子どもの成長を見守りたいというニーズがある。

感想

みてねのサービス愛が伝わってくる発表でした、みてねに対する愛情や熱い想いを持ったメンバーが集っているのだなと感じました。 スライドにも記載されていた「その子の人生もまるごとを残せる」というキーワードが特に心打たれました。

1秒動画のつくりかた・概要編

発表資料

speakerdeck.com

概要

「みてね」には現在基本機能の写真・動画の共有以外に以下のような機能があるようで、今回はその中から1秒動画のつくりかたについて要素毎に発表者に語って頂くという内容でした。また当日の発表全体の流れを説明して頂きました。

  • 毎月撮影した写真をフォトブックにまとめる
  • 撮影した写真・動画をまとめたダイジェスト動画(1秒動画)
  • 撮影した動画をDVD1枚分の内容になるように選んで提案する

スライド(14枚目参照)そのままですが以下の流れで動画を生成しているようです。

  1. メディア解析
  2. 生成対象の家族抽出
  3. 素材選択
  4. 動画ファイルの生成・配信

感想

さらっとスライドに掲載されていた、BGM検出、メディアの採点方法、顔・人物検出と気になるワードがたくさんありました。BGM検出については絶対聞いておきたいと思っていたのですが、最後ににも書きましたが当日体調不良で聞く前に帰宅してしまいました。また機会があったら聞いてみたいですね。

SageMaker を用いた高速な顔検出

発表資料

speakerdeck.com

概要

1秒動画のつくりかた・概要編で紹介された「メディア解析」部分の発表でした。アップロードされた写真・動画に家族の顔が写っていないものは1秒動画の素材から除外したい、またちゃんと顔が写っているかを検出したい。満たしたい要件は以下の通り。

  • 画像1枚であれば0.1秒で検出したい(検出スピード)
  • 大量(月間7000万件)のアップロードを捌けるようなインフラ構築
  • ピークと暇な時との差が激しいのでスケーリングができるようにしたい

顔検出器はS3FD: Single Shot Scale-invariant Face Detectorを利用。 選択理由は以下の通り。

  • TensorRT対応
  • Pretrainedモデルがある
  • 精度(WIDER FACE Hard Ap 0.858)

Caffe実装で1枚検出するのに0.8秒かかるため10倍の高速化が必要。

  • TensorRT利用
  • DALIを使用
  • 並列化、非同期化

最終的に1枚あたり0.04秒まで高速化ができた。

感想・疑問

顔検出器の予測スピードの改善・インフラ構築、お一人でやられているという発表だったのでただただすごいなと。

以下疑問点です。

  • GPUを惜しまずに使っている印象を受けました、フォトブック・DVD作成以外の課金要素で採算とれているんだろうかという疑問が残りました。
  • 顔認識の精度自体の改善の話はなかったので運用でカバーしてるのだろうか。
  • 適合率が低いと顔認識の結果としては致命的かなと思ったが、そもそも家族の写真・動画で顔が写っていないものをアップロードしないのでは?と思った。

全体を通して気づいたこと

こういうMeetupが開催される際はTwitterハッシュタグが設定され普段は参加者が会場の様子や発表内容についてつぶやくのですが、 今回のMeetupではハッシュタグ#mitene_meetup@_atsushisakaiさんが発表者の豆知識をつぶやいて頂いたので、感情移入しやすくて、発表も聞きやすくなったなと思いました。

また、僕のちょっとした疑問ツイートにも反応して頂けたのはとても嬉しかったです。

最後に

懇親会で頭に浮かんだ疑問を発表者の方々に聞こうと質問を用意しておいたのですが、当日急に体調が悪くなってきたので懇親会参加できずに帰宅してしまいました。 また機会があれば聞いてみたいです!忘れないためにも下のほうに書き出しておきます。

あとで見た懇親会でのお寿司とピザの写真。美味しそう・・・

AtCoder Beginner Contest 118 へ参加しました

こんにちわこんばんわ、わかめです。

Kaggleに影響され、最近AtCorderに参加するようになりました、今回で2回目ですね。

atcoder.jp

とりあえずAとBはすぐ解けるようになりましたがCが未だに解けない状態が続いています。とりあえず当時書いたコードやログを残しておきます。

A - B +/- A

問題の通りに実装しました。

A, B = map(int,input().split())
 
if B % A == 0:
  print(A + B)
else:
  print(B - A)

B - Foods Loved by Everyone

積集合をとって残ったものを数えたほうが早いと思いました。

n, m = map(int, input().split())
data = [list(map(int, input().split())) for _ in range(n)]
s = None
for d in data:
    if s is None:
        s = set(d[1:])
    else:
        s = s & set(d[1:])
print(len(s))

SIGNATE 国立公園の観光宿泊者数予測 コンペで24位でした

だいぶ報告が遅くなりましたが去年の10月24日から12月13日まで経産省開催されていました「国立公園の観光宿泊者数予測」、略して公園コンペに参加し結果24位でした。

signate.jp

今更このコンペの終了報告を書くことに至ったのはSIGNATEにもメダル要素が導入されたからです。詳しくは次のリンクを参照してください。

signate.jp

24位にも関わらず銀メダルを取得したわけですが、参加者124人中の20%が銀メダル圏内なわけでだいぶギリギリのラインだったようですね。

解法についてはupuraさん作成のTogetterにまとめられていますのでそちらをご覧下さい。

togetter.com

一応総括しておきますとちゃんとクロスバリデーションしろということですね。あとLBは参考程度に留めておけもですね。

他の参加者の方々のブログリンク

copypaste-ds.hatenablog.com

upura.hatenablog.com

ktrw.hatenablog.com

www.hellodatascience.work

www.asanohatake.com

Googleポッドキャストを使ってregonn&curry.fmを購読してみる

皆様こんにちわこんばんわ、わかめです。

最近こちらのPodcastの配信を楽しみにしています。 regonn-curry-fm.github.io

端末をiPhoneからAndroidに変更したので「Podcast聞けなくなったちゃったなぁ」と思っていたのですが(Webページ上で聞こうとすれば聞けるのであまり困らないといえば困らないです) www.currypurin.com

どうやらこちらのGoogleポッドキャストアプリで聞けるようなのでダウンロードしてみました。 play.google.com

Googleポッドキャスト使用感

こんな感じ。

配信内容の概要が表示されました。

UIもシンプルでいい感じです!

倍速が最大3倍まで設定できるようです。

これでAndroidでもPodcastを聞けるようになりました、ありがたいことです。

ネット生活で便利なプラグイン・ツールを紹介してみる

随時更新中

タイトルの通り普段使っているプラグイン・ツール等を紹介してみます。

SNS

tweetdeck

tweetdeck.twitter.com

Twitterのタイムラインを複数開きたいと思ったことはありませんか。 検索キーワード毎やリストなどをそれぞれ1タイムラインとして扱うことができます。またそれらを横に並べて表示することができてとても便利です。

Chromeプラグイン

OneTab

chrome.google.com

Chromeのタブが無限に増え続ける人にオススメです。 無限に存在するタブを1つのタブに集約し、1タブを1リンクとしてまとめてくれます。

f:id:wakame1367:20190207230145p:plain
私のOneTabの状態

2月4日を1月35日という表現に変換するスクリプトを作ってみる

一発ネタです。関数名は僕の夏休みの8月32日バグからお借りしました。 gist.github.com

終わり!

github.com

TypeError: read_feather() got an unexpected keyword argument 'nthreads'への対処

Twitterで流れてきたこちらの問題についてちょっと調べてみました。

TL;DR

調査まとめ

以下上の問題を受けて調べたことをまとめました。

現象の再現

ツイートの件、再現するかを確認しました、確かに再現しました。

gist.github.com

原因調査

サクッと調べたらこんなissueを見つけました。 github.com

issueでのやりとりをまとめると、tl;drに書いた内容と重複しますが、pyarrow - read_featherがアップデートで削除されたデフォルト引数(nthreads)をpandas - read_feather側で残したままにしたのが原因。pandasの次のアップデートで修正予定。

原因調査 - 詳細

もう少し具体的に言うと、pyarrowのversionが0.10.0から0.11.0へ上がる際に以下のような変更が発生している。

def read_feather(source, columns=None, nthreads=None, use_threads=False):
def read_feather(source, columns=None, use_threads=True):

そして、問題のpandasのread_featherですが

pandas(0.23.4) - read_feather

featherのread_dataframeをそのまま返していることがわかります。

じゃあfeatherのread_dataframeはどうなっているかというと

feather read_dataframe

こちらはpyarrowのread_featherを返しています。

pyarrow read_feather

まとめるとこんな感じの依存関係になっています。

f:id:wakame1367:20190119181330p:plain:w300

というわけでpyarrowの変更がpandasにまで波及したことで、tl;drに書いた状況になってしまったということです。 また、この調査結果からfeatherを読み込むのにわざわざpandasのread_featherを使う必要はなく、pyarrowのread_featherを使えばよい。

追加調査

上の内容を受けてpypi - pandas(0.24.0rc1)がプレリリース版として上がっていたので修正されているか調べてみました。結果読み込めることが確認できました、次のバージョンが待ち遠しいですね。 gist.github.com

また、pandas 0.24.0rc1のwhatsnewから今回の変更点を列挙してみました。

  • Additionally we no longer depend on feather-format for feather based storage and replaced it with references to pyarrow (GH21639 and GH23053).

どうやら依存関係を下記画像の①から②へ修正した模様。

f:id:wakame1367:20190119173308p:plain:w300
pyarrowの依存関係

  • Deprecated the nthreads keyword of pandas.read_feather() in favor of use_threads to reflect the changes in pyarrow>=0.11.0. (GH23053)

pandas.pydata.org

おまけ

ところでpandasのwhatsnewに面白い一文があったので紹介します。

Warning The 0.24.x series of releases will be the last to support Python 2. Future feature releases will support Python 3 only. See Plan for dropping Python 2.7 for more.

pandasのバージョンアップ履歴を見ると今年中か来年には0.25にアップデートされそうなので、pandasのPython 2へのサポートは今年中、もしくは来年あたりに切られそうですね。 Python 2よ、さらば・・・。

pandas.pydata.org

以上です、ありがとうございました。

参考

世界各国の祝日特徴量を作る

upuraさんの記事でツイートを取り上げてもらいましたが日本の祝日の特徴量を作る場合、下記ライブラリを使うと便利です。

pypi.org

こちらの記事で使い方等簡単に説明されています。 upura.hatenablog.com

では日本以外の祝日の特徴量作るのはどうすれば?ということでこのようなライブラリがあることを知りましたので紹介いたします。

github.com

サンプルデータはupuraさんの記事から使わせていただきました。

gist.github.com

2018年を振り返る

皆様こんにちわ、こんばんわ、わかめです。 今年起きたイベント、主に仕事関係を箇条書きで書き出して振り返ってみます。

  • 2018年4月頃
    • 深層学習の研究開発にアサイ
    • 深層学習さっぱりわからんのでCourseraで勉強する
    • 技術書典4へ行ってみる
  • 2018年5月頃
    • Kaggleをやり始める
  • 2018年8月頃
    • 初めての転職活動を始める
  • 2018年10月頃
    • 派遣会社から転職
    • ゲーム開発・Vtuberとかやってる会社に転職する←???
  • 2018年11月頃
    • Signateに挑戦する→残念ながら結果出せず
    • 勤務先渋谷なので勉強会に顔を出し始める

去年の振り返りをやっていないので比較できないのですが、個人的に去年よりいろいろアウトプットできたなぁと思う2018年でした。ただブログさぼりがちだったので来年は1ヶ月に5記事くらいは書いていきたいなぁと思います。また、今年目標にしていた統計検定2級の合格をさっぱり忘れてたので来年こそは取得を目指そうと、あとKaggleのメダル1枚は確実にとりたいですね。