為什麼要學程式語言,不能用excel做大型資料的處理
不建議使用excel做大型資料處理的原因有2點,(1)excel行列的限制,2003年以前的版本,最大資料列筆數為65,536行、欄位數最多為256列,2007之後的版本雖然行列都有擴展,最大資料列筆數可達到1,048,576,行、欄位數最多為16,384列,但對於現在隨便動輒幾億筆的資料來說,這真的不算什麼,因此實務上可能會遇到一份資料得分成好幾個sheet儲存的情況。(2)資料量太大,可能會遇到excel執行上耗時的問題。
對於即將跨入大數據的人而言,SPSS雖然也是個不錯的選項,具有操作簡單之優勢,短期內可快速掌握,但也因介面以選單式操作為主,使用彈性相對受限,此外對於大數據處理效率也較差,如果未來工作上需經常面對大數據(例如:醫學資料庫、商業資料庫),建議可以直接選擇學習SAS、R或是Python。
以SAS進行操作
介面
執行SAS會經常使用到的視窗有幾個部分,以下簡述其用途:
(1)
編輯器:指令輸入,未來相關語法的編輯都在該視窗完成。
(2)
日誌:顯示指令執行結果,如果有程式上的執行錯誤,皆顯示於該視窗。
(3)
結果:分析結果的索引,方便使用者管理結果的部分。
(4)
檔案總管:資料集的管理,可於此處點選瀏覽資料內容。
資料匯入(proc import)
² Excel檔案匯入
proc import datafile="c:\test.xlsx" /*資料匯入的路徑*/
out=test /*資料匯入後的名稱*/
dbms=xlsx replace; /*輸入檔案的類型*/
sheet=" Sheet"; /*選擇讀取的工作表*/
getnames=YES;
/*第一行是否做為欄位名稱,如果不要改為NO*/
run;
Excel在2007年後的版本,存檔格式為xlsx,所以如果遇到檔案格式為2003年之前的相容版本(xls)或是逗號分隔(csv)的格式的話,除了在資料匯入的路徑上帶入相對應的副檔名外,dbms的地方也要帶入對應的檔案格式。
檔案格式
|
dbms
|
xlsx (Excel2007後版本)
|
xlsx
|
xls(Excel2003相容版本)
|
excel
|
csv(逗號分隔)
|
csv
|
² Text文字檔案匯入
這部分的匯入基本上也是使用proc import語法,但是必須額外說明的部分為txt檔分隔的方式,這部分在Excel匯入時不需要額外做設定,但是在txt檔讀入的某些情況上就需要做額外的設定了。
proc import datafile="c:\test.txt"
out=test
dbms=dlm replace;
delimiter=","; /*如果是用tab做分隔,這段可以省略*/
getnames=YES;
run;
分隔方式
|
dbms
|
tab分隔
|
tab
|
其他符號做區隔
|
dlm
|
如果txt檔分隔的方式為tab,那只需於dbms宣告為tab格式即可,但如果分隔的方式為tab以外的方式,例如:逗號分隔,除了dbms那邊要宣告格式為dlm外,還需要用delimiter來告訴SAS分隔的方式為逗號。
資料匯出(proc export)
² Excel檔案匯出
proc export data= work.test /*準備匯出的資料檔名*/
outfile="c:\test1.xlsx" /*資料匯出的路徑*/
dbms=excel
replace; /*匯出的檔案格式*/
sheet=" Sheet"; /*工作表名稱*/
run;
這部分匯出的邏輯跟Excel匯入雷同,所以如果要存成Excel其他格式,dbms同樣要帶入對應的檔案格式。
² Text文字檔案匯出
proc export data=
work.test /*準備匯出的資料檔名*/
outfile="c:\test1.txt"
/*資料匯出的路徑*/
dbms=tab replace; /*匯出的檔案格式*/
putnames=YES; /*匯出欄位名稱,如果不要匯出欄為名稱則改為NO*/
run;
以Python進行操作
介面
這部分使用Jupyter Notebook進行程式編寫,在使用之前務必先安裝Python,網路上有許多安裝的教學資源可供參考。不過對於剛入門的人可能會有個疑惑,IDLE為Python官方的整合開發環境IDE(Integrated Development Environment)註,為何不直接使用Python程式的IDLE進行編寫就好,還要額外再下載開源軟體?
主要是因為Python的IDLE互動介面雖然讓使用者可輸入一行程式並快速的得到執行結果,但對於需要編寫一段完整或是較為複雜程式的使用者而言,這樣的介面並不這麼合適。因此網路上有許多開源的軟體可供使用者下載使用,例如:Jupyter Notebook、PyCharm、Eric等等,待讀者熟悉後可依照自己的使用習慣選擇適宜的操作介面。
*註:IDE為整合編輯器、直譯器編譯器、除錯器之功能的互動式介面
² 開啟Jupyter
Notebook
Jupyter
Notebook安裝完成後,於命令提示字元(cmd)輸入jupyter notebook後,透過瀏覽器啟動開啟頁面即可開始使用。Jupyter Notebook在操作上相當簡單且便於編寫及儲存。
開啟後於右上角點選NEWàPython3開啟新的Python互動模式
Python互動模式開啟後,操作邏輯相當簡單,主要就2部分,程式輸入區(IN)、結果顯示區(OUT)。
資料匯入
處理資料格式(Data Frame)的資料需要使用Pandas套件,因此在開始前需再進行一個步驟,打開命令提示字元(cmd)輸入pip install pandas執行套件安裝。
² Excel檔案匯入
import pandas df=pandas.read_excel("C:\\test.xlsx",sheet_name="Sheet")
-透過import宣告使用pandas套件
- read_excel():然後再使用pandas中的read_excel()函數讀取excel檔案,可用相對路徑或絕對路徑,範例使用的為絕對路徑。
- read_excel():然後再使用pandas中的read_excel()函數讀取excel檔案,可用相對路徑或絕對路徑,範例使用的為絕對路徑。
-sheet_name:用來設定匯入的工作表名稱,且不論檔案格式是xlsx或xls皆可用read_excel()函數讀取。
² CSV檔案匯入
但這邊跟SAS的概念有點稍微不一樣,SAS主要是透過dbms來宣告讀入的版本,但pandas套件則是使用不同的函數來做讀取,因此讀取逗號分隔的csv檔案就需要使用不同的函數。當然不同函數底下的設定也會稍微不同。
但這邊跟SAS的概念有點稍微不一樣,SAS主要是透過dbms來宣告讀入的版本,但pandas套件則是使用不同的函數來做讀取,因此讀取逗號分隔的csv檔案就需要使用不同的函數。當然不同函數底下的設定也會稍微不同。
df=pandas.read_csv("C:\\test.csv",encoding="utf8")
編碼問題是這邊要稍微注意的地方,如果檔案有中文在read_csv()讀入時可能會出現無法解碼訊息,透過encoding變更編碼的方式,encoding預設為utf8編碼,這時可修改為cp950。但是如果仍出現無法解碼的問題,可以再試試看在裡面加入engine ="python"。
² Text檔案匯入
txt檔的讀入有2種方式。
方式1:透過read_csv()讀入
df=pandas.read_csv("C:\\test.txt",sep="\t")
透過sep設定分隔的方式。
方式2:透過read_table()讀入
df=pandas.read_table("C:\\Utest.txt",sep="\t ")
資料匯出
² Excel檔案匯出
import pandas df.to_excel('C:\\ test1.xlsx', sheet_name="sheet1") df.to_csv('C:\\ test1.csv',encoding="cp950")
邏輯跟匯入函數很像,就不再贅述了。
² Text檔案匯出
df.to_csv('C:\\ test1.txt',sep="\t")
變數命名原則
最後要再提到一個觀念,不論是SAS或是Python對於變數命名都有一定的規則,以下做個整理:
規則
|
SAS
|
Python
|
欄位長度限制
|
不超過32字元
|
沒有限制
|
欄位命名原則
|
1.
開頭須為英文字母或是底線。
2.
欄位名稱不可以包含中文。
3.
不可使用保留字當欄位名稱。
4.
大小寫無區別。
|
1.
開頭須為英文字母或是底線。
2.
除了開頭以外的字元可為其他英文字母、數字、底線、中文。
3.
不可使用保留字當欄位名稱。
4.
大小寫有區別。
|
因為變數命名有些限制,所以在匯入時要注意是否有違反規則的情況,以免出現錯誤訊息。
留言
張貼留言