工欲善其事,必先利其器。學習一門語言之前,能夠清楚的知道碰到問題可以去哪裡找答案是非常重要的,同時一個個性化的工作環境更是可以讓工作效率成倍提升。這裡就我收集的一些Julia的學習資料介紹一下,並介紹一下如何搭建一個Julia的工作環境。
學習資料由於是一門比較新興的語言,所以其實學習資料並不是特別多,特別是對於那些對計算機編程本身就不熟悉的人來說,更是麻煩。這也是我寫這個系列的初衷。
不過任何教程都不可能把所有的細節都寫出來,所以當碰到問題的時候,能夠找到權威的資料是最好不過的。幸運的是,Julia在documentation這方面對中國使用者還是非常友好的。下面可以總結一下:
1、Julia Documentation。可以直接從julia的官網上找到julia的官方手冊:http://docs.julialang.org/en/release-0.4/ 。此外,由於Julia的開發團隊有中國人的身影,所以Julia的文檔對中國使用者也非常友好,中文版的文檔可以從http://julia-zh-cn.readthedocs.org/zh_CN/latest/ 找到。實際工作中碰到什麼樣問題,除了google/bing之外,最方便的莫過於查手冊了。
2、Julia 的Package的主頁。Julia現在已經有了非常多的擴展包,比如廣義線性模型的GLM,整理統計數據的DataFrames,畫圖的Gadfly,最優化的Optim,保存成Matlab類型數據的MAT.等等等等。這些包的使用方法基本上都可以在很快的使用『Julia+package name』在bing/google上搜索出來。當然,搜索出來的很多都是在GitHub上的頁面,一般裡面會有非常詳盡的描述。介紹這些Package的時候我也會具體介紹。
3、一個針對與經濟性的Julia教程系列:http://juliaeconomics.com 。這個系列雖然還沒有太多內容,不過也是非常不錯的材料。比較有意思的是這個博客裡面有這麼一篇文章:《Why I Switched to Julia》,來自U. of Chicago的Bradley J. Setzler分享了他為什麼轉而使用Julia:因為他用python寫的程序24小時跑不完,Julia用了5分鐘給了他正確的結果:
I am currently estimating a structural econometric model of game-theoretic parent-child interaction. Using the standard implementation of Python (the code is written entirely in NumPy and SciPy with data prepared by Pandas), the optimizer ran for 24 hours, then terminated due to the 5,000 iteration limit. It was converging smoothly, but never quite arrived. While waiting for the estimates last night (and growing increasingly impatient), I installed Julia and its packages, learned how to program in Julia, rewrote the estimation in Julia, and this morning successfully optimized the likelihood in Julia.
The contrast is staggering: the optimization that didn’t converge after 24 hours in Python converged after only 15 minutes in Julia while Python was still running on the same processor. Julia was already achieving a greater likelihood than Python after only 5 minutes even though Python had a 20-hour head start. They are both using the same optimization algorithm (including numerical tolerance), and the structure of the code is identical. Julia evaluates the likelihood in 0.5 seconds, while Python requires 21 seconds per evaluation, so Julia is about 40 times faster in the function evaluation, and about 100 times faster in the optimizer (I’m giving Python the benefit of the doubt even though it never converged).
這位大神在等待他的Python結果的無聊時間裡學會了Julia、用Julia重寫了程序,運行,15分鐘給出了結果。他計算出,每次計算極大似然的時候,Julia的效率是Python的40倍,而優化的效率是Python的100倍。至於為什麼,可以看之前的那篇文章。
4、2011年諾獎得主Sargent做了個網站,http://www.quant-econ.net/ 裡面包含了很多常用的模型的Julia實例,包括Asset Pricing、On-the-Job Search等,而且網站還有Julia和Python的教程,對於經濟學生來說的確是不可多得的珍貴材料。
工作環境由於Julia的快速發展,Julia再也不是只有醜陋的純字符界面的程序語言了。一些不錯的IDE已經出現,雖然比起Python來還是差了很多,不過基本上已經可以用了。這裡介紹我比較熟悉的兩個工具:Juno以及Sublime。
首先是Juno,這是Julia官網上推薦的IDE,雖然比較簡陋,不過已經能夠很好的滿足日常需求了。而且Juno在Windows/Linux/Mac上都可以使用,跨平臺特性非常好。
Juno可以從Julia的官網進行安裝。不過如果是Windows或者Mac用戶,想要在Terminal裡面直接運行Julia,還需要一點配置。以mac為例,可以直接編輯~/.bash_profile 文件,插入下面一樣:
export PATH="$PATH:/Applications/Juno.app/Contents/Resources/app/julia/bin/"
重新啟動Terminal就可以直接數據Julia使用Julia了。當然,如果不做上面一步,Juno還是可以使用的。
Juno的界面非常簡潔,首次打開有個Tutorial,跟著這個Tutorial做,就能學會Juno了。
比如一個簡單的程序:
直接輸入\就可以輸入latex代碼,β就是這麼輸入進去的。當然如果你高興也可以使用中文作為變量名,當然最好不要這麼做。
使用Evaluation菜單的Eval Block就可以讓選中的程序運行,並顯示出結果(如圖)。
此外圖也可以在Juno上面顯示:
![]()
雖然Juno很酷炫,但是我還是不是很喜歡。因為平時經常寫不止一種語言,因而對我來說,熟練使用一種編輯器非常有必要。我個人的偏好是使用Sublime,因為插件多,用著比較順手,對Julia的支持雖然還沒有非常的豐富,但是對我來說已經夠用了。
此外,Git社區出的編輯器Atom也是非常不錯的選擇,而且已經有了對Julia的強大支持。感興趣的可以看這個網頁:https://atom.io/packages/language-julia ,我就不多說啦。
如果使用Sublime,需要一些配置步驟才能做到「方便」。首先,Sublime並沒有對Julia的原生的語法高亮,所以第一步是安裝語法高亮。可以先去https://packagecontrol.io/installation 按照提示給Sublime安裝一個Package Control,然後再從Sublime的Preference裡面找到Package Control,選擇Install Package(或者control+shifit+p/command+shift+p,輸入package control,選擇Install Package),彈出來的框中輸入Julia,選中就可以了:
![]()
然後配置build system。選擇Tools->Build System->New Build System... 彈出來的文件中輸入:
{ "shell_cmd": "julia $file"}
默認保存路徑保存為「Julia.sublime-build」就可以了。這樣以後寫完程序,直接按control+B/command+B就可以直接運行了: