顯示具有 Perl模組(module)的使用 標籤的文章。 顯示所有文章
顯示具有 Perl模組(module)的使用 標籤的文章。 顯示所有文章

2017年3月13日 星期一

使用Perl的Apriori Algorithm module做購物籃分析(Market Basket analysis)

【常見應用】
  1. 如果一個消費者買了產品A,那有多大的機會購買產品B?
  2. 如果買了A也買了B,那麼他還會購買什麼產品?
  3. 針對X產品做推廣,用以增進Y產品的銷售。


【原理】
關聯規則分析(Association)有很多種演算法,目的就是在眾多交易中找出品項與品項之間的關係,也被稱為購物籃分析 (Market Basket analysis)。

其中,最常用的就是 Apriori Algorithm (Apriori 演算法),透過支持度(support)、信賴度(confidence)、增益值(lift),作為找尋行銷組合的標準。

詳細內容網路上都有資源,我們就直接進入正題,各個程式語言都有相關的module可以用,舉凡 R、Python、PHP都有,接下來以 Perl 的 Data::Mining::Apriori module做示範。



【資料準備】
  • 將「產品ID與描述」寫到 hash table reference :
1,產品A
2,產品B
...

Data-Mining-Apriori-keyItemsDescription


  • 給予「交易資料」,每一行代表一個交易,都要至少有兩個品項:

1,2,3
2,3
1,3
...



【實作】
將資料整理後,接下來是配合需求調整參數。

Data-Mining-Apriori-support-and-confidence-and-lift


因為如果只用default值,會跑出太多組相關性不高的組合。


【結果】
原則上我會以高支持度、高增益值( > 1) 來做篩選,最後就會剩下這八組較為相關的組合,提供活動或推薦系統使用。

Data-Mining-Apriori-results-and-rules

Rule R1 顯示產品A與產品C有高度相關:

Data-Mining-Apriori-rules-and-items



【補充說明】
增益值 > 1,表示X與Y呈現正相關,規則才具有實用性。
增益值 = 1,表示X與Y呈現不相關,結果與亂數取得方式相似。
增益值 < 1,表示X與Y呈現負相關,比亂數取得之結果更差。



【小結】
不只是購物籃,只要能夠減少使用者選擇路徑,就能增加銷售與轉換,一樣也是可以用於遊戲中的「點數分配」、「裝備推薦」等。



以上介紹到這裡,還請各位大神多多給予指教。

2012年5月12日 星期六

Perl的模組應用 - WWW::Mechanize

WWW::Mechanize 是Perl裡很代表性的一個模組,
我們稱它為網頁代理人,它可以幫你做瀏覽網頁的動作,
包含:點擊連結、帳號密碼登入、擷取所需資訊等等。
因為是針對網頁做處理,所以建議各位要有一點HTML的觀念才容易理解。
在這裡先我們用簡單的例子來說明:
首先,我想先到google的首頁去,並且輸入CPAN下去尋找。



因此我們必須讓程式知道,要在搜尋欄位打上關鍵字,並且按下搜尋按鈕
每個欄位都會有自己的name值,我們可以透過右鍵→檢視原始碼來得知,


很暈對吧!事實上,很多瀏覽器提供的plugin(附加元件),
都可以讓原始碼排的很整齊,讓大家更容易瀏覽,
在這裡要推薦一個好東西,火狐(FireFox)上的一個plugin:Firebug
Firebug可以把CSS、HTML等各自分開,讓使用者更容易閱讀原始碼。


因此我們可以看到,google上的搜尋欄位名稱是q (name="q"),
先做到這裡為止,我們來看程式碼:
 
use WWW::Mechanize; # 表示我要使用這模組
my $agent = WWW::Mechanize->new();# 建立一個新物件 $agent
$agent -> get("http://www.google.com.tw/"); # 讓$agent連到網頁
$agent -> field("q","CPAN"); # 在名為q的欄位填上CPAN
$agent -> click_button(number => 1); # 點選第一個按鈕 也就是搜尋
 
這樣就完成很簡單的,進到網站、填寫資料、送出。
接著,我們希望程式繼續往下探索網頁,



點選了超連結後,會進入CPAN網站中,搜尋的分頁。


因為我們已經讓程式點選搜尋按鈕了,
所以剩餘的程式碼為:
$agent -> follow_link(n => 29); # 點選第29個超連結
my $content = $agent ->{content}; # 把整個內容都取下 存在變數
open HTML, ">Agent.html"; # 開啟一個新檔案
print HTML $content; # 把$content存放的值都存進新檔案
 
這裡的例子,是把所有資訊都存到$content裡
表示說,如果有必要,可以再利用正規表示,
把$content裡,感興趣的東西留下。
 
事實上到這步,已經算是有實質功能了,
不少灌票程式都是利用這模組稍作修改,
只是把填寫的欄位變多一點(ex: 帳號、密碼),後續就一樣是,
點第幾個連結、到第幾個頁面、投票給哪位候選人等等。
 
最後,這模組其實能使用的功能很多,絕對不只上面範例中所使用的,
有興趣想深入研究的,CPAN網站上的WWW::Mechanize
有很詳細的介紹。


2012年3月26日 星期一

Perl模組(module)的使用

Perl模組(module)的使用

之前提過,副常式(Subroutine)可以增加程式的重用性,

我們把會重複使用的函式寫進副常式中。

但如果又寫了另外一支程式,同樣要用這些函式呢?

大多數情況,我們會直接把原本的副常式也直接複製進來使用,

但這樣的使用方式,會有一個問題,

萬一往後發現了這個函式有錯誤,

那勢必是要把所有用過該函式的程式,全部改過。

因此,讓某些程式需要用到同一個函式時,都使用同一個模組(module),

如此一來,要修改函式時,只需要修改模組(module),

有使用到這模組(module)的各程式也都會同時套用到。


Perl因為擁有很豐富的模組可以自由使用,而使得Perl有一定的使用族群。

CPAN (Comprehensive Perl Archives Network)

是學Perl不可不知的網站。

CPAN上面充滿了各式各樣的模組,大部份的需求幾乎都有現成的模組,

可以用來解決你的問題。

不過,畢竟資源很多,要確切找符合到自己需求的模組,需要花點時間,

在這裡,我們先討論怎麼安裝及使用模組,

之後會陸續補上其他頁面,來解釋各模組如何使用。


安裝

如果你是跟著阿逸的方式,安裝ActivePerl的話,

那麼從[開始]→[程式]→ActivePerl的資料夾中,會有Perl Package Manager

開啟Perl Package Manager會需要點時間,它可以讓你很輕鬆地安裝你所需要的模組。

開啟後,上方可以輸入你要找的關鍵字,找到模組名稱後,

按下右鍵會顯示 Install 以及該模組名稱。


勾選後,模組的圖案會有個綠色加號,※注意 此時還不是安裝

勾選完成後,右上角有個綠色箭頭,

按下去才是真正開始安裝模組,

安裝模組會花些時間,完成後,模組的圖案會改變。

安裝的部分就到這裡,

接下來就是進入一些好用的模組實例練習了!