2011年6月15日

[心得]gnuplot in action -- chapter 4

感覺這一章是一個比較凌亂的註解,我也無法歸類
一開始講到gnuplot其實指令很少,比方說plot/splot/replot, load/save, set/unset/show之外,幾乎就沒了,可是有大量的選項,這也是我之前就提到的,好些選項其實蠻單純的(P.S.gnuplot如果可以準備一個好的GUI,可以大幅度的降低學習的曲線)
有關data file的選項
數字型態:一般gnuplot使用e, E做為科學記號的模式,如果要使用fortran的d/q記號可以使用
set datafile fortran
註解:一般使用#,如果更改設定為!驚嘆號
set datafile commentschar "!"
欄位分隔:
set datafile separator ["{str:char}"| whitespace]
Missing Values
set datafile missing ["{str:str}"]
missing value的效果如下,其實missing value在某些特定領域是很有用的,只是一般我們用不到,missing value比較類似SQL中的null

gnuplot也支援字串變數,同時支援一些常見的字串函數strlen, substr, strstrt, words, word, sprintf, gprintf, system
plot ... with lables可以將資料當成字串,並且使用stringcolumn(n),其中n表示欄位次序,來使用,並且給了個很好玩的範例
set datafile separator ':'
set datafile commentschar "m"
plot [-20:150][:27] "/etc/passwd"  u 3:($0+2):( stringcolumn(1) . "\n" . stringcolumn(5) ) w labels 


至於其他的內容就看書吧

2011年6月14日

[心得]gnuplot in action -- chapter 3

第三章作者介紹了一些data file操作跟呈現的方式,以其一些其他的內容
對於一些大型資料檔案,資料是不斷匯入,不同的資料之間可以用一行空白隔開,這對gnuplot是有意義的,gnuplot用index來表示"段落",段落的編號由0開始,如果要畫第二個段落可以用
plot "data_file" index 1 using 1:2 w linespoints
index選項有index {int:start}[:{int:end}][:{int:step}]
表示也可同時繪製一組幾段的資料成為一個圖形
 plot "data_file" index 2:5:2
如果data file是以每一列一筆資料來說,gnuplot也可以繪製,使用every整合指令,對於每一列分別是x value,接著下一列是y value的交錯
plot "data_file" every 2 using 1:2 with lines
類似index,every選項有every {int:step}[::{int:start}[::{int:end}]]
對於一些需要fitting data的function,有很多smothing,觀察效果可以使用
plot "data_file" u 1:2 t "datas" w lp, "" u 1:2 t "bezier" smooth bezier, "" u 1:2 t "cspoints" smooth csplines
smooth的選項有
bezier, sbezier, csplines, acsplines
另外可以即時的使用同一筆資料做處理,以$(前字號)加上行的名稱當指示,比說把y value開根號
plot "data_file" using 1:(sqrt($2)) with lines

這裡我略過了一堆有關於數學函數的處理,有興趣的人自行去看書吧,另外繪製函數的時候有個重要的參數就是sample rate(借用訊號處理的名詞),使用類似以下的方式來處理
set sample 300
有時候座標取log之後可以讓本來不明顯的曲線關係變成線性關係
set logscale
set logscale x
set logscale y
第一列為對x, y同時取log,第二三列分別對x軸跟y軸取lgo

2011年6月13日

[心得]gnuplot in action -- chapter 2

有些重要的內容條列如下
  • 預設的data file為每個列為一筆紀錄,每一筆紀錄使用空白分開,每一行代表一個資料
  • 每一筆紀錄使用,在二維資料如果不指定,大多以第一行為x value第二行為y value
  • 同一個data file可放置多行資料,使用using指令來區隔,比方x value放第一行,y1 value放第二行,y2 value放在第三行。plot "data_file" u 1:2, "" u 1:3,這樣來繪製兩群資料
  • 如果data file裡面只有一行資料,又不使用using指令,gnuplot會預設幫忙使用0開始,每次遞增1的x軸作為每個資料點的x座標
plot "data_file" u 1:2 w l, "" u 1:3 w lp
這裡有些縮寫,有些我之前已經寫過了
u:using
w: with
l : lines(這裡是小寫的L,在書寫上很像1(one) orz)
lp: linespoints
  • 後面不接data_file name,gnuplot預設使用之前使用過的data file
  • 在使用多個gnuplot指令繪製完成想要的圖形的時候,要把script儲存可以使用save "myscript.gp"
  • 載入用 load "myscript.gp"

  • 當然也可以在文字編輯器內完成script file再載入,其中多個指令可以寫在同一行但是要用;<=分號分開
  • 副檔名沒有強制定義,但是建議為.gp或者.plt
  • 繪製完畢的圖形可以做多重格式的輸出
set terminal png
set output "mygraph.png"
第一個指令設定輸出格式,第二個則是檔案名稱,接者下replot,gnuplot將輸出從新導向檔案
另外有個類似load指令的call,一般利用來建立macro,他可以接受0~9十個參數,使用方式類似command line,參數在script內分別以$0, ..., $9表示
set terminal push
set terminal png
set output "$0"
replot
set output
set terminal pop
以上是一個固定輸出png的macro,假設命名為output_png.gp,因為save並不會將set terminal的指令存下來,所以建立這個macro很方便輸出png圖檔,使用方式如call "output_png.gp" "mygraph.png"

2011年6月8日

[心得]gnuplot in action -- chapter 1

一個好的作者可以在一個簡單的例子裡面呈現出多樣性,這是我對一些技術性文章作者的評價,是否可以在一個小小的範例內展現出一個技術的多樣性,我認為gnuplot該作者在第一章的範例內至少得了80分
首先舉例了一個簡單的馬拉松比賽的統計時間與人數,直接把資料視覺化,變成了
跟一般的想像不大一樣,有時候我們會期待人們是normal distribution,很可惜這裡分成了兩群,也就是有兩類人,所以是兩個normal,這也說明了為何要讓視覺化,可以很直覺的反應資料的呈現方式,不是靠著猜測
讓我跳到這一章我覺得最重要的事情:資料視覺化是為了演譯資料的內容,而非包裝資料(我照意思翻譯的)。我真的覺得寫得非常好

作者建議的研究步驟有
  1. 劃出圖形
  2. 觀察並且辨識出行為模式
  3. 嘗試驗證資料圖形與行為模型之間的關聯性
  4. 反覆動作

接著作者給出了兩張圖片,用來驗證他模型跟資料之間的關聯性


最後提到gnuplot只是個繪圖工具,不是統計分析工具,也不是數值分析工具,這讓gnuplot更容易上手。
我覺得gnuplot這工具不夠"完美 ",也就是分析跟GUI的部分,以分析而言,這是工具當初設計的取捨,無法太嚴厲地去批評他,但是GUI就真的是讓我有點無言,以一個繪圖工具,竟然沒有一個好的GUI,實在很難令人接受,或許這部分可以讓人快點上手,可是相對的要花相當時間在調教一些參數上

gnuplot之boxes/bar chart應用

gnuplot最近的版本才加入了histogram,很難想像這樣一個特色到了蠻後面的版本才加入的,之前bar char幾乎都是用boxes來替代的,boxes的某個缺點是他會把boxes繪製在同樣的x座標上,也就是長條圖繪會重疊再一起,其實某種程度這也是個好處,因為可以用來比較多寡,但是有時重疊不容易看罷了
那如何把不同的長條圖分開,其實就是調整x座標了

set boxwidth 0.3    #先設定寬度比例
#接著column 1資料當作x座標 ,所以第二組資料必須是x+0.3
#因為這裡column剛好是step 1,如果不是的話可能要另外計算了
plot 'error_bar6.txt' using 1:2:3 title 'Simulation results' w boxerror lc rgb "#444444" lw 1.5,\
'' using ($1+0.3):4 title 'The order distances' with boxes fs pattern 1 lw 1.5

android的頻繁改版是否讓開發者心力更加分散?

目前主要兩大平板跟手持裝置的內嵌系統,主要是以android跟iOS為主力(抱歉~M$等你Win 8出來看看有沒有搞頭),改版是人人希望加入新功能的時候,不過有時改版也會帶來壞處
iOS改版幾乎都是半年或者一年一次,即使改版,他內部大部分的API修改似乎也沒有android來的大,如果一直頻繁的改版,這樣的狀況是否會讓開發者無所適從,進而分散了開發的力道,而影響到該系統的推廣呢?
我覺得android應該更加謹慎地思考這個問題,並且適當的設計,或許個人電腦可以依賴強大硬體裝置,不過跟個人電腦或者NB比起來,手機這類的裝置實在需要更優質的OS,而不是後面再來一直補破網一般

2011年6月3日

放棄Unity

試用過一陣子之後,我決定放棄Unity,Unity的確提供了不少功能,可惜他目前還不大完整
例舉幾個缺點
1.不知道程式被分類到哪邊,選單是很方便啦,可是有時候已經習慣過去的分類方式,一時之間不知道如何找到需要的程式
2.放大縮小的按鈕沒有放到最左上角,那個醜醜的ubuntu的logo放在那邊作啥,放大縮小按鈕比他還常被用到,竟然佔據了最快速的位置,讓關閉程式變得不夠快

不過他當然也帶來了不少好處,詳細的內容就留給大家自己體會,有空的話再來寫,不過目前暫時切換回ubuntu傳統的畫面

2011年5月30日

Ubuntu 11.04

還是因為喜歡嘗鮮,忍不住把ubuntu升級到11.04,開始體驗一下Unity的介面,當然感覺目前的"問題"還是不少,這些問題都是新的介面帶來的操作熟悉的問題
首先,一堆過去我在用的compiz操作一時不知道怎樣使用
其次,並非所有軟體的menubar跟Unity整合的很好,最明顯的就是LibreOffice,必須裝上lo-menubar這個軟體才可以
最後,我不知道怎樣把Ubuntu-One這東西從最上面的"menubar(??)"移除掉,以前只要按下右鍵就可以了

我對於新界面的感覺是,上下可以使用的空間稍微變多了一點,但是操作上的便利性未必是正面的,一切有待時間去證明。另外就是有人開始詬病說,新的介面是抄襲mac os的操作方式,至於這點我到是不予置評,如果說可以增加操作的便利性,何樂不為,只要再不侵犯著作權的範圍內,我想大家都是可以抄來抄去^^"

2011年5月2日

如何使用python寫Nautilus的script

http://www.ibm.com/developerworks/cn/linux/l-script-linux-desktop-2/index.html
這是一個很好的範例