Pythonとかいろいろのこと

angelaのプログラミング勉強ブログ

数学パズル

Pythonの勉強を再開という事で、Checkioをやるかなも思ったけど、「プログラマ脳を鍛える数学パズル」という本を買ってみた。もともとはCodeIQで出題された問題らしく、それをまとめて70問掲載した本らしい。とりあえず、いろいろな書き方を学習するのに、写経以外に調べたり考えたりする要素が必要なので、これをやってみることに。この本は、ほとんどのコードがRubyで書かれているので、RubyPythonに直す感じ。

と、最初の数問は余裕だろうと思っていましたが・・・結構難しい。最初の問題は、数字の回文だったけど、RubyのreverseをPythonでするにはどうすればいいのだ・・・と改めて基本的なとこを知らないなと思いました。

調べた結果、数字を一旦文字列にstrで変換して、以下のようにすれば逆のならびになることを確認。2進数はこれでうまくいったけど、8進数がうまくいかない。


数字の逆並び

8進数はhex(number)で表示されるけど、どうも本の解答と答えが違う。hex(585)とすると'0x249'となる。0xを取り除いても、249が8進数の585ではなくて1111のはずなんだけど、ここでむーとなって、いろいろ調べたけどあまりよくわからないので次の問題に行く事にした(弱)。今度Pythonに詳しい友達に会うから、聞いてみよう。

翌日談:すっごいかっこ悪くて、本をちゃんと見てなかったため、16進数のhexを8進数と勘違いしていて、8進数はoct(585)で1111になることが分かりました。あーすっきりした!

rvest

Pythonではないけど、Rのライブラリ、rvest使ってみたので、簡単に備忘録。
rvestはWebのスクレイピング

もっといろいろ出来そうだけど、簡単にWebのテーブルを抜き出すときは

topmedal <- read_html("http://www.sports-reference.com/olympics/")
topmedal_table <- html_table(topmedal)[[1]]
colnames(topmedal_table) = topmedal_table[1,]
topmedal_table <- topmedal_table[-1,]
topmedal_df <- data.frame(topmedal_table[-1,])
head(topmedal_df)
head(topmedal_table)

てな感じになる。ページに複数のテーブルがあるときは、html_tableで抜き出すと、リストになって入っているので、1個目のテーブルを指定するときは、上のコードのように1としているという訳。

そして、何気にこのテーブル、セルの結合がヘッダーのところでしてあるんだけど、とりあえずそれでも読んでくれる。ただしヘッダーは結合されたセルがヘッダーになってるので、そこを修正している。

とりあえず、これはちょこちょこ使いそうなので、メモ。

ここ2ヶ月ほど、Pythonの学習が止まってしまった。またぼちぼち始めなくては・・・

最近勉強してること。

最近は、割と毎日Python書いてる。

checkIOが面白くて、毎日調子がいいときは数問解けて、なんとかレベル7まで来た!早く10超えたいな。checkioのいいところは、いろんなジャンルの問題があるから、必然的に調べないといけない。この間は、date関連の関数をあれこれ調べた。

単に日付と日付の差を取るとかかと思いきや、週末の日数を数えるとか、さすが便利だなーと感心。

日付に関する関数いくつか

タイムゾーンについても、関数があるみたいだけど、それは今度。

今は、実際のデータ見ながら、Pandasで集計のやり方とか、復習中。前に本でさらっとやったけど、もう少し指が覚えてるぐらいにならなければ。

Pythonista への道

ここ最近忙しくて、あまりコードを書けなかったけれど、ようやくまたコーディングできる日々が始まった。よかったよかった。とりあえずCheckIOをやりながら、基礎的なことの復習。CheckIOは問題も面白く、ジャンルの違う問題があるので、面白い。Numpyとか使えないのが、ちょっと残念だけど。

Pythonistaへの道のりは遠いが、ちょっとずつでも継続してやっていこう。

エラーと調べ物の1日

今日はがっつりコードをいろいろ書いて勉強するぞーとおもったのに、本のコードがうごかなかったり、データがダウンロード出来なかったり、動いたと思ったら時間がすっごくかかったり。。。

まぁでも、とりあえず少しは進んだと思いたい。。。

今日やったことは、またここにアップしといた。後から何かの役に立つ事もあるだろう。Elastic Netのパラメータ選択もCVでやれる関数があるんだなというのは、勉強になった。いいなと思ったけど、やっぱり時間はかかった。でも今ひとつ、どういう時にElastic Net で、どういう時にはLassoがいいとかの判断が微妙だけど、データによりけりなんだろうな。

実践機械学習システムの本の7章の後半で使われているデータは、サポートページからもはっきりとダウンロード方法が分からず、8章も、それをつかった解析なので、この後をどうするか、考えるところ。問い合わせだけしてみるかな。

なんか、ちょっと疲れたけど、pandasとか復習しておくかな。あとjavaもちょこっとずつやっておくか。

はやくスラスラコーディング出来ますように。でもコツコツやってくしかないんだろうな。そんな事を言ってる間に一行でも書けってね、はい、がんばります。

Scikit-learnを使ってみたよ

この間は、実践機械学習の本をちょぴっとやって、続きをやる予定ではあるけれども、ちょっと横道にそれて、偶然見つけたScikit-learnの資料を、ちょいと写経してみるか、という事でやってみた。実践機械学習の本でも出てきていたけど、SVMやらRandom Forestなど、とりあえずさくっと試してみるには良かった。

基本的な使い方はすごくシンプルだし、Rと同じような雰囲気かなと思う。ただ、やっぱり資料がRと比べると圧倒的に少ないので、そこは大変だけど、まぁなんとかやっていこうと思う。

とりあえず、ただ実行しただけの結果は、ここにアップした。

実践機械学習システム7章

とりあえず、写経のごとく、実践機械学習システムの第7章をやってみた。本のコードそのままのもあれば、図などは調べて描いたりした。本のコードでは、いきなりElastic Net だったけど、リッジ回帰やLassoも使い方を調べて比較したいところ。sckit-learnはこの辺りが全部一つにまとまってるので、その辺は便利。

とりあえず7章の途中までをGithubにあげて、nbviewerで読みやすくしてみた。ここにリンクあり。