传统IT应用如何拥抱大数据?谈python大数据的应用落地方法

作者: 梁斌炜 分类: 应用,统计编程开发            发布时间: 05月02日 14:19
一、现状

在中国存在大量的中小型企业,他们的IT应用水平不高,基本上一个IT系统用十几年,ERP用的是用友金蝶,内部开发大量使用php的web架构,IT投入不大,很少IT系统会推倒重来。

时代在发展,大数据应用各行各业风风火火的发展和应用,大量的大企业中大数据中获益,中小企业如何从中分一杯羹呢?

java、php、很多的企业C/S架构IT系统,并不适合适合直接在上面部署大数据应用,而直接新上一个大数据平台,成本投入大,风险高,收益不确定。那在原有系统上进行大数据拓展就有明显的优势了。

二、大数据如何应用

1. 业务分析

通过充分的业务沟通,深刻了解业务流程,对业务流程的关键节点有具体的可量化的评价指数,能找到业务分析的模式,分析模式应该对业务有明显的帮助。

2.手动操作和应用

建立业务的分析模式,人工通过Excel之类的分析工具进行处理,能给公司带来明显的帮助,并且可以持续优化。

3.系统实现

有了上述的两个基础,就可以把业务分析的模式系统化,在不改变现有的系统的架构下去实现,可以通过外围的数据分析结果导入到现有的系统中。

三、主要思路

在大数据的领域,我们大量的使用python,其中有两个python模块非常流行,做大数据也很快捷,他们就是statsmodels和scikit-learn。

statsmodels是一个Python模块,它提供用于估计许多不同统计模型的类和函数,以及用于进行统计检验和统计数据探索,统计学的味道更浓,但统计学是大数据的基础。
scikit-learn是用于Python编程语言的免费软件机器学习库。 它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-means和DBSCAN,旨在与Python数值和科学库NumPy和SciPy互操作。

那我们该怎么做呢?

我们的想法是这样的:

应用系统提交参数给到我们的数据分析应用接口,数据分析应用计算并把结果通过json的方式返回给企业应用系统,企业应用系统就可以直接使用我们的返回结果。对企业应用的改造最低,效果也很明显。

提交参数的方法有:

  • URL直接提交:企业应用系统直接把需要分析的数据通过URL POST或者GET提交个数据分析应用
  • 查询条件提交:通过提交一下查询条件,数据分析应用再通过查询企业应用数据库获取数据,运行分析模型,把结果返回
  • 服务器文件提交:把需要分析的数据放到文本文件,并通过接口上传到数据分析应用服务器中,等待数据分析应用运行分析模型并把结果返回

返回结果的方法有:

  • JSON返回:适合小量的结果数据返回,并且不需要通过数据分析应用保存结果
  • 数据库返回:如果大量的数据返回,可以通过数据分析应用回写到企业应用服务器数据库中,返回一个访问标记即可
  • 服务器文件返回:把结果写到企业应用服务器中,一般返回图片的可以采用这种方式

数据分析应用就是我们的核心了,下面我们对这个核心应用进行设计。

四、整体架构

以URL提交数据JSON返回结果的方法进行架构的设计。

整体架构

以statmodels的线性回归作为例子,企业应用服务器提交一串字符串参数x、y和newX,x为自变量,y为因变量,newX为需要预测的新的一组自变量,用于预测一个新的y值。
如下的数据:

回归分析模型样例数据

企业应用通过POST数据给我们的数据分析服务器,POST的格式如下:
http://xxx/apis_statsmodels_ols?x=[[5.1,3.5,1.4],[4.9,3,1.4],[4.7,3.2,1.3]]&y=[0.99,1.11,0.69]&newX=[5.1,3.5,1.4];

五、数据分析应用服务的构建

接收POST的数据,只写关键代码

import statsmodels.api as sm
x = sm.add_constant(x) #增加常量
lm = sm.OLS(y,x) #创建模型
rs = lm.fit() #模型拟合

可以通过dir(rs)来获取rs对象的所有属性,我们构建一个类,用于接收上述rs的所有结果。下面只显示部分属性作为举例。

class obj_rs:
    HC0_se = list
    aic = float
    fvalue = float
    params = list

    def __init__(self,HC0_se,aic,fvalue,params):
        self.HC0_se = HC0_se
        self.aic = aic
        self.fvalue = fvalue
        self.params = params

接下来我们通过obj_rs来接收rs的数据。

rs_out= obj_rs(rs.HC0_se.tolist(),
          rs.aic,
          rs.fvalue,
          rs.pvalues.tolist()
          ).__dict__

再通过flask进行json的输出。

rs_out= json.dumps(rs_out,ensure_ascii=False,indent=4)
return Response(rs_out, mimetype='application/json',headers={"Access-Control-Allow-Origin":"http://127.0.0.0:5000","Access-Control-Allow-Methods":"GET","Access-Control-Allow-Headers":"x-requested-with,content-type","Access-Control-Allow-Credentials":"true"})

输出的结果如下图(参考):

json回归分析输出结果

如果需要预测的数据,我们可以用下面的代码得到的fcst结果也和可以合并到上面的obj_rs对象里面,也可以单独处理,这里就不演示了。

newX.insert(0,1)
fcst = rs.predict(newX)

拿到了数据分析服务器的json结果,根据json的数据内容,就可以在企业内部的系统调用json进行应用了。

通过上述方法我们就构建了一个输入、处理、输出的python分析服务应用,核心是用了python的一个模块statsmodels,也可以采用scikit-learn,我们下次再说scikit-learn的应用。

至此,我们通过一个简单的方式实现了在传统IT系统的基础上,控制投入和风险,去实现企业大数据应用。

我正在把statsmodels改写成json接口的模式,方便企业应用调用。我的github项目请点击:https://github.com/stjnu/statsmodels_json

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

技术交流、最新案例学习

请关注我的微信公众号