天池大賽o2o優惠券第一名程式碼解讀(4)
飲水思源,感謝
#使用者的相關資訊
"""
3.user related:
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 (date(int(s[0][0:4]),int(s[0][4:6]),int(s[0][6:8])) - 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']]
#同樣去掉重複用的使用者id和商品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']]
#將null值替換為-1
t2.replace('null',-1,inplace=True)
t2.distance = t2.distance.astype('int')#轉換資料型別為int
t2.replace(-1,np.nan,inplace=True)
#得到使用優惠券購買商品的使用者離店鋪的最短距離
t3 = t2.groupby('user_id').agg('min').reset_index()
t3.rename(columns={'distance':'user_min_distance'},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_datareceived_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.coupon_received.astype('float')
user3_feature.buy_total = user3_feature.buy_total.replace(np.nan,0)#將資料中的NaN值轉為0
user3_feature.coupon_received = user3_feature.coupon_received.replace(np.nan,0)
print(user3_feature)
相關文章
- 天池 O2O 優惠券使用預測思路解析與程式碼實戰
- 天池新人實戰賽o2o優惠券使用預測-排名181
- 資料探勘實戰 - 天池新人賽o2o優惠券使用預測
- 《阿里雲天池大賽賽題解析》——O2O優惠卷預測阿里
- 阿里天池大資料競賽阿里大資料
- 天池大資料比賽總結大資料
- xView2 比賽冠軍程式碼解讀View
- 第一屆天池 PolarDB 資料庫效能大賽資料庫
- "Hello world!" 混亂程式碼比賽第一名作品解析
- 阿里天池大賽 stacking 保姆級別手把手教授阿里
- PostgreSQL 原始碼解讀(124)- 後臺程式#4(autovacuum程式#1)SQL原始碼
- 【CSDN競賽第27期】贏圖書《阿里雲天池大賽賽題解析—機器學習篇》和定製周邊阿里機器學習
- antd原始碼解讀(4)- ButtonGroup原始碼
- 【天池競賽系列】菜鳥-需求預測與分倉規劃初賽冠軍解決方案
- kafka程式碼解讀Kafka
- 天池FashionAI全球挑戰賽小小嚐試AI
- 天池大賽津南挑戰賽圓滿收官 多項技術成果助力津南“智造”
- MSU世界影片編碼器大賽成績出爐,騰訊包攬全部指標第一名指標
- 競賽1-阿里天池-口碑客流量預測-題解總結阿里
- CSDN周賽第35期:贏《阿里雲天池大賽賽題解析―深度學習篇》和定製周邊阿里深度學習
- PostgreSQL 原始碼解讀(156)- 後臺程式#8(walsender#4)SQL原始碼
- CRF as RNN 程式碼解讀CRFRNN
- SQuAD文字理解挑戰賽十大模型解讀大模型
- Vue 原始碼解讀(4)—— 非同步更新Vue原始碼非同步
- css3優惠券效果程式碼例項CSSS3
- 天池中介軟體大賽Golang版Service Mesh思路分享Golang
- 國際C語言混亂程式碼大賽C語言
- 天池中介軟體大賽百萬佇列儲存設計總結【複賽】佇列
- Linklist程式碼實現以及程式碼解讀
- 程式碼整潔之道--讀書筆記(4)筆記
- 智慧中國杯百萬大獎賽解讀 |今天你打怪了嗎(四)
- 從平臺經濟學角度解讀O2O
- 會 Java 就行,第一名5萬,視覺化外掛開發大賽開始了Java視覺化
- 程式設計大賽WBS程式設計
- LSTM Keras下的程式碼解讀Keras
- 2018 機器閱讀理解技術競賽,奇點機智獲第一名
- 圖靈讀者群聖誕辯論大賽賽後感圖靈
- 終於!我找到了開發的得力助手!阿里雲天池雲原生程式設計挑戰賽參賽攻略阿里程式設計