DISTRICT 37

なにか

RMeCabFreqをPythonでやりたい

MeCabはRから入ったので、pythonでも同じように処理をしたいなと。ということでタイトルの通り

RMeCabFreqって何

pythonMeCabを扱っていて、こういうオブジェクトが欲しかった。

Term Info1 Info2 Freq
アメリカ 名詞 固有名詞 36
皆さん 名詞 一般 19
名詞 一般 18
国民 名詞 一般 12
名詞 一般 10

RのRMeCabというライブラリなら一撃でできるけど、pythonならば1から作らないとということになった。せっかくならばpythonだしpandas形式になってたらいいなということでできたのがコチラとなるが、なんか遅い。どこに原因があるのかなぁ、、、

トランプ大統領演説を分析する

で、サンプルとしてやったのが、トランプ大統領の就任演説の日本語版から。

www.huffingtonpost.jp

結果はpandasなので、こんな感じで抜き出せる。

mdf[(mdf.Info1 == '名詞') & (mdf.Info2.isin(['一般','固有名詞'])) & (mdf.Freq >= 10)].sort_values(by=['Freq'], ascending=False)

この結果が、最初に出した表で、最頻出した名詞はやはりアメリカだったという結果が得られる。大統領就任演説だけあって、自分の国と国民について語るというのは当然といえば当然。

5月が一番いい6つの理由

8月が一番だと思っていたけど好きなのは5月だな。

  • 休みが多い
  • 暑い
  • 涼しい
  • 虫がいない
  • やる気に溢れてる
  • ボーナス直前

休みが多い

言わずと知れたGWから始まるのが5月。4月の末から繋げれば、長い休みを取れるというのがサイコー。ガス欠を起こすこともあるが、なんだかんだで大丈夫。

暑い

ついこの間までコートを着ていたのに、5月に入った途端に半袖になれる。かといって汗でビショビショになるほどではなく、ちょうどいい暑さだ。 もっといえば半ズボンにもなれる。着るものは軽い方がいい。

涼しい

とはいえ、夕方から夜にかけては涼しい。でもコートが必要かといえばいらない涼しさ。半袖でも我慢はできるくらい。コートさえあればいい冬と、半袖半ズボンでも死なない夏に比べて、装備に悩む難しい季節ではある。

虫がいない

全くいない訳ではないが、5月は不快な虫が少ない。蚊とか蚊とか、あとは蚊とか。もちろんGの野郎も少ない。この時期に動き始めるのはアリとか、ダンゴムシとかの微笑ましい虫で、羽虫はもう少し後で顔を出してくる。

やる気に溢れてる

4月から新しい生活が始まる人は多い。現状維持であっても4月から本気出すという気持ちになる事も多いかと。GWでその気力を削がれる事も往々にしてあるが、8月の休み明けに比べて、5月のリハビリは軽い。それはやる気に溢れてるからだ。

ボーナス直前

6月の大きなイベントといえば、そう、ボーナスだ。GWに散財してしまっても回復イベントがすぐに来ると言うのも5月ならではだ。

という事で5月が好き

matplotlibで2軸グラフを作る

一つのグラフに複数のグラフを描くのと、評価の違う軸を合わせて描く

twinx()

これを使うだけでX軸を共有できる

twiny()

twinxがあるってことはtwinyもある

y軸が共有できたのがわかる

RapidMinerを試す

PythonとかRとかで頑張ってきたのに、こんなに簡単にできるなんて、今から始める人が羨ましい

インストール

rapidminer.com

ここからDownloadへ進んで、対象のOSにあったファイルをダウンロードする。今のところWin(32、64)、MacLinuxが対応しているので迷う事は無い。Linuxの場合はJava8が必要なので、インストールしていない場合は別途インストールする必要がある。

Installing RapidMiner Studio - RapidMiner Documentation

インストール時にメールアドレスとか電話番号とか入れてユーザ登録的な事が必要で、使用したメールアドレス宛てに承認メールが届き、それから使用可能になる。

チュートリアル

起動すると、チュートリアルを始める事ができる親切設計。やりたいことがすでにあって、ガシガシやりたい人には邪魔にも思えるが、それとなく使い方を覚える事ができるのでこれから始めるのがおすすめ。

基本的な使い方としてはデータの準備 → 前処理 → 分析手法の選択 → 結果の確認といつもやっていることを線でつないで、分析を進めていくことになる。結果は自動的にグラフが作成されたりと至れり尽くせりなことが使って数分でわかる。MicrosoftAzureとかのクラウド分析サービスをすでに使っている方にはおなじみのあれだ。

これが f:id:dragstarclassic:20170227113237p:plain

こうなるのじゃ f:id:dragstarclassic:20170227113013p:plain

あとはデータの自動視覚化とか f:id:dragstarclassic:20170227113100p:plain

サンプル

サンプルデータとしてあらかじめ「俺たちのiris」や「タイタニック」といくつかそろっているので、今までやってきた分析手法をこれで試してみるのもいい。さらに分析プロセス自体のサンプルもいくつかそろっているのでそれを眺めて、RapidMinerではこうやるのかと眺めてみるのも楽しい。

f:id:dragstarclassic:20170227101636p:plain

学習工程が短縮?

今までRやPythonで頑張って覚えてきたコマンドやスクリプトはあらかたそろっている。線をつなぐだけでそれが実現できるのだからまさにRapid。ただし、プログラミングならではの自由な処理はできないので、それは適材適所という事で使い分ける事が必要になるのかと。

f:id:dragstarclassic:20170227101242p:plain

と、ソフトを眺めていたらこんなOperatorもあったので、ある程度はプログラムを使って処理の補助ができるのかもしれない。まぁ無理してプログラムをねじ込む必要もないのですが。

とはいえ色々な分析手法があったとして、その意味を知るにはやはり何かしらの学習が必要なわけで、ノー勉強で分析ができるようになるわけではない。Rapidに分析を進めるツールとしてこれはとても秀逸だといえるのでしばらく使っていこうかと思った。

プログラミングを学ぶ意味

子供にプログラミングを習わせる親が増えているらしい。実際にプログラミング教室なんかがいくつかあって驚いた。「プログラミングを習わせる意味がどうも分からないんだよね」という人がいたのでちょっと考えをまとめてみた。

プログラミングは論理的に考える実践になる

プログラミングは論理的に考える技術を実践するということに尽きると思う。

ここにいくらかのおはじきがあり、その個数を数えてください

という問題があったとして、どのように解くのがいいのだろうか?解き方としては何通りもあると思う

回答例1:一つ一つ数える

おはじきの数が何個であろうと一つ一つ数えれば正解にたどり着く

def count(n):
  count = 0
  for i in n:
    count += 1
  print("おはじきは%d個" % count)

pythonでサンプルコードを書いてみるとこんな感じになるかと。nはリストを想定しているので、本当ならlen(n)で一撃だけど、とりあえず実直に数を数えるということで。

回答例2:2個ずつ取って、取れた回数×2とあまりの数を足す

一つ一つ数えるパターンの発展。おはじきが偶数ならとれた回数×2で答えが出て、奇数なら余りは1出るはずなのでそれを足したら全部数えられる。2じゃなくても3でも4でも5でもいい。実際に一目で数えられないくらいのモノを数えるときに「にーしーろーやーとー」と2こずつ数えてる人も多いかと。つまりそれです。

回答例3:5%くらいを取って母数を推測する

それが統計学よ!秋山仁の声が聞こえてきそうだが、これも一つの回答。おはじきの個数が多いほど力を発揮する。

この回答例があってるかあっていないかは別として、問題解決法を形にするっていうのがサンプルコードにしたようにプログラミングになるのかと思うんですよね。しかもその論理に問題があればエラーとして終了するし、問題が無ければ答え合わせができる。

論理的思考の技術の本がずらずらと本屋なり図書館なりに並んでいて、いろいろとノウハウがあると思うけどそれを実践で試せるっていうのがプログラミングのいいところかと。こういった部分のトレーニングは数学(算数)の問題集を解くのでもいいとは思うけど、パソコンでゲームのようにやれば興味が湧くのだろうというのが根幹にあるのだと思いますね。

ちなみに、効率のいい方法というのがいくつかあって、それはアルゴリズムと呼ばれている。

学校でプログラミングが必修に?

小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ):文部科学省

リンク先の中でも論理的思考が云々という話が当然出ています。人材育成とかも重要かとは思いますが、このポイントを見過ごしている方が以外にいないのかなと思っています。このプログラミング教室に通わせる親が増えているという状況はぜひこのポイントを汲み取っていただきたいなと思います。

教育とプログラミング

こんなの大人になっても使わねーよと呟くことはどの時代のどの世代の子供にもあると思う。プログラミングが必修化したらきっと全国の小学生に言われると思っています。確かにプログラムに関して言えば結局は何を作るかのほうが大切だと思うんですよね。プログラムはただの道具というか部品なので。では何かを作るために、どのようにアイデアを出すか?それには結局基礎となる「勉強」が必要になるんですよね。「算数」だけじゃなく「国語」も必要だし「社会」も必要。しかもそれは大人にならないと気付かなったりする、いわゆる教養ってやつですね。

lootone.exblog.jp

たけしもこのように言っているそうです。

ということで個人的な感想を言えば、プログラミング教室ってのにあまり必要性を感じないというのが正直なところですね。もちろん自身がプログラマーなので、自分で教えられるよという事もあります。論理的思考という面ではプログラミングを通して鍛えることもないんではないかなと思っています。数学の問題集でもいいし、ディベートでもいいし、なんならゲームだっていいし、教材はいくらでもあるのかと。

ですがいろいろなことに興味を持たせるという事に対しては否定はしませんし、必要だと思っています。それがプログラムだったら、親としてというよりもプログラマーとしてうれしい事だというだけですね。

なんだか取りまとめのない論理的思考が抜けてる文章を書いてしまったなと反省