pythonでSBM研究4

pythonでSBM研究4をはてなブックマークに追加 pythonでSBM研究4をdel.icio.usに追加 Yahoo!ブックマークに登録 pythonでSBM研究4をGoogle Bookmarksに追加

pythonでSBM研究(というかクラスタリング研究)で画像出力してみました。
PILというライブラリを利用して出力していますが、要所要所つまずいたのでメモを残しておきます。

まず、トニモカクニモ画像出力ライブラリがないと、デンドログラムとか描けないので、PIL(PythonImagingLibrary)からアーカイブを引っ張って来てコンパイルしてみた。けど、truetype fontで文字を書こうとしたらなんかエラーが起きて_imagingft.soが無いとか言われた。調べてみると、たしかに

/Library/Python/2.5/site-packages/PIL

にいなかった。
ググってみたらMacの場合は、みんなMacPortsでインストールしている模様。というわけで、ワタシもインストールしなおした。

sudo port install py25-pil

_imagingft.soもちゃんとあったのでこれで文字が書けますね!

で、今度はうまくエンコードできなくて困った。これも色々と調べてみて、

def draw2d(data,labels,png='mds2d.png'):
font = ImageFont.truetype("HONYA-JI.ttf", 16, encoding='utf-8' )
img=Image.new('RGB',(2000,2000),(255,255,255))
draw=ImageDraw.Draw(img)
for i in range( len( data ) ):
x=(data[ i ][ 0 ] + 0.5 ) * 1000
y=(data[ i ][ 1 ] + 0.5 ) * 1000
draw.text( ( x, y ), unicode( labels[ i ], "utf-8" ), font = font, fill = ( 0, 0, 0 ) )
img.save( png,'PNG' )

上記の(2次元画像出力)コードで正しくエンコードされて文字が描けて且つ、画像になったので良しとする。

今日出力したのは、デンドログラムと2次元マッピング。
利用するデータは今回もlivedoorClipデータセットです。ただ、このデータセットには各URLに対するタイトルがついてなくて、URLだけじゃ出力された際にどんな風に分析がかかっているのか解りにくい(URLからはコンテンツが想像しづらいものが多い)。ので、とりあえず、URLに付けられたタグの嵩みが最大のものを出力してみました。
すると、gimpとかillustratorとかphotoshopとかが近い位置にクラスタリングされてて感動した。さらに、エロ、パンチラ、アダルト、エッチ、動画なんかも近い位置にクラスタリングされていて泣いて喜んだ。
で、2次元に出力したやつはどうも上手くいってないようで、かなりばらけてしまった。演算の桁のレンジにかなりの幅があって、いろいろと修正を加えたりしたからだろうか。どちらかというとこの2次元マッピングの方に期待していたんだけど。

デンドログラム

clusters.png

2次元マッピング

mds2d.png

コメントをどうぞ