Adventure电商分析项目

1、业务背景

Adventure Works Cycle是国内一家制造公司,该公司生产和销售金属和复合材料自行车在全国各个市场。销售方式主要有两种,前期主要是分销商模式,但是2018年公司实现财政收入目标后,2019就开始通过公司自有网站获取线上商户进一步扩大市场。

2、业务需求

2019年12月5日线上业务经理,需要向公司CEO汇报2019年11月自行车销售情况,所以数据部门要提供11月份线上自行业务数据分析报告。

2.1 业务分析指标

  • 从整体的角度:自行车整体销售表现
  • 从地域的角度:11月每个区域销售量表现、11月TOP10城市销售量表现
  • 从产品的角度:11月类别产品销售量表现、11月细分产品销售量表现
  • 热销产品:11月TOP10产品销量榜、11月TOP10销量增速榜
  • 用户的角度:11月用户年龄分布及每个年龄段产品购买喜好、11月男女用户分布以及男女产品购买喜好

2.2 具体流程

Adventure电商分析项目_第1张图片
数据分析流程.PNG

3、数据分析

利用Python结合pandas和numpy从整体、地域、产品、热销产品和用户5个角度来计算每一块的业务指标,部分代码如下
自行车整体销售量表现部分:


Adventure电商分析项目_第2张图片
自行车整体销售量表现1.PNG

Adventure电商分析项目_第3张图片
自行车整体销售表现2.PNG

自行车区域销售量变现:


Adventure电商分析项目_第4张图片
自行车区域销售量表现.PNG

部分powerbi画图如下:
Adventure电商分析项目_第5张图片
powerbi自行车销售量走势图.PNG

最终的分析报告见:
链接:https://pan.baidu.com/s/1_nHIZO8kuPuhENiCvsQjjA
提取码:3txr

4、面对大数量的业务时怎么办

随着公司数据量增大,利用Python处理数据会变的很困难,考虑使用hive来进行数据聚合的操作。具体的流程如下


Adventure电商分析项目_第6张图片
大数据数据分析流程.PNG
  • 通过sqoop将数据导入hive数据库
    以导入订单明细表为例sqoop_ods_sales_orders.sh文件如下,在Linux服务器上执行该文件。
hive -e "truncate table ods.ods_sales_orders"
sqoop import \
--hive-import \
--connect "jdbc:mysql://ip:port/adventure_ods?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&dontTrackOpenResources=true&defaultFetchSize=50000&useCursorFetch=true" \
--driver com.mysql.jdbc.Driver \
--username username \
--password password \
--query \
"select * from ods_sales_orders where "'$CONDITIONS'" " \
--fetch-size 50000 \
--hive-table ods.ods_sales_orders \
--hive-drop-import-delims \
--delete-target-dir \
--target-dir /user/hadoop/sqoop/ods_sales_orders \
-m 1
  • 使用hive进行数据处理
    涉及订单明细表ods_sales_orders和用户表ods_customer,表结构如下


    Adventure电商分析项目_第7张图片
    订单明细表.PNG

    Adventure电商分析项目_第8张图片
    每日新增用户表.PNG

计算了如下指标:
用户的回购率和复购率

-- 复购率
SELECT 
    umonth
    , COUNT(1) as  customes_cons
    , SUM(if(ct > 1, 1, 0)) / COUNT(1) AS fgl
FROM (
    SELECT 
      customer_key, 
      date_format(create_date,'YYYY-MM') as umonth,
      COUNT(customer_key) AS ct
    FROM ods_sales_orders
    GROUP BY customer_key,date_format(create_date,'YYYY-MM')
) t
group by umonth;
-- 回购率
SELECT 
  a.umonth,
  concat(round(COUNT(b.customer_key) / COUNT(a.customer_key) * 100, 2), '%') AS hgl
FROM (
    SELECT 
    customer_key, 
    date_format(create_date,'YYYY-MM') AS umonth
    FROM ods_sales_orders
    GROUP BY customer_key, date_format(create_date,'YYYY-MM')
) a
left JOIN (
    SELECT 
       customer_key, 
       date_format(create_date,'YYYY-MM') AS umonth
    FROM ods_sales_orders
    GROUP BY customer_key, date_format(create_date,'YYYY-MM')
) b
ON a.customer_key = b.customer_key
AND concat(a.umonth,'-01') = add_months(concat(b.umonth,'-01'),-1)
GROUP BY a.umonth;

统计各个省份所属城市下最受欢迎的Top 3产品和其销量

SELECT chinese_province
    ,chinese_city
    ,cpzl_zw
FROM (
    SELECT chinese_province
        ,chinese_city
        ,cpzl_zw
        ,cp_count
        ,row_number() OVER (
            PARTITION BY chinese_city
            ,chinese_city ORDER BY cp_count DESC
            ) AS cp_num
    FROM (
        SELECT t2.chinese_province
            ,t2.chinese_city
            ,t1.cpzl_zw
            ,count(t1.customer_key) AS cp_count
        FROM ods_sales_orders t1
        INNER JOIN ods_customer t2 ON t1.customer_key = t2.customer_key
        GROUP BY t2.chinese_province
            ,t2.chinese_city
            ,t1.cpzl_zw
        ) t1
    WHERE cp_count > 0
    ) t2
WHERE cp_num <= 3 ;

商品的销售数量top10,排名需考虑并列排名的情况

SELECT product_key
    ,cp_count
    ,cp_rank
FROM (
    SELECT product_key
        ,cp_count
        ,dense_rank() OVER (
            ORDER BY cp_count DESC
            ) AS cp_rank
    FROM (
        SELECT product_key
            ,count(cpzl_zw) AS cp_count
        FROM ods_sales_orders
        GROUP BY product_key
        ) t1
    ) t2
WHERE cp_rank <= 10;

计算累计和(统计2019年1-12月的累积销量,即1月为1月份的值,2月为1、2月份值的和,3月为1、2、3月份的和,12月为1-12月份值的和)


SELECT date_format(create_date, 'YYYY-MM') AS umonth
    ,count(sales_order_key) AS ucount
    ,sum(count(sales_order_key)) OVER (
        ORDER BY date_format(create_date, 'YYYY-MM') ASC rows BETWEEN UNBOUNDED PRECEDING
                AND CURRENT ROW
        ) AS cumulative_amount
FROM ods_sales_orders
WHERE year(create_date) = '2019'
GROUP BY date_format(create_date, 'YYYY-MM')
ORDER BY umonth;

计算客户平均购买一次商品的间隔时间

SELECT customer_key
    ,avg(create_date2) AS avgdate
FROM (
    SELECT customer_key
        ,create_date
        ,lead(create_date, 1, 0) OVER (
            PARTITION BY customer_key ORDER BY create_date ASC
            ) AS create_date1
        ,datediff(lead(create_date, 1, 0) OVER (
                PARTITION BY customer_key ORDER BY create_date ASC
                ), create_date) AS create_date2
    FROM ods_sales_orders
    ) t1
WHERE create_date2 > 0
GROUP BY customer_key ;
  • 通过sqoop将数据从hive导入MySQL数据库
    以导出订单表dw_order_by_day为例
sqoop export --connect "jdbc:mysql://ip:port/database" \
--username username \
--password password \
--table dw_order_by_day \
--export-dir /user/hive/warehouse/ods.db/dw_order_by_day \
--input-null-string "\\\\N" \
--input-null-non-string "\\\\N"  \
--input-fields-terminated-by "\001"  \
--input-lines-terminated-by "\\n"  \
-m 1

后面powerbi可连接MySQL数据库进行可视化工作,最后生成数据分析报告。

你可能感兴趣的:(Adventure电商分析项目)