Categories
日常应用

七彩琴键图...(via ggplot2)

这个纯属做出来卖萌的...只是画出来有高有低比较像琴键的感觉,又按照类别填了一下颜色,所以再卖弄一下来个好听的名字——七彩琴键图。

Year over Year Growth
点击看大图

数据比较敏感,所以很多信息都删掉了...大概还是可以看出来横轴是时间,纵轴是增长率。增长率大于阈值40%则100%上色,否则设为半透明。颜色是ggplot2自己上的,还是挺美观的...从上而下,各个类别的表现比较容易直接区分,这也就是这张图的目的。此外标注了一些重要日期。

可能一般画增长率都会画折线图吧,我只是觉得同样的数据折线图画出来大起大落的太丑了,还是这样好看一些...

最后按惯例,放上代码。其实很短...

library(ggplot2)
require(scales)

# growth
ggplot(q4_yoy, aes(x=DT12, y=ll, color=NULL))+
geom_bar(stat = "identity",aes(fill=Vertical,alpha=ll>0.4))+ #柱状图,然后判断是否大于40%
scale_y_continuous(labels = percent_format())+ #纵轴改成百分比
facet_grid(Vertical~.)+ #分类别画出来
geom_hline(yintercept=0.4,alpha=0.9,color="grey",linetype="dotdash")+ #40%增长率的水平线
geom_vline(xintercept=as.numeric(as.Date("2012-10-31")),
alpha=0.5,color="red",linetype="dotdash")+ #一些重要的日期
geom_vline(xintercept=as.numeric(as.Date("2012-11-22")),
alpha=0.5,color="red",linetype="dotdash")+
geom_vline(xintercept=as.numeric(as.Date("2012-12-25")),
alpha=0.5,color="red",linetype="dotdash")+
geom_vline(xintercept=as.numeric(as.Date("2012-09-22")),
alpha=0.5,color="blue",alpha=0.5)+
#   annotate("text",label="Sep 22",x=as.Date("2012-09-22"),y=-0.5)+
theme_bw()#黑白底板

 

Categories
日常应用

ODBC(Teradata)和R连接常见问题

以前总结了一些R、SAS和TD彼此之间数据导入导出的办法,可是实际使用中还是会碰到各种各样的问题...问的人多了,就多少攒出一些FAQ放在了内部的wiki上。

还有一些问题估计大家都会遇到,所以也摘到blog上来好了。一开始用英文写的,简单翻译一下,不全翻译了。首先是通过RODBC连TD的一些常见问题,不知道是不是通用于其他ODBC driver...

  • Q: I cannot load RODBC on my own computer (not on R servers)... what can I do?
    A: Try to debug in these steps -1)  Check if you have installed the 64-bit version of Teradata ODBC driver on your 64-bit OS. If not, download and install these three packages here: http://downloads.teradata.com/download/connectivity/odbc-driver/windows(保证R、操作系统和ODBC driver位数一致,如果是64位的操作系统就装一套儿64位的吧...上面那个link是64位TD ODBC Driver的下载地址)。2)  Open your 64-bit ODBC administrator and configure the TD server DNS. (在新的ODBC中配置server地址) 

    3)  Close and re-open R again. (重启R,这步一定不能省)
    4)  If you still have problems, use R 2.*** instead of R 3.0+ (R 3.0以上版本有时候会莫名其妙报错,如是,改用2.15+版本吧。)

  • Q: How can I call R in the command line (to schedule a recurring job)? (怎么run batch job?)
    A: You can call RScript directly in your command line. If failure, you need to add R's path to your system environment variable - PATH. e.g. C:\Program Files\R\R-2.15.2\bin (设一下环境变量)
    Pay attention to its parameters. Also, you can save the log. A sample command is as follows - (命令行类似如下)

    Rscript --no-save --no-restore --verbose "/home/Liyun.Chen/R/recurring/recurring_dashboard_by_week.r" > outputFile.log 2>&1

    (记得存个log)

暂时就是这些...做个存档好了。

Categories
读书有感

最近在修的几门课...(Sep, 2013)

大家火眼金睛,微博上随便吱呀一句全都猜出来了...最近在修几门历史和艺术相关的课,总而言之就是我觉得我的人文修养实在是太烂了...工作之后的好处就是想学点什么就学点什么,自由的很,随心而至。

《史记》记载,秦始皇时期,“秦法,不得兼方。不驗,輒死。”。而我就属于那种死就死了吧...总是想学点好玩的东西的人。

现在在follow 的几门课是:

其他的边走边看吧,coursera上的课大都不长,可以一门一门慢慢来...

此外,刚留意到复旦吴立德老师的Elements of Statistical Learning又开课了,可惜我们搬离张江了哇...各种怨念中。

Categories
事儿关经济 经济、IT观察与思考

复习一下Advanced Macro...

今天来上班的路上依旧堵的一塌糊涂...然后一路就在琢磨这个信息不对称到底会有多严重(洗澡、堵车、睡觉前一向是灵感多发时段)。想着想着,就想到了某几个models(表示这几个models是在BGSE时候最喜欢的professor教的,所以无论如何也忘不掉...可见一个好的professor是多么的重要,一下子把我扯后腿的宏观拉到了三高平均水平),复习一下。

Competitive Equilibria and Social Planner's Problem

Economic growth model中的经典问题就是自由市场竞争均衡和中央决策者选择的社会最优。很多时候这两个解出来是一致的...实在是懒得打字了...直接找个slides贴一下。

Competitive Equilibrium and the Welfare Theorems.pdf

2013-08-28 11_20_24-slides2.pdf - Adobe Reader

重点highlight出来了...市场均衡等同于中央决策者的最优解。这牵扯到福利经济学第一和第二定理。若干年前郭凯就写过一段文章通俗的解释这两个定理,我也就不再赘述了。有意思的是这里该定理成立的三个条件:

1.充分竞争2.没有信息不对称3.没有外部性。

重点想说的是第二个。信息不对称。

最近去很多投资大数据的会议啊沙龙啊,不断的强调什么信息化啊,智慧城市啊之类之类的,一副扬言大数据和互联网可以改变人类生活所有模式的态势。最好的例子怕就是打车app了吧?就是建立了这么一个信息交流的平台,打车者和出租车之间的信息不对称就得到了极大的改善。于是很多人在说,为了解决交通拥堵,除了基础设施建设以外(修更多的路、更合理的规划立体交通),我们应该更合理的安排车流,避免大家都拥挤到同一条道路上。这么说下去,仿佛给交警们建立一个实时车流量监控平台、他们就可以更科学的引导车流、就能解决局部大塞车的问题。而这个平台需要什么呢,无非是更多的摄像头或者其他感应器、以及更好的图像识别技术。(其实如果真的一个平台就可以解决问题,那它应该早晚会自己出现吧?比如淘宝或者ebay这样解决中小企业和消费者之间信息不对称、信息交换不充分的平台,利润大大的啊。我一直觉得ebay淘宝和amazon、京东之类最本质的区别就是,前者是平台、用于交换信息,后者是整合的大型厂家,用规模经济来降低成本。早早晚晚的,两类之间的分离会越来越大、相互之间的竞争越来越少吧?)

听完这番言论,典型的“social planner"掌控一切的态度就出现了。只要我的信息是充分的,我就能找到最优解,blabla...

大家觉得呢?理论上只要解决信息不对称的问题,自由市场也可以自动克服这个矛盾吧?我倒是在想,social planner是不是应该更好的致力于解决“修路”等囚徒困境呢?与其试图掌控更多信息然后制定规划,不如充分的把信息散布出去然后让大家自我规划...那些不能自我解决的问题,再交给政府统一规划吧。至少我现在对于social planner的过度干预微观经济活动越来越反感了...同样的,也很反感某些个体炒作这些概念来骗政府投资。

嗯,最后是不是还该加上一个条件?social planner是绝对理性且大公无私的?呵呵,这个假设多大程度上成立,大家心里自有体会...

------------------------废话分割线---------------------

发现不能总是从macro economics的角度想问题,否则会觉得这个世界越来越没希望、越来越可怕。

Categories
日常应用

从词频统计到词频矩阵(善用sparse matrix)

今天在下手写一个算text similarity的程序时,万般痛恨tm包不争气,而lijian哥的tmcn包又还木有完工,所以只能自己从头开始写了...

一切正常,基本的清洗啊,全角换半角啊,分词啊,去stop words啊几行代码顺利搞定,结果统计完了每行的词频却找不到一个有效的办法来算词频矩阵!数据也就是那么几万行嘛...reshape2怎么一下子就挂了呢?研究了一番,想到就算搞出来一个几万乘几万的词频矩阵,后面的distance之类也算不出来...悲哀的感觉充斥。没办法,只能祭出sparse matrix这面大旗了!

Google之,R里面可以调用Matrix或者SparseM。鉴于前者看起来比较简单的样子,我就没有去折腾后者。Matrix里面Sparse Matrix的定义比较简单,就是记录一下值不为0的行和列编号,以及他们对应的值就可以了。等等,这个东西怎么听起来这么熟悉?!好像在network analysis里面整天写这样的程序嘛!对嘛,不就是一个edgelist格式的network(记录相互连接的边)转换为一个matrix格式的网络(边边矩阵)嘛!瞬间有种打通任督二脉的感觉....

这样,只要我数出来每篇文章中的词频就足够了! 形如:
Post_id word count
1.           A.       1
1.           B.       2

这样,然后

sparseMatrix(as.factor(data$Post_id),
as.factor(data$word),
data$count)

就ok啦。超级高效!瞬间秒杀。根本不用去算真正的词频矩阵。

附这个函数的用法:

sparseMatrix(i = ep, j = ep, p, x, dims, dimnames,
             symmetric = FALSE, index1 = TRUE,
             giveCsparse = TRUE, check = TRUE)

同样的,dim()还是可以用来看维度,一般没错的。

再后面就是考验大家具真学得好不好的时候啦。比如方差这种东西,不就是 XX'嘛(当然要先减一下均值....),这里Matrix这个包有tcrossprod()可直接算XX',colsum这些也都还有...正常的矩阵乘法也都还可以用。关键是,QR分解什么的也有!

于是乎我可以深深满足的继续码下面的分析去了...

--------------------吐槽分割线------------------
作为一个经济学出身的孩子,我做梦也没想到有一日我居然会去碰稀疏矩阵这种东西...没办法,生活所迫呀!自己动手,丰衣足食.... T_T