电商精准营销—数据探索与可视化

第1关:单变量特征分布

任务描述

本关任务:通过数据可视化探索单变量的分布情况。

相关知识

为了完成本关任务,你需要掌握: 1.使用 python 的 matplotlib 和 seaborn 包画饼图和密度图; 2.单变量的分析方法。

import warnings
warnings.filterwarnings("ignore") 
import pandas as pd
import os
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import seaborn as sns
sns.set_style('darkgrid')
myfont=fm.FontProperties(fname=r'./data/simhei.ttf')  
def explore_user(User_data):
    fig = plt.figure(figsize=(27, 9))
    vars=['sex','age','user_lv_cd']           
    vars_name=['用户性别分布','用户年龄分布','用户等级分布'] 
    for i in range(3):
        plt.subplot(1, 3, i+1)
        plt.pie(User_data[vars[i]].value_counts(), labels=User_data[vars[i]].value_counts().index, autopct='%.1f%%',textprops={'fontproperties':myfont,'fontsize':9}) 
        plt.title(vars_name[i],fontproperties=myfont,fontsize=12)
    plt.show()
    plt.savefig('./task1/task1_user.png')
    plt.close(fig)
def explore_comment(comment):
    fig=plt.figure(figsize=(8,6)) 
    plt.pie(comment['comment_num'].value_counts(), labels=comment['comment_num'].value_counts().index, autopct='%.1f%%',textprops={'fontproperties':myfont,'fontsize':9})
    plt.title('商品评论分布',fontproperties=myfont,fontsize=12)
    plt.show()
    plt.show() 
    plt.savefig('./task1/task1_comment.png')
    plt.close(fig)
def explore_action(action_data):
    figure = plt.figure(figsize=(27, 9))
    action_do=['浏览','加入购物车','购物车删除','下单','关注','点击']
    for i in range(1, 7, 1):
        plt.subplot(2, 3, i)
        sns.distplot(action_data[action_data['type'] == i].groupby('user_id')['sku_id'].count())
        plt.title('%s分布' %action_do[i-1],fontproperties=myfont,fontsize=12)
        plt.xlabel('客户%s的次数' %action_do[i-1],fontproperties=myfont,fontsize=9)
    plt.show()
    plt.savefig('./task1/task1_action.png')

第2关:用户的购买意向与时间之间的关系

任务描述

本关任务:探索客户购买意象和时间之间的关系。

相关知识

为了完成本关任务,你需要掌握: 1.利用 python 的 matplotlib 画条形图和折线图; 2.分析双变量之间的关系。

#coding:utf8
import warnings
warnings.filterwarnings("ignore") 
import pandas as pd
import matplotlib.pyplot  as plt
import seaborn as sns
sns.set_style('darkgrid')
import matplotlib.font_manager as fm
myfont=fm.FontProperties(fname=r'./data/simhei.ttf')

def push_week(new_data):
    new_data=new_data[new_data['type']==4].copy()                                          
    new_data['weekdays'] = pd.to_datetime(new_data['time']).apply(pd.datetime.weekday) + 1 
    week_days = new_data.groupby('weekdays')['user_id'].count()                           
    fig=plt.figure(figsize=(8,6))                                                          
    bar_width = 0.33                                                                        
    plt.bar(week_days.index , week_days, bar_width, label='下单的次数')
    plt.xlabel('时间',fontproperties=myfont,fontsize=9)
    plt.ylabel('数量',fontproperties=myfont,fontsize=9)
    plt.title('一周内每天的下单情况',fontproperties=myfont,fontsize=12)
    plt.xticks(week_days.index, ('周一', '周二', '周三', '周四', '周五', '周六', '周日'),fontproperties=myfont,fontsize=9)
    plt.ylim(0,300)
    plt.legend(prop=myfont)
    plt.savefig('./task2/task2_week.png')
    plt.close(fig)

def push_date(new_data):
    new_data = new_data[(new_data['type'] == 4) & (pd.to_datetime(new_data['time']) < pd.to_datetime('2016-03-01'))].copy()   #选出2016年数据
    new_data['days'] = [x.day for x in pd.to_datetime(new_data['time'])]                                                      #选出天数
    renew=new_data.groupby('days')['sku_id'].count()
    fig = plt.figure(figsize=(8, 6))
    plt.plot(renew.index,renew,label='购买次数')
    plt.xlabel('天数',fontproperties=myfont,fontsize=9)
    plt.ylabel('次数',fontproperties=myfont,fontsize=9)
    plt.title('购买量和月内日期的关系',fontproperties=myfont,fontsize=12)
    plt.legend(prop=myfont)
    plt.savefig('./task2/task2_date.png')
    #plt.close(fig)

第3关:用户的购买意向与年龄、性别和用户等级之间的关系

任务描述

本关任务:探索用户的购买意向与年龄、性别和用户等级之间的关系。

相关知识

在本关主要使用条形图来探索双变量之间的关系。

#coding:utf8
import pandas as pd
import os
import matplotlib.pyplot  as plt
import seaborn as sns
sns.set_style('darkgrid')
import matplotlib.font_manager as fm
myfont=fm.FontProperties(fname=r'./data/simhei.ttf')

def show_data(User,Action):
    fig = plt.figure(figsize=(18,6))
    Action = Action[Action['type'] == 4].copy()                                      
    Action['mark']='购买'                                                             
    User = pd.merge(User, Action[['user_id','mark']], how='left', on='user_id')       
    User['mark']=User['mark'].fillna('未购买')                                        
    User['sex'] = User['sex'].replace({-1: '未知', 0: '男', 1: '女'})                  
    vars =['age','sex','user_lv_cd']                                                  
    title=['年龄','性别','用户等级']                                                   
    for var in range(3):
        ax=plt.subplot(1, 3, var + 1)
        result_id = pd.pivot_table(User, values='user_id', index=vars[var], columns='mark', aggfunc='count')
        bar_width = 0.25
        opacity = 0.4
        index=pd.Series(range(result_id.shape[0]))
        plt.bar(index-bar_width/2,result_id['未购买'],bar_width,alpha=opacity, color='c', label='未购买')
        plt.bar(index+bar_width/2,result_id['购买'],bar_width, alpha=opacity, color='m', label='购买')
        plt.xticks(index,result_id.index,fontproperties=myfont,fontsize=9)
        plt.legend(prop=myfont)
        plt.title('用户意愿与%s之间的关系' %title[var],fontproperties=myfont,fontsize=9)
        plt.xlabel(title[var],fontproperties=myfont,fontsize=9)
        plt.ylabel('用户数量',fontproperties=myfont,fontsize=9)
    plt.savefig('./task3/task3.png')

第4关:用户的购买意向与差评的关系

任务描述

本关任务:探索用户的购买意向与商品评论之间的关系。

#coding:utf8
import warnings
warnings.filterwarnings("ignore") 
import pandas as pd
import matplotlib.pyplot  as plt
import seaborn as sns
sns.set_style('darkgrid')
import matplotlib.font_manager as fm
myfont=fm.FontProperties(fname=r'./data/simhei.ttf')
def show_data(comment,action):
    action['mark']='购买'                                                                                       data=pd.merge(comment,action[['sku_id','mark']],how='left',on='sku_id').fillna('未购买')             
    result_id=pd.pivot_table(data,values='dt',index='comment_num',columns='mark',aggfunc='count').fillna(0)    
    fig = plt.figure(figsize=(8,6))                                                                                   
    ax=plt.subplot(1,1,1)
    bar_width = 0.25
    opacity = 0.4
    index=pd.Series(range(result_id.shape[0]))
    a1=ax.bar(index,result_id['未购买'],bar_width,alpha=opacity, color='c', label='未购买产品数')
    plt.title('产品评价数与购买的关系',fontproperties=myfont,fontsize=12)
    plt.xlabel('评论数',fontproperties=myfont,fontsize=9)
    plt.ylabel('商品数量',fontproperties=myfont,fontsize=9)
    ax1=ax.twinx()
    a2=ax1.plot(index,result_id['购买'],label='购买的产品数')
    plt.ylabel('商品数量',fontproperties=myfont,fontsize=9)
    lns = a1 if type(a1)==list else [a1] + a2 if type(a2)==list else [a2]
    labs = [l.get_label() for l in lns]
    ax.legend(lns, labs, prop=myfont)
    plt.savefig('./task4/task4.png')

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值