Python 威力彩分析(上):爬蟲、Pandas表格處理

close up photo of lottery ticket

自從民國97年以來,威力彩成為台灣彩券的新玩法,也成為許多人想要一夜致富的管道,因為威力彩的頭獎獎金通常是台灣彩券當中最高的,因此會有許多民眾購買,希望能獲得頭彩,早日財富自由,然而中頭獎的機率微乎其微,甚至比被雷打到的機率還低,然而人們還是希望根據過往的開獎號碼,一探究竟,看看是否能找出規律。

因此本文章將會分成上篇與下篇,上篇將教大家如何爬取過去的威力彩開獎號碼外,並告訴大家如何用Pandas這個套件進行資料處理,讓資料成為我們需要的型態,下篇將會教大家如何找出過往最常開出的號碼,以及更進一步的分析。(爬取網站: https://www.pilio.idv.tw/lto/listbbk.asp?indexpage=1&orderby=new)

1. 首先先導入套件:

2. 爬取威力彩號碼的第一頁網頁:

在這幾行程式碼當中,我們首先先放入網址,接著用requests套件的get函數讀取這個網頁,再用encoding重新進行編碼

因為python讀取中文網頁的過程中,可能會產生亂碼,因此要透過編碼的方式,一般而言,常見的中文編碼有兩種分別是”utf-8”與”big5”,在這個網頁當中則是透過”big5”,進行編碼,

著我們將r.text放入StringIO再用pandas當中的read_html讀取,此時我們將會讀取到這個網頁中所有的表格,我們所需要的表格為這個網頁當中的第二個表格,因此dfs[1]選取第二個表格,

後打上df.head()看一下爬下來表格的前五列,如果要看最後五列可用df.tail(),即可。

以上此方法可以幫助大家,在大部分的時候爬取網頁當中有表格的資料。

3. 爬取威力彩網頁第2頁到最後一頁進行合併:

其實當一個網頁有很多頁資料的時候,他的網址通常都有規律性

因此首先我們將網址頁碼的部分用{}表示,並用迴圈表示出數字2到51,因為我們要的頁數是第2頁到最後一頁第50頁,所以range(2,51)

再用format函數將數字依序帶入,最後再將後面爬取的49頁與第一頁表格用concat函數進行合併,最後打上df就能看到我們爬取的所有50頁的資料了。

4. 將表格進行資料處理:

首先,我們爬取的每一頁表格當中,第一列都並不是號碼,而是欄位,我們要的是開獎號碼的資料,因此我們反向思考,只要選取第一欄資料不是”期數”的資料就好

在pandas當中我們用 ”!=” 表示不等於,接著將欄位名稱改成[‘期數’,’日期’,’第一區’,’第二區’,’備註’],我們能看到第一列是最近的開獎號碼,我們希望表格第一列是從第一期開始,因此df[::-1] 就能讓表格倒過來了

接著用set_index將”期數”設位索引值,我們接下來用pd.to_datetime此函數,將”日期”欄位改變成時間的資料型態,以方便做後續的處理

我們接著用datetime套件當中的dayofweek函數,他可以辨識出”日期”是星期幾,由於dayofweek辨識出星期一會顯示 ”0”,星期天會顯示 “6”,為了讓我們看起來更直覺,所以我們將dayofweek轉換後 “+1”,最後我們就能看到整理好的表格了。

5. 創造出一個新表格:

創造一個新的df_1表格,首先原先df表格當中的 “第一區” 當中的六個號碼,用逗號隔開在同一個欄位,我們先用split(“,”,expand=True)函數將”第一區”這欄資料根據逗號分開,expand=True代表資料會自動展開成六欄

接著給分開的這六欄取上欄名,然後將df表格當中的 ”第二區”與”星期”這兩欄資料放入df_1這個表格當中

最後將資料型態從Object改成int型態,這樣資料才可以變成數值型態,做後續分析型態。

6. 將第一區的六個號碼用逗號隔開存在同一個欄位:

這裡我們將”第一”到”第六”的六個欄位中的數值,用逗號隔開並合併到一個新欄位”第一區”當中

在這裡很多人會想說我們為何要合併後又分開,原因有兩個,第一個是分成六個欄位,我們在下篇的時候可以方便進行數字計算,第二個是此時你觀察df表格當中的第一區的3號球,顯示為”03”,然而在df_1表格中的第一區的3號球,顯示為”3”,這兩個表示方式意義不同,一個為字串,一個為數值

為了我們在下篇進行關聯分析時,不會讓結果產生亂碼不好解讀時,一律改成數值型態,以方便進行分析。

7. 儲存成Excel檔:

感謝您的觀看,本篇告訴大家如何爬取網頁當中的表格資料,並運用pandas當中的幾個技巧,進行資料處理,當中使用的幾個函數,例如:split、dayofweek、astype、set_index,都是在資料處理當中非常常見的函數,大家可以多加利用

下篇將會告訴大家如何找出最常開出的號碼,或是最常同時開出的兩個、三個號碼,也會進一步對威力彩開獎號碼有更深入的分析。

留言討論區