Python 極簡(jiǎn)關(guān)聯(lián)分析(購物籃分析)

關(guān)聯(lián)分析摘悴,也稱購物籃分析聂渊,本文目的:

基于訂單表檐涝,用最少的python代碼完成數(shù)據(jù)整合及關(guān)聯(lián)分析

文中所用數(shù)據(jù)下載地址:

鏈接:https://pan.baidu.com/s/1GPKpw4oFJL-4ua1VuMW6yA
密碼:ub6e

使用Python Anaconda集成數(shù)據(jù)分析環(huán)境架馋,下載mlxtend機(jī)器學(xué)習(xí)包窟她。包挺好,文檔不太完善漂问。

閑話少說赖瞒,開始吧:

Step 1. 載入包

import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

Step 2. 讀取原始數(shù)據(jù)包

df = pd.read_excel('./Online Retail.xlsx')
df.head()
image.png

Step 3. 數(shù)據(jù)預(yù)處理——選定樣本

df['Description'] = df['Description'].str.strip()
df.dropna(axis=0, subset=['InvoiceNo'], inplace=True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
df = df[~df['InvoiceNo'].str.contains('C')]

描述Description字段去除首尾空格,刪除發(fā)票ID"InvoiceNo"為空的數(shù)據(jù)記錄蚤假,將發(fā)票ID"InvoiceNo"字段轉(zhuǎn)為字符型栏饮,刪除發(fā)票ID"InvoiceNo"不包含“C”的記錄

Step 4. 數(shù)據(jù)預(yù)處理——處理為購物籃數(shù)據(jù)集

方法一:使用pivot_table函數(shù)
import numpy as np
basket = df[df['Country'] =="France"].pivot_table(columns = "Description",index="InvoiceNo",
              values="Quantity",aggfunc=np.sum).fillna(0)
basket.head(20)
方法二:groupby后unstack
basket2 = (df[df['Country'] =="Germany"]
          .groupby(['InvoiceNo', 'Description'])['Quantity']
          .sum().unstack().reset_index().fillna(0)
          .set_index('InvoiceNo'))

basket選擇法國(guó)地區(qū)數(shù)據(jù),basket2為德國(guó)地區(qū)數(shù)據(jù)磷仰,不要忘記fillna(0)袍嬉,將空值轉(zhuǎn)為0,算法包需要灶平。
用到的都是pandas數(shù)據(jù)整合基礎(chǔ)功能伺通,參考網(wǎng)址:
http://pandas.pydata.org/pandas-docs/stable/10min.html

整合后數(shù)據(jù)差不多長(zhǎng)這樣:


image.png

列名為商品名稱,每一行為一個(gè)訂單逢享。

Step 5. 將購物數(shù)量轉(zhuǎn)為0/1變量

0:此訂單未購買包含列名

1:此訂單購買了列名商品

def encode_units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1


basket_sets = basket.applymap(encode_units)
basket_sets.drop('POSTAGE', inplace=True, axis=1)

使用dataframe的applymap函數(shù)罐监,將encode_units在basket中的每個(gè)單元格執(zhí)行并返回

刪除購物籃中的郵費(fèi)項(xiàng)(POSTAGE)

Step 6. 使用算法包進(jìn)行關(guān)聯(lián)規(guī)則運(yùn)算

frequent_itemsets = apriori(basket_sets2, min_support=0.05, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)

frequent_itemsets 為頻繁項(xiàng)集:

image.png

Support列為支持度,即 項(xiàng)集發(fā)生頻率/總訂單量

rules為最終關(guān)聯(lián)規(guī)則結(jié)果表:

image.png

antecedants前項(xiàng)集瞒爬,consequents后項(xiàng)集弓柱,support支持度,confidence置信度侧但,lift提升度矢空。

參考:http://www.360doc.com/content/15/0611/19/25802092_477451393.shtml

Final Step. 結(jié)果檢視

rules[ (rules['lift'] >= 6) &
       (rules['confidence'] >= 0.8) ]\
.sort_values("lift",ascending = False)

選取置信度(confidence)大于0.8且提升度(lift)大于5的規(guī)則,按lift降序排序

image.png

結(jié)論參考理論知識(shí)禀横,自行解讀 :)
歡迎交流屁药,謝謝。

參考資料:http://pbpython.com/market-basket-analysis.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末燕侠,一起剝皮案震驚了整個(gè)濱河市者祖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绢彤,老刑警劉巖七问,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茫舶,居然都是意外死亡械巡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥耗,“玉大人有勾,你說我怎么就攤上這事」懦蹋” “怎么了蔼卡?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挣磨。 經(jīng)常有香客問我雇逞,道長(zhǎng),這世上最難降的妖魔是什么茁裙? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任塘砸,我火速辦了婚禮,結(jié)果婚禮上晤锥,老公的妹妹穿的比我還像新娘掉蔬。我一直安慰自己,他們只是感情好矾瘾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布女轿。 她就那樣靜靜地躺著,像睡著了一般霜威。 火紅的嫁衣襯著肌膚如雪谈喳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天戈泼,我揣著相機(jī)與錄音,去河邊找鬼赏僧。 笑死大猛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淀零。 我是一名探鬼主播挽绩,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼驾中!你這毒婦竟也來了唉堪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤肩民,失蹤者是張志新(化名)和其女友劉穎唠亚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體持痰,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灶搜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片割卖。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡前酿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹏溯,到底是詐尸還是另有隱情罢维,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站铺厨,受9級(jí)特大地震影響成畦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悬槽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞬浓。 院中可真熱鬧初婆,春花似錦、人聲如沸猿棉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萨赁。三九已至弊琴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杖爽,已是汗流浹背敲董。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慰安,地道東北人腋寨。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像化焕,于是被迫代替她去往敵國(guó)和親萄窜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容