R, Groovy
http://antkillerfarm.github.io/
R
R語言是另一個應用較廣的數學工具語言和環境,主要應用于統計學和數據挖掘等領域。在這些領域,其影響力甚至超過了Matlab。
R語言的語法來自于1970年代貝爾實驗室發明的S語言,因此又被稱為“GNU S”。
官網:
https://www.r-project.org/
軟件倉庫:
https://cran.r-project.org/
https://r-forge.r-project.org/
安裝方法:
sudo apt-get install r-base r-base-dev
書籍:
R語言的書籍主要有三本。
1.《An Introduction to R》。這個是官網的免費書,焦點集中于語言本身,對標準庫沒有介紹。
2.《R Reference Card》。一個只有幾頁紙的卡片式書籍,列出了應用開發中涉及的主要函數的名稱。
3.《R in a Nutshell》。篇幅近600頁,堪稱R語言最權威書籍,兼顧語言和應用兩方面。
參考:
http://cos.name/
統計之都(Capital of Statistics,簡稱COS)成立于2006年5月,是一個旨在推廣與應用統計學知識的網站和社區。
http://yihui.name/
謝益輝,Iowa State University博士,目前就職于RStudio。中國R語言會議、COS社區創辦者。
http://www.r-user.com/
一個中文的R語言網站
http://blog.fens.me/series-r/
R的極客理想系列文章。作者張丹,R語言資深用戶,系統架構師。
http://www.r-tutor.com/
另一個大牛Chi Yau的網站。
https://ask.hellobi.com/blog/asxinyu/5721
300+的R語言資源匯總
https://ask.hellobi.com/blog/EasyCharts/5777
R繪制圣誕樹
http://mp.weixin.qq.com/s?__biz=MzIxNjA2ODUzNg==&mid=2651435295&idx=1&sn=968d9950e54c34e2a2ddd4186c28c7c7&chksm=8c73a9c8bb0420de7ea5e709d4dc78dce977677cefdfaec48db6f4532c8613ab6ca0f623bc83#rd
數據分析案例–以上海二手房為例
http://url.cn/42zYptF
最全的訓練數據集
https://mousieur-g.github.io/
一個R機器學習實戰的blog
http://yanping.me/shiny-tutorial/
Shiny中文教程
交互環境
R語言有個和python類似的命令行交互環境。
安裝之后,運行R命令即可進入該環境(下文簡稱為shell),>quit()可退出shell。
除此之外,還有第三方提供的GUI環境,最常用的是RStudio,其官網:
https://www.rstudio.com/
下載:
http://www.rstudio.org/download/latest/stable/desktop/ubuntu64/rstudio-latest-amd64.deb
執行腳本
R腳本一般以.R為后綴,其執行方法有兩種:
1.Linux shell:/usr/lib/R/bin/Rscript a.R
2.R shell:source(a.R)
幫助文檔
CRAN雖然提供了各個軟件包的幫助文檔,然而無論是數據的組織,還是界面,都不如RStudio,建議使用后者的幫助文檔。
安裝軟件包
以rjson包為例:
install.packages("rjson")
這條命令會讓你選擇CRAN鏡像,國內有三個鏡像,速度都不錯。
這一步首次做,最好在R shell上進行,RStudio不會讓你選擇鏡像。選定之后,下次安裝直接就會連到鏡像上,這時使用R shell,還是RStudio,都是一樣的效果了。
使用軟件包:
library(rjson)
此外R還支持從github安裝軟件包,如下所示:
install.packages("devtools") devtools::install_github("jlmelville/mnist") library(mnist)語言細節
R語言由于早期用戶主要是非軟件工程人員,因此,它是一個面向過程的函數式語言。
然而正如C語言向C++的演進,以及JavaScript向JQuery的演進一樣,面向過程的語言經過一系列非常技巧性的封裝之后,都能具備面向對象的能力。參見:
http://blog.fens.me/r-object-oriented-intro/
由于面向對象的特性比較高端,不易掌握,因此這里的討論仍局限于面向過程領域,以C語言作為對比,列出R語言和它的區別。
注釋與行
注釋以#開始至行尾。沒有多行注釋符號,但可在RStudio中,選中相關行,進行注釋。
一般情況下,一行對應一條語句。一行有多個語句時,以;分隔。一條語句分散在多行時,以+作為續行符號。
變量聲明
R和python類似,變量使用前無需聲明類型。
賦值
除了=之外,還可以使用<-、<<-、->、->>進行賦值。上述符號中,箭頭指向的變量為被賦值的變量,因此,R不僅可以進行常規的從右向左賦值,也可進行從左向右的賦值。例如:
3->a
下標
數組(Array、Vector)下標從1開始。由于所有R變量都被當成向量,因此對于單元素的變量,a和a[1]是等價的。
列表(List)的下標一般是個name。這里使用一個解析后的json文件作為示例,演示一下在復雜結構中下標的用法。
{"data":[ {"readCount":"97","title":"R1"}, {"readCount":"469","title":"R2"} ]}假設這個json文件保存在列表json中,則"readCount":"97"需要這樣引用:
json$data[[1]]$readCount
for循環
示例:
for (i in 2:5-1) {print(i)}
這里需要注意,2:5-1等價于(2:5)-1,而不是2:(5-1),:比-的優先級高。
返回值
return也是個函數,因此返回值兩側的括號不可省略。
字符串長度
R中的字符串不是字符數組,因此使用length是無法得到字符串長度的,應該使用nchar函數。
paste
paste可將多個字符串連接到一起。這個函數的聲明很有意思:
paste (..., sep = " ", collapse = NULL)
也就是說R支持不定參數,而且該參數并不一定在最后。可用如下方式避免參數指派上的混亂:
paste("1st", "2nd", "3rd", collapse = ", ")
自定義函數
示例:
{% highlight R %}
add<-function(x,y){
return (x+y)
}
{% endhighlight %}
這種方式和JavaScript十分類似。
數據格式轉換
as庫可進行各種常見數據格式的轉換,非常好使。
strDates <- c("01/05/1965", "08/16/1975") dates <- as.Date(strDates, "%m/%d/%Y") strDates <- as.character(dates)操作mysql數據庫
1.安裝非R依賴。
install.packages可以自動處理R依賴,然而它不能處理非R依賴。
sudo apt-get install libmysqlclient-dev
2.安裝RMySQL包。
install.packages("RMySQL")
示例:
conn<-dbConnect(MySQL(), dbname = "ml", username="root", password="123456") summary(conn) query<-dbSendQuery(conn, "SELECT * FROM csdn") data<-fetch(query, n = -1) dbClearResult(query) print(data) dbDisconnect(conn)內置數據集
R語言本身已經內置了一些數據集,可以data()查看之。
操作數據集
參考:
https://www.r-bloggers.com/select-operations-on-r-data-frames/
http://www.burns-stat.com/translating-r-sql-basics/
MNIST
https://github.com/jlmelville/mnist
ggplot2
ggplot2是目前R上用的比較多的繪圖工具集。官網:
http://had.co.nz/ggplot2/
參考:
《ggplot2:數據分析與圖形藝術》,Hadley Wickham著。
注:Hadley Wickham,ggplot2的作者,Rstudio的首席科學家。
Groovy
Groovy是另一種JVM語言,也是與Java最兼容的語言。普通Java代碼可以無修改的在Groovy中編譯。Groovy源代碼以.groovy為后綴。
Groovy使用gradle作為自動管理工具。
官網:
http://www.groovy-lang.org/
代碼參見:
https://github.com/antkillerfarm/antkillerfarm_rubbish/tree/master/groovy/javafx
Hadopp生態圈的語言分布
| Hadoop | Java |
| Spark | 主要scala,少量Java |
| Kafka | 主要Java,少量scala |
| Storm | 主要Java,少量Clojure |
這里需要指出的是,Storm雖然被稱為是Clojure語言的最知名作品,然而Clojure所占的代碼比并不高,還是Java居多。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: Kettle, Solr
- 下一篇: Zigbee音频, 6LowPAN, I