Python——电商用户购买系列相关性

背景:假设电商平台会员300万,商品按照系列划分有30个系列,本次分析的目的:分析用户购买系列间的相关性。

# -*- coding: utf-8 -*-
"""
Created on Mon May 13 13:40:14 2019

@author: liuxiaohuan
"""


import os
import cx_Oracle
import pandas.io.sql as sql
import pandas as pd
import numpy as np
import time
start = time.clock()

#数据库表中有中文,如不加以下代码,中文会乱码
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

#连接数据库
conn = cx_Oracle.connect('erfd/sdfdgfdg@192.547.0.47/sdad')
                         
                         
                         
sqlstr1 = '''select distinct xilie from list_xilie'''  
sqlstr2 = '''select distinct memberid from t05_e3_order_bill_main_info where memberid<1000'''     

#读取转换用户ID和系列
col = sql.read_sql(sqlstr1,conn)
col_data = np.array(col)
col_list=col_data.tolist()

memberid=sql.read_sql(sqlstr2,conn)
memberid_data=np.array(memberid)
memberid_list=memberid_data.tolist()


col_list_final=[]
for i in range(0,len(col_list)):
    #print(col_list[i])
    col_new=str(col_list[i][0])
    #print(col_new)
    col_list_final.append(col_new)


memberid_list_final=[]
for i in range(0,len(memberid_list)):
    memberid_new=str(memberid_list[i][0])
    memberid_list_final.append(memberid_new)


#构造数据结构
data=pd.DataFrame(0,columns=col_list_final,index=memberid_list_final)
#print(data)

#订单表中,用户购买系列
sqlstr = '''select head.memberid,xilie.xilie,sum(dtl.act_pay_amt) as amt
        from list_xilie xilie
        join t05_e3_order_bill_dtl_info dtl on xilie.sku=dtl.sku
        join t05_e3_order_bill_main_info head on head.order_billid=dtl.order_billid
        where trunc(head.PAYMENT_TM/(100 * 6 * 6 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'))
        between to_date('2019-05-05','yyyy-mm-dd') and to_date('2019-05-13','yyyy-mm-dd')
        and head.ORDER_BILL_STATUS <> 3
        group by head.memberid,xilie.xilie'''

result = sql.read_sql(sqlstr,conn)
print(type(result))


for index,row in result.iterrows():#遍历第2个表中的每一行数据
	col_name=row['XILIE']
	real_index=row['MEMBERID']
	data.loc[real_index,col_name]=row['AMT']
    
data=data.fillna(0)
data=data.corr()
data.to_csv ('F:\\out190101_0512.csv',encoding = "utf-8",na_rep = "",header=True)
print(data.corr())




其中,以上代码中data的数据结构如下:

用户ID系列1系列2系列3系列4系列5
00100000
00200000
00300000
00400000
00500000

result数据结构如下:

用户ID购买系列名称购买金额
001系列110
001系列220
001系列330
002系列421
003系列532
004系列552
004系列389
004系列112
005系列366

然后,利用result数据来更新data数据结构,将购买金额更新至data中,得到如下数据结构:

用户ID系列1系列2系列3系列4系列5
00110203000
002000210
003000032
00412089052
005006600

得到以上的数据结构,就可以调用pandas的.corr()函数直接计算相关性了,最终得到的数据结构还是数据框,如下所示:

 系列1系列2系列3系列4系列5
系列110.20.10.80.6
系列20.110.30.80.4
系列30.20.710.60.2
系列40.80.40.310.7
系列50.90.50.20.11

以上就是得到的最终结果。

注明:以上数据结构及最终结果只是为了让大家更好的理解代码,其数据只是示例数据,仅做参考~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值