Python - 萬能又簡潔的程式

無可否認,Python擁有龐大的Library支持,令到開發者們(包括筆者)都能夠加快開發的速度。有不少對數據有興趣的朋友,心裡都有同一個疑問: 到底用R或是Python做數據分析會比較好了?網上也有很多的這類的問題,一些有經驗的基本上也是同一樣: 你喜歡就好了。你可能會覺得這個答案有點不負責任,但其實選那個程式語言真的沒有所謂。因為R有CRAN (The Comprehensive R Archive Network),這也是一個強大的Python Packages,有很多R的用家跟粉絲開發不同的分析的功能; 而Python也有很多Open Source的Library作數據分析,基本上R有的功能,Python也有,運算速度也是差不多,所以選擇自己喜歡,熟悉的就好了!而筆者我會選擇Python,畢竟我同時是後台開發者,也是用Python Programming去開發,對它的熟悉程度一定會比我曾在大學學習的R高。現在,靠著它幾個Packages來做資料提取,處理,分析,建模,已經解決不少的難題了!


下載及安裝
請根據你的OS(操作系統)和以下的步驟來安裝Python, 跟PIP(用作安裝其他的Package)

Mac
1. 下載 2.7.x version in https://www.python.org/downloads/
2. 開啟並依照指示安裝Python
3. 安裝,開啟Terminal(終端機)和輸入:
$ python
>>> quit()      離開Python Shell


4. 開啟Terminal(終端機)及安裝PIP:
$ sudo easy_install pip
$ sudo pip install --upgrade pip
Window
1. 下載 2.7.x version in https://www.python.org/downloads/
2. 開啟並依照指示安裝Python
3. 設定 PATH 變數

開啟我的電腦,右鍵點擊內容


點擊環境變數去更改PATH變數

選擇變數:PATH 和在變數值的最後面加上";C:\Python27\;C:\Python27\Scripts"


4. 開啟 CMD (在開始 輸入cmd便會出現)並輸入:
> python
>>> quit()     Quit the Python Shell

Successfully execute python in CMD!
5. 下載 get-pip.py
6. 開啟 CMD 並輸入 (假設你把get-pip.py儲存在桌面上):
> python <directory>\get-pip.py


7. 在CMD 升級 PIP:
> python -m pip install -U pip

Ubuntu
1. 在終端機安裝Python及PIP:
$ sudo apt-get install python-setuptools python-pip python-dev build-essential
2. 在終端機裡使用Python:
$ python
Successfully execute python and pip as well

應用在數據分析
現在大數據這個話題流行在各行各業,可是要做大數據應用的前題,首先你要先擁有數據,那麼它們都是從哪裡來了?一般我們會在HTTP請求 (HTTP Request)回來的回應或者直接從數據庫中獲取數據,收集回來的數據format一般是XML和JSON。個人比較喜歡JSON的樣式,純粹因為它比XML更直接和簡潔(笑)。Django是一個很熱門的伺服器框架,可以用作建立應用設式接口(Application Programming Interface),我也是習慣使用JSON去回應請求,把數據送到目標位置。

讀取 JSON 
假設你拿到一個JSON的檔案,為了讀取裡面的數據,我們先用Python寫好一個程式。

請從GitHub下載需要的文件:
1. data.json: 顧客的資料樣本(JSON檔)
2. read_json.py: 含有一個用作讀取JSON的Python檔

假設你已經下載一個JSON的檔案在桌面上,打開Terminal (CMD) or IDLE (Python原生的editor) ,並輸入("#"是我的comment):
> import sys,os,pprint   # 載入Python原生的Package
> desktop_dir = os.path.join(os.path.expanduser("~"),"Desktop")
   # 提取桌面的路徑和放進變數:desktop_dir
> sys.path.insert(0,desktop_dir)    # 加上桌面路徑,以致可以讀取自己寫的Python file
> import read_json   # 載入 read_json.py
> raw_data = read_json.import_json(os.path.join(desktop_dir,"data.json"))
   # 叫喚函數(import_json), 輸出的值放在變數: raw_data
> pprint.pprint(raw_data)    # 用pprint以更整清的格式顯示

小提示:
Python有很多的package使用,因為實在太多了,我只能解釋一些我們需要使用到的,詳請可參考 https://docs.python.org/2/library/index.html

非常的棒!你已經成功地獲取數據了!接下來,就要處理這些的數據

統計分析
來,一齊做些簡單的統計吧!
首先我們要安裝兩個很好用的NumPy and SciPy模塊。

Mac
$ pip install numpy scipy
Window
> pip install numpy
下載 installation package ,然後執行和依照指示安裝 SciPy
Ubuntu
$ sudo apt-get install python-numpy python-scipy python-matplotli

好!靠著NumPy的幫助,我們可以不用打很多的code,那麼我們首先把數據總結起來。
> import numpy, scipy
> age = []    # 宣告一個新的空白陣列變數
> for i in range(len(raw_data["profile"])):    # 把十個顧客的資料放在陣列裡
       age.append(raw_data["profile"][i]["age"])
> print numpy.mean(age)    # 叫喚在numpy裡面的mean的函數, 獲得年齡的平均數並顯示計算結果
> print numpy.std(age, ddof = 1)    # 獲得年齡樣本方差
小提示:
len(目標陣列): 這是一個函數去獲得多少個元素在目標陣列裡面
目標陣列.append: 一個函數把一個元素放進一個目標陣列裡


事實上,在第3行的code上,可以理解為 "for i in range(10):",因為有11個客人資料,我們重覆同一個動作11次,所以用了For Loop,但是,不是每一次的客人數量也是一樣,為了避免硬編碼,我們會從len(raw_data["profile"])去得到客人的數目,就算下一次有369個客戶資料,也可以重用這段coding.

當然,NumPy和SciPy已經有很多的統計功能,更多的資料可以在http://docs.scipy.org/doc/ 搜找啊!

希望剛學習Programming的朋友們,能在這個小小的教程學會Python。當然之後也有不少的應用,之後我也會每一個Topic去示範Python應用在更高階的統計和機器學習。如果有什麼問題建議,不妨和歡迎提出來,大家交流一下啊!

Comments

Popular posts from this blog

Excel VBA - 自動生成分析報告

Boosting vs Bagging? 別再胡亂用了!

機器學習之陷阱 - Imbalance Class Classification