2009-10-15[n年前へ]
■「身長・体重・スリーサイズ」で「今昔アイドル」をクラスタリングしてみよう
最近、色々挑戦してみた結果、(無料の)Mathematica Playerと(.NET実装の)Iron Rubyを使ってさまざまなことができるようになりました。今回は「体重を公表しているアイドルのスリーサイズ」のデータを使い、「身長(cm)、体重(kg)、B(cm)、W(cm)、H(cm)」を特徴量として、「アイドル」をクラスタリングしてみることにしました。使う関数は、MathematicaのFindClustersです。具体的なコードを、簡単のために(Player版ではない)Mathematicaで書くと、
data = Flatten[ Import["c:\\actress.xls"], 1]; data2 = Drop[data, None, {1}]; FindClusters[data2 -> data, 10]という具合です。これで、「アイドル」が特徴が似ている10グループに分類されます。
ちなみに、結果は、こんな感じです。カッコ{}で囲まれているのが、似ているグループ=クラスタです。
{{{川崎カイヤ,藤原紀香,斎藤陽子,かたせ梨乃,児島明子,山田誉子,}{松島菜々子,高見恭 子,大沢逸美,浅野ゆう子,波乃ひろみ,辺見えみり,青田典子,}{神田うの,松下由樹,吹石一 恵,大石恵,遠藤久美子,内田友紀,田中美里,}{一色紗英,飯島直子,瀬戸朝香,井上晴美,渡 辺満里奈,飯星景子,吉本多香美,高岡早紀,深田恭子,}{水野美紀,伊藤絹子,生田智子,西田 ひかる,松原千明,樹まり子,}{細川ふみえ,駒木なおみ,岩崎ひろみ,加山なつ子,梨花,}{石 田ゆり子,雛形あきこ,三井ゆり,東ちずる,水野真紀,ビビアンスー,}{桜庭あつこ,中條か な子,舞坂ゆい,斎藤由貴,飯島愛,嘉門洋子,有賀美穂,アグネス・ラム,武田久美子,工藤ひ とみ,}{石田ひかり,菅野美穂,井森美幸,沢口靖子,石田ひかり,古手川裕子,河合奈保子,マ ルシア,原日出子,小泉今日子,松本明子,}{桂木真理子,安西ひろこ,奥村チヨ,岩崎良美,柏 原芳恵,石田えり,五月みどり,吉沢京子,島崎和歌子,榊原郁恵,山田まりあ,}}}もちろん、このクラスタリングは、「身長(cm)、体重(kg)、B(cm)、W(cm)、H(cm)」で行ったものですから、体型でのグループ分けにすぎません。けれど、こうして眺めてみると、なんだか特徴が出てくるような気がするようにも思えます。
けれど、そんな体型というものも、アイドルにとってはきっと重要なファクターであるはずです。また同時に、このデータには、さまざまな時代のアイドルが混じっています。しかし、だからこそ、「あぁ、なるほど、この(今の)アイドルとかつてのあのアイドルは立ち位置が似ているんだな」と、「身長(cm)、体重(kg)、B(cm)、W(cm)、H(cm)」だけからも想像できたりするかもしれません。
さて、あなたの好きな「アイドル・クラスタ」は一体どのクラスタでしょうか? もちろん、まだまだ俳優編・声優編などなど、色々試してみようと思います。
2009-10-16[n年前へ]
■Mathematica Player用.nbpファイルに埋め込まれた画像データのナゾ
Wolfram社の数式処理プログラムで作られたファイルをWolfram社のサーバに送信すると、(無料で使える)MathematicaMathematica Playerを使って誰でもインタラクティブにグラフなどを処理させて眺めることができます。通常のMathematicaファイルは.nbという拡張子を持つファイルですが、Wolfram社のサーバで処理された「誰でもインタラクティブに眺めることができるファイル」は、.nbpという拡張子を持つ形式になっています。
この「nbpという拡張子を持つ形式のファイル」の中身が何をさせるものなのかかを調べてみたときに、不思議なことに気付きました。一見、元のファイルと何の関係もなく、特に表示されているわけでもない、不思議な圧縮データが埋め込まれているのです。
そこで、ためしに、その圧縮データの中身を展開し、画像として眺めてみました。・・・すると、右上の赤い部分のような画像になったのです(黒いテキストがテキスト文として圧縮されたデータです)。
おやおや?、この画像は、何かアルファベットのように見えます。そこで、ひっくり返してみると、右のようになります。そう、「Wolfram Mathematica Player」という画像データが圧縮されて、.nbp形式のファイルには埋め込まれているのです。一見、特に何に使われるわけでもない「Wolfram Mathematica Player」という文字が埋め込まれているのです。
さて、.nbpファイルに埋め込まれているこの圧縮画像データは、一体何のために使われているのでしょうか? 何らかの著作権対策のためだろうか(昔のファミコンのカートリッジの海賊版対策のような)、などと想像してみたのですが、本当のところは何のためにこのような作りになっているのでしょうか…?
2009-10-22[n年前へ]
■「Windows 7の数式入力パネル」で手書き数式処理プログラムを作る…!?
Windows 7を試用してみよう、と思います。理由は、「Windows 7ソフトウェアレビュー - アクセサリの数式入力パネルで楽々数式入力編」で遊んでみたいからです。
Windows 7で新たに追加されたツールに数式入力パネルがある。その名前の通り、ポインティングデバイスで、手書きで入力した数式を、自動認識してくれるというツールである。
以前、数式処理プログラムMathematicaの世界戦略統括責任者であり、開発者Stephen Wolframの弟でもあるコンラッド・ウルフラムに、「手書き(Tablet)Mathematicaをなぜ出さないのか?」と尋ねたことがあります。
その時は、「そういう試作品はすでに作った。しかし、未だ市場ニーズがない」というような答えを聞いたように思います。それは、決して「Wolfram AlphaのiPhoneアプリ」のような今一つ感にも・割高感にも溢れるものでなかったのでは?と思っています。
「欲しいものがなければ、作ろう」というわけで、Windows 7の数式入力パネルを試してみるつもりです。もちろん、Mathematica PlayerのMathematica カーネルと組み合わせてみよう、というわけです。AutoHotoLinkやAtokとの組み合わせにチャレンジした後は、当然「手書き数式処理をしてみよう」というのが、当然予期されるだろう自然な流れ、ですよね。
2009-11-05[n年前へ]
■Mathematica Player+IronPython関連記事
Mathematica Player+IronPython関連記事が充実してきたBoxHeadRoom 蝸牛の一歩 から。
- 「無料Mathematica Player用のインタラクティブシェルをIronPythonで書いてみた」
- 「【Py】東京の年平均気温 60年分をプロットしてみた」
- 「無料のMathematicaPlayerを、IronPythonを使ってWeb APIに」
- 「無料のMathematica Playerで画像を出力してみた(IronPythonで)」
特に、「無料のMathematica Playerで画像を出力してみた(IronPythonで)」のアプローチはとても参考になったので、IronRubyで書き直してみようと思う。また、Pythonも使えるようになってみたいものだ。
■無料のMathematica Player + IronRuby でグラフィック出力
無料のWolfram Mathematica Playerに付属のMathematicaカーネルではグラフィック出力ができず、グラフ描画や各種グラフィック機能を有効利用するための方法を試行錯誤していました。そんな中、「Mathematica Player+IronPython関連記事」中の、無料のMathematica Playerで画像を出力してみた(IronPythonで)」で実に技術を駆使した方法で、その問題が解決されていました。
基本的な計算は、Mathematica Playerに付属するMathematicaカーネルにやらせ、その結果を画像にするRasterize部分を、Mathematica Playerにやらせる、そしてその結果を.NET/LINKで「操作スクリプト」に送りつける(スクリプト側はデータを受け取る)という、具合です。こういったスクリプトをさらりと書けるようになりたいものです…。
さて、というわけで、IronRubyで同様のことをしてみました。まずは、クラスなどは作らず、ただ単に「(ネットワークからの)データ取得→計算・画像作成→Windows上でフォーム上に描画」ということを順を追って行うスクリプトを書いてみました。それが、下になります。
# c.f. http://boxheadroom.com/2009/10/30/mathematica_ipy_image # c.f. http://d.hatena.ne.jp/arikui/20070918/1190050541 com='ExampleData[{"Geometry3D","Beethoven"}] ' width=1000 include System require 'System.Windows.Forms' require 'System.Drawing' require 'mscorlib' require 'Wolfram.NETLink' include Wolfram::NETLink kernelLink=MathLinkFactory.CreateKernelLink() kernelLink.WaitAndDiscardAnswer() kernelLink.EvaluateToInputForm( '$ct={{0,0,1},{0,1,0},{1,0,0}};',0) tmpl='$im=Rasterize['+com+ ', ImageSize->'+width.to_s+',Background->Black];' kernelLink.EvaluateToInputForm(tmpl,0) k=kernelLink.EvaluateToInputForm( '$im=ImageData[$im,"Byte"];',0) k=kernelLink.EvaluateToInputForm( '$im2=$ct.#&[#]&/@#&/@$im;',0) kernelLink.PutFunction( "EvaluatePacket",1) kernelLink.PutSymbol("$im2") kernelLink.EndPacket() kernelLink.WaitForAnswer() ret=kernelLink.GetObject() height=ret.length/width/3 form=System::Windows::Forms::Form.new() form.width = width form.height = height graph=System::Windows::Forms::PictureBox.new() graph.width=width graph.height=height graph.top=0 graph.left=0 graph.image=System::Drawing::Bitmap.new( width, height) height.times{|y| width.times{|x| color=System::Drawing::Color.FromArgb( 255,ret[y,x,0], ret[y,x,1], ret[y,x,2]) graph.image.SetPixel(x, y, color) } } graph.Refresh form.controls.add(graph) form.ShowDialog()このスクリプトを流すと、まずMathKernel.exeのパス(場所)を尋ねるダイアログが現れ、次にMathematicaPlayer.exeのパスを尋ねるダイアログが現われます。そして、Mathematica Playerが起動した後に、下の画像のような「ルートヴィヒ・ヴァン・ベートーヴェンの三次元像」が作成され、Windows上にダイアログとして現れます。
…数式処理ソフトウェアで眺めるベートーベンも(そのデータがネットワーク上から取得できることも合わせて)面白いですが、ここまで色々できてしまうということが、とても楽しいものです。つまりは、結果よりも、過程を楽しんでいるような感じです。
ところで、Pythonのコードを読むのは初めてだったのですが、何だか知らない言語を読むというのは「違った視点」を感じるような気がして、新鮮なものですね。