雁起平沙的网络日志

数量金融与R

关于Github Pages 视频教程

| Comments

昨天我发布了《github pages视频教程(1)》,今晚就有童鞋留言反馈,提得很好,对我今后再录视频有很大的促进。同时,我也觉得有必要解释些几点,免得大家产生误解。

一、我为什么要录这个视频

没什么特别原因,就是有几位朋友用github做博客出了点问题,我就说,那我录个视频吧。然后一想,光是你们几个能看到视频还不行,估计还有很多朋友会遇到这些问题,那我就公开吧。

二、什么是github?它能做什么?

推荐大家阅读阳志平老师的如何高效利用GitHub

三、为什么要用github做博客

首先,准确地说,应该是用github托管博客。你注册github以后,它提供了这样一种机制,你可以在github上存放静态网站(纯html+css+js)的代码,然后,你可以通过访问一定的url地址来访问网站。而jekyll是一种基于ruby语言的轻量级静态网站生成引擎,请看我以前翻译的一篇介绍。github的后台还提供jekyll的程序的服务,这样,你把未编译的jekyll博客代码push到github上,它会在后台帮你编译,你也可以本地编译之后再push。听不懂没关系,以后会讲的。

那为什么要用github呢?这纯粹是个人喜好问题,2011年底,我想开个博客,那时候统计之都的几位博主都是wordpress的博客,我也用了几天,然后谢益辉在邮件里提到用github能搭博客,我就研究了好几个星期,完全上瘾了。你可以看看益辉当时写的一篇博文,阐述他为什么要换到jekyll。阳志平老师也有一篇告别wordpress,拥抱jekyll,去网上搜一下,你会发现,叫这个名字的文章还真不少。

四、什么人适合用github pages

我并没有向大家推销github和jekyll的意思,这套东西真的不适合所有人。如果你跟我一样是代码控、经常用github存放代码、觉得wordpress不灵活、想通过实践学习html/css/js,那么你可以试试用github托管博客。

两年以前,我跟大家一样,不会做网页,不懂html/css/js,之后偶尔学一点,在用中学,现在也能做出像点样子的网站了。

五、为什么用jekyll做的网站好看的不多?

这是个天大的误解,网站好不好看,跟你用什么系统没关系,而是跟你的html/css/js有关,你可以把jekyll当作cms,网站样子好不好看,就要看你的设计了。很多用jekyll做博客的孩子都是程序猿,崇尚简洁,而且不会把大量时间花在设计上,也有网站设得很好的,比如 http://pizn.github.io 。如果你能找到一个设计得很好的页面,完全可以用jekyll来做博客,当然,你也可以用wordpress做,跟系统没关系。

在第一期视频里,我举的那个例子用的是jekyll自带的最简单的模板,虽然很难看,但是它很简单,而且该有的都有了。在讲解的时候,我可以迅速定位到关键的代码,排除那些枝枝蔓蔓的影响。

六、之后的视频教程会有什么?

视频课程的第一次只是讲了基本概念,教你如何把别人的网站clone到自己的github里,还没有讲如何做一个属于自己的博客主题。这将是后面课程的重点。我先从修改别人的网站代码讲起吧。

七、这个课不会教什么?

我们这个课是关于github pages和jekyll的,不会教html/css/js,你需要自己去学,下面有些资源

当然,网上还有很多资源,不限于上面的,不过我觉得,更重要的是在实践中学习。

八、不足之处

第一次录视频,不太熟练,有点紧张,错了就要重来,可是,我发现越是紧张,就越会出错,那天从下午三点一直录到晚上八点,最终还是三段视频拼到一起的,重来一遍的代价太高了。我觉得应该分段录的,十几分钟一段。

另外,我的确应该重新注册个空白帐号的,我帐号里的东西太多,会分散大家注意力。下次我会用新帐号把这次视频的后半部分重讲一遍。

【广告】上海北京两地的R语言培训

| Comments

最近北京和上海有两个R语言培训。

我的朋友肖凯老师最近要在上海开R语言的培训班。他是资深R语言用户,“数据科学与R语言”博客博主,第五届R语言大会演讲嘉宾,上市公司(万达信息股份有限公司)数据分析部数据分析师。R语言领域的实战专家。

想要了解详情的请看这里

另一个培训是SupStat推出的RHadoop的培训,想要玩大数据的童鞋可以了解一下,请看介绍,SupStat的其他培训信息请看这里

【译文】软件工程师如何修炼数据科学

| Comments

写这篇文章的是位软件工程师,本文是他的数据科学修炼历程,原文在这里

很多软件攻城狮朋友问我如何学习数据科学。其实已经有不少有名的数据科学家写过这方面的文章,比如DatasporaGigaom, QuoraHilary Mason。 本文讲述的是我作为一名软件工程师学习统计和数据可视化的历程。

我是半路出家的,花了5年时间成为数据科学领域的熟练工(proficient),在我的学习过程中包括自学 (书籍, 博客, 简单实例)、工作中做项目、课堂培训(Stanford)、教学/演讲、会议(UseR, Strata)。 下面来讲讲到目前为止我做了哪些准备,其中哪些有用,哪些没用。

1. 入门

a) 自学(2 - 4 个月)

考察一下数据科学是否适合自己

入门很关键。两年前,我和几个同事组成了学习小组,一起学习Stats 202的课件。 这让我很兴趣,并且从那开始接触数据分析。 学习小组的5名成员中只有2名选择在这一领域研究的更深入(数据科学并不适合所有人)。

网上有很多学习资料

b) 课堂培训 (9 - 12个月)

如果你真的想学好,就参加一门正式的课程

如果你很认真地想学这门技术,那么最好参加课程学习。课程的艰难程度要保证我不会松懈。斯坦福提供了很棒的入门课程,比我参加的其他为期一周的培训课程要好很多。

《R语言编程艺术》即将上市

| Comments

经历千辛万苦之后,The Art of R Programming这本书终于被我们翻译成了《R语言编程艺术》。去年五月份机械工业出版社的吴怡编辑与统计之都洽谈翻译本书,到现在已经整整一年了。这本书与其他R语言图书有很大的不同,它是由著名计算机科学家兼统计学家Norman Matloff撰写,从编程的角度来讲解R语言,并且深入浅出,非常适合入门,也可作为有R语言使用经验的人进阶。也正由于这本书的特别之处,使得翻译过程异常艰难,好在我们还有统计之都各位大佬的支持,很多把握不准的术语都是求助于他们,在此表示感谢。我在译者序中对本书做了详细介绍。

译者序

R是一种用于统计计算和统计作图的开源软件,同时也是种编程语言,它广泛应用于企业和学术界的数据分析领域,正在成为最通用语言之一。由于近几年数据挖掘、大数据等概念的走红,R也越来越多地被人关注。截止到本文完成之日,CRAN(http://cran.r-project.org/)上共有4383个包,涉及统计、化学、经济、生物、医学、心理、社会学等各个学科。不同类型的公司,比如Google、辉瑞、默克、美国银行、洲际酒店集团和壳牌公司都在使用它,同时以S语言环境为基础的R语言由于其鲜明的特色,一出现就受到了统计专业人士的青睐,成为国外大学里相当标准的统计软件。

一直以来,国内外关于R语言的著作都是以统计学专业的视角来介绍R语言的,对R语言本身的特性讲解得并不详尽,而软件自带的官方文档又显得过于技术,不那么亲民。另一方面,很多接触R的朋友都来自非计算机专业,没有接受过编程训练,他们使用R的时候,写出来的代码通常只能算是一条条命令的集合,面对更复杂的问题,常常束手无策。记得在某届R语言大会上,有位SAS阵营的朋友说,他看到演讲者所展示的代码里只有函数调用,没有编程的东西,所以他觉得R不能算一种编程语言。其实,他错了,此时你手里这本《R语言编程艺术》,覆盖了其他大部分R语言图书没有涉及到的编程主题。这本书就如同R语言的九阳神功秘籍,当神功练成,任督二脉一旦打通,再学习针对某一领域应用的函数或包就如庖丁解牛一般。顺便提一下,据微博上的小道消息,前面提到的那位朋友最近也开始学R了。

本书的特点表现在以下几个方面:

  • 第一,对读者的统计学知识和编程水平要求并不高。与很多R语言书籍不同,这本书并不需要很深的统计学功底,它从纯语言的角度入手来讲解R。对于有一定编程经验却没什么统计学背景的人来说,读这本书会比较顺畅,读者就可以重点专注R语言的特性在数据分析方面的应用。在有的地方,作者也会提醒那些有其他语言编程经验的人应该注意R语言有什么不同之处。而对于没有编程经验又想使用R做数据分析的人来说,这本书也是学习编程的绝佳教材。
  • 第二,专注于R语言编程。作者没有把这本书定位为菜谱式的手册,也不像有些R语言图书那样介绍完统计学某方面应用之后简单地把R语言代码摆出来。翻开这本书的目录,你几乎看不到统计学的术语。本书系统介绍了R语言的各种数据结构和编程结构、面向对象编程方法、socket网络编程、并行计算、代码调试、程序性能提升以及R语言与其他语言的接口等主题。书中也提到了不少编程的小技巧,这都是作者多年编程经验的总结。
  • 第三,丰富的案例分析。作者Matloff教授是位计算机科学家,同时他也是位统计学家,有多年的教学经验,也做过统计学方法论的顾问。除了正文中的例子之外,本书还有44个扩展案例,很多案例源自作者亲身参与过的咨询项目。虽然本书没有讲解任何统计模型,但是扩展案例都是和数据分析相关的,比如鲍鱼数据的重编码(第二章)、寻找离群值(第三章)、文本词汇索引表(第四章)、汉语方言学习助手(第五章)等等。通过学习这些案例,读者不仅能学到R语言的每种概念如何运作,也会学到如何把这些概念组合到一起成为有用的程序。比如第十章介绍了socket网络编程之后,就用一个扩展案例讲解如何用socket实现并行计算,这为第十六章详细讲解并行计算做好了铺垫。在很多案例里,作者讨论了好几种设计方案,并比较了这几种方案的不同之处,以回答“为什么这样做?”,这对于缺少编程经验的人来说,是非常好的安排。

用js在jekyll博客中实现标签云和标签页

| Comments

本文主要讨论在jekyll博客中借助javascript和json,实现标签云和标签页。标签云可以用jquery.tagcloud.js插件实现,标签页则使用jQuery读取json数据文件,用地址传递参数给js函数,使用的是异步加载技术,请看演示页面

标签云

先做点准备工作,加载jquery。因为我的博客里还加载了其他的js库,在另外一个js库中也定义了$符号的话,那么我们在使用$符号时就发生了冲突。所以在加载jquery时还要解决$命名冲突。请看这篇文章,我用的办法是定义jQuery的别名:

1
2
3
4
<script src="/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
  var jq = jQuery.noConflict();
</script>

下面是标签云的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script src="/js/jquery.tagcloud.js" type="text/javascript" charset="utf-8"></script>
<script language="javascript">
  jq.fn.tagcloud.defaults = {
    size: {
      start: 12,
      end: 22,
      unit: 'px'
    },
    color: {
      start: '#7CCD7C',
      end: '#CD0000'
    }
  };

  jq(function() {
    jq('#tag_cloud a').tagcloud();
  });
</script>

标签页

最初,我是在谢益辉的博客里看到的用js实现标签云。可以看到,这个标签页上,在标签云之后跟着各个标签的文章列表,如果我只想看到某个标签的文章列表,要怎么做呢?

前面我写了篇文章《用jekyll和jQuery实现异步加载文章列表》,使用jQuery异步加载文章列表。同样的,我们也可以编写个函数加载某个标签的所有文章的列表。

用R获取flash中的数据

| Comments

本文主要讨论如何用R语言从flash中获取数据

某天我需要获取复旦人民币汇率指数的数据。此前我们介绍过从网页抓取数据的两种方法

  1. 用url给服务器提交参数获取数据文件,例如用R获取大连商品交易所历史数据这篇文章里提到的方法
  2. 解析html代码以获取数据,例如用R获取郑州商品交易所历史数据这篇文章里提到的方法

而复旦的这个网页,不提供数据文件的下载,从html中也不能解析出数据。实际上,该网页中的flash向服务器发送请求,服务器返回数据给flash并显示出图形和表格。

http://cos.name/cn/topic/107729Xiao Nan版主介绍的办法,我用chrome看了下页面

network -> XHR

可以看到,上图中的表是从2012年12月12日到2013年2月10日的数据,对应的数据来自http://ifsfd.fudan.edu.cn/fdurmb/data?type=0%2C1%2C2&df=2012%2F12%2F12&dt=2013%2F02%2F10,打开这个链接,可以看出这是JSON格式,用R的rjson和RJSONIO包都可以解析JSON格式的数据。

我们来研究一下上面的这个链接,df=2012%2F12%2F12&dt=2013%2F02%2F10规定了从开始到结束的日期,如果开始日期是YYYY年MM月DD日,结束日期是yyyy年mm月dd日,那么对应的字符串是df=YYYY%2FMM%2FDD&dt=yyyy%2Fmm%2Fdd

那么文本开头提出的问题,可用下面的代码解决

(readFudan.r) download
1
2
3
4
5
6
7
8
9
10
11
12
13
# 从复旦人民币汇率指数网站读取数据 http://ifsfd.fudan.edu.cn/fdurmb/indexchart1.jsp
# 更多细节请看 http://cos.name/cn/topic/109132

require(RCurl)
require(rjson)

fdjson <- getURL("http://ifsfd.fudan.edu.cn/fdurmb/data?type=0%2C1%2C2&df=2012%2F12%2F12&dt=2013%2F02%2F10")
fdlist <- fromJSON(fdjson)
fdm <- matrix(unlist(fdlist),ncol=4,byrow=T)
fddf <- data.frame(fdm, stringsAsFactors = F)
fddf[,2:4] <- sapply(fddf[,2:4],as.numeric)
colnames(fddf) <- c("date","人民币名义有效汇率指数","人民币实际有效汇率指数","人民币盯住一篮子货币模拟汇率指数")
write.csv(fddf,"fudan.csv",row.names = F )