Beta

It’s a beautiful thing when free data meets free algorithm.

一则令人兴奋的简讯:

Oracle官方博客 最近更新的 New R Interface to Oracle Data Mining Available for Download,甲骨文开始正式支持R语言在Oracle数据库中的应用(简单的非官方说法是:甲骨文贡献了一个提供Oracle和R之间接口的附加包)。

援引博客中对R-ODM(R-Oracle Data Mining)的介绍:

R-ODM is especially useful for:

  1. Quick prototyping of vertical or domain-based applications where the Oracle Database supports the application
  2. Scripting of "production" data mining methodologies
  3. Customizing graphics of ODM data mining results (examples: classification, regression, anomaly detection)

众所周知,R在实现原型算法方面有着不可替代的巨大优势。诚然,通过R实现的一般性数据挖掘算法都可以嵌入到数据库中,但Oracle提供的这个接口,极大地提高了挖掘算法的部署效率。

今天(2010.06.08),CRAN上更新了RODM包的1.0-2版本,支持Windows、Linux、MacOS X系统。

下面是RODM包帮助文档中的一个例子,可以初步地体会算法高效的部署:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
## Not run:
x1 <- 2 * runif(200)
noise <- 3 * runif(200) - 1.5
y1 <- 2 + 2*x1 + x1*x1 + noise
dataset <- data.frame(x1, y1)
names(dataset) <- c("X1", "Y1")
RODM_create_dbms_table(DB, "dataset") # Push the training table to the database

glm <- RODM_create_glm_model(database = DB, # Create ODM GLM model
data_table_name = "dataset",
target_column_name = "Y1",
mining_function = "regression")

glm2 <- RODM_apply_model(database = DB, # Predict training data
data_table_name = "dataset",
model_name = "GLM_MODEL",
supplemental_cols = "X1")
windows(height=8, width=12)
plot(x1, y1, pch=20, col="blue")
points(x=glm2$model.apply.results[, "X1"],
glm2$model.apply.results[, "PREDICTION"], pch=20, col="red")
legend(0.5, 9, legend = c("actual", "GLM regression"), pch = c(20, 20),
col = c("blue", "red"),
pt.bg = c("blue", "red"), cex = 1.20, pt.cex=1.5, bty="n")

RODM_drop_model(DB, "GLM_MODEL") # Drop the model
RODM_drop_dbms_table(DB, "dataset") # Drop the database table
RODM_close_dbms_connection(DB)
RODM_close_dbms_connection(DB)

说一句题外话:R的影响力除了在统计分析领域(SAS、SPSS、Statistica已经都开始支持R接口)外,已然发展到了商业数据库领域。

最近两会期间,房地产又一次成为焦点中的焦点,各位代表各抒己见,据说在政协的各项提案之中,关于房地产市场的提案几乎占据半壁江山。

房价涨与不涨,各位代表是各抒己见,有声音说北京房价2年内会涨到4万,而且还有佐证。当然俺们的总理最近5年一直在说这事,童鞋可移步这里,当然还有一张漫画,这里就不贴了,太不Harmany。若感兴趣可以使用 blogtd + 总理姓名 google 之(可能得翻墙出去)。

人家说啥都不如自己看看,来点实际的。关注一下最近几年北京房地产市场每天网上(期房、存量房)签约的套数。

(首先声明,房地产市场比较复杂,比如官啊、商啊、摇号啊、中介啊、银行啊、炒房团啊,空军、多军……指标忒多,所以我一直也没搞太明白。搞不明白也想凑一凑热闹,与时俱进嘛!扔两张图上来,大家笑笑)

2008年9月1日至今的期房(不包含经适房、限价房)签约情况:

其中的时点数据不包括:
  1. 2009.01.25 - 2009.02.01 春节
  2. 2009.11.02,2010.01.10,2010.01.16 调试
  3. 2010.02.13 - 2010.2.19 春节
如果只看2008年后半年,会发现其实每天签约的期房数量也不是很多,一直都在100套左右。不过在年底的时候,随着第一次楼盘降价潮的来临,部分刚需释放,期房签约的数量要明显高于平日。
假设2008年是期房市场正常年的话,那么2009年几乎可以用“疯狂”二字来标记北京的期房市场。每天平均400套的签约数量,动辄200、300万的房价,都贵成这样了,被谁买去啦?

2009年12月,hastie教授主页上更新了勘误后的The Elements of Statistical Learning II。这部机器学习领域的巨著,做数据挖掘或者统计分析的同行应该比较熟悉,不过这本书在美帝的 Amason 上要卖 80$,非常不符合中国特色的社会主义!

好在 Hastie 几位大牛深刻体会广大发展中国家莘莘学子的购买能力,在其主页上提供了免费的pdf版本。不过pdf版本有个小问题:排版是为了a4打印而设计的,白边太多,在电脑上看或者打印出来极为不爽。

下面提供一个解决方案来处理这个问题——使用LaTeX中的pdfpages宏包。 具体LaTeX代码参考如下:
\documentclass[a4paper,12pt]{report}
\usepackage[final]{pdfpages}
\begin{document}
\includepdf[pages=19-26, scale=1.3,
delta=0mm 5mm, frame]{ESLII_print3.pdf}
\end{document}
\endinput

使用PDF LaTeX编译。 主要参数非常简单,即从ESLII_print3.pdf中提取第19至26页(第一章),并放大1.3倍(成功剔除掉多余的白边)。

大自然的力量永远让人敬畏,地震、海啸、陨石、雷击……因为我们在大自然的面前如此渺小,所以我们必须协作,必须发展科技,必须懂统计 :)

说到地震,我可能比较敏感,因为我是唐山人。虽然 76 年唐山大地震时,我还没有形成碳水化合物形态,但后来,每每听到老一辈讲起当时的惨烈,心常戚戚。

讲几则作为唐山人的小故事:
  1. 小时候对地震的初相识:有一次刚刚从床上爬起来,正在懒洋洋的坐着穿衣服,就发觉床开始做规则的前后晃动。当时年龄小,很无知,只知道傻乎乎地沉浸在如秋千般的跳动中,那叫个带劲……
  2. 有一次上课,感觉课桌在晃动,没法看书,于是停下来查看周围哪个同学在晃。检查一圈发现周围几个同学没有一个再晃!结果,紧张地直接拍案而起,大呼——地震啦(事后新闻证明是真的)!在我们那儿,这点比较好:即使是课上误判地震的这种事儿,一般老师都是笑笑而过 ;)
  3. 每年我们那都会有地震的谣言,而且说的神乎其神,俺老爸一般会守夜(感谢俺老爸!)。或者天气好的话,干脆去广场之类空旷的地方,找地方打地铺。当然一般都是打牌、聊天到 24 点,然后回家睡觉。

恩,不多扯了,言归正传。自从汶川大地震以后,国人对地震明显敏感很多。且不说海地,单单前两天(24日)山西河津、运城地震就让然琢磨不懂:有人说,21日山西省地震局辟谣称不会有地震,但运城震感明显。为什么地震局会出来辟谣,仔细一读,原来才知——地震局指的是“破坏性”地震。

但有个问题:

国务院1995年颁布的《破坏性地震应急条例》,破坏性地震指“造成一定数量的人员伤亡和经济损失的地震事件”, 并没有规定特定的级数。

这破坏级地震可不是闹着玩的,得仔细瞧瞧最近这地震都发生在哪里了,震级多大?是不是会对我们构成威胁!?于是有了下面这张图——最近一周中国及周边版图地震情况(1月20日至1月25日共计六天):

数据童鞋们可以在这里查看,里面的震级需要注意一下,有Ms和ML两种,换算关系如下。但具体什么意思大家直接 wiki 好了。

ml=(1.17mb+0.67)/1.13

ml=(ms+1.08)/1.13

一些说明(不是写商业报告,偷工减料啦):

蓝色的背景是地震点的密度——也许是喜马拉雅造山运动,也许是三峡工程,不管怎样,四川地区不太平啊!弟兄们小心!

红色的点代表地震的位置,其大小表示震级的大小。

从1月20日至1月25日,版图周边共计有901条地震记录(有点吓人)!其中大于ML5级的一共两次:

2010-01-24  10:36:13.8       35.45   110.70       15 Ms4.8  天然地震        山西河津
2010-01-21  10:02:02.8       13.70   125.85       33 Ms5.1  天然地震  菲律宾群岛地区

最后我们再回头看一下,最近一周地震的震级(ML)分布:

至少可以长舒一口气,原来大部分都是小震,不具“破坏性”的居多。

有点标题党的嫌疑,实际是介绍如何使用 R 绘制 heatmap 的文章。

今天无意间在Flowingdata看到一篇关于如何使用 R 来做 heatmap 的文章(请移步到这里)。虽然 heatmap 只是 R 中一个很普通的图形函数,但这个例子使用了2008-2009赛季 NBA 50个顶级球员数据做了一个极佳的演示,效果非常不错。对 R 大致了解的童鞋可以直接在 R console 上敲

?heatmap

直接查看帮助即可。

没有接触过 R 的童鞋继续围观,下面会仔细介绍如何使用 R 实现 NBA 50位顶级球员指标表现热图:

关于 heatmap,中文一般翻译为“热图”,其统计意义wiki上解释的很清楚:
A heat map is a graphical representation of data where the values taken by a variable in a two-dimensional map are represented as colors.Heat maps originated in 2D displays of the values in a data matrix. Larger values were represented by small dark gray or black squares (pixels) and smaller values by lighter squares.
下面这个图即是Flowingdata用一些 R 函数对2008-2009 赛季NBA 50名顶级球员指标做的一个热图(点击参看大图):

先解释一下数据:

这里共列举了50位球员,估计爱好篮球的童鞋对上图右边的每个名字都会耳熟能详。这些球员每个人会有19个指标,包括打了几场球(G)、上场几分钟(MIN)、得分(PTS)……这样就行成了一个50行×19列的矩阵。但问题是,数据有些多,需要使用一种比较好的办法来展示,So it comes, heatmap!

简单的说明:

比如从上面的热图上观察得分前3名(Wade、James、Bryant)PTS、FGM、FGA比较高,但Bryant的FTM、FTA和前两者就差一些;Wade在这三人中STL是佼佼者;而James的DRB和TRB又比其他两人好一些……

姚明的3PP(3 Points Percentage)这条数据很有意思,非常出色!仔细查了一下这个数值,居然是100%。仔细回想一下,似乎那个赛季姚明好像投过一个3分,并且中了,然后再也没有3p。这样本可真够小的!

最后是如何做这个热图(做了些许修改):

Step 0. Download R

R 官网:http://www.r-project.org,它是免费的。官网上面提供了Windows,Mac,Linux版本(或源代码)的R程序。

Step 1. Load the data

R 可以支持网络路径,使用读取csv文件的函数read.csv。

读取数据就这么简单:
read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")

Step 2. Sort data

按照球员得分,将球员从小到大排序:

nba <- nba[order(nba$PTS),]

当然也可以选择MIN,BLK,STL之类指标

Step 3. Prepare data

把行号换成行名(球员名称):

row.names(nba) <- nba$Name

去掉第一列行号:

nba <- nba[,2:20] # or nba <- nba[,-1]

Step 4. Prepare data, again

把 data frame 转化为我们需要的矩阵格式:

nba_matrix <- data.matrix(nba)

Step 5. Make a heatmap

R 的默认还会在图的左边和上边绘制 dendrogram,使用Rowv=NA, Colv=NA去掉

heatmap(nba_matrix, Rowv=NA, Colv=NA, col=cm.colors(256), revC=FALSE, scale='column')

这样就得到了上面的那张热图。

Step 6. Color selection

或者想把热图中的颜色换一下:

heatmap(nba_matrix, Rowv=NA, Colv=NA, col=heat.colors(256), revC=FALSE, scale="column", margins=c(5,10))

延伸阅读:

来自于kerimcan和krees这些人的讨论:

http://sekhon.polisci.berkeley.edu/stats/html/heatmap.html http://enotacoes.wordpress.com/2007/11/16/easy-guide-to-drawing-heat-maps-to-pdf-with-r-with-color-key/

补充:

早上起来发现 David Smith 同样更新了博客。唉,这厮嗅觉也忒灵敏!哈哈

0%