基于python从redmine-api中获取项目缺陷数据并可视化(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 上一篇文章讲到缺陷数据的获取实现方式,这篇文章主要讲讲如何通过web框架flask将获取到的数据进行web数据可视化1.调研python web框架一开始想通过html+js+highcharts去实现数据可视化,但是实现起来不方便而且本人js及前端开发了解甚少,所以还是借助web框架。

上一篇文章讲到缺陷数据的获取实现方式,这篇文章主要讲讲如何通过web框架flask将获取到的数据进行web数据可视化

1.调研python web框架

一开始想通过html+js+highcharts去实现数据可视化,但是实现起来不方便而且本人js及前端开发了解甚少,所以还是借助web框架。故调研了以下框架进行对比分析,最终选取了flask框架

web框架调研对比.png

2.安装搭建web框架

2.1.安装flask

安装flask最便捷的方式是使用虚拟环境,这是一个python解释器的一个私有副本,即virtualenv。
我用的是python3.6,在命令窗口用:

$pip3 install virtualenv*

即可自动安装,安装完虚拟环境,则要开始使用了,在你的项目文件的目录执行:

$virtualenv venv*

出现下面结果,那么恭喜你你的第一个虚拟环境就建好了。

 ~ pip3 install virtualenvCollecting virtualenv  Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)    100% |████████████████████████████████| 1.8MB 650kB/sInstalling collected packages: virtualenvSuccessfully installed virtualenv-15.1.0  ~ cd /Users/zhangmeiyuan/PycharmProjects/MyProject  MyProject lsTEST     test1.py  MyProject virtualenv venvUsing base prefix '/Library/Frameworks/Python.framework/Versions/3.6'New python executable in /Users/zhangmeiyuan/PycharmProjects/MyProject/venv/bin/python3.6Also creating executable in /Users/zhangmeiyuan/PycharmProjects/MyProject/venv/bin/python
Installing setuptools, pip, wheel...done.

virtualenv 安装完毕,你可以立即打开 shell 然后创建你自己的环境。在python3下由于在MAC上自带pyvenv,不用额外安装。
我用的是mac:故操作如下:

mkdir .pyvenv
cd .pyvenv
pyvenv flask_venv
source flask_venv/bin/activate
 cd /Users/zhangmeiyuan/PycharmProjects/MyProject  MyProject mkdir .pyvenv  MyProject cd .pyvenv  .pyvenv pyvenv flask_venvWARNING: the pyenv script is deprecated in favour of `python3.6 -m venv`  .pyvenv source flask_venv/bin/activate
(flask_venv)   .pyvenv 

启动成功后,会在前面多出 flask_env字样,如下所示

zhangmeiyuan-4:.pyvenv zhangmeiyuan$ source flask_venv/bin/activate
(flask_venv) zhangmeiyuan-4:.pyvenv zhangmeiyuan$ 

接下来就可以在虚拟环境中安装包,不影响外貌的环境

pip3 install requests
pip3 install flask_sqlalchemy
pip3 install pymysql 
pip3 install flask
pip3 install flask-script
pip3 install flask-migrate

退出虚拟环境
deactivate

2.2Flask 创建代码工程

体验 Flask
有一点准备工作要做,既然 Flask 是一个 MVC 的 web 框架,我们就得按照 MVC 的模式来对代码文件分层。

  1. 首先我们创建一个工作的文件目录
$ mkdir -p bug_report/app
$ mkdir -p bug_report/app/static
$ mkdir -p bug_report/app/templates

Tips: 我们的应用程序包是放置于 app 文件夹中。子文件夹static
用来存放静态文件例如图片,JS 文件以及样式文件。子文件夹templates是存放模板文件类的html文件。

  1. 接下来我们进入到 app 文件夹中,并创建init.py和views.py
$ cd bug_report/app 
$ touch __init__.py 
$ touch views.py
  1. 上面创建项目是直接在命令行进行,也可以打开pycharm创建flask项目
screenshot.png

location为项目路径
interpreter为解释器路径,我们可以将这里更改为自己创建的虚拟环境中的解释器,
第一次添加需要add local,选定制定虚拟环境文件夹flask_env/bin/python3.6,
创建好后默认会出现一个简单的flask程序

  1. 让我们编写第一个视图函数(文件app/views.py
    )
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import flask

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"
if __name__ == '__main__':
    app.run(host='localhost', port=8888, debug=True)

Flask自带一个Web服务器,Run这个文件后,就会开始监听,可以使用,出现如下提示

/Users/zhangmeiyuan/PycharmProjects/MyProject/.pyvenv/flask_venv/bin/python3.6 /Users/zhangmeiyuan/PycharmProjects/bug_report/app/views.py
 * Running on http://localhost:8888/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 117-803-899

在浏览器输入http://localhost:8888/index,最终效果图如下

screenshot.png

以上flask框架已经基本搭建完成,可以在已经建好的项目中进行编程实现缺陷数据可视化

3.采用pygal charts+flask+mysql实现缺陷数据可视化

3.1框架设计

流程框架如下:

生成缺陷数据可视化流程图.png

代码目录框架如下:
├── pycache
│ └── mysql_save.cpython-36.pyc
├── app
│ ├── init.py
│ ├── pycache
│ │ ├── init.cpython-36.pyc
│ │ └── views.cpython-36.pyc
│ ├── static
│ │ └── pygal-tooltips.min.js
│ ├── templates
│ │ ├── charts.html
│ │ └── config.py
│ └── views.py
├── fix_period.py
├── mysql_save.py
└── run.py

3.2实现过程

从上一篇文章写到,从redmine获取到的数据将存在mysql中,所以Flask + sqlalchemy 是一种不错的选择,由于自己此前完全未接触过 flask,基本是零基础边学边用,对于网页展示动态数据,摸索了很久才弄明白其实现方式原理,而且遇到各种各样的调试问题,所以这块的功能实现的时间比较长也比较坎坷。

数据展示层的代码如下:由于涉及业务内容,只拿(三种类型的图)出来展示

def bugdata():
   try:
       conn = pymysql.connect(host='localhost', user='root', passwd='****', db='test', charset='utf8')
   except Exception as e:
       print(e)
       sys.exit()
   cursor = conn.cursor()
   sql = "select distinct category,bugs from priority_line where bank='***' "
  
   sql3 = "select distinct date_time,newbug,closebug from bug_line where bank='***' "

   sql5 = "select distinct period_time,bugs from period_line where bank='***' "
   cursor.execute(sql)
   alldata = cursor.fetchall()
   print(alldata)
   cursor.execute(sql2)
   alldata1 = cursor.fetchall()
   print(alldata1)
  
   cursor.execute(sql4)
   alldata3 = cursor.fetchall()
  

   title = " This is a  demo"
   pie_chart = pygal.Pie()
   
   pie_chart.title = '电子账户4.2_priority_bug'
   line_chart = pygal.Line()
   line_chart1 = pygal.Bar()
   line_chart.title = '电子账户4.2_bug_trend'
#饼图
   if alldata:
       for rec in alldata:
           print(rec[0], rec[1])
           pie_chart.add(rec[0], rec[1])
       chart = pie_chart.render_data_uri()
   pie_chart2.title = '电子账户4.2_author_bug'
#折线图
   if alldata2:
       date_time =[]
       new_bug = []
       close_bug = []
       for rec in alldata2:
           date_time.append(rec[0])
           new_bug.append(rec[1])
           close_bug.append(rec[2])
       print(date_time)
       print(close_bug)
       line_chart.title = '电子账户4.2_Bug_trend'
       line_chart.x_labels=date_time
       line_chart.add('new_bug',new_bug)
       line_chart.add('close_bug',close_bug)
       chart1 = line_chart.render_data_uri()
   
 #柱形图
   line_chart1.title = '电子账户4.2_period_time'
   if alldata4:
       period_time = []
       bugs = []
       for rec in alldata4:
           period_time.append(rec[0])
           bugs.append(rec[1])
       print(period_time)
       print(bugs)
       line_chart1.title = '电子账户4.2_period_line'
       line_chart1.x_labels = period_time
       line_chart1.add('bugs', bugs)
       chart4 = line_chart1.render_data_uri()

   return render_template('charts.html', title=title,chart=chart,chart2=chart2,chart3=chart3,chart4=chart4)

   cursor.close()
   conn.close()

if __name__ == '__main__':
   app.run(host='localhost', port=8888, debug=True)

charts.html代码如下

<!DOCTYPE html>
<html>
<head>

    <meta charset="utf-8">
    <script type="text/javascript" src="{{url_for('static',filename='pygal-tooltips.min.js')}}"></script>
    <script type="text/javascript" src="http://kozea.github.com/pygal.js/javascripts/svg.jquery.js"></script>
</head>

<body>
**************
隐藏
**************
    <h3 style="text-align:center;">电子账户4.2_质量分析报告可视化</h3>
    <div id="chart">
        <embed type="image/svg+xml" src={{ chart|safe}}></embed>
        <embed type="image/svg+xml" src={{ chart3|safe}}></embed>
        <embed type="image/svg+xml" src={{ chart1|safe}}></embed>
        <embed type="image/svg+xml" src={{ chart4|safe}}></embed>
    <embed type="image/svg+xml" src={{ chart2|safe}}></embed>
    </div>
 author: Jammy
</body>

</html>

最后成果如下(后续还将继续优化展示结果、新增维度分析及支持多个项目缺陷数据图片查询):

all.png
1.png
bug_trend.png
period_line.png
status_line.png
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
3天前
|
JSON Shell API
如何通过API获取淘宝商品月销售数据
淘宝开放平台提供了丰富的API接口,允许开发者获取商品的详细信息,包括月销售数据。
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
3天前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
6天前
|
XML 数据挖掘 API
1688商品详情数据示例参考,1688API接口系列
在成长的路上,我们都是同行者。这篇关于详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
13天前
|
数据采集 监控 搜索推荐
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
|
8天前
|
人工智能 数据挖掘 API
淘宝评论与商品详情数据API接口的使用与应用
商品详情数据API:获取商品的基本信息(如标题、价格、库存、描述等)。 评论数据API:获取商品的用户评价数据(如评分、评论内容、用户昵称、购买时间等)。
|
24天前
|
搜索推荐 数据挖掘 API
怎么利用商品详情 API 接口实现数据获取与应用?
在电商蓬勃发展的时代,数据成为驱动业务增长的关键。商品详情API接口为电商从业者、开发者和数据分析爱好者提供了获取海量商品数据的途径,助力精准营销、优化用户体验和提升运营效率。本文深入探讨如何利用商品详情API接口进行数据获取与应用,涵盖接口概念、工作原理、不同平台特点、准备工作、数据获取及处理、错误处理,并通过代码示例展示其在电商平台展示、数据分析、竞品分析和个性化推荐等场景中的应用。
41 12

热门文章

最新文章

推荐镜像

更多