暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

flask+echarts+Gbase做大屏数据可视化

原创 吴毅 2022-01-28
29152

通过上篇博客讲到Gbase和mysql的兼容性,而且之前有使用过flask+echarts+mysql做大屏数据可视化。现在把mysql改为Gbase看是否能够做大屏数据可视化。
1. 使用python脚本采集数据时,运行后报错如图所示:
image.png
这种情况如果是在mysql的话,解决的办法时间把版本降下来,使用pymysql - 0.9.3 和SQLAlchemy - 1.3.4这个版本。但是在Gbase8a上不管是降低版本还是升级版本,都是报这个错误而无法使用。原因应该是gbase8a不支持to_sql这个函数功能。给这个项目开发带来一定的难度和不便。
2. 不能使用to_sql
就必须要先创建表结构,选择在Gbase8a里建表是避免在采集脚本要做是否判断有表的存在,节省资源。不自动创建表,否则无法把数据写入到Gbase8a数据库里。在运行插入shares_l1这张表时,报错如图所示:
image.png
代码如下:

import pandas as pd import numpy as np import pymysql from sqlalchemy import create_engine pymysql.install_as_MySQLdb() con_engine = pymysql.connect(host='kafka1.wuyi.com',user='root',password='xxxx',database='shares',charset='utf8mb4',port=5258) engine = create_engine('mysql+pymysql://root:xxxx@kafka1.wuyi.com:5258/shares') sql1 = "select * from shares_basic;" da0 = pd.read_sql(sql1 , con_engine) cursor = con_engine.cursor() # shares_l1 # 涨幅大的前top5 da16 = da10[['name','up','day']].sort_values('up', ascending = False).head(5) da16['day']=da10['day'] # da16.to_sql('shares_l1',engine,if_exists='append') sql = '''insert into shares_l1(name,up,day) values('%s','%s','%s')''' for k in range(len(da16)): cursor.execute(sql % (da16['name'][k], da16['up'][k], da16['day'][k])) con_engine.commit()

修改方法是在da16 = da10[[‘name’,‘up’,‘day’]].sort_values(‘up’, ascending = False).head(5)的下面一行添加下面这条命令这可。
da16 = da16[[‘name’,‘up’]].groupby([‘name’])[‘up’].mean().reset_index(name = ‘up’)
原因是数据来源有index索引,做了排序后,无法做写入gbase里,对top5de 股票做平均值,不会改变数值,只会改变表的索引结构,便于写入到gbase里。
3. 在项目里要在utils.py里修改数据库的连接
如果之前是连接mysql的,要修改用户名,密码,字符集和端口。代码如下:

# 连接数据库 def get_conn(): conn = pymysql.connect( host="kafka1.wuyi.com", user="root", password="xxxx ", database="shares", charset="utf8mb4", port=5258 ) # 创建游标: cursor = conn.cursor() return conn, cursor

4. 修改后运行程序
能正常运行,但是后台获取数据异常,有丢失数据和重复插入数据的问题,导致数据可视化展示出现有些指标没有获取数据和有些指标重复。 原因是使用采集数据是每3秒采集一次,而处理数据时间长,再使用for循环进行行插入,这样会造成数据丢失和重复的情况。测试修改每隔2分钟采集一次还是会出现这种情况。尝试过在values后面,设置单行插入是没有问题。但是插入多行会报错。
image.png
之前看过论坛有人说过Gbase8a能兼容mysql百分之九十,但是通过对这次的的实例操作,我发现不支持to_sql就是那不兼容的百分之十,虽然能使用for循环插入批量数据,但是这消耗过多资源,会导致Gbase8a不适用于实时应用场景,更确切的说是不适应于写入数据的场景,读取的数据场景没有问题。希望Gbase8a的开发团队能开发支持to_sql或类似to_sql的功能,便于开发者通过Gbase8a数据库来开发实时应用场景。
这个是我使用Gbase8a做出的效果图,因服务器在3月26号已经到期,无法做实时的展示。

image.png

最后修改时间:2022-04-05 18:40:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论