GVKun编程网logo

php – 使用Stripe的优惠券代码(php优惠券思路)

17

在本文中,我们将给您介绍关于php–使用Stripe的优惠券代码的详细内容,并且为您解答php优惠券思路的相关问题,此外,我们还将为您提供关于O2O淘宝优惠券代码总结、php–Paypal优惠券代码结

在本文中,我们将给您介绍关于php – 使用Stripe的优惠券代码的详细内容,并且为您解答php优惠券思路的相关问题,此外,我们还将为您提供关于O2O淘宝优惠券代码总结、php – Paypal优惠券代码结帐、php – 产品正常价格(非促销价格)的优惠券折扣、php – 仅限WooCommerce优惠券代码到定义的工作日的知识。

本文目录一览:

php – 使用Stripe的优惠券代码(php优惠券思路)

php – 使用Stripe的优惠券代码(php优惠券思路)

我有一个使用Stripe来处理订阅付款的网站.只有一种类型的订阅.
我在NetTuts上按照this tutorial进行初始设置.
有一个表单正常处理订阅和一切工作.客户要求优惠券代码. Stripe支持这一点,因此我开始尝试将优惠券代码添加到现有表单中.

我在Stripe中设置优惠券代码,设置我的测试键并切换到条带中的测试模式.
我在我的代码中执行了几项检查:

>检查是否输入了优惠券,如果没有优惠券选项则创建新的客户对象
>检查优惠券是否有效,如果没有返回错误

如果已输入优惠券并且该优惠券有效,则在创建新客户时将匹配的条带优惠券对象作为选项传递.

 if(isset($couponCode) && strlen($couponCode) > 0) {
  $using_discount = true;
  try {
        $coupon = Stripe_Coupon::retrieve($couponCode);
        if($coupon !== NULL) {
           $cCode = $coupon;
        }
        // if we got here, the coupon is valid

     } catch (Exception $e) {

        // an exception was caught, so the code is invalid
        $message = $e->getMessage();
        returnErrorWithMessage($message);

     }


}

try
{ 
  if($using_discount == true) {
    $customer = Stripe_Customer::create(array(
          "card" => $token,
          "plan" => "basic_plan",
          "email" => $email,
          "coupon" => $cCode
       ));
  }
  else {
        $customer = Stripe_Customer::create(array(
          "card" => $token,
          "plan" => "basic_plan",
          "email" => $email
       ));
  }

$couponCode正确填充表单字段,就像填充所有其他字段一样,我已经三次检查它是否被正确拉出.

当我尝试在没有优惠券代码的情况下提交表单时,它会收取全部金额并正确地通过Stripe.

但是,如果我输入有效的OR无效优惠券代码,则在创建新的客户对象时它不会传递带有客户对象的优惠券对象,并在通过Stripe时收取全部金额.

我已经看了几个小时的代码,似乎无法弄清楚为什么总是无法识别折扣代码并将匹配的优惠券对象传递给Stripe.

解决方法:

这可能有点过时,您找到了代码的解决方案.但看起来您需要做的就是将原始$couponCode作为优惠券的数组值传递.正如codasaurus所述,您只是从优惠券的条纹中获取一个数组,除非您执行$cCode-> id并将ID传回您的数组以创建客户,否则您不需要该数组.

当你将$using_discount设置为true时我改变了,因为如果优惠券有效,这将触发发送优惠券代码.

一旦优惠券实际有效,我们就会发送优惠券.您只需要提交状态的值,因此$coupon是系统中折扣的参考.或者你可以使用$coupon-> id,如果你想以这种方式创建它.

以下是基于您的代码的解决方案,它可能会更好,但我希望它可以帮助其他人寻找像我这样的解决方案.

if($coupon!='' && strlen($coupon) > 0) {
          try {
                $coupon = Stripe_Coupon::retrieve($coupon); //check coupon exists
                if($coupon !== NULL) {
                 $using_discount = true; //set to true our coupon exists or take the coupon id if you wanted to.
                }
                // if we got here, the coupon is valid

             } catch (Exception $e) {
                // an exception was caught, so the code is invalid
                $message = $e->getMessage();
                returnErrorWithMessage($message);
             }

        }
        if($using_discount==true)
        {
            $customer = Stripe_Customer::create(array(
                  "card" => $token,
                  "plan" => $plan,
                  "email" => $id,
                  "coupon"=>$coupon) //original value input example: "75OFFMEMBER" stripe should be doing the rest.
                );
        }
        else
        {
            $customer = Stripe_Customer::create(array(
                  "card" => $token,
                  "plan" => $plan,
                  "email" => $id)
                );
        }

O2O淘宝优惠券代码总结

O2O淘宝优惠券代码总结

一、数据集预处理

  1、数据读入

import pandas as pd
import numpy as np
import datetime as date
import datetime as dt

#先导入数据

off_train = pd.read_csv("data/ccf_offline_stage1_train.csv",header = 0)
off_train.columns = [''user_id'',''merchant_id'',''coupon_id'',''discount_rate'',''distance'',''date_received'',''date'']
# read_csv 读入数据(header = 0)不读入表头,第二句设置表头
off_test = pd.read_csv("data/ccf_offline_stage1_test_revised.csv",header = 0)
off_test.columns  = [''user_id'',''merchant_id'',''coupon_id'',''discount_rate'',''distance'',''date_received'']

on_train = pd.read_csv("data/ccf_online_stage1_train.csv",header=0)
on_train.columns = [''user_id'',''merchant_id'',''action'',''coupon_id'',''discount_rate'',''date_received'',''date'']

  

  2、数据划分

# 按照时间划分训练集和测试集
# 滑窗法划分
"""
将2016年1月1日到4月13日的数据提取特征,利用4月14日的到5月14日的作为测试集
将2月1日到5月14日的作为数据集提取特征,利用5月15日6月15日的作为测试集
将3月15日到6月30日作为数据集提取特征,再测试7月1日到7月31日的数据
dataset用来做测试集,feature用来做训练集
"""
#数据集3的特征为 取 线上数据中领券和用券日期大于3月15日和小于6月30日的
#将3月15日到6月30日作为数据集提取特征,再测试7月1日到7月31日的数据
#使数据集3等于test集
""""
dataset里面只有接收优惠券的记录的,无消费记录,可用于预测
feature里面存的是优惠券使用日期或接收优惠券的时间介于3月15日到6月30之间的记录
"""
dataset3 = off_test
feature3 = off_train[((off_train.date>=''20160315'')&(off_train.date<=''20160630'')|((off_train.date==''null'')&(off_train.date_received>=''20160315'')&(off_train.date_received<=''20160630'')))]

#提取数据集2的测试集
#将2月1日到5月14日的作为数据集提取特征,利用5月15日6月15日的作为测试集
""""
dataset里面只存放优惠券接收日期介于5月15日到6月15之间的记录
feature里面存的是优惠券使用日期或接收优惠券的时间介于2月1日到5月14之间的记录
"""
dataset2 = off_train[((off_train.date_received>=''20160515'')&(off_train.date_received<=''20160615''))]

feature2 = off_train[(off_train.date>=''20160201'')&(off_train.date<=''20160514'')|((off_train.date==''null'')&(off_train.date_received>=''20160201'')&(off_train.date_received<=''20160514''))]
""""
dataset里面只存放优惠券接收日期介于4月14日到5月14之间的记录
feature里面存的是优惠券使用日期或接收优惠券的时间介于1月1日到4月13之间的记录
"""
dataset1 = off_train[(off_train.date_received>=''201604014'')&(off_train.date_received<=''20160514'')]
feature1 = off_train[(off_train.date>=''20160101'')&(off_train.date<=''20160413'')|((off_train.date==''null'')&(off_train.date_received>=''20160101'')&(off_train.date_received<=''20160413''))]

二、特征工程

  1、提取其他特征

"""
# 提取特征:
    用户领取的所有优惠券数目
    ◦用户领取的特定优惠券数目
    ◦用户此次之后/前领取的所有优惠券数目
    ◦用户此次之后/前领取的特定优惠券数目
    ◦用户上/下一次领取的时间间隔
    ◦用户领取特定商家的优惠券数目
    ◦用户领取的不同商家数目
    ◦用户当天领取的优惠券数目
    ◦用户当天领取的特定优惠券数目
    ◦用户领取的所有优惠券种类数目
    ◦商家被领取的优惠券数目
    ◦商家被领取的特定优惠券数目
    ◦商家被多少不同用户领取的数目
    ◦商家发行的所有优惠券种类数目
"""
# 对dataset3进行操作
# 用户收到的优惠券总和
t = dataset3[[''user_id'']]
t[''this_month_user_received_all_coupon_count''] = 1
 #将t按照用户id进行分组,然后统计所有用户收取的优惠券数目,并初始化一个索引值
t = t.groupby(''user_id'').agg(''sum'').reset_index()
# 用户收到特定优惠券的总和
t1 = dataset3[[''user_id'',''coupon_id'']]
t1[''this_month_user_receive_same_coupon_count''] = 1
t1 = t1.groupby([''user_id'',''coupon_id'']).agg(''sum'').reset_index()

# 用户此次之前或之后领使用优惠券的时间
# lambda x:'':''.join(x)  是添加冒号并在后面去加字符
# 将接收时间的一组按着'':''分开,这样就可以计算接受了优惠券的数量,apply是合并
# 最大接受的日期max_date_received/min_date_received
t2 = dataset3[[''user_id'',''coupon_id'',''date_received'']]
t2.date_received = t2.date_received.astype(''str'')
t2 = t2.groupby([''user_id'',''coupon_id''])[''date_received''].agg(lambda x:'':''.join(x)).reset_index()
t2[''receive_number''] = t2.date_received.apply(lambda s:len(s.split('':'')))
t2 = t2[t2.receive_number>1]
t2[''max_date_received''] = t2.date_received.apply(lambda s:max([int (d) for d in s.split('':'')]))
t2[''min_date_received''] = t2.date_received.apply(lambda s:min([int (d) for d in s.split('':'')]))
t2 = t2[[''user_id'',''coupon_id'',''max_date_received'',''min_date_received'']]

# 将表格中接收优惠券日期中为最近和最远的日期时置为1其余为0,若只接受了一次优惠券为-1
# 将两表融合只保留左表数据,这样得到的表,相当于保留了最近接收时间和最远接受时间
t3 = dataset3[[''user_id'',''coupon_id'',''date_received'']]
t3 = pd.merge(t3,t2,on=[''user_id'',''coupon_id''],how=''left'')
t3[''this_month_user_receive_same_coupon_lastone''] = t3.max_date_received - t3.date_received.astype(int)

t3[''this_month_user_receive_same_coupon_firstone''] = t3.date_received.astype(int) - t3.min_date_received

def isfirstlastone(x):
    
    if x == 0:
        return 1
    elif x > 0:
        return 0
    else:
        return -1
# 只接受过一次优惠券为者为 -1


t3.this_month_user_receive_same_coupon_lastone = t3.this_month_user_receive_same_coupon_lastone.apply(isfirstlastone)
t3.this_month_user_receive_same_coupon_firstone = t3.this_month_user_receive_same_coupon_firstone.apply(isfirstlastone)

# 第四个特征,一个用户所接收到的所有优惠券的数量
t4 = dataset3[[''user_id'',''date_received'']]
t4[''this_day_user_receive_all_coupon_count''] = 1
t4 = t4.groupby([''user_id'',''date_received'']).agg(''sum'').reset_index()

# 提取第五个特征,一个用户不同时间所接收到不同优惠券的数量
t5 = dataset3[[''user_id'',''coupon_id'',''date_received'']]
t5[''this_day_user_receive_same_coupon_count''] = 1
t5 = t5.groupby([''user_id'',''coupon_id'',''date_received'']).agg(''sum'').reset_index()

# 一个用户不同优惠券 的接受时间
t6 = dataset3[[''user_id'',''coupon_id'',''date_received'']]
t6.date_received = t6.date_received.astype(''str'')
t6 = t6.groupby([''user_id'',''coupon_id''])[''date_received''].agg(lambda x:'':''.join(x)).reset_index()
t6.rename(columns ={''date_received'':''dates''},inplace = True)

# 接收优惠券最近的日子天数
def get_day_gap_before(s):
    date_received,dates = s.split(''-'')
    dates = dates.split('':'')
    gaps = []
    for d in dates:
#         print(date_received.type())
        this_gap = (dt.date(int(date_received[1:4]),(int(date_received[4:6])),(int(date_received[6:8]))) - dt.date((int(d[1:4])),(int(d[4:6])),(int(d[6:8])))).days
        if this_gap>0:
            gaps.append(this_gap)
    if len(gaps) == 0:
        return -1
    else:
        return min(gaps)
# 接收优惠券最远的日子天数
def get_day_gap_after(s):
    date_received,dates = s.split(''-'')
    dates = dates.split('':'')
    gaps = []
    for d in dates:
        this_gap = (dt.datetime(int(d[0:4]),int(d[4:6]),int(d[6:8])) - dt.datetime(int(date_received[0:4]),int(date_received[4:6]),int(date_received[6:8]))).days
        if this_gap>0:
            gaps.append(this_gap)
    if len(gaps) == 0:
        return -1
    else:
        return min(gaps)

t7 = dataset3[[''user_id'',''coupon_id'',''date_received'']]
t7 = pd.merge(t7,t6,on=[''user_id'',''coupon_id''],how=''left'')
t7[''date_received_date''] = t7.date_received.astype(''str'') + ''-'' + t7.dates.astype(''str'')

t7[''day_gap_before''] = t7.date_received_date.apply(get_day_gap_before)
t7[''day_gap_after'']  = t7.date_received_date.apply(get_day_gap_after)
t7 = t7[[''user_id'',''coupon_id'',''date_received'',''day_gap_before'',''day_gap_after'']]
# feature3 提取的特征存入CSV中
other_feature3 = pd.merge(t1,t,on=''user_id'')
other_feature3 = pd.merge(other_feature3,t3,on=[''user_id'',''coupon_id''])
other_feature3 = pd.merge(other_feature3,t4,on=[''user_id'',''date_received''])
other_feature3 = pd.merge(other_feature3,t5,on=[''user_id'',''coupon_id'',''date_received''])
other_feature3 = pd.merge(other_feature3,t7,on=[''user_id'',''coupon_id'',''date_received''])
other_feature3.to_csv(''feature/other_feature3.csv'',index=None)



# 处理dataset2
t = dataset2[[''user_id'']]
t[''this_month_user_received_all_coupon_count''] = 1
t = t.groupby(''user_id'').agg(''sum'').reset_index()
t1 = dataset2[[''user_id'',''coupon_id'']]
t1[''this_month_user_receive_same_coupon_count''] = 1
t1 = t1.groupby([''user_id'',''coupon_id'']).agg(''sum'').reset_index()
t2 = dataset3[[''user_id'',''coupon_id'',''date_received'']]
t2.date_received = t2.date_received.astype(''str'')
t2 = t2.groupby([''user_id'',''coupon_id''])[''date_received''].agg(lambda x:'':''.join(x)).reset_index()
t2[''receive_number''] = t2.date_received.apply(lambda s:len(s.split('':'')))
t2 = t2[t2.receive_number>1]
t2[''max_date_received''] = t2.date_received.apply(lambda s:max([int(d) for d in s.split('':'')]))
t2[''min_date_received''] = t2.date_received.apply(lambda s:max([int(d) for d in s.split('':'')]))
t2 = t2[[''user_id'',''coupon_id'',''max_date_received'',''min_date_received'']]

t3 = dataset2[[''user_id'',''coupon_id'',''date_received'']]
t3 = pd.merge(t3,t2,on=[''user_id'',''coupon_id''],how=''left'')
t3[''this_month_user_receive_same_coupon_lastone''] = t3.max_date_received - t3.date_received.astype(''int'')
t3[''this_month_user_receive_same_coupon_firstone'']= t3.date_received.astype(''int'') - t3.min_date_received
t3.this_month_user_receive_same_coupon_lastone = t3.this_month_user_receive_same_coupon_lastone.apply(isfirstlastone)
t3.this_month_user_receive_same_coupon_firstone= t3.this_month_user_receive_same_coupon_firstone.apply(isfirstlastone)

t4 = dataset2[[''user_id'',''date_received'']]
t4[''this_day_user_receive_all_coupon_count''] = 1
t4 = t4.groupby([''user_id'',''date_received'']).agg(''sum'').reset_index()
t5 = dataset2[[''user_id'',''coupon_id'',''date_received'']]
t5[''this_day_user_receive_same_coupon_count''] = 1
t5 = t5.groupby([''user_id'',''coupon_id'',''date_received'']).agg(''sum'').reset_index()

t6 = dataset2[[''user_id'',''coupon_id'',''date_received'']]
t6.date_received = t6.date_received.astype(''str'')
t6 = t6.groupby([''user_id'',''coupon_id''])[''date_received''].agg(lambda x:'':''.join(x)).reset_index()
t6.rename(columns={''date_received'':''dates''},inplace=True)

t7 = dataset2[[''user_id'',''coupon_id'',''date_received'']]
t7 = pd.merge(t7,t6,on=[''user_id'',''coupon_id''],how=''left'')
t7[''date_received_date''] = t7.date_received.astype(''str'') + ''-'' + t7.dates
t7[''day_gap_before''] = t7.date_received_date.apply(get_day_gap_before)
t7[''day_gap_after'']  = t7.date_received_date.apply(get_day_gap_before)
t7 = t7[[''user_id'',''coupon_id'',''date_received'',''day_gap_before'',''day_gap_after'']]

other_feature2 = pd.merge(t1,t,on=''user_id'')
other_feature2 = pd.merge(other_feature2,t3,on=[''user_id'',''coupon_id''])
other_feature2 = pd.merge(other_feature2,t4,on=[''user_id'',''date_received''])
other_feature2 = pd.merge(other_feature2,t5,on=[''user_id'',''coupon_id'',''date_received''])
other_feature2 = pd.merge(other_feature2,t7,on=[''user_id'',''coupon_id'',''date_received''])
other_feature2.to_csv(''feature/other_feature2.csv'',index=None)

# 处理dataset1
t = dataset1[[''user_id'']]
t[''this_month_user_received_all_coupon_count''] = 1
t = t.groupby(''user_id'').agg(''sum'').reset_index()
t1 = dataset1[[''user_id'',''coupon_id'']]
t1[''this_month_user_receive_same_coupon_count''] = 1
t1 = t1.groupby([''user_id'',''coupon_id'']).agg(''sum'').reset_index()
t2 = dataset1[[''user_id'',''coupon_id'',''date_received'']]
t2.date_received = t2.date_received.astype(''str'')
t2 = t2.groupby([''user_id'',''coupon_id''])[''date_received''].agg(lambda x:'':''.join(x)).reset_index()
t2[''receive_number''] = t2.date_received.apply(lambda s:len(s.split('':'')))
t2 = t2[t2.receive_number>1]
t2[''max_date_received''] = t2.date_received.apply(lambda s:max([int(d) for d in s.split('':'')]))
t2[''min_date_received''] = t2.date_received.apply(lambda s:max([int(d) for d in s.split('':'')]))
t2 = t2[[''user_id'',''coupon_id'',''max_date_received'',''min_date_received'']]

t3 = dataset1[[''user_id'',''coupon_id'',''date_received'']]
t3 = pd.merge(t3,t2,on=[''user_id'',''coupon_id''],how=''left'')
t3[''this_month_user_receive_same_coupon_lastone''] = t3.max_date_received - t3.date_received.astype(''int'')
t3[''this_month_user_receive_same_coupon_firstone'']= t3.date_received.astype(''int'') - t3.min_date_received
t3.this_month_user_receive_same_coupon_lastone = t3.this_month_user_receive_same_coupon_lastone.apply(isfirstlastone)
t3.this_month_user_receive_same_coupon_firstone= t3.this_month_user_receive_same_coupon_firstone.apply(isfirstlastone)

t4 = dataset1[[''user_id'',''date_received'']]
t4[''this_day_user_receive_all_coupon_count''] = 1
t4 = t4.groupby([''user_id'',''date_received'']).agg(''sum'').reset_index()
t5 = dataset1[[''user_id'',''coupon_id'',''date_received'']]
t5[''this_day_user_receive_same_coupon_count''] = 1
t5 = t5.groupby([''user_id'',''coupon_id'',''date_received'']).agg(''sum'').reset_index()

t6 = dataset1[[''user_id'',''coupon_id'',''date_received'']]
t6.date_received = t6.date_received.astype(''str'')
t6 = t6.groupby([''user_id'',''coupon_id''])[''date_received''].agg(lambda x:'':''.join(x)).reset_index()
t6.rename(columns={''date_received'':''dates''},inplace=True)

t7 = dataset1[[''user_id'',''coupon_id'',''date_received'']]
t7 = pd.merge(t7,t6,on=[''user_id'',''coupon_id''],how=''left'')
t7[''date_received_date''] = t7.date_received.astype(''str'') + ''-'' + t7.dates
t7[''day_gap_before''] = t7.date_received_date.apply(get_day_gap_before)
t7[''day_gap_after'']  = t7.date_received_date.apply(get_day_gap_before)
t7 = t7[[''user_id'',''coupon_id'',''date_received'',''day_gap_before'',''day_gap_after'']]

other_feature1 = pd.merge(t1,t,on=''user_id'')
other_feature1 = pd.merge(other_feature1,t3,on=[''user_id'',''coupon_id''])
other_feature1 = pd.merge(other_feature1,t4,on=[''user_id'',''date_received''])
other_feature1 = pd.merge(other_feature1,t5,on=[''user_id'',''coupon_id'',''date_received''])
other_feature1 = pd.merge(other_feature1,t7,on=[''user_id'',''coupon_id'',''date_received''])
other_feature1.to_csv(''feature/other_feature1.csv'',index=None)

  2、提取优惠券相关特征

# 统一转化为打折卷
def calc_discount_rate(s):
    s = str(s)
    s = s.split('':'')
    if len(s) == 1:
        return float(s[0])
    else:
        return 1.0-float(s[1])/float(s[0])
def get_discount_man(s):
    s = str(s)
    s = s.split('':'')
    if len(s) == 1:
        return ''null''
    else:
        return int(s[0])
def get_discount_jian(s):
    s = str(s)
    s = s.split('':'')
    if len(s) == 1:
        return ''null''
    else:
        return int(s[1])
def is_man_jian(s):
    s = str(s)
    s = s.split('':'')
    if len(s) == 1:
        return 0
    else:
        return 1
# 处理数据集3,处理时间属性,显示时间是第几周
dataset3[''day_of_week'']  = dataset3.date_received.astype(''str'').apply(lambda x:(dt.date(int(x[0:4]),int(x[4:6]),int(x[6:8])).weekday()+1))
dataset3[''day_of_month''] = dataset3.date_received.astype(''str'').apply(lambda x:int(x[6:8]))
dataset3[''days_distance'']= dataset3.date_received.astype(''str'').apply(lambda x:(dt.date(int(x[0:4]),int(x[4:6]),int(x[6:8]))-dt.date(2016,6,30)).days)
dataset3[''discount_man''] = dataset3.discount_rate.apply(get_discount_man)
dataset3[''discount_jian'']= dataset3.discount_rate.apply(get_discount_jian)
dataset3[''is_man_jian'']  = dataset3.discount_rate.apply(is_man_jian)
dataset3[''discount_rate'']= dataset3.discount_rate.apply(calc_discount_rate)
d = dataset3[[''coupon_id'']]
d[''coupon_count''] = 1
d = d.groupby(''coupon_id'').agg(''sum'').reset_index()
dataset3 = pd.merge(dataset3,d,on=''coupon_id'',how=''left'')
dataset3.to_csv(''feature/coupon3_feature.csv'',index=None)

# 数据集2
dataset2[''day_of_week'']  = dataset2.date_received.astype(''str'').apply(lambda x:dt.date(int(x[0:4]),int(x[4:6]),int(x[6:8])).weekday()+1)
dataset2[''day_of_month''] = dataset2.date_received.astype(''str'').apply(lambda x:int(x[4:6]))
dataset2[''days_distance'']= dataset2.date_received.astype(''str'').apply(lambda x:(dt.date(int(x[0:4]),int(x[4:6]),int(x[6:8]))-dt.date(2016,5,14)).days)
dataset2[''discount_man''] = dataset2.discount_rate.apply(get_discount_man)
dataset2[''discount_jian'']= dataset2.discount_rate.apply(get_discount_jian)
dataset2[''is_man_jian'']  = dataset2.discount_rate.apply(is_man_jian)
dataset2[''discount_rate'']= dataset2.discount_rate.apply(calc_discount_rate)
d = dataset2[[''coupon_id'']]
d[''coupon_count''] = 1
d = d.groupby(''coupon_id'').agg(''sum'').reset_index()
dataset2 = pd.merge(dataset2,d,on=''coupon_id'',how=''left'')
dataset2.to_csv(''feature/coupon2_feature.csv'',index=None)

# 数据集1
dataset1[''day_of_week'']  = dataset1.date_received.astype(''str'').apply(lambda x:dt.date(int(x[0:4]),int(x[4:6]),int(x[6:8])).weekday()+1)
dataset1[''day_of_month''] = dataset1.date_received.astype(''str'').apply(lambda x:int(x[4:6]))
dataset1[''days_distance'']= dataset1.date_received.astype(''str'').apply(lambda x:(dt.date(int(x[0:4]),int(x[4:6]),int(x[6:8]))-dt.date(2016,4,16)).days)
dataset1[''discount_man''] = dataset1.discount_rate.apply(get_discount_man)
dataset1[''discount_jian'']= dataset1.discount_rate.apply(get_discount_jian)
dataset1[''is_man_jian'']  = dataset1.discount_rate.apply(is_man_jian)
dataset1[''discount_rate'']= dataset1.discount_rate.apply(calc_discount_rate)
d = dataset1[[''coupon_id'']]
d[''coupon_count''] = 1
d = d.groupby(''coupon_id'').agg(''sum'').reset_index()
dataset1 = pd.merge(dataset1,d,on=''coupon_id'',how=''left'')
dataset1.to_csv(''feature/coupon1_feature.csv'',index=None)

  3、提取商户相关特征

merchant3 = feature3[[''merchant_id'',''coupon_id'',''distance'',''date_received'',''date'']]
t = merchant3[[''merchant_id'']]
# 删除重复的行数据
t.drop_duplicates(inplace=True)
# 显示卖出的商品,以及卖出的数量
# []用来强调条件\或者新建一列并赋值   [[]]用来表示取哪个列来使用
t1 = merchant3[merchant3.date!=''null''][[''merchant_id'']]
t1[''total_sales''] = 1
t1 = t1.groupby(''merchant_id'').agg(''sum'').reset_index()
# 显示使用了优惠券消费的商品,正样本
t2 = merchant3[(merchant3.date!=''null'')&(merchant3.coupon_id!=''null'')][[''merchant_id'']]
t2[''sales_use_coupon''] = 1
t2 = t2.groupby(''merchant_id'').agg(''sum'').reset_index()
# 提取商品优惠券的总数量
t3 = merchant3[merchant3.coupon_id!=''null''][[''merchant_id'']]
t3[''total_coupon''] = 1
t3 = t3.groupby(''merchant_id'').agg(''sum'').reset_index()
# 提取销量与距离的关系
# 把数据中的空值全部替换为 -1
t4 = merchant3[(merchant3.date!=''null'')&(merchant3.coupon_id!=''null'')][[''merchant_id'',''distance'']]
t4.replace(''null'',-1,inplace=True)
t4.distance = t4.distance.astype(''int'')
t4.replace(-1,np.nan,inplace=True)
# 提取用户和商店距离的最小值
t5 = t4.groupby(''merchant_id'').agg(''min'').reset_index()
t5.rename(columns={''distance'':''merchant_min_distance''},inplace = True)
# 提取用户和商店距离的最大值
t6 = t4.groupby(''merchant_id'').agg(''max'').reset_index()
t5.rename(columns={''distance'':''merchant_max_distance''},inplace = True)
# 提取用户和商品距离的平均值
t7 = t4.groupby(''merchant_id'').agg(''mean'').reset_index()
t7.rename(columns={''distance'':''merchant_mean_distance''},inplace = True)
# 提取用户与商品距离的中位数
t8 = t4.groupby(''merchant_id'').agg(''median'').reset_index()
# 把特征集合入一张表里
merchant3_feature = pd.merge(t,t1,on=''merchant_id'',how=''left'')
merchant3_feature = pd.merge(merchant3_feature,t2,on=''merchant_id'',how=''left'')
merchant3_feature = pd.merge(merchant3_feature,t3,on=''merchant_id'',how=''left'')
merchant3_feature = pd.merge(merchant3_feature,t5,on=''merchant_id'',how=''left'')
merchant3_feature = pd.merge(merchant3_feature,t6,on=''merchant_id'',how=''left'')
merchant3_feature = pd.merge(merchant3_feature,t7,on=''merchant_id'',how=''left'')
merchant3_feature = pd.merge(merchant3_feature,t8,on=''merchant_id'',how=''left'')
# merchant3_feature.head()
# 替换数据中的NAN为0,便于计算优惠券的使用率以及其他信息
# 优惠券的使用率、卖出的商品中使用优惠券的占比
merchant3_feature.sales_use_coupon = merchant3_feature.sales_use_coupon.replace(np.nan,0)
merchant3_feature[''merchant_coupon_transfer_rate''] = merchant3_feature.sales_use_coupon.astype(''float'') / merchant3_feature.total_sales
merchant3_feature[''coupon_rate''] = merchant3_feature.sales_use_coupon.astype(''float'') / merchant3_feature.total_sales
merchant3_feature.total_coupon = merchant3_feature.total_coupon.replace(np.nan,0)
merchant3_feature.to_csv(''feature/merchant3_feature.csv'',index=None)


# 对feature2进行操作
merchant2 = feature2[[''merchant_id'',''coupon_id'',''distance'',''date_received'',''date'']]
t = merchant2[[''merchant_id'']]
# 删除重复的行数据
t.drop_duplicates(inplace=True)
# 显示卖出的商品,以及卖出的数量
# []用来强调条件\或者新建一列并赋值   [[]]用来表示取哪个列来使用
t1 = merchant2[merchant2.date!=''null''][[''merchant_id'']]
t1[''total_sales''] = 1
t1 = t1.groupby(''merchant_id'').agg(''sum'').reset_index()
# 显示使用了优惠券消费的商品,正样本
t2 = merchant2[(merchant2.date!=''null'')&(merchant2.coupon_id!=''null'')][[''merchant_id'']]
t2[''sales_use_coupon''] = 1
t2 = t2.groupby(''merchant_id'').agg(''sum'').reset_index()
# 提取商品优惠券的总数量
t3 = merchant2[merchant2.coupon_id!=''null''][[''merchant_id'']]
t3[''total_coupon''] = 1
t3 = t3.groupby(''merchant_id'').agg(''sum'').reset_index()
# 提取销量与距离的关系
# 把数据中的空值全部替换为 -1
t4 = merchant2[(merchant2.date!=''null'')&(merchant2.coupon_id!=''null'')][[''merchant_id'',''distance'']]
t4.replace(''null'',-1,inplace=True)
t4.distance = t4.distance.astype(''int'')
t4.replace(-1,np.nan,inplace=True)
# 提取用户和商店距离的最小值
t5 = t4.groupby(''merchant_id'').agg(''min'').reset_index()
t5.rename(columns={''distance'':''merchant_min_distance''},inplace = True)
# 提取用户和商店距离的最大值
t6 = t4.groupby(''merchant_id'').agg(''max'').reset_index()
t5.rename(columns={''distance'':''merchant_max_distance''},inplace = True)
# 提取用户和商品距离的平均值
t7 = t4.groupby(''merchant_id'').agg(''mean'').reset_index()
t7.rename(columns={''distance'':''merchant_mean_distance''},inplace = True)
# 提取用户与商品距离的中位数
t8 = t4.groupby(''merchant_id'').agg(''median'').reset_index()
# 把特征集合入一张表里
merchant2_feature = pd.merge(t,t1,on=''merchant_id'',how=''left'')
merchant2_feature = pd.merge(merchant2_feature,t2,on=''merchant_id'',how=''left'')
merchant2_feature = pd.merge(merchant2_feature,t3,on=''merchant_id'',how=''left'')
merchant2_feature = pd.merge(merchant2_feature,t5,on=''merchant_id'',how=''left'')
merchant2_feature = pd.merge(merchant2_feature,t6,on=''merchant_id'',how=''left'')
merchant2_feature = pd.merge(merchant2_feature,t7,on=''merchant_id'',how=''left'')
merchant2_feature = pd.merge(merchant2_feature,t8,on=''merchant_id'',how=''left'')
# merchant3_feature.head()
# 替换数据中的NAN为0,便于计算优惠券的使用率以及其他信息
# 优惠券的使用率、卖出的商品中使用优惠券的占比
merchant2_feature.sales_use_coupon = merchant2_feature.sales_use_coupon.replace(np.nan,0)
merchant2_feature[''merchant_coupon_transfer_rate''] = merchant2_feature.sales_use_coupon.astype(''float'') / merchant2_feature.total_sales
merchant2_feature[''coupon_rate''] = merchant2_feature.sales_use_coupon.astype(''float'') / merchant2_feature.total_sales
merchant2_feature.total_coupon = merchant2_feature.total_coupon.replace(np.nan,0)
merchant2_feature.to_csv(''feature/merchant2_feature.csv'',index=None)



# 对feature1进行操作
merchant1 = feature1[[''merchant_id'',''coupon_id'',''distance'',''date_received'',''date'']]
t = merchant1[[''merchant_id'']]
# 删除重复的行数据
t.drop_duplicates(inplace=True)
# 显示卖出的商品,以及卖出的数量
# []用来强调条件\或者新建一列并赋值   [[]]用来表示取哪个列来使用
t1 = merchant1[merchant1.date!=''null''][[''merchant_id'']]
t1[''total_sales''] = 1
t1 = t1.groupby(''merchant_id'').agg(''sum'').reset_index()
# 显示使用了优惠券消费的商品,正样本
t2 = merchant1[(merchant1.date!=''null'')&(merchant1.coupon_id!=''null'')][[''merchant_id'']]
t2[''sales_use_coupon''] = 1
t2 = t2.groupby(''merchant_id'').agg(''sum'').reset_index()
# 提取商品优惠券的总数量
t3 = merchant1[merchant1.coupon_id!=''null''][[''merchant_id'']]
t3[''total_coupon''] = 1
t3 = t3.groupby(''merchant_id'').agg(''sum'').reset_index()
# 提取销量与距离的关系
# 把数据中的空值全部替换为 -1
t4 = merchant1[(merchant1.date!=''null'')&(merchant1.coupon_id!=''null'')][[''merchant_id'',''distance'']]
t4.replace(''null'',-1,inplace=True)
t4.distance = t4.distance.astype(''int'')
t4.replace(-1,np.nan,inplace=True)
# 提取用户和商店距离的最小值
t5 = t4.groupby(''merchant_id'').agg(''min'').reset_index()
t5.rename(columns={''distance'':''merchant_min_distance''},inplace = True)
# 提取用户和商店距离的最大值
t6 = t4.groupby(''merchant_id'').agg(''max'').reset_index()
t5.rename(columns={''distance'':''merchant_max_distance''},inplace = True)
# 提取用户和商品距离的平均值
t7 = t4.groupby(''merchant_id'').agg(''mean'').reset_index()
t7.rename(columns={''distance'':''merchant_mean_distance''},inplace = True)
# 提取用户与商品距离的中位数
t8 = t4.groupby(''merchant_id'').agg(''median'').reset_index()
# 把特征集合入一张表里
merchant1_feature = pd.merge(t,t1,on=''merchant_id'',how=''left'')
merchant1_feature = pd.merge(merchant1_feature,t2,on=''merchant_id'',how=''left'')
merchant1_feature = pd.merge(merchant1_feature,t3,on=''merchant_id'',how=''left'')
merchant1_feature = pd.merge(merchant1_feature,t5,on=''merchant_id'',how=''left'')
merchant1_feature = pd.merge(merchant1_feature,t6,on=''merchant_id'',how=''left'')
merchant1_feature = pd.merge(merchant1_feature,t7,on=''merchant_id'',how=''left'')
merchant1_feature = pd.merge(merchant1_feature,t8,on=''merchant_id'',how=''left'')
# merchant3_feature.head()
# 替换数据中的NAN为0,便于计算优惠券的使用率以及其他信息
# 优惠券的使用率、卖出的商品中使用优惠券的占比
merchant1_feature.sales_use_coupon = merchant1_feature.sales_use_coupon.replace(np.nan,0)
merchant1_feature[''merchant_coupon_transfer_rate''] = merchant1_feature.sales_use_coupon.astype(''float'') / merchant1_feature.total_sales
merchant1_feature[''coupon_rate''] = merchant1_feature.sales_use_coupon.astype(''float'') / merchant1_feature.total_sales
merchant1_feature.total_coupon = merchant1_feature.total_coupon.replace(np.nan,0)
merchant1_feature.to_csv(''feature/merchant1_feature.csv'',index=None)

  4、提取用户的相关特征

"""
用户的相关信息:
    count_merchant
    user_avg_distance,user_min_distance,user_max_distance
    buy_use_coupon,buy_total,coupon_received
    buy_use_coupon/coupon_received
    buy_use_coupon/buy_total
    user_date_datereceived_gap
"""
def get_user_date_datereceived_gap(s):
    s = s.split('':'')
    return(dt.date(int(s[0][0:4]),int(s[0][4:6]),int(s[0][6:8])) - dt.date(int(s[1][0:4]),int(s[1][4:6]),int(s[1][6:8]))).days
# 数据集3的处理
user3 = feature3[[''user_id'',''merchant_id'',''coupon_id'',''discount_rate'',''distance'',''date_received'',''date'']]
t = user3[[''user_id'']]
# 去掉数据中重复的用户ID
t.drop_duplicates(inplace=True)
# 用户购买商品的种类
t1 = user3[user3.date!=''null''][[''user_id'',''merchant_id'']]
t1.drop_duplicates(inplace=True)
t1.merchant_id = 1
t1 = t1.groupby(''user_id'').agg(''sum'').reset_index()
t1.rename(columns={''merchant_id'':''count_merchant''},inplace=True)
# 使用了优惠券购买商品的用户id和距离
t2 = user3[(user3.date!=''null'')&(user3.coupon_id!=''null'')][[''user_id'',''distance'']]
t2.replace(''null'',-1,inplace=True)
t2.distance = t2.distance.astype(''int'')
t2.replace(-1,np.nan,inplace=True)
# 得到使用优惠券购买商品的用户距商店的最短距离
t3 = t2.groupby(''user_id'').agg(''min'').reset_index()
t3.rename(columns={''distance'':''user_min_dsitance''},inplace=True)
# 最大距离
t4 = t2.groupby(''user_id'').agg(''max'').reset_index()
t4.rename(columns={''distance'':''user_max_distance''},inplace=True)
# 平均距离
t5 = t2.groupby(''user_id'').agg(''mean'').reset_index()
t5.rename(columns={''distance'':''user_mean_distance''},inplace=True)
# 中位数距离
t6 = t2.groupby(''user_id'').agg(''median'').reset_index()
t6.rename(columns={''distance'':''user_median_distance''},inplace=True)
# 每个用户使用优惠券购买的商品数量
t7 = user3[(user3.date!=''null'')&(user3.coupon_id!=''null'')][[''user_id'']]
t7[''buy_use_coupon''] = 1
t7 = t7.groupby(''user_id'').agg(''sum'').reset_index()
# 购买商品的总数
t8 = user3[user3.date!=''null''][[''user_id'']]
t8[''buy_total''] = 1
t8 = t8.groupby(''user_id'').agg(''sum'').reset_index()
# 接收优惠券的总数
t9 = user3[user3.coupon_id!=''null''][[''user_id'']]
t9[''coupon_received''] = 1
t9 = t9.groupby(''user_id'').agg(''sum'').reset_index()
# 收到优惠券的日期和使用之间的距离
t10 = user3[(user3.date_received !=''null'')&(user3.date!=''null'')][[''user_id'',''date_received'',''date'']]
t10[''user_date_datereceived_gap''] = t10.date+'':''+t10.date_received
t10.user_date_datereceived_gap = t10.user_date_datereceived_gap.apply(get_user_date_datereceived_gap)
t10 = t10[[''user_id'',''user_date_datereceived_gap'']]
# 将用户优惠券使用时间的间隔取平均值
t11 = t10.groupby(''user_id'').agg(''mean'').reset_index()
t11.rename(columns={''user_date_datereceived_gap'':''avg_user_date_datereceived_gap''},inplace=True)
# 间隔天数的最小值
t12 = t10.groupby(''user_id'').agg(''min'').reset_index()
t12.rename(columns={''user_date_datereceived_gap'':''min_user_date_datereceived_gap''},inplace=True)
# 间隔天数的最大值
t13 = t10.groupby(''user_id'').agg(''max'').reset_index()
t13.rename(columns={''user_date_datereceived_gap'':''max_user_date_datereceived_gap''},inplace=True)
# 合并特征
user3_feature = pd.merge(t,t1,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t3,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t4,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t5,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t6,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t7,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t8,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t9,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t11,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t12,on=''user_id'',how=''left'')
user3_feature = pd.merge(user3_feature,t13,on=''user_id'',how=''left'')
user3_feature.count_merchant = user3_feature.count_merchant.replace(np.nan,0)
user3_feature.buy_user_coupon = user3_feature.buy_use_coupon.replace(np.nan,0)
user3_feature[''buy_use_coupon_rate''] = user3_feature.buy_use_coupon.astype(''float'')/user3_feature.buy_total.astype(''float'')
user3_feature[''user_coupon_transfer_rate''] = user3_feature.buy_use_coupon.astype(''float'')/user3_feature.buy_use_coupon.astype(''float'')
user3_feature.buy_total = user3_feature.buy_total.replace(np.nan,0)
user3_feature.coupon_received = user3_feature.coupon_received.replace(np.nan,0)
user3_feature.to_csv(''feature/user3_feature.csv'',index=None)


# 对数据集faeture2操作
user2 = feature2[[''user_id'',''merchant_id'',''coupon_id'',''discount_rate'',''distance'',''date_received'',''date'']]
t = user2[[''user_id'']]
# 去掉数据中重复的用户ID
t.drop_duplicates(inplace=True)
# 用户购买商品的种类
t1 = user2[user2.date!=''null''][[''user_id'',''merchant_id'']]
t1.drop_duplicates(inplace=True)
t1.merchant_id = 1
t1 = t1.groupby(''user_id'').agg(''sum'').reset_index()
t1.rename(columns={''merchant_id'':''count_merchant''},inplace=True)
# 使用了优惠券购买商品的用户id和距离
t2 = user2[(user2.date!=''null'')&(user2.coupon_id!=''null'')][[''user_id'',''distance'']]
t2.replace(''null'',-1,inplace=True)
t2.distance = t2.distance.astype(''int'')
t2.replace(-1,np.nan,inplace=True)
# 得到使用优惠券购买商品的用户距商店的最短距离
t3 = t2.groupby(''user_id'').agg(''min'').reset_index()
t3.rename(columns={''distance'':''user_min_dsitance''},inplace=True)
# 最大距离
t4 = t2.groupby(''user_id'').agg(''max'').reset_index()
t4.rename(columns={''distance'':''user_max_distance''},inplace=True)
# 平均距离
t5 = t2.groupby(''user_id'').agg(''mean'').reset_index()
t5.rename(columns={''distance'':''user_mean_distance''},inplace=True)
# 中位数距离
t6 = t2.groupby(''user_id'').agg(''median'').reset_index()
t6.rename(columns={''distance'':''user_median_distance''},inplace=True)
# 每个用户使用优惠券购买的商品数量
t7 = user2[(user2.date!=''null'')&(user2.coupon_id!=''null'')][[''user_id'']]
t7[''buy_use_coupon''] = 1
t7 = t7.groupby(''user_id'').agg(''sum'').reset_index()
# 购买商品的总数
t8 = user2[user2.date!=''null''][[''user_id'']]
t8[''buy_total''] = 1
t8 = t8.groupby(''user_id'').agg(''sum'').reset_index()
# 接收优惠券的总数
t9 = user2[user2.coupon_id!=''null''][[''user_id'']]
t9[''coupon_received''] = 1
t9 = t9.groupby(''user_id'').agg(''sum'').reset_index()
# 收到优惠券的日期和使用之间的距离
t10 = user2[(user2.date_received !=''null'')&(user2.date!=''null'')][[''user_id'',''date_received'',''date'']]
t10[''user_date_datereceived_gap''] = t10.date+'':''+t10.date_received
t10.user_date_datereceived_gap = t10.user_date_datereceived_gap.apply(get_user_date_datereceived_gap)
t10 = t10[[''user_id'',''user_date_datereceived_gap'']]
# 将用户优惠券使用时间的间隔取平均值
t11 = t10.groupby(''user_id'').agg(''mean'').reset_index()
t11.rename(columns={''user_date_datereceived_gap'':''avg_user_date_datereceived_gap''},inplace=True)
# 间隔天数的最小值
t12 = t10.groupby(''user_id'').agg(''min'').reset_index()
t12.rename(columns={''user_date_datereceived_gap'':''min_user_date_datereceived_gap''},inplace=True)
# 间隔天数的最大值
t13 = t10.groupby(''user_id'').agg(''max'').reset_index()
t13.rename(columns={''user_date_datereceived_gap'':''max_user_date_datereceived_gap''},inplace=True)
# 合并特征
user2_feature = pd.merge(t,t1,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t3,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t4,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t5,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t6,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t7,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t8,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t9,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t11,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t12,on=''user_id'',how=''left'')
user2_feature = pd.merge(user2_feature,t13,on=''user_id'',how=''left'')
user2_feature.count_merchant = user2_feature.count_merchant.replace(np.nan,0)
user2_feature.buy_user_coupon = user2_feature.buy_use_coupon.replace(np.nan,0)
user2_feature[''buy_use_coupon_rate''] = user2_feature.buy_use_coupon.astype(''float'')/user2_feature.buy_total.astype(''float'')
user2_feature[''user_coupon_transfer_rate''] = user2_feature.buy_use_coupon.astype(''float'')/user2_feature.buy_use_coupon.astype(''float'')
user2_feature.buy_total = user2_feature.buy_total.replace(np.nan,0)
user2_feature.coupon_received = user2_feature.coupon_received.replace(np.nan,0)
user2_feature.to_csv(''feature/user2_feature.csv'',index=None)


# 对数据集dataset1操作
user1 = feature1[[''user_id'',''merchant_id'',''coupon_id'',''discount_rate'',''distance'',''date_received'',''date'']]
t = user1[[''user_id'']]
# 去掉数据中重复的用户ID
t.drop_duplicates(inplace=True)
# 用户购买商品的种类
t1 = user1[user1.date!=''null''][[''user_id'',''merchant_id'']]
t1.drop_duplicates(inplace=True)
t1.merchant_id = 1
t1 = t1.groupby(''user_id'').agg(''sum'').reset_index()
t1.rename(columns={''merchant_id'':''count_merchant''},inplace=True)
# 使用了优惠券购买商品的用户id和距离
t2 = user1[(user1.date!=''null'')&(user1.coupon_id!=''null'')][[''user_id'',''distance'']]
t2.replace(''null'',-1,inplace=True)
t2.distance = t2.distance.astype(''int'')
t2.replace(-1,np.nan,inplace=True)
# 得到使用优惠券购买商品的用户距商店的最短距离
t3 = t2.groupby(''user_id'').agg(''min'').reset_index()
t3.rename(columns={''distance'':''user_min_dsitance''},inplace=True)
# 最大距离
t4 = t2.groupby(''user_id'').agg(''max'').reset_index()
t4.rename(columns={''distance'':''user_max_distance''},inplace=True)
# 平均距离
t5 = t2.groupby(''user_id'').agg(''mean'').reset_index()
t5.rename(columns={''distance'':''user_mean_distance''},inplace=True)
# 中位数距离
t6 = t2.groupby(''user_id'').agg(''median'').reset_index()
t6.rename(columns={''distance'':''user_median_distance''},inplace=True)
# 每个用户使用优惠券购买的商品数量
t7 = user1[(user3.date!=''null'')&(user1.coupon_id!=''null'')][[''user_id'']]
t7[''buy_use_coupon''] = 1
t7 = t7.groupby(''user_id'').agg(''sum'').reset_index()
# 购买商品的总数
t8 = user1[user1.date!=''null''][[''user_id'']]
t8[''buy_total''] = 1
t8 = t8.groupby(''user_id'').agg(''sum'').reset_index()
# 接收优惠券的总数
t9 = user1[user1.coupon_id!=''null''][[''user_id'']]
t9[''coupon_received''] = 1
t9 = t9.groupby(''user_id'').agg(''sum'').reset_index()
# 收到优惠券的日期和使用之间的距离
t10 = user1[(user1.date_received !=''null'')&(user1.date!=''null'')][[''user_id'',''date_received'',''date'']]
t10[''user_date_datereceived_gap''] = t10.date+'':''+t10.date_received
t10.user_date_datereceived_gap = t10.user_date_datereceived_gap.apply(get_user_date_datereceived_gap)
t10 = t10[[''user_id'',''user_date_datereceived_gap'']]
# 将用户优惠券使用时间的间隔取平均值
t11 = t10.groupby(''user_id'').agg(''mean'').reset_index()
t11.rename(columns={''user_date_datereceived_gap'':''avg_user_date_datereceived_gap''},inplace=True)
# 间隔天数的最小值
t12 = t10.groupby(''user_id'').agg(''min'').reset_index()
t12.rename(columns={''user_date_datereceived_gap'':''min_user_date_datereceived_gap''},inplace=True)
# 间隔天数的最大值
t13 = t10.groupby(''user_id'').agg(''max'').reset_index()
t13.rename(columns={''user_date_datereceived_gap'':''max_user_date_datereceived_gap''},inplace=True)
# 合并特征
user1_feature = pd.merge(t,t1,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t3,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t4,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t5,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t6,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t7,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t8,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t9,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t11,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t12,on=''user_id'',how=''left'')
user1_feature = pd.merge(user1_feature,t13,on=''user_id'',how=''left'')
user1_feature.count_merchant = user1_feature.count_merchant.replace(np.nan,0)
user1_feature.buy_user_coupon = user1_feature.buy_use_coupon.replace(np.nan,0)
user1_feature[''buy_use_coupon_rate''] = user1_feature.buy_use_coupon.astype(''float'')/user1_feature.buy_total.astype(''float'')
user1_feature[''user_coupon_transfer_rate''] = user1_feature.buy_use_coupon.astype(''float'')/user1_feature.buy_use_coupon.astype(''float'')
user1_feature.buy_total = user1_feature.buy_total.replace(np.nan,0)
user1_feature.coupon_received = user1_feature.coupon_received.replace(np.nan,0)
user1_feature.to_csv(''feature/user1_feature.csv'',index=None)

  5、用户和商店之间联系的特征

# 对数据集feature3进行处理

# 用户和商店之间联系的特征
all_user_merchant = feature3[[''user_id'',''merchant_id'']]
all_user_merchant.drop_duplicates(inplace=True)
# 只保留销售了商品的商户id
t = feature3[[''user_id'',''merchant_id'',''date'']]
t = t[t.date!=''null''][[''user_id'',''merchant_id'']]
# 用户一共买了特定商户多少商品
t[''user_merchant_buy_total''] = 1
t = t.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t.drop_duplicates(inplace=True)
t1 = feature3[[''user_id'',''merchant_id'',''coupon_id'']]
t1 = t1[t1.coupon_id!=''null''][[''user_id'',''merchant_id'']]
# 用户一共收到一个商户的优惠劵数目
t[''user_merchant_received''] = 1
t1 = t1.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t1.drop_duplicates(inplace = True)

t2 = feature3[[''user_id'',''merchant_id'',''date'',''date_received'']]
t2 = t2[(t2.date!=''null'')&(t2.date_received!=''null'')][[''user_id'',''merchant_id'']]
# 用户在一家商户使用优惠券购买的商品数目
t2[''user_merchant_buy_use_coupon''] = 1
t2 = t2.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t2.drop_duplicates(inplace = True)
# 用户在一家商家的说有记录总数
t3 = feature3[[''user_id'',''merchant_id'']]
t3[''user_merchant_any''] = 1
t3 = t3.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t3.drop_duplicates(inplace=True)
# 用户未使用优惠券购买的商品数目
t4 = feature3[[''user_id'',''merchant_id'',''date'',''coupon_id'']]
t4 = t4[(t4.date!=''null'')&(t4.coupon_id==''null'')][[''user_id'',''merchant_id'']]
t4[''user_merchant_buy_common''] = 1
t4 = t4.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t4.drop_duplicates(inplace = True)
user_merchant3 = pd.merge(all_user_merchant,t,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant3 = pd.merge(user_merchant3,t1,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant3 = pd.merge(user_merchant3,t2,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant3 = pd.merge(user_merchant3,t3,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant3 = pd.merge(user_merchant3,t4,on=[''user_id'',''merchant_id''],how=''left'')
# 都是针对一个商户和一个用户
user_merchant3[''user_merchant_coupon_transfer_rate''] = user_merchant3.user_merchant_buy_use_coupon.astype(''float'') / user_merchant3.user_merchant_received.astype(''float'')
user_merchant3[''user_merchant_coupon_buy_rate''] = user_merchant3.user_merchant_buy_use_coupon.astype(''float'')/user_merchant3.user_merchant_buy_total.astype(''float'')
user_merchant3[''user_merchant_rate''] = user_merchant3.user_merchant_buy_total.astype(''float'')/user_merchant3.user_merchant_any.astype(''float'')
user_merchant3[''user_merchant_common_buy_rate''] = user_merchant3.user_merchant_buy_common.astype(''float'')/user_merchant3.user_merchant_buy_total.astype(''float'')
user_merchant3.to_csv(''feature/user_merchant3.csv'',index=None)


# 对于数据集feature2
all_user_merchant = feature2[[''user_id'',''merchant_id'']]
all_user_merchant.drop_duplicates(inplace=True)
t = feature2[[''user_id'',''merchant_id'',''date'']]
t = t[t.date!=''null''][[''user_id'',''merchant_id'']]
t[''user_merchant_buy_total''] = 1
t = t.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t.drop_duplicates(inplace=True)
t1 = feature2[[''user_id'',''merchant_id'',''coupon_id'']]
t1 = t1[t1.coupon_id!=''null''][[''user_id'',''merchant_id'']]
t1[''user_merchant_received''] = 1
t1 = t1.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t1.drop_duplicates(inplace = True)

t2 = feature2[[''user_id'',''merchant_id'',''date'',''date_received'']]
t2 = t2[(t2.date!=''null'')&(t2.date_received!=''null'')][[''user_id'',''merchant_id'']]
t2[''user_merchant_buy_use_coupon''] = 1
t2 = t2.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t2.drop_duplicates(inplace=True)

t3 = feature2[[''user_id'',''merchant_id'']]
t3[''user_merchant_any''] = 1
t3 = t3.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t3.drop_duplicates(inplace=True)

t4 = feature2[[''user_id'',''merchant_id'',''date'',''coupon_id'']]
t4 = t4[(t4.date!=''null'')&(t4.coupon_id == ''null'')][[''user_id'',''merchant_id'']]
t4[''user_merchant_buy_common''] = 1
t4 = t4.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t4.drop_duplicates(inplace=True)

user_merchant2 = pd.merge(all_user_merchant,t,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant2 = pd.merge(user_merchant2,t1,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant2 = pd.merge(user_merchant2,t2,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant2 = pd.merge(user_merchant2,t3,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant2 = pd.merge(user_merchant2,t4,on=[''user_id'',''merchant_id''],how=''left'')

user_merchant2.user_merchant_buy_use_coupon = user_merchant2.user_merchant_buy_use_coupon.replace(np.nan,0)
user_merchant2.user_merchant_buy_common = user_merchant2.user_merchant_buy_common.replace(np.nan,0)

user_merchant2[''user_merchant_coupon_transfer_rate''] = user_merchant2.user_merchant_buy_use_coupon.astype(''float'')/user_merchant2.user_merchant_received.astype(''float'')
user_merchant2[''user_merchant_coupon_buy_rate''] = user_merchant2.user_merchant_buy_use_coupon.astype(''float'')/user_merchant2.user_merchant_buy_total.astype(''float'')
user_merchant2[''user_merchant_rate''] = user_merchant2.user_merchant_buy_total.astype(''float'')/user_merchant2.user_merchant_any.astype(''float'')
user_merchant2[''user_merchant_common_buy_rate''] = user_merchant2.user_merchant_buy_common.astype(''float'')/user_merchant2.user_merchant_buy_total.astype(''float'')
user_merchant2.to_csv(''feature/user_merchant2.csv'',index=None)


# 对于数据集feature1
all_user_merchant = feature1[[''user_id'',''merchant_id'']]
all_user_merchant.drop_duplicates(inplace=True)
t = feature1[[''user_id'',''merchant_id'',''date'']]
t = t[t.date!=''null''][[''user_id'',''merchant_id'']]
t[''user_merchant_buy_total''] = 1
t = t.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t.drop_duplicates(inplace=True)
t1 = feature1[[''user_id'',''merchant_id'',''coupon_id'']]
t1 = t1[t1.coupon_id!=''null''][[''user_id'',''merchant_id'']]
t1[''user_merchant_received''] = 1
t1 = t1.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t1.drop_duplicates(inplace = True)

t2 = feature1[[''user_id'',''merchant_id'',''date'',''date_received'']]
t2 = t2[(t2.date!=''null'')&(t2.date_received!=''null'')][[''user_id'',''merchant_id'']]
t2[''user_merchant_buy_use_coupon''] = 1
t2 = t2.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t2.drop_duplicates(inplace=True)

t3 = feature1[[''user_id'',''merchant_id'']]
t3[''user_merchant_any''] = 1
t3 = t3.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t3.drop_duplicates(inplace=True)

t4 = feature1[[''user_id'',''merchant_id'',''date'',''coupon_id'']]
t4 = t4[(t4.date!=''null'')&(t4.coupon_id == ''null'')][[''user_id'',''merchant_id'']]
t4[''user_merchant_buy_common''] = 1
t4 = t4.groupby([''user_id'',''merchant_id'']).agg(''sum'').reset_index()
t4.drop_duplicates(inplace=True)

user_merchant1 = pd.merge(all_user_merchant,t,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant1 = pd.merge(user_merchant1,t1,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant1 = pd.merge(user_merchant1,t2,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant1 = pd.merge(user_merchant1,t3,on=[''user_id'',''merchant_id''],how=''left'')
user_merchant1 = pd.merge(user_merchant1,t4,on=[''user_id'',''merchant_id''],how=''left'')

user_merchant1.user_merchant_buy_use_coupon = user_merchant1.user_merchant_buy_use_coupon.replace(np.nan,0)
user_merchant1.user_merchant_buy_common = user_merchant1.user_merchant_buy_common.replace(np.nan,0)

user_merchant1[''user_merchant_coupon_transfer_rate''] = user_merchant1.user_merchant_buy_use_coupon.astype(''float'')/user_merchant1.user_merchant_received.astype(''float'')
user_merchant1[''user_merchant_coupon_buy_rate''] = user_merchant1.user_merchant_buy_use_coupon.astype(''float'')/user_merchant1.user_merchant_buy_total.astype(''float'')
user_merchant1[''user_merchant_rate''] = user_merchant1.user_merchant_buy_total.astype(''float'')/user_merchant1.user_merchant_any.astype(''float'')
user_merchant1[''user_merchant_common_buy_rate''] = user_merchant1.user_merchant_buy_common.astype(''float'')/user_merchant1.user_merchant_buy_total.astype(''float'')
user_merchant1.to_csv(''feature/user_merchant1.csv'',index=None)

  三、特征组合

# dataset1,2,3分别是划分时间滑窗后的所提取的特征的组合,方便接下来的划分训练集和测试集
# 此次合并后dataset1,2,3的特征类型是一样的,然后给dataset1,2添加标签,标签是get_label(s)这个函数所生成的
def get_label(s):
    s = s.split('':'')
    if s[0]==''null'':
        return 0
    elif (dt.date(int(s[0][0:4]),int(s[0][4:6]),int(s[0][6:8]))-dt.date(int(s[1][0:4]),int(s[1][4:6]),int(s[1][6:8]))).days<15:
        return 1
    else:
        return -1

coupon3 = pd.read_csv(''feature/coupon3_feature.csv'')
merchant3 = pd.read_csv(''feature/merchant3_feature.csv'')
user3 = pd.read_csv(''feature/user3_feature.csv'')
other_feature3 = pd.read_csv(''feature/other_feature3.csv'')
user_merchant3 = pd.read_csv(''feature/user_merchant3.csv'')
dataset3 = pd.merge(coupon3,merchant3,on=''merchant_id'',how=''left'')
dataset3 = pd.merge(dataset3,user3,on=''user_id'',how=''left'')
dataset3 = pd.merge(dataset3,user_merchant3,on=[''user_id'',''merchant_id''],how=''left'')
dataset3 = pd.merge(dataset3,other_feature3,on=[''user_id'',''coupon_id'',''date_received''],how=''left'')
dataset3.drop_duplicates(inplace=True)

dataset3.user_merchant_buy_total = dataset3.user_merchant_buy_total.replace(np.nan,0)
dataset3.user_merchant_any = dataset3.user_merchant_any.replace(np.nan,0)
dataset3.user_merchant_received = dataset3.user_merchant_received.replace(np.nan,0)
dataset3[''is_weekend''] = dataset3.day_of_week.apply(lambda x:1 if x in (6,7) else 0)
# get_dummies 进行one-hot编码
weekday_dummies = pd.get_dummies(dataset3.day_of_week)
weekday_dummies.columns = [''weekday''+str(i+1) for i in range(weekday_dummies.shape[1])]
dataset3 = pd.concat([dataset3,weekday_dummies],axis=1)
# dataset3.columns
dataset3.drop([''merchant_id'',''day_of_week'',''coupon_count''],axis=1,inplace=True)
dataset3 = dataset3.replace(''null'',np.nan)
dataset3.to_csv(''dataset/dataset3.csv'',index=None)

coupon2 = pd.read_csv(''feature/coupon2_feature.csv'')
merchant2 = pd.read_csv(''feature/merchant2_feature.csv'')
user2 = pd.read_csv(''feature/user2_feature.csv'')
user_merchant2 = pd.read_csv(''feature/user_merchant2.csv'')
other_feature2 = pd.read_csv(''feature/other_Feature2.csv'')
dataset2 = pd.merge(coupon2,merchant2,on=''merchant_id'',how=''left'')
dataset2 = pd.merge(dataset2,user2,on=''user_id'',how=''left'')
dataset2 = pd.merge(dataset2,user_merchant2,on=[''user_id'',''merchant_id''],how=''left'')
dataset2 = pd.merge(dataset2,other_feature2,on=[''user_id'',''coupon_id'',''date_received''],how=''left'')
dataset2.drop_duplicates(inplace=True)
# dataset2.head()

dataset2.user_merchant_buy_total = dataset2.user_merchant_buy_total.replace(np.nan,0)
dataset2.user_merchant_any = dataset2.user_merchant_any.replace(np.nan,0)
dataset2.user_merchant_received = dataset2.user_merchant_received.replace(np.nan,0)
dataset2[''is_weekend''] = dataset2.day_of_week.apply(lambda x:1 if x in (6,7) else 0)
weekday_dummies = pd.get_dummies(dataset2.day_of_week)
weekday_dummies.columns = [''weekday''+str(i+1) for i in range(weekday_dummies.shape[1])]
dataset2 = pd.concat([dataset2,weekday_dummies],axis=1)
dataset2[''label''] = dataset2.date.astype(''str'') + '':'' +  dataset2.date_received.astype(''str'')
dataset2.label = dataset2.label.apply(get_label)
dataset2.drop([''merchant_id'',''day_of_week'',''date'',''date_received'',''coupon_id'',''coupon_count''],axis=1,inplace=True)
dataset2 = dataset2.replace(''null'',np.nan)
dataset2.to_csv(''dataset/dataset2.csv'',index=None)


coupon1 = pd.read_csv(''feature/coupon1_feature.csv'')
merchant1 = pd.read_csv(''feature/merchant1_feature.csv'')
user1 = pd.read_csv(''feature/user1_feature.csv'')
user_merchant1 = pd.read_csv(''feature/user_merchant1.csv'')
other_feature1 = pd.read_csv(''feature/other_feature1.csv'')
dataset1 = pd.merge(coupon1,merchant1,on=''merchant_id'',how=''left'')
dataset1 = pd.merge(dataset1,user1,on=''user_id'',how=''left'')
dataset1 = pd.merge(dataset1,user_merchant1,on=[''user_id'',''merchant_id''],how=''left'')
dataset1 = pd.merge(dataset1,other_feature1,on=[''user_id'',''coupon_id'',''date_received''],how=''left'')
dataset1.drop_duplicates(inplace=True)
# print dataset1.shape

dataset1.user_merchant_buy_total = dataset1.user_merchant_buy_total.replace(np.nan,0)
dataset1.user_merchant_any = dataset1.user_merchant_any.replace(np.nan,0)
dataset1.user_merchant_received = dataset1.user_merchant_received.replace(np.nan,0)
dataset1[''is_weekend''] = dataset1.day_of_week.apply(lambda x:1 if x in (6,7) else 0)
weekday_dummies = pd.get_dummies(dataset1.day_of_week)
weekday_dummies.columns = [''weekday''+str(i+1) for i in range(weekday_dummies.shape[1])]
dataset1 = pd.concat([dataset1,weekday_dummies],axis=1)
dataset1[''label''] = dataset1.date.astype(''str'') + '':'' +  dataset1.date_received.astype(''str'')
dataset1.label = dataset1.label.apply(get_label)
dataset1.drop([''merchant_id'',''day_of_week'',''date'',''date_received'',''coupon_id'',''coupon_count''],axis=1,inplace=True)
dataset1 = dataset1.replace(''null'',np.nan)
dataset1.to_csv(''dataset/dataset1.csv'',index=None)

  四、模型训练

import pandas as pd
import xgboost as xgb
from sklearn.preprocessing import MinMaxScaler

dataset1 = pd.read_csv(''dataset/dataset1.csv'')
dataset1.label.replace(-1,0,inplace=True)
dataset2 = pd.read_csv(''dataset/dataset2.csv'')
dataset2.label.replace(-1,0,inplace=True)
dataset3 = pd.read_csv(''dataset/dataset3.csv'')
# 去重
dataset1.drop_duplicates(inplace=True)
dataset2.drop_duplicates(inplace=True)
dataset3.drop_duplicates(inplace=True)

dataset12 = pd.concat([dataset1,dataset2],axis=0)
# 再次组合成训练集
dataset1_y = dataset1.label
dataset1_x = dataset1.drop([''user_id'',''label'',''day_gap_before'',''day_gap_after''],axis=1)  # ''day_gap_before'',''day_gap_after'' cause overfitting, 0.77
dataset2_y = dataset2.label
dataset2_x = dataset2.drop([''user_id'',''label'',''day_gap_before'',''day_gap_after''],axis=1)
dataset12_y = dataset12.label
dataset12_x = dataset12.drop([''user_id'',''label'',''day_gap_before'',''day_gap_after''],axis=1)
dataset3_preds = dataset3[[''user_id'',''coupon_id'',''date_received'']]
dataset3_x = dataset3.drop([''user_id'',''coupon_id'',''date_received'',''day_gap_before'',''day_gap_after''],axis=1)
# dataset3_x = dataset3.drop([''user_id'',''coupon_id'',''date_received''],axis=1)

# print(dataset1_x.shape,dataset2_x.shape,dataset3_x.shape)

dataset1 = xgb.DMatrix(dataset1_x,label=dataset1_y)
dataset2 = xgb.DMatrix(dataset2_x,label=dataset2_y)
dataset12= xgb.DMatrix(dataset12_x,label=dataset12_y)
dataset3 = xgb.DMatrix(dataset3_x)
# 在XGBoost中,要将处理的数据存储在对象DMatrix中,方便下一步处理

  对特征筛选,训练,方便除去对标签影响因子小的特征属性,即剪枝

params={''booster'':''gbtree'',
	    ''objective'': ''rank:pairwise'',
	    ''eval_metric'':''auc'',
	    ''gamma'':0.1,
	    ''min_child_weight'':1.1,
	    ''max_depth'':5,
	    ''lambda'':10,
	    ''subsample'':0.7,
	    ''colsample_bytree'':0.7,
	    ''colsample_bylevel'':0.7,
	    ''eta'': 0.01,
	    ''tree_method'':''exact'',
	    ''seed'':0,
	    ''nthread'':12
	    }
watchlist = [(dataset12,''train'')]
# 模型训练 model = xgb.train(params,dataset12,num_boost_round=3500,evals=watchlist) # 对dataset3进行预测 dataset3_preds[''label''] = model.predict(dataset3) dataset3_preds.label = MinMaxScaler().fit_transform(dataset3_preds.label.reshape(-1, 1)) dataset3_preds.sort_values(by=[''coupon_id'',''label''],inplace=True) dataset3_preds.to_csv("xgb_preds.csv",index=None,header=None) # print(dataset3_preds.describe()) # feature_score来保存特征对标签的影响因子 feature_score = model.get_fscore() feature_score = sorted(feature_score.items(), key=lambda x:x[1],reverse=True) fs = [] for (key,value) in feature_score: fs.append("{0},{1}\n".format(key,value)) with open(''xgb_feature_score.csv'',''w'') as f: f.writelines("feature,score\n") f.writelines(fs)

  

  五、总结

  本次按着大佬的思路做了一次,感觉对自己的提升挺大的,学会了好多东西,总结下自己这段时间的工作吧,弄懂了一个完整的数据处理过程到底在干什么、怎么弄、以及锻炼了自己敲代码的能力,个人感觉真是在课本学习和实际操作过程中差距还是挺大的,实际操作下,学东西会更快,以后要多多参加这种竞赛,看看别人的想法,我这算是入门级的了。

  六、附录

  这些代码都在Jupyter Notebook上完美运行,所涉及的知识点也做了一些笔记整理,具体详见我的其他随笔。

  最后,感谢第一名大佬提供的源码。

 

php – Paypal优惠券代码结帐

php – Paypal优惠券代码结帐

我正在尝试为我的网站制作简单的产品结帐系统.我正在使用paypal默认结帐系统.它工作正常,但我也需要优惠券代码设施.我从未在paypal中看到任何选项以获取优惠券代码.这就是为什么我试图通过jquery创建它.

我成功了,但它仅适用于一种产品.当我在页面中添加更多产品时,这是行不通的.我可以理解它关于类和id的问题,但我仍然不知道如何做到这一点.也尝试折扣作为%明智当前我的代码只工作硬编码价格.

你们会检查我的代码,看看我的错误在哪里,或者如何做到.或者,如果还有其他方法可做

HTML

<h2>  Product 1 - $4.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0001" />
    <input type="hidden" name="amount"value="4.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>
 <h2>  Product 2 - $6.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0002" />
    <input type="hidden" name="amount"value="6.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>

<h2>  Product 3 - $8.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0003" />
    <input type="hidden" name="amount"value="8.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>
 <h2>  Product 4 - $1.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0004" />
    <input type="hidden" name="amount"value="1.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>
 <h2>  Product 5 - $6.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0005" />
    <input type="hidden" name="amount"value="6.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>

<h2>  Product 6 - $6.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0006" />
    <input type="hidden" name="amount"value="6.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>
 <h2>  Product 7 - $6.99</h2> 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart" />
    <input type="hidden" name="business" value="info@soming.com" />
    <input type="hidden" name="lc" value="US" />
    <input type="hidden" name="item_name" value="Chile Powder" />
    <input type="hidden" name="item_number" value="0007" />
    <input type="hidden" name="amount"value="6.99" />
    <input type="hidden" name="currency_code" value="USD" />
    <input type="hidden" name="button_subtype" value="products" />
    <input type="hidden" name="no_note" value="0" />
    <input type="hidden" name="tax_rate" value="0.082" />
    <input type="hidden" name="add" value="1" />
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest" />
    <input type="image" alt="PayPal - The safer, easier way to pay online!" name="submit" src="http://oldstoberfest.com/wp-content/uploads/2015/04/buyNow.png"/>
    <div>
        <div></div>If you have any coupon code please enter Otherwise leave it blank and Press checkout.
        <br>
        <input type="text" name="coupon_code"value="" placeholder="Coupon Code" />
        <br>
        <input type="button"name="btnCheckOut" value="Checkout" /> <span>
        <input type="button"name="btnPay" value="Pay" />
        </span> 
    </div>
    <img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" border="0" />
</form>

JS

jQuery(document).ready(function($){
  $('body').on('click','#btnPaypal', function(e) {
      e.preventDefault();
      $("#div_coupon_code").show("slow");
      return false;
  });

  $('body').on('click','#btnCheckOut', function(e) {
      var coupon=$("#coupon_code").val();
      var go_paypal=1;
      if(coupon=="happy" || coupon=="HAPPY")
      {
        $("#amount").val(5.24);
        $("#div_msg").html("Valid coupon code entered! Click pay to continue").show("slow");
        go_paypal=0;
      }
      else if(coupon!="")
      {
        $("#div_msg").html("Invalid coupon code. Please double check").show("slow");
        go_paypal=1;
      }
      else
        $("#frm_paypal").submit();

      if(go_paypal==0)
      {
        $("#btnCheckOut").hide("slow");
        $("#span_pay").show("fast");
      }
  });

  $('body').on('click','#btnPay', function(e) {
      $("#frm_paypal").submit();
  });
  $("#div_coupon_code").hide();
  $("#span_pay").hide();    
});  

单品演示
http://jsfiddle.net/cyber007/gpLeqgzc/

多产品演示
http://jsfiddle.net/cyber007/3pLv8dy6/

我会在这里继续更新

解决方法:

如果您想动态计算多个产品的折扣,那么将所有产品的价格合并,然后在获得总额后应用优惠券折扣

所以,你的代码应该是这样的……

function calcPrice(){
var v = parseInt(document.getElementById("val").value);
var q = parseInt(document.getElementById("quantity").value);
if ((isNaN(q)) || (q == null) || (q <0)) {
alert ("You must enter a positive number");
document.getElementById("quantity").value = "";
return false;
}
var p = calcTotal(v,q);
alert("Total Price = " + p);
}

function calcTotal(v,q) {
var discount = 0;
if (q>=1) {discount = .25}
var price = q * v;
var savings = price * discount;
var total = price - savings;
return total;
}

这是您只需修改HTML的id和类所需的引用

php – 产品正常价格(非促销价格)的优惠券折扣

php – 产品正常价格(非促销价格)的优惠券折扣

在WooCommerce中,我的产品的正常价格为X,销售价格为Y.我想添加一张代码优惠券,价格为45美元,可以从正常价格X中扣除.

我希望优惠券无视销售价格,所以我得到X- $45不是Y- $45.但是当没有使用优惠券时,使用价格Y.

我发现以下适用于百分比折扣,但我似乎无法使其适用于固定产品折扣价格.

add_filter('woocommerce_coupon_get_discount_amount', 'woocommerce_coupon_get_discount_amount', 10, 5 );
function woocommerce_coupon_get_discount_amount( $discount, $discounting_amount, $cart_item, $single, $coupon ) {
    if ($coupon->type == 'percent_product' || $coupon->type == 'percent') {
        global $woocommerce;
        $cart_total = 0;

        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $cart_item ) {

         $variable_product1= new WC_Product_Variation( $cart_item["variation_id"] );

         $cart_total += $variable_product1 ->regular_price * $cart_item['quantity'];
        } 
        $discount = round( ( $cart_total / 100 ) * $coupon->amount, $woocommerce->cart->dp );
        return $discount;
    }
    return $discount;
}

解决方法:

这似乎检查优惠券,然后在应用优惠券之前将购物车价格更改为正常价格而不是折扣价格(从此应用程序中的woocommerce动态定价获得).放在functions.PHP中

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 10, 1);
function add_custom_price( $cart_object) {

    global $woocommerce;

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $coupon = False;

    if ($coupons = WC()->cart->get_applied_coupons()  == False ) 
      $coupon = False;
    else {
        foreach ( WC()->cart->get_applied_coupons() as $code ) {
          $coupons1 = new WC_Coupon( $code );
          if ($coupons1->type == 'percent_product' || $coupons1->type == 'percent')
            $coupon = True;
        }
    }

    if ($coupon == True)
        foreach ( $cart_object->get_cart() as $cart_item ) 
        {
            $price = $cart_item['data']->regular_price;
            $cart_item['data']->set_price( $price );
        }
}

php – 仅限WooCommerce优惠券代码到定义的工作日

php – 仅限WooCommerce优惠券代码到定义的工作日

我想限制优惠券代码“XYZ”仅用于定义的工作日,仅限周一至周四.其他日子(星期五到星期日)会显示错误通知.

可能吗?我怎样才能做到这一点?

谢谢

解决方法:

这是一个完整的解决方案,包含2个挂钩功能,可以限制您定义的工作日的优惠券使用情况,如果优惠券无效,则会显示自定义错误通知.

1)检查“定义天数”优惠券有效期:

add_filter( 'woocommerce_coupon_is_valid', 'coupon_week_days_check', 10, 2);
function coupon_week_days_check( $valid, $coupon ) {

    // Set HERE your coupon slug   <===  <===  <===  <===  <===  <===  <===  <===  <===  <===  
    $coupon_code_wd = 'xyz';
    // Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Wed' and 'Thu')  <===  <===
    $invalid_days = array('Fri', 'Sat', 'Sun');

    $Now_day = date ( 'D' ); // Now day in short format

    // WooCommerce version compatibility
    if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
        $coupon_code = strtolower($coupon->code); // Older than 3.0
    } else {
        $coupon_code = strtolower($coupon->get_code()); // 3.0+
    }

    // When 'xyz' is set and if is not a week day we remove coupon and we display a notice
    if( $coupon_code_wd == $coupon_code && in_array($Now_day, $invalid_days) ){
        // if not a week day
        $valid = false;
    }
    return $valid;
}

2)如果无效,则显示“已定义天数”优惠券的自定义错误消息:

add_filter('woocommerce_coupon_error', 'coupon_week_days_error_message', 10, 3);
function coupon_week_days_error_message( $err, $err_code, $coupon ) {

    // Set HERE your coupon slug   <===  <===  <===  <===  <===  <===  <===  <===  <===  <===  
    $coupon_code_wd = 'xyz';
    // Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Wed' and 'Thu')  <===  <===
    $invalid_days = array('Fri', 'Sat', 'Sun');

    $Now_day = date ( 'D' ); // Now day in short format

    // WooCommerce version compatibility
    if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
        $coupon_code = strtolower($coupon->code); // Older than 3.0
    } else {
        $coupon_code = strtolower($coupon->get_code()); // 3.0+
    }

    if( $coupon_code_wd == $coupon_code && intval($err_code) === WC_COUPON::E_WC_COUPON_INVALID_FILTERED && in_array($Now_day, $invalid_days) ) {
        $err = __( "Coupon $coupon_code_wd only works on weekdays and has been removed", "woocommerce" );
    }
    return $err;
}

代码放在活动子主题(或主题)的function.PHP文件中,或者放在任何插件文件中.

此工作代码在WooCommerce版本2.6.x和3.0上进行了测试.

关于php – 使用Stripe的优惠券代码php优惠券思路的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于O2O淘宝优惠券代码总结、php – Paypal优惠券代码结帐、php – 产品正常价格(非促销价格)的优惠券折扣、php – 仅限WooCommerce优惠券代码到定义的工作日的相关知识,请在本站寻找。

本文标签: