August 20, 2008

 

很多问题,归根到底是个图论的问题。比如最近在做的Customer Segmentation.

从会员的behavior 可以做出会员的 interests vector,通过计算i,j的similarity( i, j )得到similarity matrix 下面在处理下,细分成Group就解决这个问题了。

我在怎么画一个示意图来阐述我的方法的问题上遇到了麻烦,最后想大家隆重介绍:graphviz

主页设在http://www.graphviz.org,你可以在这里下载到最新的Windows版本。安装后你可以在dos下(任何目录中)调用它的命令行模式。
这里,我们使用dot语言。官方网站上有关于dot语言的详细的用户手册

Graph by WebDot

这么一个图就是用一段代码画出来的

最上面那个狂大的图就是我用graphviz画的,当然:手写代码效率是很低的
这么写也许会快很多:P

[code]
   fout<<"dot -O -Tgif\ngraph G{\nsize=\"59,1711\""<<endl;
   //atoi [color=green];

   for( i=0;i<59;i++)
    switch(user[i]){
   case 1: fout<<i+1<<" [color=green];"<<endl;break;
   case 2: fout<<i+1<<" [color=blue];"<<endl;break;
   case 3: fout<<i+1<<" [color=gray];"<<endl;break;
   case 4: fout<<i+1<<" [color=red];"<<endl;break;
   case 5: fout<<i+1<<" [color=orange];"<<endl;break;
   case 6: fout<<i+1<<" [color=brown];"<<endl;break;
   case 7: fout<<i+1<<" [color=hotpink];"<<endl;break;
   case 8: fout<<i+1<<" [color=yellow];"<<endl;break;};
   
   
 for( i=0;i<59;i++)
  for(j=i+1;j<59;j++)
   if(matrix[i][j]==1)fout<<i+1<<" -- "<<j+1<<";"<<endl;
  fout<<"}"<<endl;
[/code]

对于想要把图论的题目画出来的同志们可以试试这个。

另外一个更强大的工具叫UBIGRAPH,这个可以在C++ Python Java等主流语言里面无缝的对接,不过既然上面的已经够用了,以后再研究吧~

Tags: ,.