专栏首页生信技能树用R玩转微店汇总报表

用R玩转微店汇总报表

1.新建一个R-project,名叫 financial statements。

(这个地方就很符合jimmy大神的价值观:只允许用打开R-project的方式打开Rstudio,小本本记下来,小心被怼)

2.把微店批量导出的订单明细表和收支明细表放到这个文件夹

3.读取excel表格

fs <- readxl::read_xls('financial statements.xls')
#订单详情表
fs <- readxl::read_xls('financial statements.xls')
#收支明细表
il <- readxl::read_xls('income_list.xls')

订单明细表

收入明细表

自动导出的表,列数足足有几十列,无用信息很多。所以选出有用的几列,并改为英文列名

4.改掉中文列名

#选列和改列名
fs_s <- fs %>%
  select('商品名称',
         '订单金额(不含退款)',
         '买家确认收货时间',
         '退款金额',
         '运费退款')
colnames(fs_s) <- c('goods',
                    'income',
                    'time',
                    'return1',
                    'return2')
il_s <- il %>%
  select("时间",
         "收入(元)",
         "账单类型",
         "交易摘要")
colnames(il_s) <- c('time',
                    'income',
                    'type',
                    'goods')

5.时间处理

报表可以按天汇总,只留日期,不要具体时间

il_st <- il_s %>%
  separate(time,into=c("time","drop"),sep=" ") %>% 
  select(-drop) 
fs_st <- fs_s %>%
  separate(time,into=c("time","drop"),sep=" ") %>% 
  select(-drop)

6.获得精简版的明细表格

这里有一个问题,除了产生退款的订单,其他的退款数值都是空值,应用complete填充,否则无法完成计算!因为缺失值会传染啊。 还有一个坑就是导出报表的数字,它的数据类型是字符,所以计算起来要用as.numeric()来改变!否则就会报错了。

##il需要去掉提现支出,此时少了8行
income_details <- il_st %>%
  filter(type !='提现') %>%
  select('time','goods','income','type') 

#fs需要将退款处的空值改为零,计算收入
fs_details <- fs_st %>%
  complete(nesting(time,goods,income),
           fill=list(return1=0)) %>%
  complete(nesting(time,goods,income,return1),
           fill=list(return2=0)) %>%
  mutate(net_income = as.numeric(income) 
         -as.numeric(return1)
         -as.numeric(return2)
  )%>%#实付
  select(time,goods,net_income)%>%
  arrange(time,goods,net_income)

7.核对订单明细结算的总额和收入明细是否一致

income1 <- sum(fs_details$net_income)
ilcd <- filter(income_details,income>0)#只要>0的
income2 <- sum(as.numeric(ilcd$income))

这两个数字应该相等,对账就完成了。(别看了我編滴)

帅帅地导出xls

write.xlsx(income_details,'收入明细.xls')

接下来就是进行汇总统计。

#先计算薅完羊毛的收入
income <- sum(as.numeric(income_details$income))
#按天数、商品汇总
fs_count <- count(fs_details,time,goods)
fs_sum1 <- summarise(group_by(fs_details,time,goods), 
                     all = sum(as.numeric(net_income), na.rm = F))
day_income <- left_join(fs_count,fs_sum1,by=c('time','goods'))
rm(fs_count,fs_sum1)
#按商品汇总
fs_count <- count(fs_details,goods)
fs_sum1 <- summarise(group_by(fs_details,goods), all = sum(net_income))
goods_income <- left_join(fs_count,fs_sum1,by='goods')%>%
rbind(c('总计',sum(fs_count$n),sum(fs_sum1$all))) %>%
  rbind(c(NA,'支出',outcome),
    c(NA,'净收入',income))
#最后改一下列名
colnames(day_income) <- c('日期','商品','销量','销售额')
colnames(goods_income) <- c('商品','销量','销售额')
colnames(fs_details)<- c('商品','销量','销售额')
#导出
write.xlsx(goods_income,'商品报表.xls')
write.xlsx(day_income,'日营业额报表.xls')

最重要的一张表

两张明细表

学以致用是我本尊了!所以以后只要从微店自动导出列表,然后用这个脚本跑一串,就可以上交给老板咯。解放双手,开心!

如果你刚好用上,那赚了。我捣鼓了一整天。用不上的话,拿来练习一下tidyverse也是好滴!

本文分享自微信公众号 - 生信技能树(biotrainee)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 表观调控13张图之五chip-seq数据直接的相关性

    前面我们讲过了关于样本间转录组数据 RNA-seq 相关性的计算,今天我们将讲述关于样本 ChIP-seq 数据之间的相关性怎么算?

    生信技能树
  • BRCA分型之PAM50(逆向收费读文献2019-10)

    2年前,考虑到科研路的艰难,我组建了文献阅读小组,广邀粉丝参与,从自身做起,开始学习及分享!感兴趣可以点击下面的链接跳转去了解详情:

    生信技能树
  • 学好生信,救人一命

    最近谈到癌症的话题,可能让人立马谈”病”色变。但是早在两年前,一个生物学家利用数据分析,成功治好了自己的癌症。

    生信技能树
  • 从零开始学习PYTHON3讲义(九)字典类型和插入排序

    第六讲、上一讲我们都介绍了列表类型。列表类型是编程中最常用的一种类型,但也有挺明显的缺陷,比如:

    俺踏月色而来
  • Python第十八课:字典

    上一课,我们给大家详细介绍了列表,并且知道了列表中的元素可以通过中括号加上数字来访问,然而我们也只有这一种办法。这一课我们要学习的字典却可以有更多的访问方式,就...

    HuangWeiAI
  • Python 中的魔法函数

    魔法函数是Python中的特性,学习好魔法函数将有助于我们写出优秀的pythonic(优雅的、地道的、整洁的)代码,同时因为Python语言的特性,我们在进...

    星星在线
  • 【Python】从C++/Java到Python入门(2)

    1.元组(tuple)类似于列表(list),但是其元素不可修改,所以相比列表有更好的安全性。

    ZifengHuang
  • Python高级用法总结

    最简单的方法:新建列表,遍历原三维列表,判断一维数据是否为a,若为a,则将该元素append至新列表中。 缺点:代码太繁琐,对于Python而言,执行速度会变...

    oYabea
  • [答题赛第26轮答案和解析]

     4) 如果令狐冲从来没有进入过“丁”,那么令狐冲处在“戊”时被“劈”,令狐冲将到达“丙子”。

    用户6288414
  • Wolfram|Alpha自然语言帮你做计算系列(04)四:函数单调性判定、极值点、拐点、驻点、鞍点、极值与最值的计算

    本文将以具体实例形式,介绍线上判定一元函数的单调性,计算单调性区间的分界点、极值点与拐点,一元函数的极值与最值;判定多元函数的极值点、鞍点以及无条件极值、条件极...

    WolframChina

扫码关注云+社区

领取腾讯云代金券