フリーランチ食べたい

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

matsumotoryさん、kwappaさんの公開ポートフォリオレビューを受けました/自分なりにアウトプットすることのメリットを整理してみた

「エンジニアの日々のアウトプット」に関するForkwellさんのイベントに参加してきました。

  • ForkwellのポートフォリオのぼりーさんのクラウドPodcastのmatsumotoryさんゲスト回を聞いて興味を持ち使い始めました。
  • ただ、埋めやすいところを埋めてGithubを連携させただけで、ちゃんと使いこなせていたかは疑問でした
  • そんなときに、このイベントを前職の同期から聞き、開催場所も前職のオフィスだったので久々に遊びに行きたい気持ちもあって応募しました。

forkwell.connpass.com

ポートフォリオを(強制的に)ちゃんと埋めました

イベントページに

ゲストのお二人が参加者のポートフォリオを抽選で3名レビューいたします!

との記載があったので、せっかくなので…ということで応募したら、なんと選ばれました! 85人の前でレビューされる、というプレッシャーもあり、週末の半日くらいを使って必死に埋めました。ときには追い込まれることも必要だと思いました。

続きを読む

10月8日(月)につくばPythonもくもく会 No.1を開催します!

Pythonを使っている方&Pythonを勉強したい方一緒にもくもくしませんか?

  • 宣伝です。
  • これから、つくばでPythonもくもく会を定期的に開いていきます!
  • 第1回は10月8日(月)11:00~@筑波大学内体バチで行います。
  • 将来的にはPythonの情報共有ができたり、交流の輪を広げられるコミュニティにしていけたらいいなと妄想しています。
  • 参加費や条件などは無料なのでぜひぜひお気軽にお申し込みください。

詳細はconnpassページをご参照ください。

申し込みもこちらからできます。途中参加退場なども自由です!

tskubapy.connpass.com

続きを読む

ISOに従っていないデータをpandas.to_datetime()すると500倍以上遅くなる可能性がある話とその対策

TL;DR

  • pandasの to_datetime メソッドはとても便利で、かなり乱暴にデータを突っ込んでもParseしてくれます
  • でもデータによってはparseに通常の30倍以上時間がかかる可能性があるので注意しましょう
  • ISO_8601の規格に従っていない場合はとりあえず format オプションをつけておくのが得策です。
  • コードはすべてGithubにあがってます

github.com

続きを読む

pathlibで見るPythonの演算子オーバーロード活用

pathlibって便利ですよね

最近pathlibの便利さが様々なところで語られています。

pathlibの様々な機能は上記の記事やドキュメントを読んでいただければわかるので、今日はその1つに、Pythonオーバーロードを説明するのに良い機能があるので紹介したいと思います。

pathlibはこんな風にパスを書けます。

from pathlib import Path

etc_dir = Path('/etc')
init_dir = 'init.d'
print(etc_dir/init_dir/'reboot')
# => /etc/init.d/reboot

最初に見ると、ちょっとギョッとするのではないでしょうか?
pathlibでは上記のように、1 / 2 #=> 0.5 のように 変数 / 変数 という書き方でパスを書くことができます。慣れてくるとLinuxのパスを普通に書いているような気持ちで書けるので気持ち良いです。本来は除算の演算子である / でどうしてこんな風に書けるのでしょうか?答えはソースを読むとわかります。

https://github.com/python/cpython/blob/3.6/Lib/pathlib.py#L898

    def __truediv__(self, key):
        return self._make_child((key,))

この __truediv__ メソッドが答えです。

Python演算子オーバーロードできる

公式ドキュメントの 「3. Data model」を読むとPython演算子オーバーロードできることがわかります。

3. Data model — Python 3.7.0 documentation

The following methods can be defined to emulate numeric objects. Methods corresponding to operations that are not supported by the particular kind of number implemented (e.g., bitwise operations for non-integral numbers) should be left undefined.

object.__add__(self, other)  
object.__sub__(self, other)  
object.__mul__(self, other)  
object.__matmul__(self, other)  
object.__truediv__(self, other)
...

これで +-/ といった演算子を再定義できます。それではこの機能を使って擬似的にpathlibを実装してみると次のようになります。

class myPath():
    def __init__(self, path):
        self._path = path
    
    def __truediv__(self, add_path):
        self._path = self._path + '/' + add_path
        return self

    def __str__(self):
        return self._path

etc_dir = myPath('/etc')
init_dir = 'init.d'
print(etc_dir / init_dir / 'reboot')
# => /etc/init.d/reboot

無事、pathlibと同様の挙動が実装できました。 pathlibは演算子オーバーロードをとても上手く使った実装だと思います

他にも演算子オーバーロードはこんなところでも

pathlib以外で自分が良く使う演算子オーバーロードはnumpyの @ です。これを使うと機械学習の実装では欠かすことのできないドット積(内積)の計算を行うことができます。元々は dot メソッドを呼び出さなければいけなかったのですが、途中で演算子オーバーロードとして実装されたので簡単に書けるようになりました。

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(a * b)
# [[ 1  4  9]
#  [16 25 36]
#  [49 64 81]]

# 前は dot メソッドを呼び出す必要があった
print(a.dot(b))
# [[ 30  36  42]
#  [ 66  81  96]
#  [102 126 150]]

# 今は@演算子でdot積が計算できる
print(a @ b)
# [[ 30  36  42]
#  [ 66  81  96]
#  [102 126 150]]

演算子オーバーロード、とても便利ですね。

最後に

研究が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