从Python到FineBI,一次数据可视化升级之旅

从Python到FineBI,一次数据可视化升级之旅

第二季度结束了,半年也过去了,又要给一向雷厉风行的领导出销售数据签单和回款的数据分析报告,眼看着还有三天,需求紧急,我也不敢懈怠。

找信息部导了上两个季度以及去年一年的excel数据,脑子第一个想到的是怎们构建表格,同比、环比、回款率,用excel做几张表,打印完事。转身倒了一杯水,一想不对,第一季度给领导汇报的时候,给了领导一份10页的纸质报告,领导甩了一句“当我批卷子呐,不合格”怼了回来,虽然没让重做,但总归是惹得不开心。

后来跟着信息部门的哥们学了两周的Python,我大学里学了一点编程,再加上很多代码的逻辑类似于Excel的函数,好说歹说算是入了门,同时也学习了数据分析的一点思路。

按照粗浅的数据分析思路:

1、首先明确领导关注哪些数据和指标

之前想的同比、环比、回款率,其实每次月末汇报的时候都讲过了,按照这样的逻辑,季度汇报无非是把过去三个月汇总在一起,再算一下累计的数据,确实枯燥不直观。

于是我前一天有意无意地试探了下领导,除了常规的总比环比汇总数据,还想关注哪些信息。领导透露口风,“每个区域的销售和回款数据如何,回款率高低可以给个排名不,哪一季度份额最大,我们公司历年整体的销售情况是怎样等等,好让我知道汇款低了怎么回事,哪个区域表现最佳?”

2、用可视化的方式替代传统表格

这一点我我尝到过甜头,上季度那10页报告被怼之后,我又用PPT做了一份汇报,引用各种图表,才幸免于难。

所以这一次可以升级一下,是不是用Python或者其他数据分析工具露一手,也算一次项目实践。

于是,我找信息部门的同事导来几份数据,但是由于有多年历史数据需要分析,csv文件导出大概有100多兆,试着用excel看看,一打开直接挂了。。。正无限在响应中。

算了,这么大的数据量,正好用回Python。

懂Python的同学知道,我们经常会使用Python提供的numpy、pandas、matplotlib等第三方库来对数据进行计算处理,同时最终生成所需要的可视化报告。

Python语言简明便捷的特性对我来说还是非常有吸引力的,空想不如行动,为了快速出成果,直接开干。

一、Python数据分析可视化过程

1.DataFrame数据类型转换

首先是导入本次分析所需要使用的matplib、pandas、datetime、pylab这几个数据处理以及可视化相关的库,指定mpl的默认字体(否则图表可能会出现中文乱码问题)。接着导入销售合同明细数据表以及销售回款数据表,然后根据合同ID进行左拼接,得到结果转成DataFrame类型格式方便后续的数据计算以及可视化分析处理。

# 导入所需要的库
import matplotlib.pyplot as plt
import pandas as pd
import datetime
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体:解决plot不能显示中文问题
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

pdcsv1=pd.read_csv('D:/DEMO/demo_contract.csv',encoding='gb2312') #导入销售合同明细表数据
pdcsv2=pd.read_csv('D:/DEMO/demo_capital_return.csv',encoding='gb2312') #导入销售回款明细表数据
pdcsv=pd.merge(pdcsv1,pdcsv2,how='left',on=['合同ID','合同ID']) #将销售合同明细表和销售回款明细表数据进行拼接
df = pd.DataFrame(pdcsv) #转为DataFrame格式方便进行数据处理

2.时间类型转换

接着通过datatime类提供的转换方法,对合同签约时间进行格式化,分别取出签约年份、签约季度、签约月份字段,方便从不同的统计口径来观察和分析销售的签单数据和回款数据。

i=0 #遍历计数器
for a in df['合同签约时间']:
      df.set_value(i, '签约年份',int(datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S.0').strftime('%Y'))) #格式化合同签约字段,取出合同签约年份
       i=i+1
i=0
for a in df['合同签约时间']:
      df.set_value(i, '签约季度',(str((int(datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S.0').strftime('%m'))-1)//3+1))+'季度') #格式化合同签约字段,取出合同签约季度
      i=i+1
i=0
for a in df['合同签约时间']:
     df.set_value(i, '签约月份',int(datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S.0').strftime('%m'))) #格式化合同签约字段,取出合同签约月份
     i=i+1

3.分组统计&&图表绘制

最后分别按照签约年份、签约季度、签约月份来对销售的签单金额以及回款金额进行分组统计,设置好相关图形统计标题、坐标轴标题、图例等属性,规划好绘图排版区域,并且以折线图、饼图、对比柱状图的形式进行数据可视化呈现。

df.to_csv('D:/DEMO/join.csv',encoding='gb2312') #合并明细数据导出为csv文件数据存储

dfgp1=(df['总金额']/10000.0).groupby(df['签约年份']).sum() #年度总签单金额分组统计,并且单位转为万
dfgp2=(df['付款金额']/10000.0).groupby(df['签约年份']).sum() #年度付款总额分组统计,并且单位转为万
plt.subplot(2,2,1) #限定绘图区域为左上方
plt.ylabel('总金额(万)')#显示y轴名称
plt.title('各年度签单总金额走势')#显示统计标题
dfgp1.plot.line(label='签单金额') #年度总签单金额绘图
dfgp2.plot.line(label='回款金额') #年度付款总额绘折线图
plt.legend()#显示图例

dfgp=df.groupby(df['签约季度'])['付款金额'].sum().reset_index() #各季度付款金额分组统计
plt.subplot(2,2,2)#限定绘图区域为左上方
plt.title('各季度回款金额分布')#显示统计标题
plt.pie(dfgp['付款金额'],labels=dfgp['签约季度'],autopct='%1.1f%%')#各季度付款金额绘制饼图

dfgp=df.groupby(['签约月份'])['总金额','付款金额'].sum().reset_index()#各月度签单&&回款分组统计
dfgp['总金额']=dfgp['总金额']/10000 #并且单位转为万
dfgp['付款金额']=dfgp['付款金额']/10000 #并且单位转为万
plt.subplot(3,1,3)#限定绘图区域为最下方
plt.title('各月度签单合同金额&&回款金额对比')#显示统计标题
plt.bar(dfgp['签约月份'],dfgp['总金额'],width=0.4,label='签单金额')#各月度签单&&回款分组统计绘制对比柱状图
plt.bar(dfgp['签约月份']+0.4,dfgp['付款金额'],width=0.4,label='回款金额')#各月度签单&&回款分组统计绘制对比柱状图,0.4为宽度偏移量
plt.ylabel('总金额(万)')#显示y轴名称
plt.legend()#显示图例

plt.show() # 出图

4.Python可视化成果展示

程序编译运行,各年度的签单总金额&回款金额走势、各季度回款金额分布、各月度合同签单金额&回款金额对比数据就直接呈现出来了。


二、从Python到FineBI——数据可视化升级

这个可是化还算可以,于是打算贴PPT上。但是和我那信息化的哥们交流一番后,他觉得我的Python可视化“杰作”还存在一些问题,总结一下:

1.可视化图形界面是静态页面,没有动态的界面数据交互,如悬浮提示、图形联动、数据钻取、超链接跳转等等;

2.界面没有筛选器,无法切片呈现过滤部分数据;

3.如果领导看了已有数据之后,针对一些增长或者异常数据无法做进一步深入分析。

4.开发调试还是有一定周期的,说出来不怕大家笑话哈,我为了调这个Python页面耗费了我大半天时间。。。。

哥们建议我这简单可视化需求,可以用BI工具来实现。正好信息部门采购了BI,之后也会和业务数据员推广学习,正好我来练练手。而且公司的数据报表需求非常多,一些部门也逐渐有了深度的数据分析的需求,确实非常迫切地需要一款能够真正多维深入地企业级数据分析工具来解决这些问题。

1.自助分析

官网的介绍,这是一款提供给企业的B/S架构在线数据即席分析平台。比较好的地方是:能够可视化的做报表。尝试了整个过程,除了创建新字段时需要写两行函数,整个过程也没说要写代码,SQL也不需要,嗯,比较适合小白,确实蛮自助的。

以下图为例,托拖拽拽就统计出了公司历年的销售金额以及回款金额数据......相比永代码调试Python程序比,确实很爽!

按照帮助文档,初步做出了以下这个企业的销售&回款分析页面。

2.加背景加特效

可以组件背景、仪表板背景等功能,于是找花瓣上down了点图,调出了以下这个美化版本。

3.最终敲定

模仿了它内置的一个demo,做了个驾驶舱,自己技术不算熟练,花了1天多,还算可以,另外找背景图花了半天(-_-||),可以钻取联动,应该是基于OLAP技术吧。

以上是我近两年前写的博客改写的(当然我现在没那么菜啦),如今看看对于一些出入门的同学还是有点价值的,所以拿出来分享。涉及两个工具,其实也没有什么可比性,Python是数据挖掘工具,BI是OLAP分析展示工具,就可视化这块对比一下,算是我的一次升级总结了,能看到这里的同学都是真爱啦。

公众号:数据分析不是个事儿

常年分享数据分析干货,不定期分享好用的职场技能工具。

回复“工具”获得33个好用工具下载地址

编辑于 2018-12-11

文章被以下专栏收录

    分享数据化管理之道。 关键词:大数据、数据管理、数据挖掘、数据产品、行业研究