2014/9/23

[筆記]R 與 Python 連接 MySQL 資料庫

[筆記]R 與 Python 連接 MySQL 資料庫方式

作業環境:Mac OSX
資料庫:本機 / 資料庫名稱 = a777
因為我個人對於 SQL 還蠻熟悉的,所以一些初步資料整理的工作我都會傾向在資料匯入時就完成,所以我很喜歡在 R 與 Python 中直接使用 SQL ,好處也是如果以後換轉到不同平台時,SQL 這個產業標準還能延用下去


R 連接  MySQL 資料庫

(1)安裝 RJDBC RMYSQL 套件
在Linux體系下安裝 RODBC 比較麻煩點,RJDBC 會省事很多

(2)語法範例程序:連接資料庫→取得資料→關閉連線→檢視資料

library(RJDBC)
library(RMySQL)

#定義連線字串
conn <- dbConnect(MySQL(), dbname = "a777", username="root", password="")

#將SQL查詢後的資料置於 data,資料型別為 data.frame
data = dbGetQuery(conn, "select * from MINING_BASE")

#關閉資料庫連線
dbDisconnect(conn)

head(data)
#進行資料初步檢視


python 連接  MySQL 資料庫

(1)安裝 MySQLdb pandas 套件
pandas 不是連接 MYSQL 的必要套件,但因為資料取得後也是要進行相關統計分析
所以也直接引用,pandas可以視為python中主要處理統計相關議題的重要套件

(2)語法範例程序:連接資料庫→取得資料→關閉連線→檢視資料

import MySQLdb
import pandas as pd
from pandas.io.sql import read_sql

# frame_query 是舊方法,pandas 建議大家改用新的 read_sql
# 引用 MySQLdb 用以連接 MySQL資料庫

#定義連線字串
mysql_cn= MySQLdb.connect(host='127.0.0.1',
                port=3306,user='root', passwd='',
                db='a777')

#將SQL查詢後的資料置於 data,資料型別為 pandas.core.frame.DataFrame
# rad_sql( "SQL語法"  , 連線字串)

data = read_sql("select * from MINING_BASE   "  , mysql_cn  )

mysql_cn.close()
#關閉資料連線

data.head()
#進行資料初步檢視

參考資料:
http://www.r-bloggers.com/mysql-and-r/


備註:


# Python 中還有一種方式是使用 sqlalchemy ORM
# 暫時用不到這種語法,但也做為一個補充放上來
# 參考網址   http://docs.sqlalchemy.org/en/rel_0_9/orm/
# 中文教學網址  http://chimerhapsody.blogspot.tw/2013/08/python-sqlalchemy-orm-part-1.html


import sqlalchemy
import csv
engine = sqlalchemy.create_engine('mysql://root@localhost/a777')
connection = engine.connect()
result = connection.execute("select MINING_DW_SUBSCR_NO from MINING_BASE")
row = result.fetchone()
#for row in result:
 #   print "your data in here ", row['MINING_DW_SUBSCR_NO']

fh = open('data77777.csv', 'wb')

outcsv = csv.writer(fh)
outcsv.writerow(result.keys())
outcsv.writerows(result)

fh.close
connection.close()


愈來愈討厭 big data 的字眼

愈來愈討厭 big data 的字眼

雖然本部落叫做 moe big data,目前看來好像是用來騙流量的…

主要的理由是目前有太多不切實際的理想都被歸入 big data

好處當然是相關領域會有大批的人力物力財力予以投入
但是缺點就變成什麼東西都是 big data,在討論事情的時候就變成雞同鴨講

好比最怕碰到一種人「不要和我談政治」,但是當你聽到他這樣說的時候,其實大部份的時候是很難理解他說的是「不要批判某一特定政黨」「不要批判某一候選人」「公司同事之間的相處之道」;因為廣義的來說,只要有人際關係、有利害,小則家庭可以有政治,中則公司有政治,範圍更廣的則有國家體制內的政治、國際政治,你說不要談是在講什麼哩

所以我轉念一想
也許本部落來談談一些基本 big data 下較為具體的技術與理論好了
畢竟太虛幻太美麗的事物,終究是鏡花水月…



Sublime text - 設定 SublimeREPL

目前使用 sublime text 3做為預設文字處理編輯器
主要使用的語言為 python 與 R


sublime text 預設支援 python 環境,只要設定[Tools]-->[Build system]-->[Python]
在編輯 python 的同時只要按下 cmd+b 就可以看到python檔案執行結果,
不過還是有些限制,所以需要單純的python作業環境

要達成這個目的最基本的就是安裝sublimeREPL 套件
(REPL指的是read-evaluation-print-loop)
簡單的想成就是在編輯器上面就直接可以執行 Python 與 R)

sublimeREPL相關設定如下:

(1)事先裝好 package control 這個套件
(2)安裝 sublimeREPL
(3)設定 user 使用檔
    sublime text 的使用邏輯是你先到預設檔案複製相關設定值到user設定,避免後續你反悔了想要改回預設值時找不到檔案(不過其實大部份的套件在github都直接找得到預設值)

我使用的環境是 mac osx,比較重要的設定如下提供參考:

    "default_extend_env":  {"PATH": "/Users/帳號/anaconda/bin:/Users/帳號/anaconda/bin:/Users/帳號/anaconda/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"},

(4)切換檢視方式
[view] --> [Layout] --> [Col2] (我是選2欄的版面)

(5)叫出Python作業環境
個人習慣使用 ipython
    方法1:[Tools] --> [SublimeREPL] --> [Python] -->[IPYTHON]
    方法2:快速鍵 shift+cmd+p ,輸入 reip
    (因為sublime有支援 fuzzy 蒐尋所以可以省略部分英文字母)

結果如下:
左側是 python 文件編輯區
右側是 iptyhon作業環境  (iptyhon的左則 tab是 R 的作業環境)
下側是 python 執行結果






2014/7/2

我認為的資料科學家作業流程

之前有幾次機會到不同場合分享 Excel 在實務上應用,不過當時的標題大致上都是「樞紐分析」「資料分析」,感覺上就是不夠大器。
上網找了一下,原來當年針對 Data Mining 這個主題就有人提出了的作業流程:CRIPS-DM
我覺得定義的還蠻完整的,也符合實務上遇到的狀況,更重要的是它將Business Understanding 與 Deployment 也納入,就是要提醒玩弄資料的工程師,千萬不要只將眼界完全專注在單一課題(例如:新演算法的開發),而是要對實際商業環境做出價值。好比你是個管理顧問,接到了個賣牛肉麵的案子,那設法將牛肉麵多賣出個幾千碗就是你的價值所在;總不能資料分析到最後:成年男性牛肉麵吃的比較多
File:CRISP-DM Process Diagram.png

上圖引用自 wikipedia
可以看到主要分為6大階段

Business Understanding
Data Understanding
Data Preparation
Modeling
Evaluation
Deployment
我自己的記憶理解方式如下:
以某校新到任教師為例,各階段對應狀況如下:
(1)Business Understanding
學生們的學習狀況為何? 要做些什麼來協助提高低學習意願學生的動機?
(2)Data Understanding
蒐集那些資料可以協助瞭解這個問題? 筆試成績、家長背景、學生姓別、年齡、居住地、國籍、經濟狀況 ?
資料想要蒐集得愈多,成本會愈高哦

(3)Data Preparation
蒐集資料的過程中,有些資料可以直接計算得到。例如:只要知道出生年月日,自然可推算年齡;
但同樣填寫小康,有人是住在大安精華區,有人是在荒山野嶺...是否有其他方式提供資料的正確性?
(4)Modeling
決定要採用那些分析技術→繪製直方圖、敘述統計、差異分析、學習狀況分類
(5)Evaluation
評估→此例中只是一個教師想要執行的專案,以目前電腦的計算能力,不太有評估的需要...但如果是整個國家的資料,則選用的分析模型是否合宜就楚重要
(6)Deployment
因材施教? 改變教室經營方式? 改變家長心態? 改變筆試頻率?
我想在教育機構,重視的應該是第(4)項:Modeling;
所謂的統計學、計算機概論、機器學習、程式寫作,都可以視為是這塊...
不過其實在實務上,有些項目還真的不好畫分
比方說在 Big Data 時代,很多資料並不像是當年在喊 Data Mining 時資料是由廠商自行蒐集而來的結構化資料,現在有很多資料是屬於非結性構資料;所以說啦,Big Data是個強調混搭的時代
只要有心的話,廠商也可以設定一個 Facebook 粉絲頁;或是廠商可以利用程式監控敵對企業專利申請的狀況...再簡單一點,賣冰啤酒的廠商可以取得氣象預報的各項資料來研擬各種行銷策略
我把以上的流程,再和The input-process-output (IPO) model 結合如下:
Moe
資料科學家作業流程
CRIPS-DM IPO 對應技術分類
(個人意見)
Ⅰ-定義問題 Business Understanding Input 產業分析
商業知識/邏輯
Ⅱ-取得資料 Data Preparation + Data Preparation Input Databse System
Information retrieval systems
Ⅲ-模型分析 Modeling + Evaluation Process 統計學
機器學習
Social Network Anaysis
Ⅳ-行動應對 Deployment Output Visualization

這樣的畫分一定有很多爭議…
好比 Social Network Anaysis 中也會有大量的Visualization(視覺化)技術啊…不過我想在學習的過程中,這對於方向感的建立是相同重要的,所以我還是會將視覺化技術給獨立化出來。而實務上的確也會有那種面對複雜的問題,無法判斷各種指標的權重應該如何決定時,將所有資訊轉化成一張圖形就決定的狀況發生…
如果本網站是一本書的話,那我想這篇文章的重要性就如何目錄吧 微笑
備註:
資料科學家(data scientis)是 Big data 炒得火熱之後出來的新名詞;
最簡單的定義就是,資料科學家的統計學比程式工程師好,資料科學家的程式能力比統計學家好…

2014/5/16

在 PTVS 底下使用 IPython

PTVS 指的就是微軟 Visual Studio 底下的Python開發環境,只是微軟喜歡再搞個簡寫,證明他們為了這個東西有弄出一個專案;

而IPython是Python底下一個很出的 IDE ,後來上網查原來 REPL 是有特殊意義在的 ,維基的說明如下

「讀取-求值-輸出」循環英語Read-Eval-Print Loop,簡稱REPL)是一個簡單的,互動式的編程環境。這個詞常常用於指代一個Lisp的互動式開發環境,但也能指代命令行的模式和例如 APL, BASIC, Clojure, F#, Haskell, J, Julia, Perl, PHP, Prolog, Python, R, Ruby,Scala, Smalltalk, Standard ML, Tcl, Javascript 這樣的程式語言所擁有的類似的編程環境。這也被稱做互動式頂層構件(interactive toplevel)

而在 PTVS 使用 IPython 其實也蠻簡單的,只要看底下這篇文章就可以

Using the IPython REPL with PTVS

但我還是將個人心得說明如下

在 Visual Studio 2013 中,你可以裝好幾個 Python 的編譯器,例如像我就裝了:

image

其實我不是要展現我個人任重道遠,而是常常會發生一些奇怪的狀況最終就變成了這種情形;

我來說一下我目前主要的心得,我不知道微軟用了什麼機制去區分 Python 32 bit 與 64 bit版本,因為就我個人的狀況是2套都有裝,而在套件上,有些套件是 32bit 有些又是64bit ,所以如果你是用32 bit的Python 但是配上 64 bit的套件光是在 import 階段就會出現問題….

但是好在 Visual Studio 可以隨時切換你要的編譯器,因為我把 IPython 要安裝的套件下載成 64bit 但是安裝在 32 bit 的Python 資料夾中,但是只要我選擇 64 bit 的Python 編譯器就不會出現問題….

另外在 Using the IPython REPL with PTVS 的連結中,有建議直接下載 SicPy 編譯好的 exe 套件,就直接依他的指令下載回來安裝吧;因為Python的套件,很多都有相依性,就好像你要去參加婚禮一樣,要穿的服裝都要照一件的規定來….而這種編譯好的套件,就好像直接像禮服公司拿衣服,減少了很多相依性上的麻煩

最終安裝好了,再記得到 Visual Studio 中將互動介面改為 Ipython這樣子就比原先純文字型的互動模式更加棒了

另外這個套件中,有提供在互動介面中就直接輸出圖形的能力

image

我覺得這真的是很棒的功能

可以多試試看,畢竟 Python 在科學運算上因為資料結構可以實作很多在 R 中不容易實現的功能,可以多加利用一下

另外 IPython 另一個重要的功能就是可以轉成網頁編寫 Python 的平台(即為:IPython Notebook),我只能說因為少了微軟的加持再加上還有眾多網路系統設定要調整,我決定等到以後買了 Mac 與工作中確實有此需求才會進行實作…