Jupyter 服务开发指南

1. 取kylin 数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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. 合并行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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. 合并列

1
2
3
4
5
6
7
8
9
10
11
12
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. 画图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
%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()

            fig.clear()
            plt.close()

1
2
3
4
5
     html = mpld3.fig_to_html(fig)
     return  html
 
 
#drawDTU( '8627427973' '0004' )
1
  

5. 发布服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 )



本文转自疯吻IT博客园博客,原文链接:http://www.cnblogs.com/fengwenit/p/5842627.html,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值