Categories
网站建设

初识Markdown语法

听着Yihui兄及COS的一群骨干们说了好久的MD(markdown)和knitr,各种心里痒痒啊。无奈最近的一段时间总觉得学习新东西的成本太高,就懒得开始动手。今天忍不住去GitHub上看了一眼,发觉自己已然没有任何理由再不快点把那个小册子弄完了,于是乎,赶紧补课。

补课的第一项工作就是升级各类软件,包括R、RStudio和Git。悄悄的说一句,现在的Git版本貌似比以前的容易用多了,我是对Github的使用没有任何印象了,重新跟着help鼓捣了一遍发现还是不怎么困难的。在一不小心删掉所有的文件之后,成功的fetch并push了所有的文件(还好有下载zip备份)。

然后下一站就是开始研究Markdown语法……好吧,这东西真的比HTML还简单啊(一直认为HTML已经是超级简洁了)。随便从网路上搜了一个语法说明(http://markdown.tw/),然后就可以开始玩转这东西了——真的很符合日常排版习惯啊!引用这个网页上的一句话:

HTML 是一種發佈的格式,Markdown 是一種編寫的格式。

习惯了Wordpress编辑器HTML模式的人,大概会对Markdown瞬间上手吧。完全米有难度……而且,符合习惯代码洁癖的人……

好吧,我怎么开始研究起这些东西来了?不是说好不玩这些geek的东西么?还是各种忍不住啊……下一个牺牲的应该不会是落园的wordpress架构吧,暂时我还不想动它,搬日志什么的很麻烦的……

Categories
互联网产业观察 经济、IT观察与思考

[RAAT]第一话:微博的数据该怎么玩呢?

引言(即废话):每当要准备presentation的时候,就会开始想一些问题。去年写的是【社会实验的特殊性】,然后有一系列的文字和最终的slides。现在,想多少从自己这大半年的工作经历出发,写一系列文章,就叫做 R as an analytical tool吧,简称RAAT。第一话,从微博入手好了;第二话,将由Joke童鞋过年时候问的一个问题引出;第三话,会是更偏向流程和实践的东西。这些我会一点点写,也可能有所改变,看到时候具体的想法了。

新浪微博也火了这么久了,但是对于吾等数据源控来说,这等数据简直不能被暴殄天物啊。怎么用来分析为好呢?

links类数据

微博有两大类links:

  • 粉丝关系
  • 评论与转发关系

然后呢然后呢?

首先很多人感兴趣的是信息传递吧?那么决定信息传递的就是,第一呢,每个用户的信息源(主要来自于他关注的其他微博用户);第二呢,他关注的人的发布及转发行为。用粉丝关系来计算影响力(influential rank)自然是没有问题,但是多少有点损失的感觉——我们总关心一个人在接受信息之后的response是不是?所以,一个简单可行的思路是,这里不妨用其转发行为来加权,判断每个他关注的用户对于他的影响程度的不同~如是,则每个有向的link上就附加了一个权重,成为了一个加权的有向图。

嗯,这样一个基本的网络模型就构建好了。然后呢?链路预测?等等,我们关注并分析微博数据是为了什么呢?到底构建什么样的指标是合理的呢?

如果你想扩大自己的影响力...

好吧,在下作为一个老字号(落园居然被我坚持写到第6个年头了,这是一种什么精神啊~)blogger,自然可能希望多少扩大一下影响力。落园是落园,blog对我来说有它自己特殊的意义(比如发泄,呃),但是我的新浪微博就沦落为一个落园的notifier了(这个特别的理由就不在这里公开说了,私底下聊)。如是,那么应该怎么办呢?

正常的话,经营一个微博,怎么判断自己是不是越来越受欢迎了呢?显然,简简单单一个“粉丝数”还是不够的,用“转发数”为每个粉丝关系加权也还是不够的,我还得关注一下我的“粉丝”们都是一些什么样的人。比如,他们有几千+的粉丝,还会转发我的东西,那么我的影响力就~哈哈。简单的说,一个衡量指标可以是:我的微博可能会被多少人看到呢?那么,我只要算一下我的粉丝和他们转发的可能性,然后再算他们的粉丝转发他们微博的可能性,以此类推,我就通过了“粉丝”这类link成功的影响到了更多的人。从这个角度而言,这比直接的“粉丝数”或者“转发次数”更能衡量一个微博的影响力。

当然,类似的指标还可以构建很多,比如对response进行加权。看具体目的了。我的微博算个特例,因为它有一个特殊性:不转发任何其他微博(机器人自然要符合自己的身份嘛),所以我关注的指标相对单一——我是比较关注“信息能传递到的人”,而不是特别关心他们的response程度(话说最近关评论了,直接刺激大家转发啊,故需要另当别论了)。如果是商业经营一个微博,那么在内容的选择上或许就要更加迎合各自群体的口味,具体的是否可以用Bayesian规则来算算被转发概率呢(不断的update概率)?

如果你是想提供一个互动渠道……

微博被很多企业作为新兴的接触客户的渠道(沟通成本低嘛),所以很多企业可能希望建立一个帐号来更多的获取用户的信息。比如会员制的商家,可以通过找寻自己会员的微博号,来得知他们最近的偏好,然后推荐相应的产品。电商也可以进一步的做一些销售活动,比如我的京东帐号和微博帐号绑定之后,是不是就可以直接留言给京东下单了呢?就像我打个电话似的那么方便。要是他搞什么团购之类的,我也可以直接在微博上买而不是跳转到京东复杂的页面上去,那该多好啊。

对于这样的目的,首要的任务就是找寻自己的用户群,然后建立他们微博帐号和会员帐号之间的关联。除了直接的搜索关键词之外,初期还可以利用社交网络的力量,比如洲际和喜达屋集团都在做一些转发抽奖的活动,让已经关注他们的微博用户来扩散到他们的朋友(所谓物以类聚嘛,自然更有可能也是酒店常客),这样一来就已经实现了用户的识别。然后,怎么引诱这群会员是这些商家的长项,各种美图诱惑之下,让人经常在屋子里面各种坐不住(比如我...)。如果这些用户发一些信息,比如“下周飞北京”,那么这些商家大可以直接找到这些用户施以小惠然后成功的从对手那里抢的客户(先发制人啊)……反正至少我认识的玩酒店常客计划的人,都没有只专心的玩一家的。

跟R啥关系?

说了这么多,我们有了一些基本的建模思路。比如希望借助微博扩大影响力,那么最直接的办法:去找粉丝多的微博来转发自己的内容。很多微博都有一个不太公开的转发价格,如果你相信市场是无摩擦的、处于均衡的,自然可以认为价格反映了其影响范围的大小。但是,首先市场就不是一个静态的,难免在动态潮流的波动下偏离均衡;再说怎么可能无摩擦呢,信息不对称总是到处存在的。因此,为了实现现有资金(或其他资源)的集约化投入,往往需要做到的就是“找到对目标群体影响力最大的微博”。

还是用那句俗话,“物以类聚,人以群分”,很多大众微博的粉丝关系并不是从天而降的。这些微博发布的内容往往偏重某一个侧面,如科学松鼠会往往会发布科普类知识,主动follow松鼠会的粉丝可能也就有着更高的教育背景和辨知能力。换言之,不同微博的粉丝往往有着不同的群体背景。为了识别这些形形色色的圈子,我们可以先利用微博的粉丝关系,建立起来一个网络图(更可利用转发情况来建立加权的有向网络)。这在R中可以利用SNA等package完成,或者Gephi之类的更专一的network analysis software。然后在此基础上,分析若干帐户发布的微博关键词(会用到一些text mining技术,其R中的实现可以参见思喆大哥的这篇指导:http://www.bjt.name/2012/03/text-mining-in-r/),然后找到一个或者若干个符合目标群体特征的微博帐户,在此基础上按照links顺藤摸瓜、获取更多相关的帐户。一切的影响力之类都可归结于一个数学上的distance的measure问题(think about real analysis...),而加权网络中计算这些并不困难(也可以加入随机的扰动项进行多次模拟得出结果)。最后,自然可以计算哪些微博帐号的转发会对某些目标群体产生极大的影响——不仅仅是定量计算,更可以进一步归结于一个有约束的最优化问题。一旦一个问题成为数学问题,在R中无论是模拟还是求解都不是难事。最后结论会告知,哪些微博是应该去争取转发的(无论是通过金钱还是内容本身的意义去说服)。

类似的思路,能做的事情还有很多。譬如,哪怕是作为一个个体用户,我只关心某些事情发展的潮流(比如那些会影响股市的情绪),利用R也可以在浩瀚的微博信息中更准确的找出我应该关注的信息源(可能不是全部,或者出于实时性要求无法做到全量检测),即排除噪音,然后这些信息源所提供的信息便有可能给我一些方向上的指导,而不是盲从大众媒体的言论。

利用微博作为新兴交互渠道的办法就更多了,背后依赖的数据分析知识也会相应有所调整。R作为一个开源、免费的工具,其已经提供的众多packages可以迅速的帮分析人员实现相应的想法,而不是把大量的时间用于无休止的编程以开发相应工具。这样,R便可以在一个想法探索阶段找到相应的数据支撑和信息。有了想法、去实现之后,很多时候还需要评估效果(这里可以参见去年写的关于社会实验的东西:演讲幻灯片),这方面简单的计量工具更是可以在R中迅速实现、并可以轻易实现可重复的评估和报告(简单的分析模型和结果重复可以利用已有的脚本,偏正式的报告可以借助当年的Sweave和进化版如knitr)。

总而言之,我一直觉得数据分析考察的是分析人员本身的统计知识、业务知识和具体学科知识的积累,以及一些对于数据的敏锐直觉,而不是编程能力。若有想法便有其他人可以帮忙实现自然好,但是有时候一味的借助他人往往存在着时滞,一闪而过的很多想法便成了过眼烟云。不是我不提倡团队合作,只是找到这么一个完美团队的成本实在是太高,更多的时候还是不得不自己做很多事情。团队的合作程度在现实中往往会有所降低,分工模式也会更加的偏向项目执行流程(比如分析->成熟模型->自动化系统),而不是在分析阶段就完全的实现了各展所长(那样对每个成员的要求可能都太高了~)。在效率和效果兼顾的现实情况中,R的贡献自然轻易的凸显。我想这也是这两年R越来越热的趋势背后的推动原因吧。Labor division problem with constraints 🙂 分工最优化的必然结果。

------remaining challenges ------
当然,有一个回避不了的问题就是大数据量……R现在面对大数据依旧有些吃力,而network的数据往往又是一个N*N维的(N为个体数量),更加大了对于空间计算量的需求。这方面,解决思路一方面是把线性的计算分块化、分批跑;对于非线性的计算,更多的则可能是先抽取一个小样本,然后确定一个或几个模型,最后利用其它高性能计算工具来实现最终在整个大数据集上面的运行。

Categories
事儿关经济 互联网产业观察

大数据的潮流?

一边是流浪的心,一边也是在思考一些现实中的问题。还是感谢昨天那位朋友耐心的跟我扯了一下午,说到了一个很有意思的话题,“我们为什么需要海量数据”?或者说, why and how does big data make a difference?

当时说的统计/计量分析的应用很简单,无非是做一些销量、价格弹性和资源投放的预测与优化罢了,典型的咨询业务。然后我就好奇的问了一句数据源,无非是nielsen或者iresearch的市场调查数据之类的,或者厂商自己的一些销量和价格数据。这些数据往往被aggregate到一定的程度,所以一般都是long panel(T>N),以城市为单位之类的。

这样的数据量,肯定没法跟互联网或者电商的individual records相比。百万或许都是小数目。当然咯,我们多少也会把这些原始数据做一个aggregate,比如以每人每日为单位(当然单位的选择取决于具体项目的关注点),但是大多数还是wide panel,N>>T。这两种panel data的(计量)模型显然就不一样了。一个会更多的沿袭time series的分析路子,什么auto-regression、unit root之类的;另外一个要沿袭的更多是cross-section的方法,关注大量个体的特性。

对计量的一个争议就是 ATE (average treatment effect),尤其是做data mining的那些人。明明individuals之间千差万别,计量怎么可以这么简单的取个平均呢?不过一个辩护就是,关注的问题太不同了!data mining很多时候关注的是针对每个个体选择适当的信息传递,而计量模型背后往往跟随的是一个统一的strategy or policy making。毕竟政策不可能太细化到每个人身上,针对这一点我现在越来越认同某个计量学家对于consistency的评价了:

(大意)我喜欢计量经济学,正是因为他对于政策制定的强力支撑。

况且,还有quantile regression可以做一个完整的系数分布估计呢!加之各种bayesian方法的引入……计量变得越来越宽容和好玩了。

最近思喆大哥发了一句感慨

要会技术(统计、机器学习、可视化、最优化),要懂市场(营销,产品,客户行为,渠道),要懂沟通(同事协同,上级汇报,对外呈现),工具要熟练(SQL、Excel、SAS、ppt),公司战略还要懂点,没准还要带团队,要懂管理……。OMG,我在说什么,不是MBA,是数据挖掘专家

可见现在一个资深的数据分析专家活得多么艰辛(题外话,我等consultant活得也格外艰辛啊,这些加上无穷无尽的出差 -_-|| ),而我后面跟的一句是“市场发展不成熟,分工不明确,相关领域人才太少的恶果”。没办法,只做模型和分析远远不够啊,太少人可以看懂并完美应用了,所以搞分析的不得不自己卷起袖子上阵,即当爹又当妈……

那么说到底,为什么现在big data这么火?为什么 quantitative analysts 对数据源这么 obsessing 呢?我的理解是,

1. 大数据可以很容易的aggregate到适当的level,从而灵活适应不同分析目的需求。而已经整理好的数据则无法逆向变通(既实话又废话)。
2. 大数据使得很多大样本的性质可以直接应用,需要依赖的模型假设大大放松,从而模型的选择可以更多的贴近分析目标而不是过多考虑数据本身的性质。
3. 大数据可以进行data mining(又废话了),从而不仅仅服务于单一的policy making,还可以实现定点、极端个性化的信息投递。说白了,就是既可以分析群体特性,又可以兼顾个人特质,像大海一样宽广的胸怀包容着不同分析的目的。
4. 大数据往往是第一手数据,格式整齐(要不搜集成本过高也没法搜集)、数据真实、定义明确,很容易进行data cleaning(一个反例:跟统计年鉴打过交道的童鞋们应该知道那东西有多么混乱,统计口径什么的千差万别,数据来源也未必可信)。这样的数据只要简单的编程处理就可以了,把研究人员从搜集数据的辛苦低层次劳动中解脱出来。
5. 大数据往往包含着传统数据源所无法提供的信息,比如GPS数据可以直接用于跟踪个体的行动路线。这意味着统计分析的结果可能可以被更加灵活的应用(idea -> result -> implementation)。关于这一点,Frank曾经发给我一个很好的summary,说的是大数据为发展(经济学)带来的新机遇:http://www.weforum.org/reports/big-data-big-impact-new-possibilities-international-development
6. 最后一点比较自私的,social network的数据往往都是大数据(得有links嘛),所以既然我的研究兴趣在那里,自然会更多的关注大数据。

那么,大数据的对于分析人员挑战在哪里呢?
1. 从噪音中找到有用的信息: 正如前面所说,大数据包含了太多个体的信息,所以有时候很难找到一个简单的总体指标。如何从噪音中挖掘有用的信息,对于统计分析专家的思路清晰要求度非常之高(Frank兄曾经对此做过一些简单的批判,业界的一些报告有时候无奈的直接把数据aggregate了,丢失了部分有用信息)。而我总觉得,对数据背景一定要有所了解才可以,不能是简单的大海捞针,还是要有直觉指引方向的。(只针对业界数据,制药行业之类的实验数据我没接触过,没有感觉~)
2. 大数据对于建模者的学术训练背景要求更高: econometrics, data mining等等统计分析方法,及其结合,往往意味着分析者需要有着良好的数据直觉。而这一切,往往离不开一个solid的学术训练背景。最简单的,如果不会C或者python之类的编程,不会R之类的统计软件,那对于大数据往往就在data cleaning阶段就束手无策了。而传统的数据集,我知道很多人就是excel手动做数据清理,然后扔到stata之类的软件中调用相关的命令(或者可以称之为函数)就可以了。大数据分析的门槛在提高。
3. 数据敏感性和隐私: 大数据往往来源于个体,这也就意味着data access往往被控制的很严,不可能向所有研究者开放。那么,研究者往往只能接触一个领域、一个公司的数据,而无法是非常全面的行业数据(比如,通信数据你要么有移动的,要么有联通的,不太可能移动联通的同时都给你)。这也多少造成了分析只能从一边入手(依赖双方数据的,比如game theory的实证分析,可能会有些困难)。

暂时先想到这些,或许日后还会补充吧,欢迎各种批判(我只是小小的井底观天而已,加上各种眼高手低、站着说话不腰疼)。其实有的时候,想想自己明明是 more into theories than empiric,但是也就被各种“拉上贼船”下不来了。至少我还是坚信,更难积累的是analytical sense而不是skills,后者更依赖时间而前者多少对天赋还是有些要求的吧。虽然也说,很多时候还轮不到拼天赋……

(p.s. 发现新版WP的全屏编辑模式很好用啊,很简洁明了令人可以专注写作!)

Categories
我的生活状态

读书、写代码

在重温 Competition Policy: Theory and Practice 这本书。我不得不承认,anti-trust一直是一个很有意思的领域,最直接的和业界、经济政策相联。看看这些故事,看看背后的各种出于“市场效率”的考量,真的觉得世界是很美妙的。

没想到这个月会有这么多代码可以写。或许,像我这么一个极度讨厌“重复劳动”和copy、paste的人,思维永远会是,“这东西怎么写代码啊”……可惜啊,当年没好好学C,现在被R惯坏了,什么都用R来做,也越来越懒了。很多问题,一时R解决不了,就只能郁郁的手动处理掉。然后心里在想,“真心的,我会成为一个非常好的research assistant的”……呃,这是不是一个意外的“收获”呢?

有的时候在想,应该如何定义“工作”一词?不断的、重复性的劳动,不厌其烦么?很显然,这不是我喜欢的,虽然明知道很符合亚当·斯密眼中的“分工”。很不喜欢浪费自己的时间,尤其是在做一些让我觉得本科研究生都白读的事情上。这个时候,“完美癖”就显得非常不合适了,看着很多东西就这么流出去了,最后索性任其自由……

哎,很多时候,连别人对自己的误解,都懒的解释了,这么的“顺其自然”好了。或许很多东西,一不值得挽回、二不值得留恋。因此,又何必浪费自己的时间与口舌……有时间,还是多读读书、看看论文吧。

Categories
日常应用

批量多个文件GB转UTF-8编码、批量合并多个文件

这里更多是一种记录了。

最近遇到两个小问题,批量把GB转成UTF-8,因为R里面就算用en.US-UTF8也是不能直接读GB编码的中文文本文件的。所以需要一个转换。由于手头几百个文件,不可能一一打开notepad++之类的文本编辑器然后另存为,于是就开始搜。果然,神奇的软件哪里都有,一搜救有华军软件园的一个小软件:http://www.onlinedown.net/soft/46844.htm。打开之后很方便~只可惜是windows下的,我还得切出ubuntu来回到windows。

同样的还有一件事儿要依赖windows,那就是在读入R之前,我需要批量合并多个文本文件。这个时候就要靠命令行了。键入CMD之后,一路cd进入需要操作的文件夹。然后一个神奇的命令:

copy *.txt target.txt

就可以看到命令行华丽丽的搞定了!真速度啊,赞一个。

就在此记录一下,整理数据会有各种各样稀奇古怪的需求,能在R之外做的也有很多(本来我是在ubuntu下ls所有文件名,然后想用for循环在R里面依次读入并rbind的)。当然相比于命令行的原生操作,还是速度慢一些。所以,各种武器齐上马,就看哪个利索了。不同于以往在学校里接触好的数据,格式都弄好了,业界的数据格式千奇百怪。所以涉及到数据格式的修改,感觉真的离不开R里面的merge、reshape等基础命令。话说还发现一个R包data.table,可以用来做分组求和等很多基于table的工作,大赞一个!