options(warn =-1)# 加载包library(RPostgres)suppressPackageStartupMessages(library(dplyr)) # 建立连接函数init_psql <-function(dbname ="tastien_hologres_prod") { con <-dbConnect(RPostgres::Postgres(), dbname = dbname, host ="hgprecn-cn-lbj3s3j7x002-cn-shanghai-vpc-st.hologres.aliyuncs.com", port =80, user ="BASIC$admin_qbi",password ="mrP%GMRw@Ym" )return(con) }# 执行函数并获取连接对象con <-init_psql() # 执行查询result <-dbGetQuery(con, "select case TO_CHAR(TO_DATE(cur_date,'YYYY-MM-DD'), 'D')::int when 1 then '周日' when 2 then '周一' when 3 then '周二' when 4 then '周三' when 5 then '周四' when 6 then '周五' when 7 then '周六' else '其他' end as week ,TO_DATE(cur_date, 'YYYY-MM-DD') as cur_date ,shop_id ,sku_id ,sku_id_name ,category_id ,category_id_name ,base_amt_sku/sale_cnt_sku as base_amt_sku ,sale_cnt_sku ::NUMERIC ,(COALESCE(sale_cnt_sku_elm_wm,0) + COALESCE(sale_cnt_sku_mt_wm,0) + COALESCE(sale_cnt_sku_ingce_tatada,0)) as sale_cnt_sku_wm ,COALESCE(sale_cnt_sku_ingce,0) - COALESCE(sale_cnt_sku_ingce_tatada,0) as sale_cnt_sku_dd from dm.dm_sku_label_all where in_check = 1 and sale_cnt_sku>0 and category_id_name='中国汉堡';")# 查看查询结果# print(result)result_10 <-head(result, 10)print(result_10)
# 查看销量数据趋势library(ggplot2)ggplot(result, aes(x = cur_date, y = sale_cnt_sku, color = sku_id_name)) +geom_line() +theme_minimal() +labs(title ="销量数据趋势", x ="时间", y ="销量")
4、模型构建与结果验证
lm(sale_cnt_sku ~1+ cur_date + week, data = result) %>% broom::tidy()
---title: "新品上线前的销量预估"format: htmleditor: visualtoc: truetoc-location: rightcode-tools: truecode-fold: false---# 1、背景说明随着市场竞争的日益激烈,新品研发和推广成为公司获取市场份额和提升品牌竞争力的关键。新品上线前的销量预估是新品研发及推广环节中的核心步骤,对于制定供应链计划、门店备货以及营销策略至关重要。通过数据分析技术,我们可以建立科学的销量预测模型,为新品上线提供有效的决策支持。# **2、数据收集与整理**```{r}options(warn =-1)# 加载包library(RPostgres)suppressPackageStartupMessages(library(dplyr)) # 建立连接函数init_psql <-function(dbname ="tastien_hologres_prod") { con <-dbConnect(RPostgres::Postgres(), dbname = dbname, host ="hgprecn-cn-lbj3s3j7x002-cn-shanghai-vpc-st.hologres.aliyuncs.com", port =80, user ="BASIC$admin_qbi",password ="mrP%GMRw@Ym" )return(con) }# 执行函数并获取连接对象con <-init_psql() # 执行查询result <-dbGetQuery(con, "select case TO_CHAR(TO_DATE(cur_date,'YYYY-MM-DD'), 'D')::int when 1 then '周日' when 2 then '周一' when 3 then '周二' when 4 then '周三' when 5 then '周四' when 6 then '周五' when 7 then '周六' else '其他' end as week ,TO_DATE(cur_date, 'YYYY-MM-DD') as cur_date ,shop_id ,sku_id ,sku_id_name ,category_id ,category_id_name ,base_amt_sku/sale_cnt_sku as base_amt_sku ,sale_cnt_sku ::NUMERIC ,(COALESCE(sale_cnt_sku_elm_wm,0) + COALESCE(sale_cnt_sku_mt_wm,0) + COALESCE(sale_cnt_sku_ingce_tatada,0)) as sale_cnt_sku_wm ,COALESCE(sale_cnt_sku_ingce,0) - COALESCE(sale_cnt_sku_ingce_tatada,0) as sale_cnt_sku_dd from dm.dm_sku_label_all where in_check = 1 and sale_cnt_sku>0 and category_id_name='中国汉堡';")# 查看查询结果# print(result)result_10 <-head(result, 10)print(result_10)# 完成后断开连接dbDisconnect(con)```# 3、数据探索分析```{r}# 查看数据的基本情况summary(result)# 检查是否有缺失值sapply(result, function(x) sum(is.na(x)))result[is.na(result)] <-0``````{r}# 查看销量数据趋势library(ggplot2)ggplot(result, aes(x = cur_date, y = sale_cnt_sku, color = sku_id_name)) +geom_line() +theme_minimal() +labs(title ="销量数据趋势", x ="时间", y ="销量")```# 4、模型构建与结果验证```{r}lm(sale_cnt_sku ~1+ cur_date + week, data = result) %>% broom::tidy()```**以下是对输出结果的详细分析:**1. **截距(Intercept)**: - 截距值为6362.6265831。这意味着当所有预测变量(`cur_date`和`week`的各个类别)都为0或基准时,`sale_cnt_sku`的预期值为6362.6265831。在实际情况下,由于`week`是分类变量,并且`cur_date`通常不会为0(除非进行了特殊处理),这个截距值可能在实际预测中没有直接解释意义。2. **日期(cur_date)**: - `cur_date`的系数为-0.3169086,表明日期每增加一个单位(这里的具体单位取决于日期是如何编码的),`sale_cnt_sku`预期会减少0.3169086个单位。由于p值非常小(0),这个系数在统计上是显著的,意味着日期对`sale_cnt_sku`有显著影响。3. **星期几(week)**: - 模型的输出为`week`的每个类别提供了一个系数,与基准类别(未显示的类别,通常是字母排序最前的类别,除非在模型中指定了其他基准)进行比较。 - `week周六`、`week周日`和`week周五`的系数都是正的,表明与基准类别相比,这些天的`sale_cnt_sku`预期会增加。 - `week周三`的系数是负的,表明与基准类别相比,周三的`sale_cnt_sku`预期会减少。 - `week周四`的系数虽然为正,但非常小,且p值相对较大(0.1153087),表明这个系数在统计上可能不显著。 - `week周一`的系数也是正的,且p值非常小(表明在统计上显著),但与周六、周日和周五相比,其对`sale_cnt_sku`的影响较小。