フリーランチ食べたい

Python/機械学習/データ解析/ソフトウェア開発などなど

研究がESSSB 17th@ベルギー・ヘントでポスター発表されました!

ESSSBとは

正式名称はEuropean Symposium on Suicide & Suicidal Behaviourで、自殺行動/自殺予防について学際的な観点から研究された発表やポスターが多い学会です。今年はベルギーのヘントで開催されました。

www.esssb17.org

ポスター

タイトルは「Regional suicide rates and affecting factors in Japan: an ecological study by using Generalized Linear Model and Machine Learning」です。各都道府県ごとの自殺率と、失業率、中学/高校進学率、一人当たり災害復旧費などの関係について、状態空間モデルとRidge回帰を使って探索的/仮説検証的の両面から検証した研究になります。自分はモデルの設計/実装とグラフの作成を主に行いました。

f:id:mergyi:20180923174656p:plain

発表

発表はFirstAuthoのOeくんがしてくれました。この研究のアピールポイントは、この分野では今まで活用が少なかったMachineLearningを活用して仮説探索/検証を行った点だったのですが、現地でも好評で興味を持ってくれた方が多かったようです。

f:id:mergyi:20180923180657j:plain

さいごに

全国の実際の自殺率データを扱って考察を得るのは非常に興味深い体験でした。 今回はマクロな視点からの研究だったので、この研究で得られたことを活かしつつ細かい、具体的な見識を得ていきたいと感じました

BigQuery GIS/GeoPandasを使ってお手軽にIPアドレスで地理空間分析を行う「Wikipediaはどこから編集されている?」

TL;DR

  • BigQueryの fh-bigquery:geocode.geolite_city_bq_b2b Tableを使い IPアドレスから緯度経度を取得できます
  • 国土地理院の「地球地図日本」から地図データを取得することができます
  • GeoPandasを使うことでお手軽に地理情報を可視化できます
  • BigQuery GISを使うと制限はありますが、もっと簡単に可視化することができます
  • ↓BigQuery GISを使った可視化です f:id:mergyi:20180916030135g:plain
  • コードは全てGithubに置いてあります。

github.com

続きを読む

PyCon JP 2018のトークのスケジューリングを行い、Blog投稿しました

ついに来週PyCon JP 2018です

今週buildersconに参加してきたのもあって、体が温まっている感じがします。笑 今回、PyCon JPには運営側で参加しますが、そもそも PyCon JPに参加するのがはじめてなので(!)そういう意味でもとてもワクワクしています。

トークのスケジューリングをBlogに投稿しました

自分の担当は以前Blogに投稿したように(PyCon JP2018のHPを作成しました。 - フリーランチ食べたい) システムなのですが、「タイムテーブルを作る人でが足りてない」とのことだったので助っ人として手伝わせていただきました。ただ、自分も当然もともとのシステムチームのタスクもあるので、そこまでガッツリ時間を取ることは難しそうで、そこから今回の最適化問題としてスケジューリングをするというアイディアが浮かびました。

pyconjp.blogspot.com

来週遊びに来てください

PyCon JP 2018のチケットは社会人分は完売しているのですが、学生分はまだ少数あるみたいなので、もし興味がある方いれば是非是非遊びに来てくださいね

pycon.jp

JSPN2018: 第114回日本精神神経学会で「DPATの個別対応と決定要因に関する分析」というタイトルでポスター発表を行いました

JSPN2018でポスター発表を行いました

実際に話したのはボスなので、何というのが正確かはわかりませんが、ポスター発表の実際の研究部分を担当しました。

www.congre.co.jp

ざっくりとした背景と内容

DPATという自然災害などの後に、被災地域に入り、精神科医療および精神保健活動の支援を行う専門的チームがあります。

www.dpat.jp

このDPATは2016年の熊本地震の際にも稼働し、被災地の医療行為を行っていました。熊本地震のように被災地が広い場合は当然限られた人的リソースを配分する必要があり、今回も行っていたのですが、配分のやり方について、まだ知見が溜まっておらずヒューリスティックにその場その場で判断していました。震災後、配分方法のデータだったり、患者さん/症状、実際にどう対応したかのデータが集まってきたのでそれを元に適切なリソース配分方法だったり、それ以外の関連する気づきを得るのが今回の目的でした。

ポスター

f:id:mergyi:20180909194905p:plain

最後に

このようにポスターをブログに載せるというのはあまり一般的ではないと思いますが、こういった研究成果をエンジニア/データサイエンティストとして、どのように集約していくか、は難しいと感じている背景があります。アカデミックな領域だけで簡潔するのであればアカデミックなやり方で全て簡潔しますが、自分のようにエンジニア/データサイエンティストとして適切に評価を受けたい場合、アカデミック以外の方にもわかりやすくまとめられていることが必要になります。こういった課題を抱えている方はそんなに多くないと思いますが、自分だけではないと思うので他の方がどうやっているかを調べたり、自分なりに検討していきたいと思います。

PyCon JP2018のHPを作成しました。

PyCon JP2018

今年の5~7月に主に開発をしていたPyCon JP2018のHPが7月に無事完成し、ブログを投稿しました。自分はPyCon JP2018システムチームなので実装、調整で携わっていました。

pyconjp.blogspot.com

pycon.jp

自分の担当とコード

PyCon JP2018は Vue.jsのフレームワークである、nuxt.jsと、APIとしてGoogleAppsScriptを使って開発されています。自分はAPI側の実装全てとフロント側のスポンサーページの実装を担当しました。HPは主に3~4人で開発されています。コードは全てPublicになっているので誰でも見ることができます。

github.com

github.com

なぜ転載しているか

前回のブログに書かせてもらったとおり、Forkwellのポートフォリオサイトのために投稿しています。

blog.ikedaosushi.com

カリフォルニア大学サンディエゴのAlgorithmic Toolbox @ Courseraを修了しました!

ここ1ヶ月半くらいで、Courseraで「Algorithmic Toolbox」という名前のCSのコースを受けており、今週、6週分の授業・課題を全てクリアし今週修了証をゲットしました 👏

f:id:mergyi:20180902130629p:plain

https://www.coursera.org/account/accomplishments/verify/JKBYCPYP7U69

Data Structures and Algorithms

この授業が何かと言うと、Data Structures and AlgorithmsというSpecializationの第一コースです。Specializationとは、Coursera用語らしく(?)、一連のCourse郡を束ねた名前のようです。(Specializationについては解説してくださっている方がいるので、こちら参照。Coursera|Specializationとは : MOOCsブログ)

(Data Structures and Algorithms Course1)www.coursera.org

そして、Data Structures and Algorithmsの特徴を説明文を引用して説明します。

No other online course in Algorithms even comes close to offering you a wealth of programming challenges that you may face at your next job interview.

このSpecializationの特徴は、単なるアルゴリズムの解説だけではなく採用面接などで必要になるアルゴリズムのプログラミングスキルを身につけられる ということです。

Algorithmic Toolbox

www.coursera.org

Algorithmic ToolboxはSpecializationの第一コースということで、基本的な内容から始まります。下記のようにWeek6に分かれています。

  • Programming Challenges
  • Algorithmic Warm-up
  • Greedy Algorithms
  • Divide-and-Conquer
  • Dynamic Programming 1
  • Dynamic Programming 2

毎週プログラミング課題があり、Java/C++/Python/Javascript/Rustなどの中から好きな言語を選べ、理解を深めることができます。

Week1、Week2の「Programming Challenges」「Algorithmic Warm-up」はアルゴリズムの重要性や計算コストの考え方など基礎から始まります。Week3の「 Greedy Algorithms」から本格的にアルゴリズムの内容が開始され、課題も難しくなります…。

なので後半は結構大変でした。でもGreedy AlgorithmsやDynamic Programmingを実装できるようになったのは、とても便利で今度別の(ある組織の)ブログで書くと思いますが、早速現実の問題にも適用するタイミングがありました。

Computer Science Complex をCourseraで治療する

geek-out.jp

先月、GeekOutに僕が強く尊敬するエンジニアの1人であるHigeponさんの記事が掲載されていました。Higeponさんが「ComputerScienceにコンプレックスをずっと持っていた」と書かれていましたが、まさに自分も同じ悩みを持っています。今年エンジニア4年目に突入し、普段はなんとなくプログラミング出来てしまうのですが、「ああライブラリがいい感じにやってくれるからそれに頼り切って実装してるな」と無力感を感じてしまうんですよね。

きっと自分以外にも同じような気持ちを持っている人は多いのではないでしょうか。そんな方にこのコースはオススメです。個性豊かな講師陣で話を聞いてるだけで割と面白いですし、資料も説明も工夫が凝らされてます。全て英語なので、自分にとっては言語の壁も大きいのですが、説明が工夫されてるのでなんとかついていける、と感じてます。

修了証を集めるのがゲーム感覚で楽しい

Courseraで取得した修了証はLinkedInに追加できるので純粋にRPGで武器を集めるような感覚で楽しいですし、もちろん就職、転職にも活用することができます。 https://www.linkedin.com/in/yutaro-ikeda-8b1015147/

Data Structures and AlgorithmsはCourseraの中では有料のコースになってしまうのですが、十分受ける価値はあると思います。来週からCourse2のData Structuresに挑戦します。また修了したら感想を書きたいと思います!

www.coursera.org

なぜ動的計画法はDynamic「Programming」という名前なのか

Coursera「Data Structures and Algorithms」

ここ1ヶ月半CourseraでCSのコースを受講しているのですが、そこで動的計画法についての面白い話があったのでシェア。 www.coursera.org 「Data Structures and Algorithms」という課程の中の「algorithmic-toolbox」コースWeek5のテーマが「動的計画法」です。

動的計画法(Dynamic Programming)とは

まず前提として動的計画法とは何か?という話です。

Wikipediaより

動的計画法 - Wikipedia

計算機科学の分野において、アルゴリズムの分類の1つである。対象となる問題を複数の部分問題に分割し、部分問題の計算結果を記録しながら解いていく手法を総称してこう呼ぶ。

細かくアルゴリズムが定義されているわけではなく、下記2条件を満たすアルゴリズムの総称である。

  • 分割統治法:部分問題を解き、その結果を利用して、問題全体を解く
  • メモ化:部分問題の計算結果を再利用する

抽象化された説明なので知らない方はピンと来ないかもしれませんが「アルゴリズムのグループの名前」であることと、「分割統治法」「メモ化」の2つの手法を使うという、認識でとりあえず問題ないと思います。具体的にはナップサック問題やレーベンシュタイン距離の計算に使われます。

なぜDynamic「Programming」なのか

動的計画法の英語名称はDynamic Programmingなのですが、なぜ上述したようにアルゴリズムのグループなのに、Programmingという名前なのか、というのはずっと不思議でした。

動的計画法」はリチャード・E・ベルマンという数学者によって1953年に考案されています。ちなみにベルマンは、動的計画法以外にもベルマン方程式やハミルトン-ヤコビ-ベルマン方程式を考案していたり、1976年にジョン・フォン・ノイマン理論賞と受賞したりと歴史的にも重要な数学者です。

リチャード・E・ベルマン - Wikipedia

Dynamic「Programming」と名付けられた理由は、動的計画法が生まれた背景にあると、Courseraの授業で教えてもらったのですが、調べていたらより詳しく動的計画法の生まれた経緯について書かれたPaperがあったのでこちらから引用させてもらい、ざっくりとして翻訳をしてきたいと思います。

https://pubsonline.informs.org/doi/pdf/10.1287/opre.50.1.48.17791

科学用語が大嫌いな国防長官WilsonとDynamic Programmingの誕生

The 1950s were not good years for mathematical research. We had a very interesting gentleman in Washington named Wilson. He was Secretary of Defense, and he actually had a pathological fear and hatred of the word, research

1950年代は数学は不遇だった。その当時の国防長官だったWilsonが研究/研究用語を病的に恐れ憎んでいたからだ、というようなことが書いてあります。この研究の中に数学が含まれているのだと思います。

His face would suffuse,he would turn red, and he would get violent if people used the term, research, in his presence.

もし彼の目の前で研究用語を使おうものなら顔が真っ赤になって攻撃的になったと。恐ろしすぎますね。

The RAND Corporation was employed by the Air Force, and the Air Force had Wilson as its boss, essentially. Hence, I felt I had to do something to shield Wilson and the Air Force from the fact that I was really doing mathematics inside the RAND Corporation.

The RAND Corporation(当時ベルマンが所属していた企業)は、空軍から仕事をもらっていて、空軍のボスはWilsonだったので、なんとしても数学的なことを社内でやっていると知られるわけにいきませんでした

What title, what name, could I choose? In the first place I was interested in planning, in decision making, in thinking. But planning, is not a good word for various reasons.

どうやらベルマンは最初は「planning」という名前を考えていたらしいのですが、色々な理由から良くないと判断したようです。

I decided therefore to use the word, ‘programming.’ I wanted to get across the idea that this was dynamic, this was multistage, this was time-varying—I thought, let’s kill two birds with one stone.

ベルマンは最終的に「programming」という名前を選択します。段階的要素と時間変動的要素を表した言葉ということで「dynamic」という名前も考えられました。これは前述した「分割統治法」「メモ化」が段階的に実行されていくことを表していると思います。

Let’s take a word that has an absolutely precise meaning, namely dynamic, in the classical physical sense.

この、古典的な物理学での力学系という意味でも全く正しい「dynamic」という言葉を使おうと決めます。この方も物理学での力学系との類似を指摘されていますが、この文章だけ読むとどちらかというと後付だったようで、非常に興味深いです。

qiita.com

It also has a very interesting property as an adjective, and that is it’s impossible to use the word, dynamic, in a pejorative sense. Try thinking of some combination that will possibly give it a pejorative meaning. It’s impossible. Thus, I thought dynamic programming was a good name.

また軽蔑的な意味にならないことも大事だったと書いてあります。あまりピンとこないような気もしますが、そういう時代背景だったのでしょうか。もしかしたらDynamic Programmingと似た部分のあるGreedyArgorithm(貪欲法)の存在も影響しているのかもしれません。

It was something not even a Congressman could object to. So I used it as an umbrella for my activities

最終的にDynamic Programmingは議員からの反対すらなく便利な道具として、その後ベルマンによって使われていたようです。ベルマンは数学的なセンスがあっただけでなく政治的な手腕にも優れていたというエピソードでした

まとめ

  • Dynamic Programmingが「Programming」と名付けられているのはその当時の偏屈な国防長官が原因だった
  • 身近で使われている言葉1つ1つにも歴史があって、歴史を調べると楽しいことがわかったりする
  • 本当はPythonのDPの実装例も載せたかったけど、とても長くなってしまいそうなので、それは次回以降で

(おまけ)Courseraの講師のクセが強い

ちなみに本題と関係ないのですが先生がめちゃくちゃ個性強くてウケました

f:id:mergyi:20180827002504p:plain

f:id:mergyi:20180827004701p:plain

「え…いきなり逆転裁判のゴドーみたいヤバい人出てきたんだけど」と思ったのですが、授業は簡潔でわかりやすかったです。笑