算是留条后路吧...anyway学门新语言总比学门新的课程简单一些。
1. 循环
Python 君貌似不是很喜欢操纵下标(不是C),循环比较直接:
for i in forset:
而不是for index in range(len(forset)): i=forset(index)
While和R的用法基本一直。也可以直接break跳出。
算是留条后路吧...anyway学门新语言总比学门新的课程简单一些。
1. 循环
Python 君貌似不是很喜欢操纵下标(不是C),循环比较直接:
for i in forset:
而不是for index in range(len(forset)): i=forset(index)
While和R的用法基本一直。也可以直接break跳出。
出于某些原因,最近申请了一个虚拟服务器(虽然有现成的R服务器,但是没有sudo总是各种不爽...),然后开始自己折腾linux...(向着码农方向前进,前进,前...)以下为小白笔记,抄在这里防止自己日后翻回来重新折腾一遍。高手请无视~
服务器是公司C3云上的一片,我选的ubuntu 12.04开始折腾。由于是远程server,所以只能shell操作 T_T 看不到ubuntu华丽丽的界面了。
装R倒是不麻烦,把镜像加一下就好了。编辑/etc/apt/sources.list,然后加上这句(看了一下我的ubuntu是precise版本的)。不加这句的后果就是...装了个上个世纪版本的R?
sudo vi /etc/apt/sources.list deb http://cran.cnr.berkeley.edu/bin/linux/ubuntu precise/ #文件里加上这一行
然后就直接安...
sudo apt-get update sudo apt-get install r-base
然后就开始折腾RODBC,给teradata跪了,安个teradata ODBC Driver死活不成功,最后请教同事决定投保RJDBC的怀抱。
JDBC基于Java,自然需要装JDK。网上搜了一下,貌似有个open jdk可用。
sudo apt-get install openjdk-7-jdk sudo update-alternatives --config java #如果已经有多个jre,记得选一个...
然后保险起见,配一下java的路径。
sudo R CMD javareconf
如果看到下面这一段,那么就OK了。
JAVA_HOME : /usr/lib/jvm/java-7-openjdk-amd64/jre Java library path: $(JAVA_HOME)/lib/amd64/server JNI cpp flags : -I$(JAVA_HOME)/../include JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm Updating Java configuration in /usr/lib/R Done.
然后就可以开始装R里面的那堆包了。R很神奇,必须sudo R之后install.packages()
才有用...可怜我折腾了半天一直报错。
然后发现sudo的问题之后,顺利的装上了RJDBC.
sudo R
install.packages("rJava")
install.packages("RJDBC")
然后就是Teradata JDBC Driver了。这厮比ODBC好装的多...基本就是解压...然后就没有然后了。
都弄好了之后,就可以在R里面测试着玩了。
library(RJDBC)
jdbc.drv <- JDBC("com.teradata.jdbc.TeraDriver", c("/home/user_name/terajdbc4.jar", "/home/user_name/tdgssconfig.jar"))
jdbc.conn <- dbConnect(jdbc.drv, "jdbc:teradata://xxxx", "xxx", "xxxx")
然后就是JDBC的一些相关函数了。
dbSendQuery(jdbc.conn ,"CREATE TABLE XXX AS XXXX WITH DATA;") #只执行不返回结果 dbGetQuery(jdbc.conn ,"sel 1 from xxx") #执行且返回data.frame(fetch完毕的)
然后就可以开始各种蹂躏了。
只是让我不爽的是,折腾了许久也没搞定发email...sendmail、mail什么的都不管用,莫非我SMTP没有配?继续google去了。
-----------------4.3更新----------------
原来C3和LDAP是直接集成的,所以别人的帐号也可以登入我的server。之后,一句命令可以加入sudo组:
sudo adduser username sudo
----------------4.4更新----------------
今天在同事的帮助下搞定了Rstudio Server版,瞬间爽翻了...
以前是ubuntu 12.04下有个东西装不上: libssl0.9.8。因为默认装好了1.0版本的。但是Rstudio现在的版本必须调用0.9.8版本...于是强行装旧版:
sudo wget http://mirrors.kernel.org/ubuntu/pool/universe/o/openssl098/libssl0.9.8_0.9.8o-7ubuntu3.1_amd64.deb sudo gdebi libssl0.9.8_0.9.8o-7ubuntu3.1_amd64.deb
然后再去装一下Rstudio Server版就好了。
sudo gdebi rstudio-server-0.98.501-amd64.deb
然后为了调RJDBC,配置一下环境变量:
sudo vi /etc/profile
加入这么两行
export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/jre" export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
然后刷新一下。
source /etc/profile
这样就搞定啦。Rstudio监听在服务器的8787端口。可以直接/server:8787 登入。
我实在是忍不住要抱怨了,哪有这样的半成品就给我们用的?RJDBC连TD是没有问题,可以读数据,但是dbWriteTable()写不回去!
dbWriteTable(jdbc.conn, name = "testdf", value =test_df) Error in .verify.JDBC.result(s, "Unable to execute JDBC prepared statement ", : Unable to execute JDBC prepared statement INSERT INTO testdf VALUES(?,?) ([Teradata Database] [TeraJDBC 14.10.00.26] [Error 3932] [SQLState 25000] Only an ET or null statement is legal after a DDL Statement.)
亲爱的同事写了一个很方便用的r函数来解决这个问题,大家猛戳 -> github
前两天鼓捣新网站的时候挖掘的利器,很酷的JS框架。之所以我对他这么欢喜,主要是这货是支持Gephi的...然后还实现了interactive graph...真的是夫复何求呀!Gephi有个插件Sigmajs Exporter,安一下即可。
这里主要记录一下用这个框架初期遇到的一些困难...感觉本身的tutorial写的不是特别好...浪费了我一些时间google什么的。
Sigma.js首页有个特别简单的hello world例子,但实际测试并没有那么容易搞定。
Here is the minimal code to create an instance:
var sigRoot = document.getElementById('sig'); var sigInst = sigma.init(sigRoot); sigInst.addNode('hello',{ label: 'Hello', color: '#ff0000' }).addNode('world',{ label: 'World !', color: '#00ff00' }).addEdge('hello_world','hello','world').draw();
主要的问题是完全不知道这东西应该怎么搞到一个静态的HTML网页中。Google了一下,终于找到一个本地可以成功run的例子。
这个纯属做出来卖萌的...只是画出来有高有低比较像琴键的感觉,又按照类别填了一下颜色,所以再卖弄一下来个好听的名字——七彩琴键图。
数据比较敏感,所以很多信息都删掉了...大概还是可以看出来横轴是时间,纵轴是增长率。增长率大于阈值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()#黑白底板