Jupyter 服务开发指南

1. 取kylin 数据

import requests
import pandas as pd

def getDtu(dtuid,addr):
    sqlData = ‘{ "sql":"select * from dtu where dtuid=\‘%s\‘ and addr=\‘%s\‘ order by DTUTIME desc", "project":"yongli" , "offset":0, "limit":100}‘ %(dtuid, addr)
    response = requests.post(url     = ‘http://kylin1.wdp:7070/kylin/api/query‘,
                             data    = sqlData,
                             auth    = (‘admin‘, ‘admin‘),
                             headers = {"Content-Type":"application/json"})
    dfCols = pd.DataFrame(response.json()["columnMetas"])
    df = pd.DataFrame(response.json()["results"], columns=dfCols["label"].values)

    values = pd.DataFrame({ ‘dtutime‘: df["DTUTIME"].map(pd.Timestamp),
                            addr: df["DTUVALUE"]})

    return values

getDtu(‘8627427973‘, ‘1800‘)

?

2. 合并行

from pandas import Series, DataFrame
import pandas as pd

def getDtuStd(dtuid, addrs):
    addrList = addrs.strip().split(‘,‘)
    result = pd.DataFrame({‘addr‘:[],
                           ‘std‘:[]})

    for i in addrList:
        std = getStd(dtuid, i)
        result = result.append(std, ignore_index=True)

    return result

getDtuStd(‘8627427973‘, ‘1820,1810,0004‘)

?

3. 合并列

import pandas as pd

def getStdJson(dtuid,addr=‘0002,0004,1019,101A,101B,101C,101D,1023,1024,1025,1800,1802,1804,1806,1808,180A,180C,180E,1810,1812,1814,1816,1818,181A,181C,181E,1820,1822,1824,1826,1828,182A,182C,182E,1830,2000,2002,2004,2006,2008,200A,200C,200E,2100,2102,2104,2106,2108,210A,210C,210E‘):
    data = getDtuStd(dtuid,addr)
    comments = pd.DataFrame({‘addr‘:[‘0002‘,‘0004‘,‘1019‘,‘101A‘,‘101B‘,‘101C‘,‘101D‘,‘1023‘,‘1024‘,‘1025‘,‘1800‘,‘1802‘,‘1804‘,‘1806‘,‘1808‘,‘180A‘,‘180C‘,‘180E‘,‘1810‘,‘1812‘,‘1814‘,‘1816‘,‘1818‘,‘181A‘,‘181C‘,‘181E‘,‘1820‘,‘1822‘,‘1824‘,‘1826‘,‘1828‘,‘182A‘,‘182C‘,‘182E‘,‘1830‘,‘2000‘,‘2002‘,‘2004‘,‘2006‘,‘2008‘,‘200A‘,‘200C‘,‘200E‘,‘2100‘,‘2102‘,‘2104‘,‘2106‘,‘2108‘,‘210A‘,‘210C‘,‘210E‘],
                            ‘comment‘:[‘电压变比‘,‘电流变比‘,‘A相功率因数‘,‘B相功率因数‘,‘C相功率因数‘,‘总功率因数‘,‘频率‘,‘A相相角‘,‘B相相角‘,‘C相相角‘,‘A相电压‘,‘B相电压‘,‘C相电压‘,‘平均相电压‘,‘AB线电压‘,‘BC线电压‘,‘CA线电压‘,‘平均线电压‘,‘A相电流‘,‘B相电流‘,‘C相电流‘,‘平均电流‘,‘零线电流‘,‘A相有功功率‘,‘B相有功功率‘,‘C相有功功率‘,‘总有功功率‘,‘A相无功功率‘,‘B相无功功率‘,‘C相无功功率‘,‘总无功功率‘,‘A相视在功率‘,‘B相视在功率‘,‘C相视在功率‘,‘总视在功率‘,‘A相正向有功电能‘,‘B相正向有功电能‘,‘C相正向有功电能‘,‘总正向有功电能‘,‘A相正向无功电能‘,‘B相正向无功电能‘,‘C相正向无功电能‘,‘总正向无功电能‘,‘A相反向有功电能‘,‘B相反向有功电能‘,‘C相反向有功电能‘,‘总反向有功电能‘,‘A相反向无功电能‘,‘B相反向无功电能‘,‘C相反向无功电能‘,‘总反向无功电能‘]})

    result = pd.merge(data, comments, on=‘addr‘)
    #print result
    return "{\"code\":200,\"message\":\"SUCCESS\",\"data\":" + result.to_json(orient=‘records‘,force_ascii=False) + "}"

#getStdJson(‘8627427973‘, ‘1820,1810,0004‘)?

?

4. 画图

%matplotlib inline
import matplotlib.pyplot as plt, mpld3
from matplotlib.ticker import MultipleLocator, FuncFormatter
import matplotlib.dates as mdate

def drawDTU(dtuid,addr):
    #print "------- ENTER drawDTU (%s)-------" %dtuid

    data = getDTU(dtuid,addr)
    fig, ax = plt.subplots(figsize=(5,3))
    ax.plot(data[0], data[1], ‘-‘,label="%s" %addr, color = ‘blue‘)

    majorLocator = MultipleLocator(5)
    majorFormatter = mdate.DateFormatter(‘%H‘)
    minorLocator = MultipleLocator(1)
    ax.xaxis.set_major_locator(majorLocator)
    ax.xaxis.set_major_formatter(majorFormatter)

    # for the minor ticks, use no labels; default NullFormatter
    ax.xaxis.set_minor_locator(minorLocator)

    #plt.xlabel("Date")
    #plt.ylabel("Value")
    #plt.title("DTU Monitor")
    plt.legend(loc=‘upper center‘, bbox_to_anchor=(0.5,0.98),ncol=3,fancybox=True,shadow=True)
    ax.grid(color="lightgray", alpha=0.7)
    #fig.set_size_inches(4, 4)
    #plt.show()

    html = mpld3.fig_to_html(fig)
    return html

#drawDTU(‘8627427973‘, ‘0004‘)
?

5. 发布服务

from flask import Flask, make_response, request
app = Flask(__name__)

@app.route("/dtustd/", methods=["GET","OPTIONS"])
def dtuStd(dtuid):
    #o = drawDtuStd(dtuid)
    o = getStdJson(dtuid)
    resp = make_response(o)
    resp.headers["Access-Control-Allow-Origin"] = "*"
    resp.headers["Access-Control-Request-Method"] = "POST,GET,PUT,DELETE,OPTIONS"
    resp.headers["Access-Control-Allow-Methods"] = "POST,GET,PUT,DELETE,OPTIONS"
    resp.headers["Access-Control-Allow-Headers"] = "X-Requested-With,Content-Type"

    if request.method == ‘OPTIONS‘:
        print "it‘s OPTIONS"
    return resp

app.run(host="0.0.0.0", port=5007)
时间: 2024-08-29 15:40:52

Jupyter 服务开发指南的相关文章

融云IM 基础服务开发指南WebIMLib API 示例 【干货】

Web SDK API 示例 简介 融云 Web SDK API 用法及常见异常总结,为了方便刚接触融云 Web SDK 开发者朋友们写下此文档,希望可以帮到你们. 说明: 1.函数参数中使用 [] 为可选参数(数组除外). 2.**** => **** 在本文档中表示为示例代码和结果,例:1+2 => 3. 初始化 初始化 SDK 执行初始化需要在开发者后台新建应用得到 AppKey 和 token,初始化代码: RongIMLib.RongIMClient.init(appkey,[dat

.NET Framework 4.6 and 4.5 > 开发指南 > 使用 WCF 的面向服务的应用程序 > Windows Communication Foundation (WCF)

.NET Framework 4.6 and 4.5 > 开发指南 >  使用 WCF 的面向服务的应用程序 > Windows Communication Foundation (WCF) :https://msdn.microsoft.com/zh-cn/library/dd456779(v=vs.110).aspx 文档指南: https://msdn.microsoft.com/zh-cn/library/ms730846(v=vs.110).aspx 入门教程: https:/

开源|ns4_frame分布式服务框架开发指南

导语:宜信于2019年3月29日正式开源nextsystem4(以下简称"NS4")系列模块.此次开源的NS4系列模块是围绕当前支付系统笨重.代码耦合度高.维护成本高而产生的分布式业务系统解决方案.NS4系列框架允许创建复杂的流程/业务流,对于业务服务节点的实现可串联,可分布式.其精简.轻量,实现了"脱容器"(不依赖tomcat.jetty等容器)独立运行.NS4系列框架的设计理念是将业务和逻辑进行分离,开发人员只需通过简单的配置和业务实现就可以实现逻辑复杂.性能高

linux 定时任务 crond 服务应用指南

linux定时任务crond服务应用指南 Linux的定时任务crond(crontab)服务 1.crond是什么? crond是linux系统中用来定期执行命令或者指定程序的程序(软件) 2.秒级任务 (1)crond需要方式实现 (2)自己写守护进程shell循环 (3)Quartz也可实现妙计任务 3.定时任务的作用 服务器:7*24小时开机提供服务是网站的基本特征 有重要数据:提高备份周期和备份数量 Linux的定时任务分类 linux系统中定时任务调度的工作可以分为一下两种 (1)系

Jdon框架开发指南

Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step详细讲解如何使用Jdon框架基于领域模型快速开发这两个功能,通过Jdon框架的可以快速完成系统原型(ArcheType),使得开发者将真正精力集中在每个项目系统的特殊业务处理. 本案例源码下载 按这里查看更详细全面文档 快速配置指南 Jdon框架有一个配置文件叫jdonframework.xml,其

AngularJS开发指南7:AngularJS本地化,国际化,以及兼容IE低版本浏览器

AngularJS本地化,国际化 国际化,简写为i18n,指的是使产品快速适应不同语言和文化. 本地化,简称l10n,是指使产品在特定文化和语言市场中可用. 对开发者来说,国际化一个应用意味着将所有的文字和其他因地区而异的数据从应用中抽离出来. 本地化意味着为这些抽离的数据和文字提供翻译和转变成本地的格式. 目前,AngularJS支持日期,数字和货币的国际化和本地化. 另外,AngularJS还通过ngPluralize指令支持本地多元化. 所有的AngularJS本地化组件都依赖于$loca

开发者必看|Android 8.0 新特性及开发指南

背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Android 新系统开发者预览版时已给新系统取名为 Android O.自2008 年发布以来, Android 依靠 Google 的生态运作,全球市场份额在2016年底已超过85% .而近几年依靠 Android 发展起来的智能手机厂商不断增加, Android 生态大家庭也正在不断壮大. Androi

iBATIS开发指南笔记

第一部分  概述 (一)目标和初衷 1. iBATIS的目标是:用少量的代码获得大量的数据访问功能 2. 初衷是让程序员将如下过程做的更好更简单: Separating SQL code from programming code 将SQL代码从程序代码中分离 Passing input parameters to the library classes and extracting the output 对类库传递输入参数来提取输出结果 Separating data access class

握手API网关(7)开发指南-API参考

一.简介 用户可以使用开发指南介绍的 API 对 API 网关服务进行相关操作. 术语表 术语 全称 中文 说明 Region   地域 用户开放API,需选择API在API网关的部署地域,建议选择与后端服务相同的Region. API   应用程序编程接口 用户开放API,在API网关录入API,以提供接口的方式对外提供服务或者数据. Group API Group API分组 一组API. 用户开放API,首先需要创建API分组 每个API分组拥有一个二级域名,两个Stage 用户需要将已经