python相关性算法解决方案(rest/数据库/json/下载)
1. 场景描述
一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的相关性算法,算法原理就不介绍了,只从代码层面进行介绍,包含:rest接口、连接mpp数据库、回传json数据、下载图片及数据。(python聚类算法解决方案(rest接口/连接mpp数据库/回传json数据/下载图片及数据))
2. 解决方案
2.1 项目套路
(1)python经典算法是单独的服务器部署,提供rest接口出来,供java平台调用,交互的方式是http+json;
(2)数据从mpp数据库-Greenplum中获取;
(3)返回的数据包括三个:1是生成相关性图片的地址;2是相关性项目完整数据地址;3是返回给前端的200条json预览数据。
2.2 restapi类
分两个类,第一个是restapi类,封装rest接口类,其他的经典算法在这里都有对应的方法,是个公共类。
完整代码:
# -*- coding: utf-8 -*-
from flask import Flask, request, send_from_directory
from relation import execRelation
import logging
app = Flask(__name__)
#1. 服务器上更改为服务器地址,用于存放数据
dirpath = 'E:\\ruanjianlaowang'
#2. 测试连通性,软件老王
@app.route('/')
def index():
return "Hello, World!"
#3. 相关性算法
@app.route('/getRelationInfoByLaowang', methods=['POST'])
def getRelationInfoByLaowang():
try:
result = execRelation(request.get_json(), dirpath)
except IndexError as e:
logging.error(str(e))
return 'exception:' + str(e)
except KeyError as e:
logging.error(str(e))
return 'exception:' + str(e)
except ValueError as e:
logging.error(str(e))
return 'exception:' + str(e)
except Exception as e:
logging.error(str(e))
return 'exception:' + str(e)
else:
return result
#4.文件下载(图片及csv)
@app.route("/<path:filename>")
def getImages(filename):
return send_from_directory(dirpath, filename, as_attachment=True)
#5.启动
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000, debug=True)
代码说明:
使用的是第三方的flask提供的rest服务
(1)服务器上更改为服务器地址,用于存放数据
(2)测试连通性,软件老王
(3)相关性算法 软件老王
(4)文件下载(图片及csv)
(5)启动
2.3 相关性算法类
完整代码:
import matplotlib.pyplot as plt
import seaborn as sns
import dbgp as dbgp
plt.switch_backend('agg')
from pandas.io import json
import numpy as np
# 执行 软件老王
def execRelation(params, dirpath):
# 1.获取参数,软件老王
sql = params.get("sql")
url = params.get("url")
name = params.get("name")
grouplinesname = params.get("grouplinesname")
#2. 校验是否为空,软件老王
flag = checkparam(sql)
if not flag is None and len(flag) != 0:
return flag
# 3. 从数据库获取数据,软件老王
try:
new_data = dbgp.queryGp(sql)
except IndexError:
return sql
except KeyError:
return sql
except ValueError:
return sql
except Exception:
return sql
if new_data.empty:
return "exception:此数据集无数据,请到数据处理或可视化确认后重试"
# 4 相关性调用,软件老王
if not grouplinesname is None and len(grouplinesname) != 0:
new_data.columns = grouplinesname.split(',')
corr = new_data.corr()
# 5.生成导出excel 软件老王
outputfile = dirpath + name + '.csv'
corr.to_csv(outputfile, encoding='utf_8_sig') # 保存结果
#6.生成图片及返回json,软件老王
# 6.1 中文处理,软件老王
plt.rcParams['font.sans-serif'] = ['simhei']
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['axes.unicode_minus'] = False
# 6.2 画图,生成图片,软件老王
f, ax = plt.subplots(figsize=(14, 10))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
cmap = sns.cubehelix_palette(n_colors=6, start=0, rot=0.4, gamma=1.0, hue=0.8, light=0.85, dark=0.15, reverse=False, as_cmap=False)
sns.heatmap(corr, cmap=cmap, square=False, linewidths=0.05, ax=ax, annot=True)
# 6.3 返回json数据给前端展示,软件老王
ax.set_title(name)
image = dirpath + name + '.jpg'
f.savefig(image, dpi=150, bbox_inches='tight')
plt.clf()
plt.close(0)
# 6.3 返回json数据给前端展示,软件老王
result = {}
result['image_url'] = url + '/' + name + '.jpg'
result['details_url'] = url + '/' + name + '.csv'
result['data'] = corr[:200]
result = json.dumps(result, ensure_ascii=False)
result = result.replace('\\', '')
return result
def checkparam(sql):
if sql is None or sql.strip() == '' or len(sql.strip()) == 0:
return "数据集或数据列,不能为空"
代码说明:
(1)获取参数,软件老王;
(2)校验是否为空,软件老王;
(3)从数据库获取数据,软件老王;
(4)相关性调用,软件老王;
(5)生成导出excel 软件老王
(6)生成图片及返回json,软件老王
(6.1) 中文处理,软件老王
(6.2) 画图,生成图片,软件老王
(6.3) 返回json数据给前端展示,软件老王
2.4 执行效果
2.4.1 json返回
{"image_url":"http://10.192.168.1:5000/relation-软件老王-5656556111.jpg","details_url":"http://10.192.168.1:5000/relation-软件老王-5656556111.csv","data":{"老王1":{"老王1":1.0,"老王2":-0.4202351976,"老王3":0.2285667348,"老王4":-0.4980851314,"老王5":-0.3329292459},"老王2":{"老王1":-0.4202351976,"老王2":1.0,"老王3":-0.4460527829,"老王4":-0.091612708,"老王5":-0.033863611},"老王3":{"老王1":0.2285667348,"老王2":-0.4460527829,"老王3":1.0,"老王4":-0.2253017703,"老王5":-0.451881358},"老王4":{"老王1":-0.4980851314,"老王2":-0.091612708,"老王3":-0.2253017703,"老王4":1.0,"老王5":0.3636169126},"老王5":{"老王1":-0.3329292459,"老王2":-0.033863611,"老王3":-0.451881358,"老王4":0.3636169126,"老王5":1.0}}}
2.4.2 返回图片

2.4.3 返回的数据

另外说明: 目前项目环境上用的是8核16G的虚拟机,执行数据量是30万,运行状况良好。
I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!
python相关性算法解决方案(rest/数据库/json/下载)的更多相关文章
- python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...
- python:序列化与反序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- spring mvc ajaxfileupload文件上传返回json下载问题
问题:使用spring mvc ajaxfileupload 文件上传在ie8下会提示json下载问题 解决方案如下: 服务器代码: @RequestMapping(value = "/ad ...
- python 读取mysql存储的文件路径下载文件,内容解析,上传七牛云,内容入es
#!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import json import os import re fr ...
- 疯狂Python讲义PDF高清完整版免费下载|百度网盘
百度网盘:疯狂Python讲义PDF高清完整版免费下载 提取码:uzba 内容简介 <疯狂Python讲义>既是一本适合初学者入门Python的图书(一个8岁的小朋友在未出版前已学习了本书 ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- paper 28 :一些常见常用数据库的下载网站集锦
做图像处理+模式识别的童鞋怎么可以没有数据库呢? 但是,如果自己做一个数据库,费时费力费钱先不说,关键是建立的数据库的公信力一般不会高,做出的算法也别人也不好比较,所以呢,下载比较权威的公共数据库还是 ...
- Python中通过cx_Oracle访问数据库遇到的问题总结
以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题: 1)安装cx_Oracle会遇到的问题:在Windo ...
- python ssh登录linux 上传和下载文件
#!usr/bin/python# coding: utf-8 import paramikoimport jsonremotedir='/tmp/log'remotefile = 'bst_mana ...
随机推荐
- kafka学习(二)-------- 什么是Kafka
通过Kafka的快速入门 https://www.cnblogs.com/tree1123/p/11150927.html 能了解到Kafka的基本部署,使用,但他和其他的消息中间件有什么不同呢? K ...
- css 图片裁剪显示
用object-fit:cover object-fit属性详解 object-fit:CSS 属性指定替换元素的内容应该如何适应到其使用的高度和宽度确定的框. object-fit:fill 被替换 ...
- 给国内知名大厂提BUG有感:安全是一种意识
前言 本周一(2019.07.22),给某知名手机“大厂”提了个安全BUG,默默修复了后,周五回复我“已忽略”,此处省略上千字的心理活动..... 做安全的朋友说这都小事,国内氛围本来就不太好,hac ...
- DH、RSA与ElGamal非对称加密算法实现及应用
1.对称加密与非对称加密概述 关于对称加密与非对称加密的概念这里不再多说,感兴趣可以看下我之前的几篇文章,下面说一说两者的主要区别. 对称加密算法数据安全,密钥管理复杂,密钥传递过程复杂,存在密钥泄露 ...
- 那些年,想和你一起认识的SpringCloud Eureka
前几天鲁班LB跟我说:你玩把游戏都要半个钟啦,为何不用这时间来看看书,如果涨工资还可以帮我买个皮肤. 面对如此合理的这需求,但我不以为然,事实上并不是我不想学习,而是 ↓ 实力不允许呀~ 直到有一天, ...
- win10安装.NET Framework 3.5方法
win10下默认没有.NET Framework 3.5,但是有时候我们运行一些网络相关的软件要用到它,下面是它的具体安装方法(绝对可以成功) 将系统镜像挂载到虚拟光驱 复制虚拟光驱下的\source ...
- python多进程详解
目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...
- IO流与NIO流
JAVA IO流最详解 (转自CSDN) IO流上:概述.字符流.缓冲区(java基础) 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数 ...
- FTP服务端部署
FTP服务端搭建(本地用户登入:使用本地用户和密码登入)1.文件配置:vsftpd.conf: 主配置文件ftpusers: 指定哪些用户不能访问FTP服务器user_list: 指定的用户是否可以访 ...
- Asp.NetCore源码学习[2-1]:配置[Configuration]
Asp.NetCore源码学习[2-1]:配置[Configuration] 在Asp. NetCore中,配置系统支持不同的配置源(文件.环境变量等),虽然有多种的配置源,但是最终提供给系统使用的只 ...