python flask 数据可视化_python数据可视化之flask+echarts(二)
一位朋友说上一篇博客上返回的数据不好取,直接返回json格式的数据会更好,于是就有了下面这篇,原理和上一篇相同test_db.py创建虚拟数据的文件# coding=utf-8import sqlite3import sysreload(sys)sys.setdefaultencoding('utf-8')# 连接数据库conn = sqlite3.connect('test.db')conn.t
一位朋友说上一篇博客上返回的数据不好取,直接返回json格式的数据会更好,于是就有了下面这篇,原理和上一篇相同
test_db.py创建虚拟数据的文件
# coding=utf-8
import sqlite3
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# 连接数据库
conn = sqlite3.connect('test.db')
conn.text_factory = str
c = conn.cursor()
# 创建表地图表
c.execute('CREATE TABLE geoCoordMap (name text, map decimal(12,8), conver int)')
convervalue = [("海门",'121.15,31.89', 9 ),
("招远",'120.38,37.35', 10 ),
("舟山",'122.207216,29',10 ),
("盐城",'120.13,33.38', 10 ),
("赤峰",'118.87,42.28', 10 ),
("青岛",'120.33,36.07', 10 ),
("乳山",'121.52,36.89', 10 ),
("金昌",'102.188043,38',10 ),
("泉州",'118.58,24.93', 10 ),
("莱西",'120.53,36.86',109 ),
("日照",'119.46,35.42',109 ),
("胶南",'119.97,35.88', 39 ),
("南通",'121.05,32.08', 39 ),
("拉萨",'91.11,29.97', 39 ),
("云浮",'112.02,22.93', 39 ),
("梅州",'116.1,24.55', 39 ),
("文登",'122.05,37.2', 39 ),
("上海",'121.48,31.22', 12),
("威海",'122.1,37.5', 12),
("承德",'117.93,40.97', 12),
("厦门",'118.1,24.46', 12),
("汕尾",'115.375279,22',12),
("潮州",'116.63,23.68', 12),
("丹东",'124.37,40.13', 12),
("太仓",'121.1,31.45', 12),
("曲靖",'103.79,25.51', 12),
("烟台",'121.39,37.52', 12),
("福州",'119.3,26.08', 12),
("即墨",'120.45,36.38', 12),
("抚顺",'123.97,41.97', 12),
("玉溪",'102.52,24.35', 12),
("阳泉",'113.57,37.85', 12),
("莱州",'119.942327,37',12),
("湖州",'120.1,30.86', 12),
("汕头",'116.69,23.39', 12),
("昆山",'120.95,31.39', 12),
("宁波",'121.56,29.86', 12),
("湛江",'110.359377,21',12),
("揭阳",'116.35,23.55', 12),
("荣成",'122.41,37.16', 12),
("常熟",'120.74,31.64', 12),
("东莞",'113.75,23.04', 12),
("河源",'114.68,23.73', 12),
("淮安",'119.15,33.5', 12),
("泰州",'119.9,32.49', 12),
("南宁",'108.33,22.84', 12),
("营口",'122.18,40.65', 12),
("惠州",'114.4,23.09', 12),
("江阴",'120.26,31.91', 12),
("蓬莱",'120.75,37.8', 12),
("韶关",'113.62,24.84', 12),
("广州",'113.23,23.16', 12),
("延安",'109.47,36.6', 12),
("太原",'112.53,37.87', 12),
("清远",'113.01,23.7', 12),
("中山",'113.38,22.52', 12),
("昆明",'102.73,25.04', 12),
("寿光",'118.73,36.86', 12),
("盘锦",'122.070714,41',12),
("长治",'113.08,36.18', 12),
("深圳",'114.07,22.62', 12),
("珠海",'113.52,22.3', 12),
("宿迁",'118.3,33.96', 12),
("咸阳",'108.72,34.36', 12),
("铜川",'109.11,35.09', 12),
("平度",'119.97,36.77', 12),
("佛山",'113.11,23.05', 12),
("海口",'110.35,20.02', 12),
("江门",'113.06,22.61', 12),
("章丘",'117.53,36.72', 12),
("肇庆",'112.44,23.05', 12),
("大连",'121.62,38.92', 12),
("临汾",'111.5,36.08', 12),
("吴江",'120.63,31.16', 12),
("沈阳",'123.38,41.8', 12),
("苏州",'120.62,31.32', 12),
("茂名",'110.88,21.68', 12),
("嘉兴",'120.76,30.77', 12),
("长春",'125.35,43.88', 12),
("胶州",'120.03336,36', 12),
("银川",'106.27,38.47', 12),
("锦州",'121.15,41.13', 12),
("南昌",'115.89,28.68', 12),
("柳州",'109.4,24.33', 12),
("三亚",'109.511909,18',12),
("自贡",'104.778442,29',12),
("吉林",'126.57,43.87', 12),
("阳江",'111.95,21.85', 12),
("泸州",'105.39,28.91', 12),
("西宁",'101.74,36.56', 12),
("宜宾",'104.56,29.77', 12),
("成都",'104.06,30.67', 12),
("大同",'113.3,40.12', 12),
("镇江",'119.44,32.2', 12),
("桂林",'110.28,25.29', 12),
("宜兴",'119.82,31.36', 12),
("北海",'109.12,21.49', 12),
("西安",'108.95,34.27', 12),
("金坛",'119.56,31.74', 12),
("东营",'118.49,37.46', 12),
("遵义",'106.9,27.7', 12),
("绍兴",'120.58,30.01', 12),
("扬州",'119.42,32.39', 12),
("常州",'119.95,31.79', 12),
("潍坊",'119.1,36.62', 12),
("重庆",'106.54,29.59', 12),
("台州",'121.420757,28',12),
("南京",'118.78,32.04', 12),
("滨州",'118.03,37.36', 12),
("贵阳",'106.71,26.57', 12),
("无锡",'120.29,31.59', 12),
("本溪",'123.73,41.3', 12),
("渭南",'109.5,34.52', 12),
("宝鸡",'107.15,34.38', 12),
("焦作",'113.21,35.24', 12),
("句容",'119.16,31.95', 12),
("北京",'116.46,39.92', 12),
("徐州",'117.2,34.26', 12),
("衡水",'115.72,37.72', 12),
("包头",'110,40.58', 12),
("绵阳",'104.73,31.48', 12),
("枣庄",'117.57,34.86', 12),
("杭州",'120.19,30.26', 12),
("淄博",'118.05,36.78', 12),
("鞍山",'122.85,41.12', 12),
("溧阳",'119.48,31.43', 12),
("安阳",'114.35,36.1', 12),
("开封",'114.35,34.79', 12),
("济南",'117,36.65', 12),
("德阳",'104.37,31.13', 12),
("温州",'120.65,28.01', 12),
("九江",'115.97,29.71', 12),
("邯郸",'114.47,36.6', 12),
("临安",'119.72,30.23', 12),
("兰州",'103.73,36.03', 12),
("沧州",'116.83,38.33', 12),
("临沂",'118.35,35.05', 12),
("南充",'106.110698,30',12),
("天津",'117.2,39.13', 12),
("富阳",'119.95,30.07', 12),
("泰安",'117.13,36.18', 12),
("诸暨",'120.23,29.71', 12),
("郑州",'113.65,34.76', 12),
("聊城",'115.97,36.45', 12),
("芜湖",'118.38,31.33', 12),
("唐山",'118.02,39.63', 12),
("邢台",'114.48,37.05', 12),
("德州",'116.29,37.45', 12),
("济宁",'116.59,35.38', 12),
("荆州",'112.239741,30',12),
("宜昌",'111.3,30.7', 12),
("义乌",'120.06,29.32', 12),
("丽水",'119.92,28.45', 12),
("洛阳",'112.44,34.7', 12),
("株洲",'113.16,27.83', 12),
("莱芜",'117.67,36.19', 12),
("常德",'111.69,29.05', 12),
("保定",'115.48,38.85', 12),
("湘潭",'112.91,27.87', 12),
("金华",'119.64,29.12', 12),
("岳阳",'113.09,29.37', 12),
("长沙",'113,28.21', 12),
("衢州",'118.88,28.97', 12),
("廊坊",'116.7,39.53', 2),
("菏泽",'115.480656,35',21),
("合肥",'117.27,31.86',21 ),
("武汉",'114.31,30.52',21 ),
("大庆",'125.03,46.58',21 )]
# 插入数据
c.executemany('INSERT INTO geoCoordMap VALUES (?,?,?)', convervalue)
# 提交执行
conn.commit()
# 关闭数据库连接
conn.close()
运行程序app.py
# coding=utf-8
import sqlite3
from flask import Flask,render_template,json,jsonify,request
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
app = Flask(__name__)
def get_db():
db = sqlite3.connect('test.db')
return db
def query_db(query, args=(), one=False):
db = get_db()
cur = db.execute(query, args)
db.commit()
rv = cur.fetchall()
db.close()
return (rv[0] if rv else None) if one else rv
@app.route("/", methods=["GET"])
def index():
return render_template("index.html")
@app.route("/map", methods=["GET"])
def air_map():
if request.method == "GET":
res = query_db("select * from geoCoordMap")
citys = []
# 这里需要先设置一个空数组,将sql返回的数据进行逐个存到这个数组里面,在将结果转化为json格式
for r in res:
city_map = {}
city_map['name'] = r[0]
city_map['map'] = r[1]
city_map['value'] = r[2]
citys.append(city_map)
return jsonify(citys)
这里启动服务,访问127.0.0.1:5000/map,返回的数据是数组中的json串
这样更加方便前端获取有效数据
index.html
ECharts3 Ajaxvar myChart = echarts.init(document.getElementById('main'));
var mapData = [];
var geoCoordMap={};
$.get('/map').done(function (data){
// console.log(data);
if(data){
data.forEach(function (obj) {
var dataObj = {};
dataObj.name = obj.name;
dataObj.value = obj.value;
geoCoordMap[obj.name] = obj.map.split(',');
mapData.push(dataObj)
});
}
// console.log(mapData);
// console.log(geoCoordMap);
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var geoCoord = geoCoordMap[data[i].name];
if (geoCoord) {
res.push({
name: data[i].name,
value: geoCoord.concat(data[i].value)
});
}
}
return res;
};
option = {
backgroundColor: '#404a59',
title: {
text: '全国主要城市空气质量',
subtext: 'data from PM25.in',
sublink: 'http://www.pm25.in',
left: 'center',
textStyle: {
color: '#fff'
}
},
tooltip : {
trigger: 'item'
},
legend: {
orient: 'vertical',
y: 'bottom',
x:'right',
data:['pm2.5'],
textStyle: {
color: '#fff'
}
},
geo: {
map: 'china',
label: {
emphasis: {
show: false
}
},
roam: true,
itemStyle: {
normal: {
areaColor: '#323c48',
borderColor: '#111'
},
emphasis: {
areaColor: '#2a333d'
}
}
},
series : [
{
name: 'pm2.5',
type: 'scatter',
coordinateSystem: 'geo',
data: convertData(mapData),
symbolSize: function (val) {
return val[2] / 10;
},
label: {
normal: {
formatter: '{b}',
position: 'right',
show: false
},
emphasis: {
show: true
}
},
itemStyle: {
normal: {
color: '#ddb926'
}
}
},
{
name: 'Top 5',
type: 'effectScatter',
coordinateSystem: 'geo',
data: convertData(mapData.sort(function (a, b) {
return b.value - a.value;
}).slice(0, 6)),
symbolSize: function (val) {
return val[2] / 10;
},
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
normal: {
formatter: '{b}',
position: 'right',
show: true
}
},
itemStyle: {
normal: {
color: '#f4e925',
shadowBlur: 10,
shadowColor: '#333'
}
},
zlevel: 1
}
]
};
myChart.setOption(option);
});
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)