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,如需转载请自行联系原作者