数据分析实战丨基于flask+pygal可视化分析sqlite中的数据

文章目录

  • 写在前面
  • 实验目标
  • 项目框架
  • 实验内容
    • 1.配置实验环境
    • 2.查看sqlite3数据库的数据
    • 3.创建项目文件
    • 4.编写代码
    • 5.运行项目
  • 运行结果
  • 写在后面

写在前面

本期内容: 基于Flask+Pygal可视化分析Sqlite3中的数据

实验环境:

  • python
  • pygal
  • flask

项目下载地址:https://download.csdn.net/download/m0_68111267/88733319

实验目标

简单了解Python Web的轻量级应用框架Flask和图表库Pygal,并使用Flask和Pygal对Sqlite3中的数据做可视化分析。

项目框架

0

实验内容

1.配置实验环境

在正式开始之前,我们需要先安装本次实验用到的依赖库:

flask:一个用Python编写的轻量级Web应用框架。它简洁而灵活,适合快速开发小型的Web应用和API。Flask不强制要求使用特定的数据库和模板引擎,只提供了最基础的功能,其余的功能可以通过各种扩展来实现。Flask的设计思想是简单易用,让开发者能够专注于业务逻辑的实现而不必过多关注框架本身。有了Flask,开发者可以轻松快速地构建出高效可靠的Web应用。

pygal:一个开源的Python图表库,用于制作统计图表和可视化数据。它支持多种图表类型,包括折线图、柱状图、饼图等,并且具有丰富的样式和可定制性。通过pygal,用户可以轻松地创建漂亮、交互式的图表,用于数据分析和展示。

安装命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygal

2.查看sqlite3数据库的数据

  1. 需要使用第三方软件查看数据库中的数据哦(如果不需要查看数据可以跳过这一步骤,不影响实验结果滴)
  2. 博主用的是navicat,所以在这里主要演示一下如何用navicat查看sqlite3数据库中的数据。

1
2
3

3.创建项目文件

根据项目的框架依次创建项目所需的文件

  • main.py:主程序
  • dbconnect.py:连接数据库
  • models.py:模型类
  • templates/index.html:前端逻辑文件
  • data.db:数据库文件(数据集)

0

4.编写代码

1. 创建模型类

双击进入"models.py"文件,然后填入以下代码创建一个模型,用于存放数据库中的数据:

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
from dbconnect import db
class Appinfo(db.Model):
    __tablename__ = 'appinfo'
    id = db.Column(db.Integer, primary_key=True)
    year = db.Column(db.String(20))
    month = db.Column(db.String(20))
    cnt = db.Column(db.String(20))

    def __init__(self, year, month, cnt):
        self.year = year
        self.month = month
        self.cnt = cnt

    def __str__(self):
        return self.year + ":" + self.month + ":" + self.cnt

    def __repr__(self):
        return self.year + ":" + self.month + ":" + self.cnt

    def save(self):
        db.session.add(self)
        db.session.commit()

这段代码定义了一个名为"Appinfo"的数据库模型类,用来映射数据库中的"appinfo"表。该表包含了以下字段:

  • id: 整数型,作为主键
  • year: 字符串类型,用来存储年份
  • month: 字符串类型,用来存储月份
  • cnt: 字符串类型,用来存储计数器值

该类有以下方法:

  • init(self, year, month, cnt): 构造方法,用来初始化对象的属性。
  • str(self): 重写了字符串表示方法,返回一个格式为"年份:月份:计数器值"的字符串。
  • repr(self): 重写了对象表示方法,返回一个格式为"年份:月份:计数器值"的字符串。
  • save(self): 保存对象到数据库。使用db.session.add(self)将对象添加到会话中,然后使用db.session.commit()提交事务。

该模型类依赖于"dbconnect"模块中的db对象,该对象是SQLAlchemy库中的一个实例,用来连接和操作数据库。

2. 连接数据库

进入"dbconnect.py"文件,填入以下代码,连接数据库:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

这段代码使用Flask框架的扩展模块"flask_sqlalchemy"创建了一个SQLAlchemy对象,并命名为db。

SQLAlchemy是一个Python SQL工具和对象关系映射(ORM)库。它提供了一种高级的抽象方式来操作数据库,使开发人员能够以面向对象的方式来处理数据库相关操作,而不需要编写原始的SQL语句。

在Flask应用中,通过创建一个SQLAlchemy对象,并绑定到应用的数据库配置上,可以轻松地进行数据库的增删改查等操作。通过db对象,可以使用SQLAlchemy提供的各种功能和方法来操作数据库模型对象。

在上述代码中,创建了一个名为db的SQLAlchemy对象,并将其导入到其他模块中使用。接下来,可以通过db对象调用各种SQLAlchemy方法,例如创建数据库模型、定义表结构、执行查询语句等。

要想使用这个db对象,还需要在Flask应用的配置中进行一些设置,例如配置数据库连接的URL、指定数据库的名称、配置其他SQLAlchemy相关的参数等。

3.编写主函数

进入"main.py"文件,编写后端的主要逻辑代码:

import pygal
from flask import Flask, render_template

from dbconnect import db
from models import Appinfo


app = Flask(__name__)
dbpath = app.root_path
# 注意斜线的方向
app.config['SQLALCHEMY_DATABASE_URI'] = r'sqlite:///' + dbpath + '/data.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
print(app.config['SQLALCHEMY_DATABASE_URI'])
……完整代码需要下载后查看哦~

这段代码创建了一个基于Flask框架的Web应用,用于展示数据库中存储的App信息。

首先,导入了一些必要的模块,包括pygal用于生成图表、Flask用于创建Web应用、render_template用于渲染模板。然后导入了之前创建的数据库连接对象db和Appinfo模型。

接下来,创建了一个Flask应用实例,并设置了数据库的连接URI和一些其他配置参数。这里使用SQLite数据库,并将数据库文件存储在应用的根目录下的data.db文件中。

然后,通过db.init_app(app)将数据库对象绑定到应用上下文中。

接着定义了一个路由函数@app.route(‘/’),当访问根路径时会执行这个函数。在函数中,首先通过db.create_all()来创建数据库表。然后从数据库中查询所有Appinfo记录,并对查询结果进行处理。

在处理过程中,使用list_year和list_month两个列表分别存储不重复的年份和月份,使用map_cnt字典来存储每个年份对应的计数列表。

接下来,创建了一个pygal的线形图line_chart,并设置了标题和X轴标签。然后根据list_year和map_cnt生成线形图的数据,并添加到line_chart中。

最后,使用render_template方法渲染index.html模板,将生成的line_chart作为参数传递给模板。在模板中使用该参数来展示图表。

最后,通过if name == ‘main’:判断是否直接运行该脚本,如果是,则使用app.run(debug=True)启动应用。

这段代码实现了一个简单的Web应用,它会从数据库中查询Appinfo记录并生成一个线形图展示出来。用户访问根路径时,会显示这个线形图。

  1. 前端界面

最后进入"templates"目录下的"index.html"文件,编写前端逻辑代码:

<body style="width: 1000px;margin: auto">
<div  id="container">
    <div id="header" style="background: orange;height: 50px;">
        <h2 style="font-size: 30px;  position: absolute; margin-top: 10px;margin-left: 300px;
        text-align:center;">基于Flask与Pygal的数据分析图</h2>
    </div>
    <div id="leftbar" style="width: 200px;height: 600px;background: gold;float: left">
        <h2 style="margin-left: 20px">数据图总览</h2><br/>
        <table>
            <tr>
                <td>
                   <a name="appinfo"  style="margin-left: 20px;">数量分析图</a><br>
                </td>
            </tr>
        </table>
    </div>
    <div id="chart" style="width: 800px;float: left">
       <embed type="image/svg+xml" src= {{ chart.render_data_uri()|safe }} />
    </div>
</div>
</body>

这是一个名为index.html的模板文件,用于渲染Web页面。以下是对模板中各个部分的详细分析:

  1. body样式:设置了页面的宽度为1000px,并将页面水平居中。

  2. container:作为整个页面的容器,用于包裹所有内容。

  3. header:顶部的标题栏,背景为橙色,高度为50px。在标题栏中使用h2标签显示标题文字,设置了字体大小、位置和居中样式。

  4. leftbar:左侧的导航栏,宽度为200px,高度为600px,背景为金色,浮动在左侧。在导航栏中使用h2标签显示导航标题文字,并设置左边距。下方使用表格布局,用于显示导航链接。

  5. 数据图总览:在左侧导航栏中显示的标题。

  6. 导航链接:在左侧导航栏中显示的链接,这里只有一个“数量分析图”链接。

  7. chart:用于显示图表的区域,宽度为800px,浮动在左侧。

  8. embed元素:用于嵌入SVG图像,通过{{ chart.render_data_uri()|safe }}将图表的数据URI插入到src属性中。在页面渲染时,将会将这个URI替换为实际的图表数据。

该模板文件用于将生成的pygal图表嵌入到HTML页面中,并通过Flask的render_template函数来渲染最终的页面。在访问根路径时,将会显示这个页面,并展示数据库中的App数量分析图。

5.运行项目

直接运行"main.py"文件就好喽!

4

运行结果

进入"http://127.0.0.1:5000"可以查看运行结果哦~

5

写在后面

我是一只有趣的兔子,感谢你的喜欢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/315992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅析链表结构

一、单向链表 C语言中数组是常用的一种数据类型&#xff0c;但可惜数组长度是固定大小的&#xff0c;不能动态扩展&#xff0c;使用起来有时不是很方便。然后就有了自定义的动态数组结构&#xff0c;动态数组就比较好用了&#xff0c;长度可以任意扩展&#xff0c;但还有一个问…

2024阿里云服务器ECS介绍_全方位解析_CPU性能详解

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

Ubuntu 在线Swap扩容

1. 查看本机swap空间 free -h 2. 找一个较大的高速盘&#xff0c;创建swap的空间 mkdir /swap cd /swap sudo dd if/dev/zero ofswapfile bs50M count1k3.建swapfile&#xff0c;大小为bs*count 50M * 1k 50G 4.标记为Swap文件&#xff0c;让系统能识别交换文件。 sudo mk…

C1-3.2 关于‘神经网络’

C1-3.2 关于‘神经网络’ 【注释】 彩色图像&#xff08;RGB&#xff09;由三原色构成&#xff0c;二维图像在任意一个点像素为立体三层结构&#xff0c;分别是红色、绿色、蓝色值&#xff0c;该值的范围在0∽255之间 1、全连接神经网络——整体架构 【注释】&#xff1a; …

科技顶天,市场立地 。璞华科技“顶天立地”的成长之路

科技顶天&#xff0c;市场立地。 几十年来&#xff0c;我们越来越深刻地认识到&#xff0c;这就是真理&#xff0c;质朴而深刻。尤其在当前特殊的国际国内商业环境中&#xff0c;这一理念不但没有过时&#xff0c;反而恰逢其时。有这么一家企业&#xff0c;一直践行“科技顶天…

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程序设计参考资料 分…

2023极客大挑战web小记

拿到题目提示post传参还以为是道签到题 刚开始直接把自己极客大挑战的username以及password怼上去&#xff0c;但是不对。看看F12&#xff0c;有提示。 当一个搜索蜘蛛访问一个站点时&#xff0c;它会首先检查该站点根目录下是否存在robots.txt&#xff0c;如果存在&#xff0c…

近视的孩子用什么灯?学生考研护眼台灯推荐

随着时代快速发展&#xff0c;2022年我国近视人数达到了7亿&#xff0c;呈现低龄化趋势&#xff0c;儿童及青少年人数占了53.8%。现在学业负担都很重&#xff0c;每个家长都不希望自己的孩子近视或加深近视了&#xff0c;都会想尽一切办法保护视力。而护眼台灯就成了家长购买台…

智能路由器中的 dns.he.net可使用自定义域名的免费 DDNS 服务配置方法

今天介绍的这个是可以使用自定义域名同时支持使用二级域名的免费DDNS服务 dns.he.net的动态DDNS服务的配置方法, 这个服务相对还是比较稳定的, 其配置也和其他的DDNS服务有些不太一样, 首先他的主机名: 这里需要设置为登录后分配的区域域名: ipv6.he.net 然后就是 DDNS 用户…

Git新手?这篇文章带你飞!基础操作一网打尽!

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读Git初识Git啥是版本控制系统&#xff1f;&#xff1f;集中式VS分布式 git使用…

录屏怎么打开?看这里,录制视频不费事!

随着科技的快速发展&#xff0c;录屏已经成为人们日常生活中经常使用的功能。无论是录制游戏视频、教程讲解&#xff0c;还是录制在线会议&#xff0c;录屏软件都发挥着重要作用。然而&#xff0c;很多用户并不知道录屏怎么打开&#xff0c;以及如何使用它们。本文将介绍两种常…

【书生·浦语】大模型实战营——第四课作业

教程文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/xtuner/self.md 基础作业需要构建数据集&#xff0c;微调模型&#xff0c;让其明白自己的弟位&#xff08;OvO&#xff01;&#xff09; 微调环境准备 进入开发机后&#xff0c;先bash&#xff0c;再创…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子明细实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

应急管理蓝皮书 |《应急预案数字化建设现状和发展建议》下篇

导读 《应急预案数字化建设现状和发展建议》&#xff1a;297-313页 《中国应急管理发展报告》系列蓝皮书由中央党校&#xff08;国家行政学院&#xff09;应急管理培训中心&#xff08;中欧应急管理学院&#xff09;联合社会科学文献出版社研创出版&#xff0c;本着“权威前沿…

RT-Thread I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O&#xff08;Input/Output&#xff0c;输入/输出&#xff09;设备&#xff0c;例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡&#xff0c;以及网络设备的以太网接口等&#xff0c;都…

Linux 内核学习 3a - 如何查看虚拟内存和物理内存,以及虚拟内存和物理内存之间转换

/proc/iomem, ioremap(), mmap() The kernel manages device resources like registers as physical addresses(物理地址). These are the addresses in /proc/iomem. The physical address is not directly useful to a driver; it must use ioremap() to map the space and …

linux安装MySQL5.7(安装、开机自启、定时备份)

一、安装步骤 我喜欢安装在/usr/local/mysql目录下 #切换目录 cd /usr/local/ #下载文件 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz #解压文件 tar -zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local …

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长&#xff0c;时间紧迫的同学可以看情况进行缩减。个人认为做题&#xff0c;尤其是解析齐全的题最重要&#xff01; 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料&#xff08;都可自行找到免费资源&#xff09; 视频知识点讲…

机器人持续学习基准LIBERO系列5——获取显示深度图

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo 1.更改环境设置 LIBERO-master/l…

【降龙算法】基于QT插件机制实现一个机器视觉算法小框架

机器视觉行业有各种各样的拖拉拽框架&#xff0c;也叫做低代码平台&#xff0c;例如国内海康的VisionMaster&#xff1a; 一个机器视觉框架需要包含各种算法模块&#xff0c;日志窗口&#xff0c;图像显示窗口等等&#xff0c;【降龙算法】就是做了一个入门级的机器视觉算法框…