冯治东,刘 格,何郁娜,郭红波
(榆林学院 信息工程学院,陕西 榆林 719000)
榆林煤炭资源丰富,本地煤炭产业发达,整个地区有600多家煤矿,而中小型煤矿企业占据了半数以上,中小型煤矿在销售煤炭产品过程中,形成了陕北地区特有的模式。由于政府煤管部门的参与,使用统一的磅房软件当属最大的特点。这种统一的磅房软件部署到各个煤矿以后,为政府监管煤炭销售情况发挥重要的作用。但是,对于煤矿而言,销售数据到了磅房以后就停止了,没有和客户的回款、余额、开票等情况关联,因此只能借助手工Excel进行数据管理和统计。不同客户享受不同优惠价格,且一般有承兑和现金两种结算方式,客户使用结算方式有可能更换。业务员在本地煤炭销售过程中充当了不可或缺的因素,体现在回款、余额、开发票和发货单管理等煤炭销售过程中。煤矿事先定价,调价频繁,矿价的制订先于售煤,但是销售数据的统计又是在售煤之后。另外,部分煤矿采用了发货单模式,发货单一式四联、编号统一,包括存根联、提煤单、装车联和出门证。对内,需要将发出去的发货单四联全部收回并进行统计。对外,需要跟踪业务员领取发货单情况,包括领出与回收。
Excel在数据分析与可视化方面拥有大批用户,可以对少量数据进行深入分析。但对于煤矿企业而言,虽然Excel手工操作也能满足煤矿日常销售数据的统计,但是由于煤炭产品销售额巨大,长期使用这种方式,存在以下问题:
(1)由于煤炭产品销售数量多、金额大,因此一旦在统计销售数据的过程中发生了一些人为干预的情况,造成的损失就比较大,而且多个岗位共同管理数据,发生错误也不易查到出问题的环节。
(2)销售统计关键业务工作量较大,且长期依赖某些熟悉业务的操作员,一旦发生请假、辞职等情况,会造成业务停滞或错误率较高的现象。
(3)销售结算涉及销售部门和财务部门,需要不同岗位工作人员协同工作,而Excel操作无法实现业务联动和数据共享。
(4)销售数据量较大,无法为领导和股东提供和统计透明、可靠的实时数据。历史数据量庞大,存储不方便,不能快速、有效地为查询者定位查询的数据。
(5)发货单数量庞大,手工管理者任务繁重,出错率较高。
(6)Excel表格无法实现权限明确划分,因此对于参与销售统计的工作人员,信息量太大、权限过高。
显然,面对海量数据,Excel并不是最好的处理工具,更多人愿意使用第三方数据分析工具。例如,榆林学院智能矿山团队出品的销煤结算大师软件,以煤炭销售“粗放式管理”、“定价随意”、“数据不透明”为痛点,以煤企实际销售业务应用为市场契入点,可以实现中小型煤矿企业销售业务的自给自足。但数据经数据库导出后,复杂的销售数据使工作人员分析与查看时非常吃力,耗费工作人员大量的时间。而且在对海量数据进行分析时,工作人员需要从多方面对数据进行分析与比对,这无疑是一件费时费力的事情。本研究在该软件的基础上又进行了更深一步的探究,有效数据得到后如何在极短时间内进行可视化展现。
为此,本文提出了“面向榆林中小型煤矿的煤炭销售数据分析及可视化”的技术研究,利用Python在数据分析、交互及数据可视化等方面的良好特性,借助pandas、matplotlib和tkinter等强大的数据处理工具,进行销售数据可视化组件的研究,并结合实例分析,力求为当代煤矿企业的数据可视化分析处理提供可靠的数据支撑。
数据可视化指运用计算机图形学、图像、人机交互等技术,将采集或模拟的数据映射为可识别的图形、图像、视频或动画,并允许用户对数据进行交互分析的理论、方法和技术[1]。它通过信息技术将抽象信息转化为交互型的可视化形式,增强了人们的对抽象信息的认知,成为人们发现规律,辅助人们进行决策的有力支撑。数据可视化技术广泛应用于计算机以及各个领域,它主要有以下三个特点:
(1)交互性,实现界面和用户的交互,使得用户可以自主来选择查看数据。
(2)多维性,需要操作的变量或者对象的属性是多维的,数据根据每一维进行分类,组合,排序和显示。
(3)可视性,由于通过动画、三维立体、二维图形、曲线和图像来对数据进行显示,这样就可以对数据的相互关系以及模式来进行可视化分析[2]。
本研究以煤矿企业的销售数据作为研究对象,数据由数据库导出为.csv格式文档。使用Python进行组件的开发,pandas进行数据分析处理,tkinter和matplotlib相结合进行图形绘制。首先,读取并分析销售数据。其次,绘制销售数据图形。最后,创建GUI界面并添加子图进行图像展示。具体步骤如下:
第一步:画布整体布局及事件驱动
(1)在tkinter的GUI上放置一个画布,并调用.pack()方法来调整布局。
(2)放置按钮部件,并设置按钮的事件函数。
(3)启动事件循环。
第二步:获取GUI界面参数,利用该参数绘制图像
(1)清空图像,以使得前后两次绘制的图像不会重叠。
(2)借助pandas良好的数据分析处理特性,通过Pandas.read_csv()方法读取文件,采用此库的其他方法获取需要进行可视化的列,再对列进行分组统计得出分组结果。
(3)使用matplotlib进行图形绘制,获取GUI界面上的参数,生成散点图、饼图和柱状图等图形。并调用draw()方法创建GUI界面将图形展现在界面上。
在煤炭销售数据中,每个客户购买的煤炭数量及品种或者客户在公司的结余账款数都不尽相同,其中可能隐藏着某种规律。为此,在本研究中,将对煤种、客户和业务员三要素进行分析及可视化。
针对客户、购买吨数和客户结余数采用了K-Means聚类算法进行研究。首先,进行数据清洗,将原始数据“结余”和“吨数”列中存在空值的记录删去。其次,选出“结余”列和“吨数”列,并根据客户编码对这两个特征属性分组计算。最终,对得到的36名客户进行K-means聚类分析。其中k值设置成2,即选定两个聚类中心,分别代表两类客户,高结余高吨数客户和低结余低吨数客户。不断迭代最终运算的结果会趋近于一个数值不变[3]:
(1)
将得到的结果集绘制散点图,对这三者之间的关系进行可视化展示。
使用组件绘制柱状图分别对煤种与销售吨数、交易次数、销售车次、销售金额之间的关系进行可视化展示。绘制折线图分别对3-8块、8-15块、籽煤、面煤、混煤在2018年10至2019年4月期间的价格走势进行可视化展示,并在另一张图中对这五种煤的价格走势进行对比。绘制饼图分别对客户与购买吨数和消费金额之间的关系进行可视化展示,并分析每个客户购买煤炭和消费金额的比例。绘制折线图分别对100号业务员、200号业务员、400号业务员、500号业务员销售的煤种和吨数进行可视化展示。
基于榆林地区极具地域特色的煤炭销售模式,榆林学院智能矿山团队,专门为榆林地区中小型煤矿量身定做,开发了一款煤炭销售结算和发货单管控软件——销煤结算大师。本研究煤炭销售数据均来源于此,数据由数据库导出,共采集到251条记录,其中主要研究属性包括:结算方式、客户编码、业务员编码、煤种编码、煤种名称、吨数、单价、金额、车数、结余。
客户的购买吨数和结余数可以展现出客户的购买力和信誉度。现对煤炭销售数据的“吨数”列和“结余”列进行可视化分析。
通过导入sklearn.cluster中的KMeans类,建K-means类对象设置参数为:n_clusters=2表示选定两个聚类中心,max_iter=300表示每次迭代的数量为300。
借助fit()方法进行聚类:
from sklearn.cluster import KMeans
estimator=KMeans(n_clusters=2,max_ite
r=300)
estimator.fit(X)
以客户购买的煤炭吨数为横轴,客户在煤矿公司的结余款数为纵轴,绘制散点图。购买吨数与结余数可视化结果如图1所示,实心圆代表低结余低吨数客户,分布在图的左下方,共34名客户。五角星代表高结余高吨数客户,分布在右上方,共2名客户。
图1 吨数及结余聚类图
由图1吨数和结余数可以找出对应的客户,对“客户编码”、“吨数”和“结余”进行分类统计,如表1高结余高吨数客户和表2低结余低吨数客户所示。可以看出,表1中的客户,购买量和结余数较高,有利于企业的盈利和运营。表2中的客户,购买量和结余数较低,不利于企业的盈利和运营。
表1 高结余客户表
表2 低结余客户表
对于煤矿企业而言,需要统计各煤种的销售吨数、交易次数及价格走势等销售数据,以便了解煤炭的销售情况。为探究煤种与这些变量之间的关系,现对销售数据进行可视化。
图2 各煤种与其它变量关系柱状图
图3 各煤种价格走势折线图
以煤种为横轴,各变量为纵轴分别建立煤种与吨数、煤种与交易次数、煤种与车次、煤种与金额的可视化图形。并选取2018年10月至2019年4月为研究的时间段,探究五种煤炭的价格走势。以时间为横轴,单价为纵轴对各个煤种的价格走势进行可视化。
煤种与其他变量的可视化结果如图2所示,可以看出,面煤的销售情况最好,吨数为44246吨,金额为2128.8197万元,车次为1337次,交易次数为88次。籽煤的销售情况最差,金额为48.36万,吨数为920吨,车次为28次,交易次数为7次。由此可知,面煤在该煤矿企业中,销售比重最大,给企业带来的收益最多,其次是混煤、3-8块、8-15块和籽煤。
煤种价格走势的可视化结果如图3所示,可以看出,单价最高的是籽煤,2019年1月为籽煤单价的低谷期,价格为520.0元,2019年2月和4月达到顶峰,价格为530.0元,价格均值为525.3元。单价最低的是混煤,2018年12月为混煤单价的低谷期,价格为455.7元,2019年1月达到顶峰,价格为469.4元,价格均值为464.0元。综合来看,籽煤单价最高,企业获利也最多,其次是3-8块煤、8-15块煤、面煤和混煤。
图4 客户与吨数及金额关系饼状图
图5 业务员业绩折线图
在煤矿企业的众多客户中,每个客户对煤炭的购买力不尽相同。这些客户购买煤炭的重量和种类不同,进而煤矿企业对于每种煤炭的销售重量和获得的利润也不同。而如何在大数据的基础上分析客户的特点,从而针对不同的客户提供定制化服务[4]。针对此问题,可以从客户与购买吨数和消费金额两方面进行可视化分析,企业工作人员可以根据可视化结果迅速得出每个客户的购买力,进而得知哪些客户是企业的大客户。
客户与吨数及金额可视化结果如图4所示,可以看出,客户编码为50005的客户在2018年10月到2019年4月共购买了17326.10吨煤,占煤矿企业的22.853%,购买金额是829.6668万元,占公司收入的22.62%。其次是客户编码为10015的客户,购买了13616.48吨煤,共占煤矿企业的17.96%,购买金额为651.44104万元,约占公司收入的17.76%。故由此可得出客户编码为50005和10015的两位客户购买力最强,正是煤矿企业需要重点关注的大客户。显然,这大大减少了工作人员的工作量,使销售业务更精确、更有针对性。
业务员是煤矿销售流程中的重要力量,针对业务员销售金额和煤种进行分析,可以判断出业务员的业务能力。现以煤种为横轴,吨数为纵轴,对业务员的业绩进行可视化展示。
业务员业绩可视化结果如图5所示,可以看出,对于面煤而言,编号为500的业务员所销售的吨数最多,金额最大。对于3-8块而言,编号为100的业务员销售的吨数最多,金额最大。对于8-15块而言,编号为100编码的业务员销售的吨数最多,金额最大。对于混煤而言,编号为100的业务员销售的吨数最多,金额最大。对于籽煤而言,编号为400的业务员销售的吨数最多,金额最大。企业对业务员的业绩进行考核并给予适当的奖励,可以激励业务员拓展业务,增加煤矿企业的煤炭销售量。
通过对煤种、客户和业务员三要素进行深入挖掘,阐述了煤炭销售数据分析及可视化方法,开发了一款面向榆林中小型煤矿的煤炭销售数据分析及可视化组件。能够从不同角度对煤炭销售数据的可视化展示,深度挖掘各个属性之间的内在联系,在较短时间内找到隐藏在数据背后的规律。极大地提高了销售数据分析整理的效率,并为企业决策提供可靠的数据保障,具有一定的现实意义。