β

新浪微博传播路径图制作

Er... 9 阅读

画外音:这几天苦于一直在苦逼的赶项目进度,一直没有什么时间来好好整理一下手头的工作。趁例会前的空隙和测试的时间,整一篇文章来。

新浪微博,2012年之后,是越来越火了。当然,其他诸如腾讯微博也是如此,在这里仅以新浪微博做例。针对微博的营销,成为时下一种热门。现在也已经有了不少试水的应用,比方说卖方控制的带有很直观名字的微博,有规律和导向性的发布一些商品的信息。这样的行为属于广撒网类型,很多用户会将这些微博视为垃圾微博,效果很难说好。如何更有说服力的将这些微博传达到用户那里,是领域的研究重点。现在,有一种方向被称作为精准营销,在这方面有着较好的前景。

那么什么是精准营销?引自百度百科上的解释:精准营销(Precision marketing)就是在精准定位的基础上,依托现代信息技术手段建立个性化的顾客沟通服务体系,实现企业可度量的低成本扩张之路。这个解释里面最吸引眼球的一个短语是“低成本扩张之路”,简而言之,就是省钱。对于那些刚起步或者资本不是很雄厚的企业,像那种铺天盖地做广告的做法显然是不可取的。不但开销甚大,而且也有可能造成弄巧成拙的后果:宣传带来的知名度和实际生产力不成正比,对公司形象的损坏。这个时候,通过关键微博用户对微博的转发或者原创,利用广大用户的从众跟风心理,更大限度的使用户关注到微博内容,获得微博所传达的产品信息,以期达到推销的作用。

好,说了一堆背景知识,下面回到正题。我们的目标是对微博的传播路径做出分析,得出路径中的关键节点。对于这些关键节点,可以想办法让他们来转发或者代发我们的有目的性的微博。

说到传播路径,最直观的还是图。利用 gephi 工具,可以画出如下所示直观的图形。
gephi生成图片
对上面的图,稍作解释:点代表微博用户,边代表转发关系。在这里是无向图,并不能看出谁转发谁。

在这里,我们介绍两种方法,来生成类似上图的分析图。第一种,是使用桌面应用gephi;第二种,是使用一个开源的js库—— sigmajs 。这两种方法都需要我们将分析的路径关系作为输入,所以接下来我们来具体的讲如何来得到输入。

首先,需要引入两种类型的文件:dot文件和gexf文件。dot文件可以说是office家族的成员,至少用office是可以打开的;gexf文件,变相来说应该算是xml文件的一个子变种。这里,我们给出2种文件的简单形式。
dot文件

gexf文件

这里需要说明的是,使用桌面应用gephi,dot文件和gexf文件都可以;使用sigmajs的时候,介于知识的局限性,只考虑gexf文件。

接着,我们来考虑如何生成这些文件。仔细观察两个文件,可以发现,两者的核心都是edges。那么,从新浪微博的微博获取转发的关系便是我们需要关注的重点。在这里,我们需要对新浪微博的API进行调用。具体的怎么调用,就不详细叙述了,感兴趣的可以去 这里 进行了解。对API文档进行简单的浏览之后,就会很快的发现,我们这里主要调用的是statuses/repost_timeline接口(对于普通权限的用户是这样,对于高级权限用户的接口为statuses/timeline_batch)。其实就是简单的分析请求结果,这里返回的是json格式的数据。根据API文档里面的参数,整体后就可以得到转发关系。要想获得一条微博的全部转发信息,需要一个迭代的过程。这里,不给出具体的代码实现了。

获得了代表转发关系的边之后,就可以进行dot文件和gexf文件生成了。下面分别给出展示如何生成文件的代码,这里是用python实现的。

    
    def generate_dot(self, file_name, edges):
        OUT = file_name+'.dot'
        dot = ['"%s" -> "%s" [weibo_id=%s]' % ( edges[weibo_id]['reposted'].encode('gbk','ignore'),\
                edges[weibo_id]['poster'].encode('gbk','ignore'), weibo_id) \
                for weibo_id in edges.keys()]
        with open(OUT,'w') as f:
            f.write('strict digraph {\nnode [fontname="FangSong"]\n%s\n}' % (';\n'.join(dot),))
            print 'dot file export'
 
    def generate_gexf(self, file_name, __edges):
        OUT = file_name+'.gexf'
        nodes = []
        edges = []
        #i = 0
        for weibo_id in __edges.keys():
            if nodes.count(__edges[weibo_id]['reposted'].encode('gbk','ignore')) == 0:
                nodes.append(__edges[weibo_id]['reposted'].encode('gbk','ignore'))
            if nodes.count(__edges[weibo_id]['poster'].encode('gbk','ignore')) == 0:
                nodes.append(__edges[weibo_id]['poster'].encode('gbk','ignore'))
            edge = []
            edge.append(__edges[weibo_id]['reposted'].encode('gbk','ignore'))
            edge.append(__edges[weibo_id]['poster'].encode('gbk','ignore'))
            edges.append(edge)
            #edges.append('\n' % (i, \
            #        nodes.index(__edges[weibo_id]['reposted'].encode('gbk','ignore')), \
            #        nodes.index(__edges[weibo_id]['poster'].encode('gbk','ignore'))))
            #i = i + 1            
        with open(OUT,'w') as f:
            f.write('\n')
            f.write('\n')
            f.write('\n')
            #nodes
            f.write('\n' % len(nodes))
            for node in nodes:
                f.write('\n' % (nodes.index(node), node))
            f.write('\n')
            #edges
            f.write('\n' % len(edges))
            i = 0
            for edge in edges:
                f.write('\n' % \
                        (i, nodes.index(edge[0]), nodes.index(edge[1])))
                i = i + 1
            f.write('\n')
            f.write('\n')
            f.write('\n')
            print 'gexf file export'

看上面的代码,思路是很直接的:就是向一个文件中,写入特定格式的内容。在生成gexf文件的时候,可以给节点加上颜色和位置信息,具体的示例如下图:
gexf节点附属信息

现在到了传播路径图制作的最后一步,将文件中所包含的传播路径信息通过图像展示出来。使用gephi桌面应用的话,下面就是傻瓜式操作了:读取文件(dot文件和gexf文件都可以),勾选几个指标,然后图像就自动生成了。接下来,我们着重要介绍的是如何使用sigmajs来自动生成传播路径图。

sigmajs是一个第三方的开源js库,在作图方面有着很好的效果,基于html的canvas元素。在解析gexf文件的时候,还需要用到一个子js库——sigma.parseGexf.js。在页面中引入这两个js库之后,加上简单的一段javascraft代码,就可以在页面相应的canvas元素部分生成相应的传播路径图。具体怎么做,可以参考sigmajs官网上的 案例

经过上面的一番过程,就可以生成在文章开头出现的图像。当然,这样的图像还不是很直观。对于转发比较少的情况,我们需要的是一种更为清晰的图像。这里给出gephi桌面应用生成的一张结构清晰的图像(选择流程的时候选择“Yifan Hu”)。如果想使用sigmajs画出类似的图像,可能需要指定节点位置,这个问题还在研究中OrzZ。
Yifan Hu图

作者:Er...
Time is to be forgotten, and we are always familiar.
原文地址:新浪微博传播路径图制作, 感谢原作者分享。

发表评论