Julia程式設計:新世代資料科學與數值運算語言
作  者╱
杜岳華、胡筱薇
出版社別╱
五南
出版日期╱
2019/06/01   (2版 1刷)
  

若無法看見預覽文件請按此下載

即日起五南舊官網僅提供書籍查詢,如欲購書,請至五南新官網 https://www.wunan.com.tw/
I  S  B  N ╱
978-957-763-382-8
書  號╱
1HAF
頁  數╱
352
開  數╱
20K
定  價╱
500 (特價 395)

※書籍推薦人
R社群主持人、微軟最有價值專家 孫玉峰   專文推薦
LinkedIn 大數據總監 管其毅    齊聲推薦
※推薦文
在這個日常生活幾乎離不開各種軟體的時代,一波學習程式的熱潮正在展開;而學習程式最好的方式之一,就是參與技術社群:除了在各個社群中常常會舉辦各種程式相關的教學及分享以外,跟技術開發者們交流的機會是能夠讓人學習到最多的。
在這些年主持以及參與了這麼多社群活動之後,相較於台灣大多數的技術社群,由岳華發起的 Julia Taiwan 特別有股親切感。可能是因為跟我們 Taiwan R User Group 一樣,在被應用的領域和早期使用者的組成都有著比起其他程式語言更多元、更不「資工本科」的味道;同樣的,在東吳大學積極推動巨量資料以及資料科學人才培育的筱薇老師,也帶領更多非資訊本科系的學子們認識資料科學的價值。
在這樣龐大的熱情以及專業下所誕生的這本教材,相信能成為由淺入深地學習 Julia 這個新興語言的最佳利器:不管是基礎的資料結構、運算,到使用各式各樣的套件完成工作,或是利用漸漸成為程式開發主流的函數式程式設計(Functional Programming)以及Metaprogramming來撰寫高效能的 Julia 程式,本書可說是無所不包。一起來體驗「Python 般的程式撰寫,如 C 般的運算效能」的Julia吧!

Taiwan R User Group 社群主持人
Microsoft Most Valuable Professional 微軟最有價值專家
現任 MoMagic 資深資料科學家
孫玉峰

杜岳華
Julia Taiwan 發起人,陽明大學生物醫學資訊所碩士,成功大學醫學檢驗生物技術學系及資訊工程學系雙主修,工研院人才培訓中心機器學習課程講師。熱愛數學、電腦科學及自然科學,希望成為計算生物學家,為開源軟體貢獻者。

胡筱薇
基督徒,Data Lab創辦人,為中央大學資訊管理所博士,美國普渡大學克蘭納特管理學院訪問學者;現為東吳大學巨量資料管理學院副教授,且擔任台灣人工智慧學校講座師資;機器學習、資料探勘、社群網路、智慧商業為主要研究項目;近年來,致力於協助企業建立數據團隊並培育資料科學人才。

推薦序
作者序一
作者序二

Part 1 從幾個重要的問題開始
Chapter 1 Julia 是什麼樣的程式語言?
Chapter 2 走入Julia 的世界
Chapter 3 上手Julia

Part 2 程式設計基礎篇
Chapter 4 控制流程 - 條件判斷與迴圈
Chapter 5 集合容器
Chapter 6 字元、字串與正規表達式
Chapter 7 函式
Chapter 8 遞迴
Chapter 9 例外處理

Part 3 程式設計物件篇
Chapter 10 型別
Chapter 11 方法
Chapter 12 資料結構與泛型程式設計

Part 4 串流與檔案
Chapter 13 檔案讀寫
Chapter 14 網路程式設計
Chapter 15 檔案與目錄管理

Part 5 程式設計進階篇
Chapter 16 再論型別系統
Chapter 17 函數式程式設計
Chapter 18 Macro及Metaprogramming

附錄:參考資料與學習資源、運算子優先權表、ASCII 字碼介紹與字碼表、跳脫字元表

論文Easy寫
:告訴你撰寫論
文的眉眉角角
論文統計分析實
務:JASP的
運用
質性研究的五種
取徑
選擇權商品模型
化導論:使用P
ython語言
(附光碟)
NVivo 1
1與網路質性研
究方法論
用JASP完成
論文分析與寫作
(完整版)



1HAFJULIA程式設計勘誤表.PDF
勘誤頁如需印出郵寄或傳真者,請洽客服:02-27055066#824



Chapter 1   Julia 是什麼樣的程式語言?
1. 程式語言
世界上的程式語言有上千種,但是最常用的、耳熟能詳的不過是其中的少數。程式語言可以說是現代工程師的最佳武器,舉凡從網頁設計到後端系統設計,甚至是資料庫或是作業系統,都是藉由程式語言來完成的。在網頁設計中可能會用到 Javascript,以及後端的PHP。如果是要寫 Microsoft 系列或是在 Windows 上跑的程式,會需要 C# 或是 ASP.NET 架構的幫忙。要撰寫可以在 Mac 上執行的程式會需要 Swift。如果是寫 Android 系列的 app 就需要熟悉Java。
如今資料分析跟機器學習的人會使用Python、MATLAB 或是R。操作資料庫會需要 SQL 語言。不要忘了效能極佳的 C 和C++,這兩個語言對於作業系統發展有極大的貢獻。在作業系統上,需要有可以跟系統互動的語言,像是 Linux 系統上就有Bash。
程式語言就是一個非常強大的計算機,一般計算機只能計算單一的數學式,工程用計算機可以計算更複雜的微積分,而程式語言可以處理的範圍超乎你的想像,我們可以利用程式語言設計出任何的軟體。

2. Julia 語言介紹
Julia是個新興的程式語言,由Jeff Bezanson, Stefan Karpinski,Viral B. Shah, and Alan Edelman 四人共同設計,在2009年開始這個專案,並在 2012年發表。他們希望打造一個這樣的程式語言:我們想要一個開源的語言,擁有自由的版權。我們想要C的速度和Ruby 的動態。我們想要有一個語法與內在表示有一致性(homoiconic)的語言,並且像 Lisp 一樣擁有真的巨集,但是擁有像Matlab 一樣熟悉好懂的數學符號。我們也想要像Python一樣好用的泛用型程式語言,處理統計要和 R 一樣,處理字串要和Perl一樣地自然,要有和Matlab一樣強大的線性代數功能,串接程式要如同shell一樣好用。要學習的東西極致簡單,同時能讓大多數認真的程式設計師寫起來開心。我們希望它是互動式的而且也是可編譯的。

在 2017 JuliaCon年會中,發表了Celeste專案,專案主要是協助在太空照片中尋找星系,分析了 178 TB 的太空影像資料,在僅僅14.6 分鐘當中,分辨 1.88 億個太空物件,這個專案完全以 Julia 語言寫成,並使用了一千三百萬個執行行序,最高效能達到了 1.54 千兆浮點運算(petaFLOPS)的極致表現。Julia 的巔峰效能讓他與C、C++ 和Fortran同為千兆浮點數運算的一員。達成這樣的成果主要是結合了了複雜的平行運算排程演算法還有最佳化單核心的計算效能,單核心的計算效能與前一個版本相比增進了約1,000倍。

3. Julia是個怎麼樣的語言?
Julia語言最大的特色就是他同時兼具高效能與高階的語法。"Write like Python, run like C." 更是他的代名詞。高效能是 Julia 語言的品質保證,在科學運算上,有極大的需求,無論是要計算複雜的科學方程式,還是處理統計模型,或是處理數據量極大的運算。人類都在追求更高效能的運算方式,有的人從演算法的改進下手,有的人從硬體的效能下手,少數人從編譯器的技術下手。Julia 就是一個藉由語言設計及編譯器技術上取得成功的最佳典範。
Julia 語言的初衷是為了科學運算,但是他的適用範圍不僅僅是科學運算,從資料處理到經濟學模型,從網站開發到嵌入式系統,甚至是自己設計一個程式語言,都有他的蹤跡。Julia語言已經是一個泛用型語言(general purpose language),就如同其他高階語言一樣,其他語言做得到的他也做得到。
Julia語言非常專注在數值運算上,使用者大多是來自不同領域的專家,所以對於不同領域專家的友善程度是非常重要的,增進程式的可讀性可以大大提高對非電腦科學專業者的友善程度。提高可讀性成為程式設計的重要一環,希望讓各領域專業人員都可以讀懂程式的內涵。
程式語言上,有不同的程式寫作風格,這稱為程式設計典範(paradigm),像是物件導向程式設計(object-oriented programming)、函數式程式設計(functional programming)、邏輯式程式設計(logic programming)、泛型程式設計(generic programming)等等典範。 Julia語言支援多典範 (multiparadigm)的程式設計風格,他支援基於多重分派(multiple d i s p a t c h )的(類)物件導向程式設計、程序式程式設計(p r o c e d u r a l p r o g r a m m i n g)、函數式程式設計與metaprogramming,本書後續會一一介紹。
內建有套件管理器是Julia語言的一大特色,以往的程式語言需要額外安裝套件管理器,並且透過套件管理器來安裝及移除所需要的套件,甚至有些語言不具備套件管理器,需要自行管理安裝的套件,這會給使用者帶來非常大的不便。內建套件管理器可以提供使用者在安裝及移除套件上的便利性,查詢套件也變得非常方便。內建套件管理器的設置是整個語言生態系非常重要的基石,在整個語言及套件的發展上,可以相當快速的讓使用者找到他們需要的套件,並促進整體發展。
Julia語言在一開始的設計上就考慮了了平行運算,他讓使用者可以非常簡單的將程式平行化。平行運算與分散式運算是Julia語言的核心功能之一,優雅的語法設計讓使用者可以善用執行行序及行程進行平行運算,並且內建叢集管理器讓使用者可以簡單地達成分散式運算。

Julia適合我嗎?
Julia適合以下這幾種人:
• 高度需要密集運算的人
• 需要設計複雜的演算法的人
• 需要高度平行運算或是分散式運算的人
• 希望從零開始設計系統的人

Julia與Python的不同之處?

Julia 與 Python,兩種程式語言在資料科學領域各有千秋,以下我們為大家做個綜合比較。
Julia與Python的區別[1]
1. Julia索引的下標是從1開始,而不是從0開始。
2. 索引列列表和數組的最後一個元素,Julia使用結束end,Python使用-1
3. for,if,while...等塊的結尾需要end,但不強制要求縮進排版。
4. Julia沒有分行語法支援:如果在一行的結尾,輸入已經是個完整的表達式,就會直接執行,或是繼續等待輸入。

Julia相比Python的優勢[2]
Julia 從一開始就是為科學和數值計算而設計的。因此,Julia 在此領域具有眾多優點也就不足為奇。它的優點如下:
1. 速度更快:Julia 的 JIT 編譯和型別宣告意味著它可以比未優化的Python快速,雖然Python可以通過PyPy或者Cython等方式進行加速,但Julia從設計之初就具有天然的速度優勢。
2. 友善的數學語法:Julia 的主要目標群眾是科學計算語言的使用者,因此,Julia 的數學運算語法看起來更像普通數學公式,使用者容易掌握。
3. 自動記憶體管理:記憶體管理,是指軟體執行時對電腦記憶體資源的分配和使用的技術。其最主要的目是如何高效、快速的分配,並且在適當的時機釋放和回收記憶體資源。Julia不需要使用者關心分配和釋放記憶體的細節,它提供了一系列針對垃圾回收的方法。這樣的好處在於,假設你從Python的轉移到Julia,你依然可以享有Python一樣的便利。
4. 平行性:充分利用機器上全部的可用資源,特別是多核心,數學和科學計算領域能夠迅速發展,Python和Julia都支持平行運算。但是,在平行計算方面,Julia 的語法比Python簡單,這樣降低了使用門檻,能夠得到更廣泛的應用。