ざっくりいうと、なんかしらの頻度を文字の大きさで表現する方法で、だいたいWebページのキーワードの出現頻度なんかを表現する方法ですね。
SAS Visual Analytics だと簡単にできますみたいな情報をよく聞くんですが、そんなもん持ってないんで、SAS Baseの機能でできないかなと思って調べると面白いPaperがありました。
http://analytics.ncsu.edu/sesug/2008/SIB-096.pdf
おおっ、SAS忘備録で取り上げらているRWI (http://sas-boubi.blogspot.jp/2014/10/rwi1.html)を使ってるのか!RWIやってみたいと思っていたのでちょうどいいや!
データは、本来、テキストマイニング的なデータをよく使うんですが、頻度であればなんでも表現できるはずなので
data Q1;
input brand $ count;
cards;
Apple 754
Sharp 53
Fujitsu 23
DoCoMo 76
Samsung 54
Sony 45
HTC 22
Google 20
SonyEricsson 23
LG 13
Microsoft 12
Kyocera 9
Motorola 6
KDDI 5
Lenovo 3
NEC 3
Panasonic 4
Asus 2
Acer 2
Oppo 2
BlackBerry 1
Huawei 1
Pantech 1
;
run;
と、これは1年間で僕のブログに携帯端末でアクセスしたユーザーが、どこのブランドの端末を使っているかの人数データです。
あ、でも明らかにApple多すぎて、これだけでかい字になっちゃいそうだなぁ。
もう面倒なので、Apple製品以外の携帯端末アクセスユーザーという趣旨で作ります!
これを論文に従って
proc freq data=Q1 noprint;
where brand^='Apple';
tables brand / out=OUT_1;
weight count;
run;
こうして
%let lowPt=10;
%let highPt=40;
フォントの大きさの範囲を最低10、最大40に設定して
proc sql noprint;
create table OUT_2 as
select *
,(percent-min(percent))
/(max(percent)-min(percent))
*(&highPt-&lowPt)
+&lowPt as size
from OUT_1;
quit;
出現頻度を文字の大きさ(size)に反映して
後は
ods escapechar='^';
ods pdf file='/folders/myfolders/wordcloud.pdf';
options orientation=landscape;
data _null_;
length render $32760;
do until (last_tag);
set OUT_2 end=last_tag;
link = catt ( " ^S={URL='#" , brand , "' font_size=" , size , 'pt linkcolor=RED}' , brand, '^S={}' );
render = catt (render, link);
end;
declare odsout cloud();
cloud.layout_absolute();
cloud.region(width:"6in");
cloud.table_start();
cloud.row_start();
cloud.format_cell(text:render);
cloud.row_end();
cloud.table_end();
cloud.layout_end();
run;
ods pdf close;
(すみません、コードについて、詳細まで理解できていないので解説は論文をみてください)
なんかよくわかんないWarningでたりするけど、無視して、
結果は
おおっ!なんかそれっぽい!
満足。
0 件のコメント:
コメントを投稿