20130325 mldm monday spide r

Preview:

Citation preview

20130325 MLDM Monday

R 上的 spideR 寫作軍火庫

by c3h3 

TW useR Group & MLDM Monday

● http://www.meetup.com/Taiwan-useR-Group/● http://www.facebook.com/TaiwanUseRGroup/● http://www.youtube.com/user/TWuseRGroup/● http://tw.use-r.net/

關於講者

● Chia-Chi Chang (c3h3)● Chief of Data Scientist of InnovoTECH● TW useR Group / MLDM Monday 創辦人之一

● R 、Python 和 Maple 的愛用者● 平時喜歡分析各種類型的資料、買賣金融商品;另外,也喜歡閱讀各種數學理論、模型、以

及它們的應用......

講題大綱

● spideR 寫作的預備知識

● spideR 的一些小範例

● spideR 的架構

● spideR 的寫作流程

● spideR 的一些小技巧

本次演講適合初學者請各位高手們忍耐一下囉!

預備知識

spideR 寫作的預備知識

● 什麼是網站?● 網站的結構?● 網址的祕密?● 網站資料的種類?● 分析的工具

什麼是網站?

設計師眼中的網站

工程師眼中的網站

那... spideR 眼中的網站呢?

網站的結構?

網站的結構 (分類)

● 前端 V.S. 後端

● Model + View + Controler (MVC)

● Static V.S. Dynamic (Ajax)

MVC結構

網址的祕密?

網址的祕密

● URL 中帶有規則

○ 有些網址會把訊息藏在 URL 中○ 然後,在由後端的 URL Dispatcher 解析

● URL 中帶有規則的範例:

○ http://tw.stock.yahoo.com/d/s/major_2451.html

○ URL規則: major_StockID.html

網站資料的種類?

網站資料的種類?

● Page (HTML)● Data (JSON/XML...) ● File

網站資料 Data (JSON/XML...)

常用的工具

常用的工具

● Google Chrome○ Developer Tools

● Firefox○ Firebug○ Hackbar○ Cookie Manager+

● cURL● Wireshark

一些小範例

使用技術

● Example1_Extract_TWSE_Stock_IDs.R● R○ XML::htmlParse○ XML::readHTMLTable○ charToRaw○ gsub

● Reference:○ [共筆Blog] 去除 " " 的方法

○ R 的 regular expresssion 講義

[Example2] 抓取大戶進出:

使用技術

● Example2_Extract_Stock_Major_Data_Fom_Kimo.R

● R○ XML::htmlParse○ XML::readHTMLTable

回家作業:

● 綜合前兩個範例:

○ 抓取全部代碼的 ID○ 抓取 OTC 的資料

■ Hint: OTC_IDs○ 將所不同 ID 的 Data Table 用不同名稱命名

■ Hint1: 可以讓函數 output Data Table■ Hint2: 也可以用 assign 函數

○ 在 Data Table 中使用一個新欄位來存 ID ===> 建立總表

○ 在 Data Table 中使用一個新欄位來存日期

[Example3] 抓取0050代碼:

使用技術

● Example3_Extract_0050_IDs.R● R○ XML::htmlParse○ XPath Parser in XML

● Reference:○ http://www.w3.org/TR/xpath/

[Example4] 利用 ID 搭配 quantmod:

使用技術● Example4_Get_Stock_Data_From_Yahoo

Finance.R● R○ quantmod::getSymbols○ quantmod::chartSeries○ get○ assign

● Reference:○ Quantmod Web○ Quantmod Slide

回家作業:

● 可以利用 R 中的 rjson 套件,練習處理看看賞面的網頁?

● Reference:○ rjson: http://cran.r-project.

org/web/packages/rjson/rjson.pdf

使用技術● Example6_Download_CSV_File_From_T

WSE.R● R○ RCurl::getURL○ file■ writeLines■ readLines

○ textConnection○ read.table

回家作業:

● 接續上方範例......○ 運用 apply 對每一行都 parse 開○ 利用長度去掉不要的資料

○ 把留下的資料運用 do.call(rbind, data_list) 合成

○ 然後,製作成Data frame格式並存入 RData 檔案之中

[Example7] 看code學寫code

[Example7] 下載zip檔

使用技術

● Example7_Download_ZIP_File_From_Taifex.R

● R○ download.file○ unzip

[Example8] 當遇需要 Cookie 時

使用技術

● Example8_Download_CSV_File_From_Taifex_With_Cookie.R

● R○ RCurl::getCurlHandle○ RCurl::getURL(url,curl=curlHandle)○ XML::htmlParse○ XML::xmlAttrs

回家作業:

● 接續上方範例......○ 練習用 readline 讀入 unzip 出來的 rpt 檔○ 並將 rpt 檔轉換成 quantmod 可以分析用

的 xts 格式

spideR 的架構

spideR 的架構

● Web Connector○ RCurl

● Data Parser (Cleaner)○ XML

● Data Center○ RData File○ DB (SQLite, MySQL, PostgreSQL,

MongoDB, Redis, ........)

spideR 的寫作流程

spideR 的寫作流程

● 確立目標?● 觀察網頁

● 頁面分類

● 分類頁面的 Connector 實作

● 分類頁面的 Parser 實作

● 資料庫比對與存取

一些小技巧

尋找「後台」的小技巧1 -- 監控

尋找「後台」的小技巧2 -- 找form

尋找「資料」的小技巧1 打開 hidden

尋找「資料」的小技巧4停用 JS (停用前)

尋找「資料」的小技巧4停用 JS (停用後:推薦商品消失)

Q & A

感謝大家

Recommended