自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用Python進(jìn)行商品的親和性分析

開發(fā) 后端
就目前而言,大數(shù)據(jù)已經(jīng)越來越流行了,我們不管在什么領(lǐng)域上都能接觸到數(shù)據(jù)的,并且現(xiàn)在很多企業(yè)已經(jīng)累計(jì)了大量的數(shù)據(jù)。很多人開始朝向大數(shù)據(jù)開發(fā)以及大數(shù)據(jù)分析這兩個(gè)方向發(fā)展了。

[[396687]]

本文轉(zhuǎn)載自微信公眾號(hào)「菜J學(xué)Python」,作者J哥、小屁孩i 。轉(zhuǎn)載本文請(qǐng)聯(lián)系菜J學(xué)Python公眾號(hào)。 

大家好,我是J哥。

如今這個(gè)社會(huì)是一個(gè)數(shù)字社會(huì),在各大領(lǐng)域里面最為顯著的應(yīng)該是數(shù)據(jù)吧。就目前而言,大數(shù)據(jù)已經(jīng)越來越流行了,我們不管在什么領(lǐng)域上都能接觸到數(shù)據(jù)的,并且現(xiàn)在很多企業(yè)已經(jīng)累計(jì)了大量的數(shù)據(jù)。很多人開始朝向大數(shù)據(jù)開發(fā)以及大數(shù)據(jù)分析這兩個(gè)方向發(fā)展了。

那么也許你會(huì)問,哪這兩個(gè)方向更加值得轉(zhuǎn)行呢?很多人也在這兩個(gè)方向糾結(jié),在這里我想告訴你們的是,沒有什么是最優(yōu)選擇,你感興趣的才是最好的選擇。這邊,我選擇的是大數(shù)據(jù)分析!現(xiàn)在讓我們進(jìn)入數(shù)據(jù)分析的一個(gè)環(huán)節(jié)——數(shù)據(jù)挖掘。

01數(shù)據(jù)挖掘簡(jiǎn)介

數(shù)據(jù)挖掘旨在讓計(jì)算機(jī)根據(jù)已有數(shù)據(jù)做出決策。決策可以是預(yù)測(cè)明年的銷量,人口的數(shù)目,攔截垃圾郵件,檢測(cè)網(wǎng)站的語言。到目前為止,數(shù)據(jù)挖掘已經(jīng)有很多的應(yīng)用,即使這樣很多新的應(yīng)用領(lǐng)域也在不斷出現(xiàn)。

數(shù)據(jù)挖掘涉及到算法,最優(yōu)策略,統(tǒng)計(jì)學(xué),工程學(xué)和計(jì)算機(jī)科學(xué)相關(guān)領(lǐng)域的知識(shí)。除此之外我們還會(huì)用到語言學(xué),神經(jīng)科學(xué),城市規(guī)劃等其他領(lǐng)域的概念或知識(shí)。想要充分發(fā)揮數(shù)據(jù)挖掘的威力,算法肯定是必備的。(在這里推薦讀者去刷一刷LeetCode)

一般來說數(shù)據(jù)挖掘有這三個(gè)基本步驟:1、創(chuàng)建數(shù)據(jù)集。數(shù)據(jù)集能直接反應(yīng)一些真實(shí)事件;2、選擇算法。選擇一個(gè)合適的算法才能更好的對(duì)數(shù)據(jù)進(jìn)行處理;3、優(yōu)化算法。每種數(shù)據(jù)挖掘算法都有參數(shù),它們或是算法自身包含的,或是使用者添加的,這些參數(shù)會(huì)影響算法的具體決策。

02親和性分析案例

現(xiàn)在讓我們用一個(gè)例子說明。不知道你逛超市的時(shí)候,是否發(fā)現(xiàn)超市里面基本上都是按照商品的種類來分區(qū)域的,然而有些東西是存在例外的,一件商品的旁邊擺放著不一樣種類的商品。不知道你是否有發(fā)現(xiàn)這個(gè)現(xiàn)象,有沒有對(duì)此感到不解。這邊我想跟你說的是,這種擺放也是有道理的,這個(gè)道理是商品之間的親和性!

前置知識(shí):

  1. (1)defaultdict(int):初始化為 0     
  2. (2)defaultdict(float):初始化為 0.0    
  3. (3)defaultdict(str):初始化為 '' 

這里的defaultdict(function_factory)構(gòu)建的是一個(gè)類似dictionary的對(duì)象其中keys的值,自行確定賦值,但是values的類型,是function_factory的類實(shí)例而且具有默認(rèn)值。比如default(int)則創(chuàng)建一個(gè)類似dictionary對(duì)象里面任何的values都是int的實(shí)例,而且就算是一個(gè)不存在的key, d[key] 也有一個(gè)默認(rèn)值,這個(gè)默認(rèn)值是int()的默認(rèn)值0。

03代碼實(shí)現(xiàn)

現(xiàn)在進(jìn)行代碼部分:

  1. import  numpy as np 
  2. from collections import defaultdict 
  3. dataset_filename = "affinity_dataset.txt" 
  4. features = ["bread","milk","cheese","apple","banana"]  #猜一下這個(gè)是干嘛用的 
  5. X = np.loadtxt(dataset_filename) 
  6. print(X[:5])   #打印前五行的購物信息 

統(tǒng)計(jì)一下購買蘋果和香蕉的人數(shù):

  1. num_apple_purchases = 0 # 初始化一個(gè)購買蘋果人數(shù)的變量 
  2. for sample in X: 
  3.     if sample[3] == 1: 
  4.         num_apple_purchases+=1 
  5. print("{0} people bought Apples ".format(num_apple_purchases)) 
  6. num_banana_purchases = 0 
  7. for sample in X: 
  8.     if sample[4] == 1: 
  9.         num_banana_purchases += 1 
  10. print("{0} people bought banana".format(num_banana_purchases)) 

現(xiàn)在為了計(jì)算規(guī)則的置信度還有支持度,我們可以用字典的形式來存放計(jì)算結(jié)果:

  1. valid_rules = defaultdict(int
  2. invalid_rules = defaultdict(int
  3. num_occurances = defaultdict(int
  4. for sample in X: 
  5.     for premise in range(4): 
  6.         if sample[premise] ==0 : 
  7.             continue 
  8.         num_occurances[premise] +=1  #當(dāng)顧客有購買物品時(shí)key對(duì)應(yīng)的時(shí)value變?yōu)? 
  9.         for conclusion in range(4): 
  10.             if premise == conclusion:  #訪問同一個(gè)key 的時(shí)候是沒有意義的直接跳過 
  11.                 continue 
  12.             if sample[conclusion] == 1: 
  13.                 valid_rules[(premise,conclusion)] +=1 
  14.             else
  15.                 invalid_rules[(premise,conclusion)] +=1 

得到所有必要的統(tǒng)計(jì)量后,我們?cè)賮碛?jì)算每條規(guī)則的支持度和置信度。如前所述,支持度就是規(guī)則應(yīng)驗(yàn)的次數(shù):

  1. support = valid_rules 
  2. #置信度的計(jì)算方法類似,遍歷每條規(guī)則進(jìn)行計(jì)算 
  3. confidence = defaultdict(float
  4. for premise,conclusion in valid_rules.keys(): 
  5.     rule = (premise,conclusion) 
  6.     confidence[rule] = valid_rules[rule]/num_occurances[premise] 

聲明一個(gè)函數(shù),接收的參數(shù)有:分別作為前提條件和結(jié)論的特征索引值、支持度字典、置信度字典以及特征列表。

  1. def print_rule(premise, conclusion,support , confidence,features): 
  2.     premise_name = features[premise] 
  3.     conclusion_name = features[conclusion] 
  4.     print("Rule:if a person buys {0} they will also buy {1} ".format(premise_name,conclusion_name)) 
  5.     print(" - Support : {0}".format(support[(premise,conclusion)])) 
  6.     print(" - Confidence : {0:.3f}".format(confidence[(premise,conclusion)])) 
  7. premise = 1 
  8. conclusion = 3 
  9. features = ["bread","milk","cheese","apple","banana"
  10. print_rule(premise,conclusion,support,confidence,features) 
  11.  
  12. from  operator import itemgetter 
  13. sorted_support = sorted(support.items(),key=itemgetter(1),reverse=True

排序完成后,就可以輸出支持度最高的前5條規(guī)則:

  1. for index in range(5): 
  2.     print("Rule #{0}".format(index+1)) 
  3.     premise,conclusion = sorted_support[index][0] 
  4.     print_rule(premise,conclusion,support,confidence,features) 

以上就是我們這次所學(xué)的數(shù)據(jù)挖掘之商品親和性分析了。

 

責(zé)任編輯:武曉燕 來源: 菜J學(xué)Python
相關(guān)推薦

2009-03-04 09:11:20

類型親和性類型約束SQLite

2013-01-28 15:17:51

Windows Ser虛擬機(jī)

2024-03-05 10:34:33

KubernetesPod云原生

2023-09-27 22:33:40

KubernetesK8S

2009-10-26 10:00:08

2023-09-24 22:47:42

Kubernetes親和性

2020-06-05 14:29:07

PythonPandas數(shù)據(jù)分析

2021-06-15 08:02:55

Linux 進(jìn)程管理

2020-07-08 15:10:11

Python數(shù)據(jù)分析代碼

2020-12-25 15:24:24

人工智能

2009-02-04 10:30:47

2022-09-27 14:46:03

網(wǎng)絡(luò)安全計(jì)算機(jī)惡意軟件

2023-09-18 15:54:56

Python機(jī)器學(xué)習(xí)

2020-02-20 10:45:51

Python數(shù)據(jù)疾病

2012-11-02 16:19:10

2009-07-04 21:19:04

2021-01-20 08:30:00

數(shù)據(jù)分析機(jī)器學(xué)習(xí)IT

2014-03-31 10:51:40

pythonasyncio

2020-12-17 09:45:54

數(shù)據(jù)分析互聯(lián)網(wǎng)大數(shù)據(jù)

2024-06-24 21:18:48

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)