首先讲讲我的工作环境还有同事关系,目前在二线城市的某房地产中介 O2O 干的 TO B 产品运营,并不直接对接商户,中间还隔着一层商铺运营,然后我每天都要给他们输出数据日报,加起来大概是 50 份 Excel 表左右。
刚开始的时候,把一份表做完的时间大概是 45 个小时左右,非常耗时间,每天做决策的时间只有 5 分钟,严重影响了每天做数据提升的计划。至于计划落地,就呵呵了。
然后做好了数据,再给到每个商铺运营的同事,然后商铺运营同事再给到每位用户进行数据提升。
我刚来这个公司的时候,都是把数据先到数据组,数据组处理完之后再下发到各位商铺运营的同事,然后商铺运营的同事再处理下给到各位用户。
有的人可能就问,哎你们公司没有 bi 么?有是有,但是数据的颗粒度比较大,如果能精确到每个人就更好了。
那就只能让我做得清楚一点,同时也能告诉自己最近的数据变化。
接下来先举一个简单的业务例子和需要制作的数据:
展位就是经纪人在外网展示的网络端口。
那从以上来看,就有在线聊的转化指标:【在线聊要电话的转化率】【在线聊带看房子的转化率】【在线聊带看房子的成交率】这四个指标。
那大概业务已经捋顺了,接下来就要看看原始数据了。
通常来说,一份表会有很多的数据来记录用户的所有行为,那实际上我们只用要到我们合适的数据就行了。
那刚开始第一步要怎么做呢?先把 csv 转成 xlsx 格式,再打开我们的 Excel 来试着操作一下。
先把每个商户运营的同事和负责的经纪人进行匹配,用的 VLOOKUP
。
然后进行数据透视表,分两条线。
一条线是需要的行是商铺运营同事的领导,商铺运营同事,商铺运营同事负责的门店,门店里的经纪人;值的话需要经纪人在线聊的客户数,要到电话的数量,带看的数量,成交的数量。
另一条线是需要的行是地产品牌,地产品牌大区,地产品牌大区下的门店,门店里的经纪人;值的话需要经纪人在线聊的客户数,要到电话的数量,带看的数量,成交的数量。
把商铺运营同事的领导,商铺运营同事,商铺运营同事负责的门店,门店里的经纪人和地产品牌,地产品牌大区,地产品牌大区下的门店,门店里的经纪人放在 8 个不同的 sheet 里面,改下名字 sheet 的名字,并且求出【拿到电话的转化率】【带看的转化率】【成交的转化率】。
那总结下来流程就是:
- 先把 csv 转化成 xlsx 格式
- 打开两份表,使用
VLOOKUP
匹配商铺运营的同事 - 数据清洗
- 数据透视 8 份表
- 8 份表进行转化率的求值
那把逻辑捋顺了,就可以利用 Python 来进行实践了。
首先是先把 csv 转化成 xlsx 格式
import pandas as pd
inflie = open('在线聊数据.csv')
data = pd.read_csv(inflie, encoding='utf-8')
data.to_excel('在线聊数据.xlsx', sheet_name = 'sheet1', index = False)
print('ok')
第二步是进行匹配,实际上 Python 并没有很好的 VLOOKUP
解决方法,但其实可以利用 zip()
这个方法来完美解决
import pandas as pd
import numpy as np
df1 = pd.read_excel(r'在线聊数据.xlsx')
df2 = pd.read_excel(r'商铺运营同事负责的门店表.xlsx', sheet_name='Sheet1')
df2_colleague = dict(zip(df2['门店'], df2['商铺运营同事']))
df1['商铺运营同事'] = df1['门店'].map(df2_colleague)
df2_leader = dict(zip(df2['门店'], df2['商铺运营同事领导']))
df1['商铺运营同事领导'] = df1['门店'].map(df2_leader)
df = df1
那第三步则是数据清洗
df_clean = df[df['客户来源'] == '在线聊'] # 客户来源选择在线聊
df_clean.drop_duplicates(['用户id', '业务类型'], inplace=True) # 对用户 id 和业务类型进行去重
df['经纪人姓名'].replace('', np.nan, inplace=True) # 对姓名为空的数据替换上空值
df.dropna(subset=['经纪人姓名'], inplace=True) # 对缺失值进行剔除
sell_house = df_clean[df_clean['业务类型'] == '二手房'] # 业务类型选择二手房
第四步数据透视 8 份表和第五步算出转化率的求值。
# 在线聊客户量
var1 = sell_house.groupby(['分公司']).size()
# 在线聊客户录入量
var2 = sell_house[sell_house['转客时间']].groupby(['分公司']).size()
# 在线聊客户带看量
var3 = sell_house[sell_house['转带看时间']].groupby(['分公司']).size()
# 在线聊客户成交量
var4 = sell_house[sell_house['转成交时间']].groupby(['分公司']).size()
Brand = var1.to_frame(name='在线聊')
Brand['在线聊客户量'] = var1
Brand['在线聊客户拿到手机量'] = var2
Brand['在线聊客户拿到手机率'] = var2 / var1
Brand['在线聊客户带看量'] = var3
Brand['在线聊客户带看率'] = var3 / var1
Brand['在线聊客户成交量'] = var4
Brand['在线聊客户成交率'] = var4 / var1
Brand.fillna(0, inplace=True)
Brand.loc['总计'] = Brand.apply(lambda x: x.sum())
Brand['在线聊客户拿到手机率'] = Brand['在线聊客户拿到手机量'] / Brand['在线聊客户量']
Brand['在线聊客户带看率'] = Brand['在线聊客户带看量'] / Brand['在线聊客户量']
Brand['在线聊客户成交率'] = Brand['在线聊客户成交量'] / Brand['在线聊客户量']
Brand.reset_index(inplace=True)
Brand.drop('在线聊', 1, inplace=True)
print('品牌已完成')
导出
writer = pd.ExcelWriter(r'处理后的数据.xlsx')
Brand.to_excel(writer, '品牌', index=False)
df_clean.to_excel(writer, '明细', index=False)
writer.save()
print('整合已完成')
那脚本就大概完成了,其中四个代码块是可以不断的复用。然后有事没事就跑下。
其实还有很多份表,这里只是挑了一个例子在这里讲。曾经我真的每天工作7个小时55分钟在做表,到了现在做40多份表只用10分钟,真的是大大的解放了我重复劳动的时间。
同时做决策的时间也多了,指标自然就越涨越高了。