一篇放在草稿箱里一年多的博文。

话说到,去年在上海财经大学讲《R与统计图形》时,提到了Edward Muybridge (1830-1904)的赛马动画。在准备材料的时候,我也比较八卦的翻了翻关于赛马动画的历史,结果发现:这幅图型不但是统计动画的鼻祖,同样是现代电影的先驱。

从 Edward Muybride 拍摄赛马动画后,美国的电影产业开始高速的发展,从此加利福尼亚州顺理成章地成为人类电影发展上的重镇,加州的好莱坞产生了大量的电影技术的创新,好莱坞电影也成为美国文化的主要代表之一。

电影、动画的原理,我就不八卦了,一般理科生大概都有些了解。关于这个赛马动画的产生,很有意思:

1872年,前美国加州州长 Leland Stanford(也是斯坦福大学的创立者)是一个狂热的赛马爱好者,为了证明马在奔跑的时候会有一刻所有的蹄子同时悬空,和人打赌,赌金非常高,达到了$25,000(估计折合到现在应该有几百万美元吧)。而在那个年代很难用肉眼确定马在奔跑时的状态(可以想象一下为什么“马踏飞燕”是那个样子?)于是Stanford找到并雇佣Muybridge这个摄影家帮他解决这个问题。

Muybridge 本来在 1872 年的时候已经接受了 Stanford 的邀请,为 Stanford 提供那旷世赌博的摄像证据。但这家伙怀疑自己老婆有个情人(Larkyns),并且冲动的枪杀了Larkyns(和张灵甫有的一拼)。一直到1877年,Muybridge 被判无罪(Stanford提供的辩护资助),才又继续他的奔马实验,于是有了这个:

后来Muybridge根据这些赛马的图片,创作了人类历史上的第一个小电影。那,下面这个动画就是用最上面的几张图合并而成的(因为偷懒用ImageMagick自动切割,所以这个小电影有点晃~~)

当然,还有一个效果更好的:

哈,这便是统计动画~~

 

声明1:估计这篇博文的受众会很少很少……

声明2:请将下载的漫画于24小时内删除,balabala……

话说到,为了保护我已经不太好的视力,前几天购置了一台Kindle DX,用来阅读电脑上大量存在电脑中的的pdf格式电子书。这个东东确实比较强悍,除了对这些pdf文字书籍支持比较不错外(当然有些书籍需要进行一些处理),对pdf格式的漫画支持更赞。

而我是一个彻底的漫粉,闲暇之余,从网上下载jpg格式的漫画(推荐下载工具ComicAiII),悠然自得看漫画,实在惬意的很~~

不过,有些下载的漫画有些问题,比如下面的这种的:

如果直接合并为pdf在Kindle DX上阅读,纵向显示的话,上下各有很大一块白边,画面非常小;

如果横向显示,效果更差,底部有一部分不能显示。想看完两页漫画的话,需要向上下翻页反复操作:

琢磨来琢磨去,还是得手动把漫画裁剪为适合Kindle阅读的大小(Kindle DX的标准9英寸屏显示区域和32开纸大小接近),并且把裁剪后的漫画顺序调换(日本漫画的阅读习惯是从左向右)。

说白了需要对每页jpg漫画做两件事:

  • 从中间分割,将一张jpg图片变为两张;
  • 为左右两张子图的增加顺序标记。

如果将分割的两张图片,右边图增加_0,左边图增加_1,即可满足要求。拿上面的086.jpg举例:170页(即右边部分)会被命名为086_0.jpg,171页会被命名为086_1.jpg,由于有了0、1标记,这样所有更新过的jpg合并为pdf文件的话,即可保证顺序的正确。

这一过程使用ImageMagickR来实现(Windows XP平台):

假如你的火影忍者的目录为D:/漫画/Naruto04,文件为001.jpg、002.jpg……,

setwd("D:/漫画/Naruto04")
dd <- dir()
ff <- function(x){
    convert <- paste("convert " , x ,
                     " -crop 2x1@ +repage +adjoin ",
                     "%d_",substr(x,1,3),".jpg",sep = '')
    shell(convert)
    reverse0 <- paste("convert " , "0_", x ,
                      " ", substr(x,1,3), "_1.jpg", sep = '')
    reverse1 <- paste("convert " , "1_", x ,
                      " ", substr(x,1,3), "_0.jpg", sep = '')
    shell(reverse0)
    shell(reverse1)
    shell(paste("del " ,"0_", x , sep = ''))
    shell(paste("del " ,"1_", x , sep = ''))
    shell(paste("del " , x , sep = ''))
}

for (j in dd) ff(j)
shell(paste('convert *.jpg ', '1.pdf',sep = ''))
注意:目标文件夹的所有文件将被替换!

最后要强调的是,虽然Kindle没有辐射,和一般的纸质书区别不大,但看多了仍然有损视力 ^_^

 

自第三届中国R语言会议至今,已经有些时日了。说想把培训材料再好好整理一下,无奈项目比较紧张,只好简单修改了下。回顾材料——发现写的少,讲的多……
闲话少说,下面是材料的链接:slides 版本和 print 版本。

 

一则令人兴奋的简讯:

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:

  • Quick prototyping of vertical or domain-based applications where the Oracle Database supports the application
  • Scripting of “production” data mining methodologies
  • Customizing graphics of ODM data mining results (examples: classificationregressionanomaly detection)

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

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

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

### GLM Regression
## 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接口)外,已然发展到了商业数据库领域。

永久链接:http://www.bjt.name/2010/06/oracle-data-mining-r/

 

很早以前就听人说过,北有北师,南有华师,不过因为专业和地理原因,一直以为自己不会和华师有什么关系。这次承蒙张翔和焦静的辛苦组织,华师的资环和金统学院联合主办中国 R 语言会议(上海)。在华师不但让我见识了 LaTeX 、R 界的前辈——汤银才教授,还结识了一大批业界精英、青年学者,倍感荣幸。

华师的大门和我想象的差不多,里面古朴的建筑风格也别具一格。

无奈天公不作美,上海这几日阴雨霏霏,没有好好的在华师内仔细转转。

最后是主题,趣闻几则:

  • 中心国际的林光启博士,演讲时提到自己生长于德州,然后马上注解了一句:“不是山东的德州啊,是美国的那个!”额……
  • 周六晚上大家一起聚餐,席间汤银才老师提到当年他和吴凌云的学术交流,Oh,那可是传说中的人物。汤老师还提到,他给统计系讲 R 的时候,会和大家说:“有问题就去 COS 上问,肯定有人回答!”啊&@&%
  • 回到住处,准备再补几张演讲材料,结果发现笔记本电力不足,遂向前台借插线板(notebook是欧货,需要欧标插头),被告知“对不起,没有!”于是乎,要补的材料,一概没加。第二天,大家发现演讲时间严重不足,还好没有插线板,不然……罪过!
  • 周日上午,林桢舜师兄做最后总结,说到:“我们一定要与时俱进……”,还不忘强调一下:“这是党说的!”我当时几乎翻了,因为林师兄是台湾人,博士期间来的大陆。不知道说的这个是不是我朝,OMG!
  • 傍晚同中南一行地铁内转车,路上一直在说上海地铁的自动门很恐怖,发生过很多次事故……在某一站换乘时,人太多,自动门发出警告时,刚好我是外面的最后一个,额!下意识退后一步,哈哈,隔着自动门和大家 goodbye !
© 2012 刘思喆 @ 贝吉塔行星 Suffusion theme by Sayontan Sinha