[Julia] json2csv

用 Python 與 Ruby 都有編碼問題

Ruby 還好一點,但是讀取中文編碼的檔名就有問題了(像我 Windows 系統應該是 Big5,讀取 GBK 的就有問題)

julia> readcsv(“") # 預設是 Unicode,就沒有 python 和 ruby 的編碼問題,讀取檔名為中文也可以
julia> writedlm(“j.csv", a, ‘,’) # 這其實就是 writecsv(“j.csv", a),但 delim 必為 ‘,’

發現不要用 .csv,直接用 .txt 然後用 ‘ ‘ 隔開,在 excel 中載入時選擇空白分隔就好了

json.jl.JPG


http://julia.readthedocs.org/en/latest/stdlib/io-network/#Base.writecsv
https://github.com/JuliaLang/JSON.jl

julia> Pkg.add(“JSON")
julia> import JSON
julia> f = open(“file.json", “r")
julia> s = readline(f)
julia> j = JSON.parse(s)
Dict{String,Any} with 5 entries:
“newest_mids" => {}
“_id" => [“\$oid"=>"5563114712cc0e3e1ed725f1″]
“follows" => {[“uid"=>"3616152072″,"nickname"=>"反反常常-小小??"],[“uid"=>"2548
……
“uid" => “1431919253″
“fans" => {[“uid"=>"5549928463″,"nickname"=>"腄腄腄腄覺覺毛毛了了同同??"],[“uid"=>
……
julia> get(j, “uid", null) # get(collection, key, default), 其中 default 是如果找不到要回傳的值
“1431919253″
julia> for c in get(j, “follows", null)
println(get(c, “nickname", null))
end

[Julia] UTF-8 字串存取

我現在有個需求,要讀取目錄下所有的檔案列表,然後拷貝檔名的部分就好,不要副檔名
可以直接這樣:f = readdir(),如此會回傳一個 Array{Union(ASCIIString,UTF8String),1}
接著我們可以存取陣列來取的特定檔案名稱:

julia> println(f[1])
julia> f[1]
"likea玉儿躁郁症病患.csv"

注意! index 從 1 開始喔! 這是承襲 Matlab 和 R 的,應該是比較符合科學家邏輯吧!從0開始是電腦的角度
這裡有一篇關於 Julia 從 1 開始的討論:
https://groups.google.com/forum/?hl=en#!topic/julia-dev/tNN72FnYbYQ

為了實現我的主題,我先拷貝到一個字串中,並且我試著去存取指定的幾個中文字元

julia> s = f[1]        # => "likea玉儿躁郁症病患.csv"
julia> println(s[6])    # => 玉
julia> println(s[7])    # => error

Ooop!當你試圖存取 s[7] (看起來應當是 )時,會出現以下錯誤:

ERROR: ArgumentError: invalid UTF-8 character index
 in next at ./utf8.jl:80
 in getindex at string.jl:62

根據官網文件的說明:

UTF-8 is a variable-width encoding, meaning that not all characters are encoded in the same number of 
bytes. In UTF-8, ASCII characters — i.e. those with code points less than 0x80 (128) — are encoded as 
they are in ASCII, using a single byte, while code points 0x80 and above are encoded using multiple 
bytes — up to four per character. This means that not every byte index into a UTF-8 string is necessarily
a valid index for a character.

簡單來說,是因為 UTF-8 的每個字符編碼長度不同造成的,也就是說 雖然同樣都是 UTF-8,但是兩者的編碼長度不同, 可能只占用 byte 6,但 可能占用 byte 7-9 (假設),換句話說,length(s) 在 Julia 中是你所能看到的『字串長度』,但是實際上字串的『編碼總長(記憶體空間)』是 endof(s) 的值,以下馬上來實驗看看:

julia> println("length of s is " , length(s))
julia> length of s is 16
julia> println("end index of s is ", endof(s))
julia> end index of s is 30

解決辦法:我們可以透過 nextind(str, i) 這個函數來取得下一個合法的字串索引,下面我們用 for 迴圈來查看 s 這個字串所有 [1] 之後的合法索引

julia> for i = 1:endof(s)
           println(nextind(s, i))
       end
2       
3 
4 
5 
6 
9 
12 
15 
18 
21 
24 
27 
28 
29 
30 
31 # (刪除重複後) 
擷取.JPG

Hoho! 出現啦!
剛剛 s[6] 是合法的,所以我們印得出 ,可以看到下一個合法的索引是 9 不是 7
馬上印印看:println(s[9])

YA~!
接下來我們可以用 for i = i:endof(s)for c in s 來進行字串拷貝了~

[Julia] 集大成的科學計算新星

最近在調查比較想學習的資料處理語言
我的需求是要開源如 R、簡潔如 Python
剛好我在非資訊領域做科學分析的朋友說 Matlab 很容易寫(他以建構矩陣為例子)
找來找去,大概就是 Julia

j.JPG

這個語言野心極大,標榜結合了像 Python/Matlab/R 的易用和彈性,又兼具 Fortran 或是 C 的執行速度,能無縫銜接現有的 C/Fortran/python/R 所累積的龐大函式庫,又可以支援平行運算,並具有處理資料表格(data frame)的能力。

這麼剛好符合我要的需求 XD

它的創作者是一群用 Matlab 出身的 MIT guys,很有感啊!

Julia REPL 執行畫面

Julia_REPL.png

不過資料還很少,中文也是

以下是一些我覺得蠻喜歡的特性

變數預設採用 Unicode

var_name1.JPG
var_name2.JPG

這讓我想到了易語言周蟒

新舊定義 function 的方式

  1. traditional
julia> function f(x,y)
       x + y, x-y
       end
f (generic function with 1 method)
julia> f(2,4)
(6,-2)
  1. Functional
julia> ∑(x,y) = x + y
∑ (generic function with 1 method)
julia> ∑(2,3)
5
( ∑ in OS X is “option + w")

有三種使用 function 的方式

  1. genaral
    julia> f(2,3)
  2. apply()
    julia> apply(f, 2, 3)
  3. special operator syntax for certain function name
    (waiting)

function 回傳多個值的方法

回傳多個值.JPG
回傳多個值2.JPG

hkl31 大的 iThome 2014 鐵人邦幫忙系列文章:
Julia(1) – Why Julia?
Julia (2) — 2048遊戲的架構,Julia的安裝和暖身
Julia (3) — 2048遊戲實作開始
Julia(4) – 2048遊戲核心完成!
Julia (5) — Julia的標準輸出
Julia (6) — Julia的標準輸入,2048主程式迴圈
(其餘文章請參考作者 iThome 活動列表)

Julia for Matlab User 系列文章:
http://sveme.org/julia-for-matlab-users-i.html
http://sveme.org/julia-for-matlab-users-ii.html
http://sveme.org/julia-for-matlab-users-iii.html

Reference:
http://juliatw.readthedocs.org/zh_TW/latest/
Learn Julia in Y minutes