2017-06-26〜07-02 やったことと振り返り

1ヶ月続いているのですごい。ただし、やりたいこと発散中

kaggleのコンペ同意を自動化

kaggle-cli というほぼ自動化されているライブラリがあるのだが、唯一自動化されていなかったので試した。

github.com

このライブラリでは内部でBeautifullSoupを利用したmechanizeが行われている。さすがにそこまでしなくていいと思ったので、自分のライブラリではrequestsのsession機能を使って解決した。pypiに登録しようと思ったが、内容が怪しいのでsetupy.pyだけ用意してpip install できる状態にはしてある。

github.com

実際にブラウザで見に行かなくていいかと言われるとコンペ情報を見に行ってから始めるか決めるので、自動化しなくてよかったんじゃないかと思った。これとは関係ないが、ダウンロードしたファイルサイズが大きすぎてlocal PCでpandasでは手に負えなくて(´・ω・`)。

小さいファイルかつ、followしている人たちが解いた問題にチャレンジしようと思った。

AtCoder ABC 066

Cまで問題なく解けたが、D解けず。

C

空リストBにあるリストAの要素を順に詰め込み逆順ソートし、操作が終わったらBの出力をする問題。

愚直に解くとsortをN回するのでO(N2)になるので、ちょっと考えた。 詰め込みと逆順ソートを繰り返す操作は、最初の要素を中心にして次の要素を左右交互に詰め込む操作と同じになる。 そこでリストAと同じサイズのBを用意して、代入するようにした。リストAのサイズの偶奇によってどちらから詰め込むかというの問題なかった。

解説を見るとdequeを使っていて、存在が頭になかったのが問題。

pythonでの値が利用しているメモリ

C問題のときに、intで初期化しようとしたけどメモリを考えてNoneで初期化した。 ただ、どれくらい違うのか把握していなかったので下記で計測した。

import sys
sys.getsizeof(None)

D

部分列が分からず、組み合わせを求めるものだと勘違いしていた。 ググってみると、もとの数列に含まれる要素の順序を維持したまま作るらしい。

全然関係ないけど、下記をあとでじっくり見てみたい

プロコン記録 - Google スプレッドシート

GHQの導入

Githubに(置いてる|置こうとしている)Repositoryが管理できていないため、導入した。

管理は ~/.ghq/github.com/username/repository_name のようにされるため、どのようなrepositoryであるかがまったく分からない。 元の管理は ~/programming/language_name or library_name or topic/xxxx だったので分かりやすかった。

この際なので、不要なリポジトリをlocal/remoteから削除した。

github api でtopicを取得する

寄り道。

  • APIでtopicを取得するには、headerを追加しないといけない
  • webと同じで30件ずつしか取得できないので、responseのlinksを頼りに再帰して取得する
  • parameter typeのownerでは自分のrepository判定(webでのtype:sources指定)ができないのでforkによる判定を行う
  • コードは以下参照

qiita.com

  • generatorでの再帰でyield from をさっぱり忘れていた
  • 上記を簡単に表現するasync/awaitも忘れていた
  • つまりasync/awaitって非同期というよりcoroutineなのでは感

Qiitaの記事をGithubに移した

tag情報をmemoしか使っていない+code部分をgistにcopyしても意味ないので、github.ioのrepositoryに移した。Qiita APIGithub APIのときに利用したコードを改変してさくっとできた。 本当はrevisionのAPIがあれば、gitの履歴を作りたかったが存在しなかったので断念。

import requests

user_name = "ksomemo"
url  = "https://qiita.com/api/v2/users/{}/items"
params ={
    "per_page": 100,
}

res = requests.get(url.format(user_name),
                   params=params)
res2 = requests.get(res.links["next"]["url"],
                    params=params)
articles = res.json()+res2.json()

for a in articles:
    fname = a["title"].replace("/","/")
    with open(fname + ".md", "w") as f:
        f.write(a["body"])

重回帰の偏回帰係数について

あんまり理解できていなかった。偏回帰係数の導出は、行列の微分に慣れているので、なんの問題もない。

  • 偏回帰係数に対するt検定
  • t検定, F検定の復習
  • そもそも多重共線性って
  • VIFの式、と基準の不確定さ

など、あげるとキリがなかった。下記の課題と同様になりそうなので、検定からやろうと思っている。

44の例題で学ぶ統計的検定と推定の解き方

44の例題で学ぶ統計的検定と推定の解き方

平均・分散から始める一般化線形モデル入門

平均・分散から始める一般化線形モデル入門

計量経済学 (新経済学ライブラリ)

計量経済学 (新経済学ライブラリ)

課題

前回同様、課題が発散しがち

今思ってること

  • kNN
    • そもそも実装したこと無い
    • 距離まとめ(特にマハラノビス)
  • 決定木
    • 連続量での分割
    • 回帰木
    • アンサンブル忘れてきた
  • 重回帰の偏回帰係数推定関連

対策

細かいことからこなす。理由は、中期長期目標というのがやりたいことが明確にない自分なので、これがよいと思った。

例として、決定木を実装したいならば