传统IT应用如何拥抱大数据?谈python大数据的应用落地方法
在中国存在大量的中小型企业,他们的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"})
输出的结果如下图(参考):
如果需要预测的数据,我们可以用下面的代码得到的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