唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

python

Twitterで特定のユーザー達が共通してフォローしているユーザーをリストアップする

前にこんなツイートをしたホクソエムからフォローをされている数で定義されるホクソエム数— 無限猿(id:sucrose)@29月病 (@Scaled_Wurm) 2016年4月1日 連休で時間があったのでTwitter APIに慣れるついでに計算してみた ホクソエムとは よくわからないけど、Tw…

はてなブックマーク件数取得APIをPythonで叩く

前回の記事ではてなブックマーク件数をPythonで収集したので方法をメモしておく sucrose.hatenablog.comAPIのドキュメントはここ はてなブックマーク件数取得API - Hatena Developer Center 下記のように、調べたいURLをURLエンコードして「url=調べたいURL…

Matplotlibでxkcd風にプロットをする

Matplotlibにxkcd風にグラフをプロットする機能があるらしいので試してみた xkcd - Wikipedia xkcdは英語のWebコミックサイトで本の虫とかのサイトで翻訳されてるのをたまに見かける 本の虫: xkcd 1526: プラシボ阻害薬 Matplotlib 1.3から以下の関数を実行…

最良優先探索で15パズルを解いてみた(paizaオンラインハッカソン5+)

paizaの問題で15パズルを解くプログラムを書きました 与えられた配置をできるだけ少ないスライド回数で解く問題です(実行時間時間制限あり) レナとミナミの国際プログラミング選手権 | paizaオンラインハッカソン5+ 15パズル 15パズル - Wikipedia 1から15の…

Pythonワンライナーでpaizaオンラインハッカソン5に挑戦してみた

paizaがイラスト付きでプログラミングの問題を出しているpaizaオンラインハッカソンも5回目になりました 前回ぐらいから難易度が下がった代わりに、イラストとかストーリーとかに力を注ぎ始めているみたいです(?) なんとストーリーの分岐がありますマンガ版…

じゃんけんが終わるまでの平均回数を求める

じゃんけんをするときに人数が多いとあいこが増えて、なかなか終わらなかった経験があると思います \(n\)人でじゃんけんした時に、ただ1人の勝者が決まるまでの回数の期待値(平均回数)を計算してみました また大人数でもすぐに勝負がつくゲーマーじゃんけん…

組み合わせの個数(二項係数)を計算する

Pythonで組み合わせ(Combination)を計算 - 唯物是真 @Scaled_Wurm 数年前に上のような記事を書きましたが、ライブラリを使わない場合の計算について書いてなかったので記事にしました 組み合わせとは いくつかの要素の中から、順番を区別せずにいくつかの要…

毎日が天皇誕生日になるには何回天皇が交代する必要があるか(シミュレーション版)

今日は天皇誕生日ですが、以前「あと何回天皇が交代すれば毎日が天皇誕生日になるか(不謹慎)」の期待値を求める記事を書きました 毎日が天皇誕生日になるには何回天皇が交代する必要があるか - 唯物是真 @Scaled_Wurm 毎日が天皇誕生日になるには何回天皇が…

ツイート時間の分布をクラスタリングしてみた

前にツイート時間の分布の類似度を求めるというのをやりました Twitterの投稿時間で類似度を計算してみた - 確率分布の類似度 - 唯物是真 @Scaled_Wurm Twitterの投稿時間で類似度を計算してみた - 確率分布の類似度 - 唯物是真 @Scaled_Wurm今回はツイート…

NumPyのブロードキャストのメモ

Pythonの行列演算ライブラリのNumPyはforループを使って計算すると遅いので、できるだけ行列演算やベクトル演算だけで計算を行いたいNumPyでは大きさの違うarray同士で計算するときのブロードキャストという仕組みがあります これを使うと複雑な計算が簡単な…

Advent Calendarの参加者は毎年どれぐらい入れ替わっているのか?

Machine Learning Advent Calendarの参加者を去年の参加者と比べると入れ替わりが激しいんだなーと思ったので他のも調べてみましたMachine Learning Advent Calendarの今年の分読んでたけど、2014年と2013年の共通の執筆者って4/25ぐらいしかいないんだなぁ …

Pythonで出力したCSV(UTF-8)がExcelで読み込めなくて困った話

Pythonで出力したUTF-8のCSVを渡したら「文字化けしてExcelで読めない」と言われて困りました原因は文字コードがUTF-8の時によく問題になるBOM(バイトオーダーマーク)です バイトオーダーマーク - Wikipedia UTF-8のファイルにはBOMが付いている場合と付いて…

Twitterに何時に投稿したらフォロワーに読まれやすいのか調べてみた

TwitterにはTwitterアナリティクスというアクセス解析があります インプレッション(見られた数)やふぁぼられた数、リツイートされた数、その他多くの情報がわかります 最近のデータをCSVでダウンロードできるようになっています(あまり長期のデータはダウン…

Pythonワンライナーでpaiza Online Hackathon 4 liteに挑戦してみた

paizaで新しいオンラインハッカソンが出題されていたので挑戦してみました エンジニアでも恋がしたい〜転職初日にぶつかった女の子が同僚だった件〜|paizaオンラインハッカソン4 Lite マンガ版「エンジニアでも恋がしたい!」〜転職初日にぶつかった女の子…

ニコニコ動画 『スナップショット検索API』 に触ってみた

一人アドベントカレンダーの一日目です(違10月にニコニコ動画から『スナップショット検索API』というのが出ていたので触ってみました 毎日朝5時の時点のデータのスナップショットから検索できるAPIでニコニコ動画のコンテンツを解析する目的で検索/取得する…

サザエさんのジャンケンの次の手を決定木で予測+可視化してみた

前に決定木の可視化をしようと思ってやってなかったのでやっておきます決定木のライブラリは例のごとくscikit-learnを使う pythonの機械学習ライブラリscikit-learnの紹介 - 唯物是真 @Scaled_Wurm pythonの機械学習ライブラリscikit-learnの紹介 - 唯物是真…

Derangement

Derangement - Wikipedia, the free encyclopedia 完全順列 - Wikipedia Derangementは\(1, 2, \dots, n - 1, n\)を要素とする順列のうち、すべての\(i\)番目の要素が\(i\)と等しくない順列のこと(不動点の個数が\(0\))たとえば\(1, 2, 3\)を要素とする順列…

素因数分解とかエラトステネスの篩(ふるい)とかのメモ

素数を求めたり素因数分解するのは競技プログラミングでたまに出てきます 計算量とか詳細をあまり知らなかったので基本的なアルゴリズムについて調べてみましたアルゴリズムや数学についてはあまり詳しくないので間違いがあったら指摘してください ランダウ…

PythonでpaizaオンラインハッカソンLiteに挑戦した

天才火消しエンジニア霧島「もしPMおじさんが丸投げを覚えたら」|paizaオンラインハッカソンLite 問題設定 \(n\)個の会社それぞれに、エンジニアの人数\(q\)と価格\(r\)が与えられる 会社をいくつか選んで契約した時に、エンジニアの人数の合計がある値\(m\…

Pythonの文字列中の変数展開(str.format)のメモ

Pythonで文字列中の変数展開をするときの書式について調べたのでメモ http://docs.python.jp/2/library/string.html#formatstrings 基本的に文字列中の{と}の間にいろいろと指定して、展開したい変数をformat関数に与えるようになっています ちなみにformat…

CodeIQ《結城浩のスペーストーキー問題》に挑戦した(Python)

今回のは簡単だった 挑戦者求む!【アルゴリズム】スペーストーキー社の危機を救え! by The Essence of Programming 結城 浩│CodeIQ https://codeiq.jp/achievement/135 概要 以下のURLで動いている文字列の変換の仕組みを推定する http://spacetalky.textf…

Pythonでシーザー暗号

シーザー暗号はすべてのアルファベットを\(n\)個ずつずらす暗号です。 シーザー暗号 - Wikipedia ABCDEFGHIJKLMNOPQRSTUVWXYZ ↓(+3) DEFGHIJKLMNOPQRSTUVWXYZABC暗号を元の文に復号化するときには逆に\(-n\)文字ずらさないといけないのですが、\(13\)文字ず…

AOJの問題を推薦――協調フィルタリングを試してみた

AIZU ONLINE JUDGE(AOJ)という競技プログラミングの問題を公開しているサイトがある。 AIZU ONLINE JUDGE: Programming Challenge 1年以上前にAOJを少しだけやっていた頃に、AOJの問題を推薦するスクリプトを書いたものの、特に公開も使用もせずに放置してい…

Pythonのcollectionsモジュールが地味に便利

PythonのcollectionsモジュールにはdefaultdictやCounterなどの便利なデータ構造があります。 いくつかメモ代わりに紹介しておきます defaultdict 辞書にキーが含まれない場合のデフォルト値を指定できます。 リストをデフォルトで持つ辞書などが作れます。 …

PythonでpaizaオンラインハッカソンVol.2に挑戦した

過去にVol.1にも挑戦しましたけど、今回も挑戦してみた 女子大生とペアプロするだけの簡単なお仕事です!|paizaオンラインハッカソンVol.2 とりあえず100点取れました mugenenさんの採点結果[100点] す、凄いなんて思ってるわけじゃないんだから!|paizaオ…

TopCoder SRM 612 Div2 oox 1097->1211

14th, 735.75pts, +2/0 challenge Volatility ?->394前回-25ptsを取ってDiv2に落ちたのですが、よい順位をとれたのでDiv1に復帰できました。 250: LeftAndRightHandedDiv2 右利きの人と左利きの人が連続した椅子に座っている。 右利きの人の左側に左利きの人…

pyqueryでHTMLからデータを抽出

pyqueryはjQueryと同様にHTMLの操作ができるPython用のライブラリです。 PythonでHTMLからのデータ抽出といえばBeautiful Soupの名前をよく見かけますが、jQueryを知っている人にはこっちの方が使いやすいと思います。内部的にはlxmlを使用しているので以下…

ニコニコ動画のコメントの投稿日時の分布

下の論文が最近はてなとかTwitterとかで話題になりました CiNii 論文 - マイクロブログの投稿時間に着目したユーザの職業推定に関する研究 「そういえば昔ニコニコ動画のコメントの投稿時間を調べて下書きに放り込んでおいたなー」と思い出したので公開例の…

大量のテキストからランダムに少数の行を抽出したい - Reservoir Sampling

前に以下のような記事を書きましたが、大量のテキストではうまくいかなかったので新たに書きました ファイルからランダムにN行取り出す(shufコマンド) - 唯物是真 @Scaled_Wurm 上の記事ではテキストをランダムに\(k\)行取り出したい時"shuf -n k"コマンドで…

Pythonの演算子オーバーロードに触ってみた

四則演算(+-*/)などの演算子について、クラスに独自の振る舞いを定義することができます これは演算子オーバーロードと呼ばれます Pythonではよくある演算子だけでなく"len()"や"del"などの様々な演算子(?)に対してもオーバーロードができます日本語だと以…

TopCoder SRM 601 Div2 oox 1191->1224

131st, 690.96pts, +2/-2 challenge Volatility ?->295久しぶりに青くなりました レートも全然上がらないし、参加時間を捻出するのもつらいのでやめようかと…… たまにはPythonで参加しようかと思って見つけた以下のプラグイン(Greed)で参戦(いつもはEclipseC…

PythonでpaizaオンラインハッカソンVol.1に挑戦した #paizahack_01

新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1 一応解けたけど、Twitterを見てるとPythonでテストケース3を0.3秒台とかで解いている人がいて、どんな解き方をしているのか気になります 問題設定 \(N\)個…

Twitterの投稿時間で類似度を計算してみた - 確率分布の類似度

以前集合やベクトルの類似度の記事を書いたんですが、確率分布の類似度には触れていなかったのでついでに書きました ツイート時間分布の類似度を求める 今回はツイート時間ごとの頻度を正規化して、確率分布とみなして類似度を計算してみます 私のアカウント…

続Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ

以前Pythonのライブラリのsubprocessを使って、パイプでつないで複数のコマンドを実行するという内容の記事を書きました Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ - 唯物是真 @Scaled_Wurm しかしsubprocessのドキュメントなどに書かれて…

Orthogonal Procrustes problem

前に読んだ論文で出てきたのでメモ Orthogonal Procrustes problem - Wikipedia, the free encyclopedia 同じ形の行列\(A, B\)が与えられた時に\(||AX - B||_F\)を最小化する行列\(X\)を求める(\(A\)を\(B\)にできるだけ近く変換する行列を求める ただし\(X^…

はてなブログのAPIが公開されたらしいので簡単に触ってみた(Python)

はてなブログAtomPub APIを公開しました。サードパーティのブログ投稿ツールを利用・作成できます - はてなブログ開発ブログ とのことで触ってみた はてなのAPIを扱うのは初めて。Python以外の言語のサンプルを見るとAtomを扱えるライブラリがあれば簡単に書…

Lossy Countingの変種を実装してみた

前に以下の記事でLossy Countingを実装しましたが、より省メモリな変種があるらしいのでそちらも書いてみました Lossy Countingを実装してみた - 省メモリな頻度計測 - 唯物是真 @Scaled_Wurm 以下の論文のAlgorithm 2の擬似コードそのままです。 "Methods f…

Lossy Countingを実装してみた - 省メモリな頻度計測

大規模データで頻度を数えると、欲しいのはよく登場するアイテムの情報なのに、ほとんど出現しないアイテムの種類数が非常に多くて、それらがメモリを大量に必要としてしまうという問題があるこれに対してアイテムの種類数の最大値に制限を加えたり、頻度に…

matplotlibで積み上げ棒グラフ

積み上げ棒グラフ(stacked bar chart)は、棒グラフを積み重ねた以下のような形のグラフです matplotlibのbar関数ではオフセットを指定できるので、オフセットを足しながら棒グラフをかいていけば積み上げ棒グラフができます from pylab import * def bar_sta…

python 2.7でPython 3風に書きたい

Python 3以降との違いを調べていたときのメモ Python 2.7でも試せるもの 以下にPython 2.7でimportをすればPython 3風に書けるものを列挙しておきます from __future__ import division Python 2.7では割り算「/」の結果は切り捨てでしたが、Python 3以降で…

LIBSVMの特徴量の重みを見る - LIBSVMのモデルの読み方

以前LIBSVMで特徴量の重みを見る方法について記事でURLを紹介したのですが、リンク先の記事とコードがなくなっているみたいなので、改めて記事にしておきます。 SVMでの特徴量の重み 非常に単純化して説明すると、SVMは次のような式の符号の正負によってデー…

matplotlibで日本語入りのグラフを書く

pythonではmatplotlibがグラフの描画によく使われます。 しかし、デフォルトの設定では以下のように豆腐みたいに文字化けしてしまいます from pylab import * text(0.2, 0.4, u'日本語', size=100) show() この問題を回避するには以下のように直接日本語フォ…

pythonの機械学習ライブラリscikit-learnの紹介

scikit-learn(sklearn)の日本語の入門記事があんまりないなーと思って書きました。 どちらかっていうとよく使う機能の紹介的な感じです。 英語が読める方は公式のチュートリアルがおすすめです。 scikit-learnとは? scikit-learnはオープンソースの機械学習…

IPythonを使い始めました

今更ながらIPythonを使い始めました。 IPythonはPython用のインタラクティブシェルで、標準のものとは違って補完機能や自動インデント、シェルコマンドの実行などの色々と便利な機能がついています。 並列処理にも使えるみたいですが、その辺りはまだ調べて…

Pythonスクリプト実行後に対話的に操作したい

以下のように'-i'を指定するだけでできるみたいです。 こんな簡単なのを知らなかったとは……やはりドキュメントはちゃんと読まないといけませんね。 python -i ファイル名あるいは対話モードの時にexecfile関数を実行すれば同様のことができるみたいです。最…

単語などをIDにマッピングする

異なる要素ごとに別々の数値をIDとして割り振って管理したいってことがよくあります。Twitterで以下のようなツイートを見かけました。 Pythonでwids = defaultdict(lambda: len(wids))だけで単語を単語IDにマッピングする辞書を作れることに気づいた。Python…

小説家になろうのランキングをトピックモデルで解析(gensim)

小説家になろうというWeb小説投稿サイトがあります。 いわゆるライトノベル的な作品が多いのですが、近年書籍化される作品が多く出ていて注目を集めています。 続々と「小説家になろう」から書籍化作品が登場! - フラン☆Skin はてな支店 小説を読もう! || …

特徴量(素性)を作るときのメモ + scikit-learnにちょっと触る

機械学習のデータとして特徴量を作るときの注意点や悩むことなどをメモっておきました。間違いなどが含まれているかもしれません。 基本的な内容ですので調べればもっと適切なやり方があると思います。 カテゴリカル・データ カテゴリカル・データというのは…

Python で疎行列(SciPy)

疎行列とは 疎行列は成分のほとんどがゼロである行列のことです。 たとえば、文書に登場する単語の頻度を数えたりするとこういった行列になります。 他にも疎なグラフの隣接行列は疎行列になります。 こういった行列は通常の行列(密行列)を使うよりも、少な…

numpyで縦ベクトル

numpyで縦ベクトルを使いたいときにどうやればいいのか困ったのでメモ。一次元のベクトルだと横と縦の区別がないので、二次元にする必要があります。 numpy.newaxis import numpy as np array = np.arange(5) print array[:, np.newaxis] 一度行列などにして…