QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1949|回复: 0
打印 上一主题 下一主题

[其他资源] 数据挖掘——如何利用Python实现产品关联性分析apriori算法篇

[复制链接]
字体大小: 正常 放大
杨利霞        

5250

主题

81

听众

16万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-12 18:44 |显示全部楼层 |倒序浏览
    |招呼Ta 关注Ta
    数据挖掘——如何利用Python实现产品关联性分析apriori算法篇
    + g( }0 X4 r8 w2 ?9 v/ H0 }0 z' o$ v
      G. g* [9 W$ R7 v- D在实际业务场景中,我们常常会探讨到产品的关联性分析,本篇文章将会介绍一下如何在Python环境下如何利用apriori算法进行数据分析。6 C4 P, F1 u+ \: J; l$ ]
    4 O! @! |) n/ Q
    1.准备工作
    3 c/ l* o* `' I* e& C/ I# D0 p! c, {! n如果需要在Python环境下实现apriori算法,就离不开一个关键的机器学习库mlxtend,运行以下代码进行安装:2 s! n5 l7 i4 S1 t0 [) c
    * h% }5 Z/ d$ a( {) u0 g: z$ |% U+ t
    pip install mlxtend( h6 }" g+ z7 V) l
    1
    # t; l' K0 M/ V( f7 J为方便进行过程的演示,在此构建测试数据:# n) |4 V! `9 q1 c" t$ l

    $ S' G9 ^& n* ^$ y% Cimport pandas as pd
    ( g4 Q3 I3 A! f2 ^) idf=pd.DataFrame({'product_list':['A-C', 'D', 'A-B-C-D','A-C','A-C-D','A-C-B']})
    : R  [* s8 |0 x1& Y& j- ^% Z' |
    2
    # R/ I9 e1 L. i3 v测试数据截图如下:
    4 q8 G2 x, Z: f9 u3 J3 r; X1 }6 p3 z' j2 }$ c  m; a% d" K) L0 x
    8 V0 g. Y: ^4 Y1 t
    对上述的数据进行以下处理:
    % w5 c  V4 w1 D: @! v; ?
    2 G: e) s( C5 W; B5 x* v, Cdf_chg=df['product_list'].str.split("-")
    6 O' @' Q; m. E; r/ f1 k+ z1
    1 _$ u9 C" I1 o5 N4 K1 d. e数据处理后,结果截图如下:
    , H- e5 z0 G2 l- x4 K! w0 a( h* |' d  [* {$ s
    截止到此,准备工作已经完成,下面个将会以df_chg作为参数进行建模。1 S- @  |0 G$ D2 f( s) h# B
    1 t% E' b: F) ^" ?) O" \: v
    2.核心函数及代码+ V) D% a9 W# g4 A' |" @( W
    2.1 数据预处理- y; w5 n) P: A% x
    对传入的数据进行预处理,使其成为符合要求的数据。mlxtend模块中有专门用于数据预处理的方法,在这里直接进行调用即可:
    ( r; o: Y( _; G' a1 L6 ~
    8 l1 b8 I8 }3 t  D#1.将传入的数据转换为算法可接受的数据类型(布尔值)
    ! }3 c. |$ ~& `( {0 ~4 P# i' @% Q% wfrom mlxtend.preprocessing import TransactionEncoder
    8 o& B. h6 [" F; \# A3 Cte = TransactionEncoder()
    , V& \  J' K3 m: t/ z4 r$ V! fdf_tf = te.fit_transform(df_chg)1 u$ \% a! h) V3 c: U8 x8 \/ M
    #为方便进行查看,生成dataframe$ @, q) P, V, E' f( l
    data = pd.DataFrame(df_tf,columns=te.columns_)4 P, I+ W4 x$ Z
    1  N& x  n/ q" z2 c
    20 p4 y, R* {0 n/ o' E4 d  U* Q% G2 _  j
    3
      ?+ \, c, H: ~5 q4 |, [+ w1 s4' x1 p0 e8 P5 K. h' r0 ^$ G$ [- g
    5) z; |% n/ X* T; L2 g6 ?& e
    6- |1 t2 }7 s+ p: K$ s* t' K! `) u
    运行以上代码后,传入的df_chg数据会被转换成符合要求的数据data,截图如下:
    " W" z5 K) X: w9 t0 a
    8 Z: W: @7 M' b" W1 f) [: {$ U2 E- x+ }8 ?1 y& K
    2.2 两个关键函数( x% E2 @1 l9 }& U
    apriori函数& ?: }7 Z* m( m  I  K- V0 x
    语法:7 S( }& j# Q/ y5 r( B, X. s0 B& S

    . k; S% C9 T9 V. S3 Capriori(df, min_support=0.5, use_colnames=False, max_len=None, verbose=0, low_memory=False): W( N4 c/ U: @5 Q
    1
    7 [+ v& ^; C* i; g" i, O参数详解:
    " f# C# Y! Z" U$ i: ^+ B5 w  M$ }- R0 m9 i5 F) c
    df: pandas模块中的数据帧,DataFrame形式的数据;
    ' g0 A- ?$ n& ^0 Amin_support:一个介于0和1之间的浮点数,表示对返回的项集的最小支持度。
    2 }' \) N/ S9 i# B3 e5 cuse_colnames: 如果为 True,则在返回的 DataFrame 中使用 DataFrame 的列名;如果为False,则返回为列索引。通常情况下我们设置为True。# ~  m, D! h! j! L$ H
    max_len: 生成的项目集的最大长度。如果无(默认),则计算所有可能的项集长度。- f3 k  f* p" ^2 Z
    verbose: 如果 > = 1且 low_memory 为 True 时,显示迭代次数。如果 = 1且low_memory 为 False,则显示组合的数目。; {( n6 @- M' f
    low_memory:如果为 True,则使用迭代器搜索 min_support 之上的组合。low _ memory = True 通常只在内存资源有限的情况下用于大型数据集,因为这个实现比默认设置大约慢3-6倍。
    # r5 Z! _2 a8 ]5 l. D4 ^. Yassociation_rules函数% o% g  T; M" r. G$ k' @
    语法:
    $ a& N0 v& Y4 E: s. R1 s4 W5 E0 l0 R' Z: v
    association_rules(df, metric='confidence', min_threshold=0.8, support_only=False)
    9 N0 `* a( e' d1
    1 r( G' o3 i2 [+ `1 \1 \$ d参数如下:
    8 h6 e) S8 Y) S) B/ O
    8 g2 w6 y) m( @df: pandas模块中的数据帧,DataFrame形式的数据;
    " D; G! U6 r  I( o: b3 j% Pmetric: 用于评估规则是否有意义的度量。可选参数有以下几种:‘support’, ‘confidence’, ‘lift’, 'leverage’和 ‘conviction’3 [) n' t& K7 @0 Y( i2 O* N* I# C
    min_threshold: 评估度量的最小阈值,通过度量参数确定候选规则是否有意义。. Z! [" |4 P: x' z" y
    support_only : 只计算规则支持并用 NaN 填充其他度量列。如果: a)输入 DataFrame 是不完整的,例如,不包含所有规则前因和后果的支持值 b)你只是想加快计算速度,因为你不需要其他度量。. u4 F. p% M  ?7 q7 a
    附带metric几种参数的计算方法:
    0 F- o. j* K$ ?5 x) n( y
    0 J, U+ C( O0 w9 W( o) Asupport(A->C) = support(A∩C) [aka ‘support’], range: [0, 1]
    # a  B; f9 T/ s9 D: A; b) j& L1 c" J  _" V
    confidence(A->C) = support(A∩C) / support(A), range: [0, 1]  }7 S- Y1 e0 p
    - y- p$ w% }7 b' @
    lift(A->C) = confidence(A->C) / support(C), range: [0, inf]: H* o% b# P9 ]' ~, Q  o% L$ |# d% w
    % r, U& X" P. \1 J, V* u, f
    leverage(A->C) = support(A->C) - support(A)*support(C),7 P9 X! a3 q, B$ D  C2 Q+ `
    range: [-1, 1]+ Z$ N7 ]7 x: a" y: @

    0 [! c" c6 s  r4 |conviction = [1 - support(C)] / [1 - confidence(A->C)],7 w) T( z( K* Q& M# i5 y
    range: [0, inf]
    3 r4 K! E8 a4 v6 m: |/ r" `) x4 z( u2 p$ v* {; b& Q3 ^
    3.实际应用案例
    ( t: @' O. M/ T# c- S3 Y以下为完整的调用实例:& o8 }7 U7 {1 O( m
    ) r% G3 M' `0 U( l8 t# Q' _- n7 ^
    import pandas as pd  _' f) A/ ?; _( B
    from mlxtend.preprocessing import TransactionEncoder
    & t- f+ T6 g! y# w( bfrom mlxtend.frequent_patterns import apriori
    / v" u. [, f: t5 vfrom mlxtend.frequent_patterns import association_rules6 I7 l( v, C+ ?+ S! g
    #1.构建测试数据
    4 n5 x, P+ Z. e* T- J" Ddf=pd.DataFrame({'product_list':['A-C', 'D', 'A-B-C-D','A-C','A-C-D','A-C-B']})0 x: S7 c9 K! X, j! @7 A6 k$ S
    df_chg=df['product_list'].str.split("-")  y! a( w+ _7 S( U% N5 e
    #2.数据预处理& T4 \/ R8 t7 e7 o1 L
    #将传入的数据转换为算法可接受的数据类型(布尔值)9 g1 o+ f. \: k7 T- z8 B/ @+ P. E
    te = TransactionEncoder()5 r2 E7 Y/ L  Y5 Q
    df_tf = te.fit_transform(df_chg)
    7 i0 J7 ~. a* N( c' ?* w; U- I, |" x#为方便进行查看,生成dataframe
    ' X3 c* p/ {, Y# o% Zdata = pd.DataFrame(df_tf,columns=te.columns_)
    + {! j! _- t% t% J#3.建模; ~0 @$ }" f: z7 ^. v5 S- N/ q% x
    #利用 Apriori函数,设置最小支持度为0.25 w" H: R& |( u, s, \1 s
    frequent_itemsets = apriori(data,min_support=0.2,use_colnames= True). U# Z5 [( P/ O9 `' y+ t
    #设置关联规则,设置最小置信度为0.15
    4 n5 a2 ^/ \7 vtemp= association_rules(frequent_itemsets,metric = 'confidence',min_threshold = 0.15)
    : R3 @# _1 o8 m6 o, X% o#4.剪枝并控制输出
    . i4 @) [. z, [$ h: K( e, m' v#设置最小提升度,并剔除对应的数据- y" R" }7 ]9 g8 i0 @
    min_lift=1' j( h8 j: n' U4 d# p$ P
    rules = temp.drop(temp[temp['lift']<min_lift].index)
    ) w5 G. `) [% T#筛选需要输出的列5 z' R' m3 y/ [( L/ s) Y9 }
    result = rules[['antecedents','consequents','support','confidence','lift']]2 `6 K$ p$ u3 {5 T" ^( X
    result=result.sort_values(['confidence','lift','support'],ascending=False). P. V) l: y) s  K8 ?
    result.to_csv('apriori_result.csv',index=False,encoding='utf-8-sig')! |0 o8 x+ u- g
    ( k" J: T( I% D+ q! u# T( t
    18 D+ D2 v' T0 s' _4 K" L
    2" b# v# n) X! r7 W
    3
    0 }5 Z+ S* a9 G8 k/ A0 B8 @$ A  b$ u+ ?4! ^5 F8 V; x4 v+ q. t! G( y
    5
    5 N, O: ~9 Z: ^) }8 Q63 Z8 I( x( c' `7 U) f5 {
    7
    8 c" a; B9 ~+ G" c* Z( P8
      U& K3 M8 o; h- d# S0 q9
    " `7 `! o8 M/ @$ C- o0 ]' X: J9 W10: k* g* `" \* F+ X$ |
    11
    & \2 m- w; ?; `0 u$ x( A# u" z* j12* K% F" I; [$ h1 Q- a
    13, f1 ]; s, K9 K; d% @+ S2 X
    14
    5 w0 J+ `. C$ Q- X2 z15
    4 f8 p/ o5 Y2 T  [3 Q  Q5 A7 X16
    7 c0 `4 _6 G, ~17
    0 ?) S+ f, ^. m18% u. }! f' ?/ T9 ^/ \
    19+ A& H1 H7 n5 ]$ z6 @0 ]' S- [
    201 k" ]3 m5 X8 e) s* Q, M
    21
    ' P  t2 B" B8 t- G1 i22$ Q  K' e  ?4 g) h! e% J$ u! p
    23
    " a; Y% o& ~( z! {- G, i/ {24
    7 `/ J. ]& i3 D$ J$ x1 N. g25
    5 R) o, t& Y, {  h$ v, C6 t) o26
    4 C0 T! d) p) g  }0 U  s/ a输出结果见下图:
    ; V- T- ~! j7 P4 R
    # r3 G$ Y; c6 V5 A  `# l————————————————
    - X# P6 |. T& z$ ]) ]版权声明:本文为CSDN博主「theskylife」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    " c, ?, p+ [/ T6 a) v% A) }原文链接:https://blog.csdn.net/qq_41780234/article/details/121920759( Z# o+ }! }: M% |2 z4 W" t
    ' T) O7 Q4 E% u5 y& Y& M
    - C1 \8 l+ w- j% @1 B! d
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-14 03:52 , Processed in 0.425116 second(s), 51 queries .

    回顶部