基于Django的国内疫情数据可视化系统

基于Django的国内疫情数据可视化系统 

摘要

        2020年底以来,新冠病毒在全球范围内迅速蔓延,引起了国际社会的高度关注。在中国,政府和公众采取了积极措施应对疫情,并取得了显著成效。其中,疫情数据的及时收集、分析和传播是重要的信息支撑。

        基于Django的国内疫情数据可视化Web系统是一种将数据可视化和交互性相结合的信息展示方式。通过该系统,用户可以方便地获取有关疫情数据的详细信息,包括感染人数、死亡人数、确诊率等,并进行数据分析和对比。同时,该系统还提供了实时数据更新、多样化的图表展示、数据导出等功能,使用户能够更加深入地了解疫情发展趋势,进而制定更加科学的防控措施。

关键词

Django;数据可视化;疫情;python

目录

1.绪论

1.1研究背景 

1.2研究目的与意义 

2.文献资料综述

3.设计理念

3.1依据的理论知识技术

 4. 解决问题的方案

4.1 解决问题的总体方案:

4.2 方案的主要部分说明或技术分析:

4.3 方案可行性分析:

4.4 系统的实现

4.4.1 models的设计

4.4.2 首页的展示

4.4.3 国内累计数据

4.4.4 国内实时数据

4.4.5 各省数据

​编辑

4.4.6 中国历史数据

4.5 毕业设计成果评价

结    论

参考文献

致  谢

附录


1.绪论

1.1研究背景 

        随着全球新冠疫情的爆发,对各国疫情数据的跟踪和分析变得越来越重要。在中国,国家卫健委每日发布疫情数据,并通过多个媒体平台向公众展示。但是,这些平台的数据呈现方式可能不够清晰明了,难以快速准确地掌握疫情动态。

        因此,建立一个基于Django的国内疫情数据可视化Web系统具有很高的实用价值。该系统可以将每日更新的疫情数据进行可视化展示,包括地图、趋势图、饼图等多种形式,让公众更加直观地了解疫情发展趋势。同时,该系统还可以为政府部门、医疗机构等提供数据支持,帮助他们更好地制定应对策略。

        基于Django框架搭建的Web系统具有易于扩展、易于维护、安全性高等优点,非常适合用于构建这样的数据可视化平台。

1.2研究目的与意义 

        提高公众对疫情数据的认知和理解。通过直观的数据可视化展示,让公众更加直观地了解疫情发展趋势,从而增强公众的防控意识和自我保护能力。

        为政府部门、医疗机构等提供数据支持。通过该系统提供的准确、及时的疫情数据,这些机构可以更好地制定应对策略,帮助疫情防控工作更加科学、高效。

        探索基于Django框架的Web系统设计与实现方法。在项目中使用Django框架搭建Web系统,可以更加快速、高效地完成系统开发和维护,并具有良好的扩展性和安全性。

        推动数据可视化技术的发展和应用。数据可视化技术以其直观、易懂的特点受到越来越多人的关注,通过本系统的研究与应用,可以推动数据可视化技术在疫情防控等领域的应用,进一步提高数据可视化技术的应用水平。

2.文献资料综述

        在国内外已经有不少关于疫情数据可视化的相关研究,如针对新冠疫情的数据可视化系统“COVID-19 Dashboard”、美国约翰斯·霍普金斯大学公共卫生学院发布的新冠疫情实时数据可视化系统等。这些系统都采用了先进的数据可视化技术,充分利用了互联网和移动设备等现代信息技术手段,方便广大用户获取最新的疫情数据信息。

3.设计理念

3.1依据的理论知识技术

        Django框架:Django是一种基于MVC模型的Web应用程序框架,提供了许多工具和库来支持快速而灵活的开发。Django可以自动完成很多常见任务,例如数据库操作、表单验证、用户认证等。

        数据库:学生信息管理系统需要用到数据库来存储和管理大量的学生信息。Django拥有多种强大的数据库功能,从SQLite到PostgreSQL,再到ORM(Object-Relational Mapping),它能够为用户提供更加便捷、高效的数据访问体验。

        HTML、CSS、JavaScript等web技术是学生信息管理系统的重要组成部分,它们可以为用户提供精美的用户界面,并且可以提供丰富的交互功能,从而极大地提升了系统的效率和可靠性。

        Python编程语言:Python是Django框架的主要开发语言,同时也是一种流行的高级编程语言,具有良好的可读性、易用性、强大的库支持等特点。

 4. 解决问题的方案

                                             

4.1 解决问题的总体方案:

        本文中所设计的中国国内疫情数据可视化Web管理系统,主要包括三个模块:用户信息管理模块、数据显示模块和统计分析模块。用户信息模块主要包括用户注册、登录、修改密码等功能,保障用户信息安全。

        数据展示模块主要介绍疫情数据的实时更新、地图展示、数据可视化等功能。数据分析模块主要针对疫情数据进行统计分析,并提供分析报告和建议。

4.2 方案的主要部分说明或技术分析:

        在本系统中,数据展示模块采用了Echarts图表库实现数据可视化和地图展示。同时,为了实时更新疫情数据,我们使用了第三方数据接口获取最新的疫情数据,并将其存储到后台数据库中。用户可以通过前端界面选择不同的时间区间、地区或者指标来查看相关的疫情数据。

        数据分析模块主要采用了Python语言进行统计分析,并通过Django框架将统计结果展示在用户界面上。系统提供了多种分析方法,例如:

        疫情趋势分析:通过折线图展示疫情确诊、死亡、治愈等数据随时间变化的趋势,并根据趋势预测未来疫情发展趋势。

        地域分布分析:通过地图展示各省市疫情的分布情况,包括感染人数、死亡人数、治愈率等指标。同时,支持用户自定义筛选条件进行数据分析和对比。

        指标对比分析:通过多维度的数据对比,帮助用户更好地理解疫情数据之间的关系,如确诊人数与治愈率的关系、死亡人数与疫苗接种率的关系等。

4.3 方案可行性分析:

        本系统使用的技术和工具都是成熟的、稳定的,并且在国内外已有很多成功的应用案例。因此,从技术角度来看,方案是可行的。同时,本系统所涉及的数据来源是国家卫健委公布的疫情数据,具有权威性和可靠性,可以保证系统数据的准确性。从用户角度来看,本系统采用了直观、易懂的可视化方式展现数据,能够有效地提高用户对疫情数据的理解和分析能力。

4.4 系统的实现

4.4.1 models的设计

        定义了四个模型类CovinCurrentProvince、CovinHistProvince、CovinHistChina和CovinNews。这些模型类分别对应了疫情当前省份数据、疫情历史省份数据、疫情历史全国数据和疫情新闻数据。每个模型类都包含了一些字段,如地区名称、累计确诊数、治愈数、死亡数、更新时间、新闻标题和新闻链接等。这些字段定义了模型类中每个实例对象的属性。这些模型类可以用于创建、读取、更新和删除数据库中对应的数据。

from django.db import models

import datetime

# Create your models here.

class CovinCurrentProvince(models.Model):

    areaName = models.CharField('地区',max_length=50,default='')

    areaShortName = models.CharField('地区简称',max_length=50,default='')

    currentCount = models.IntegerField('现存确诊',default=0)

    sumCount = models.IntegerField('累计确诊',default=0)

    liveCount = models.IntegerField('治愈',default=0)

    deadCount = models.IntegerField('死亡',default=0)

class CovinHistProvince(models.Model):

    areaName = models.CharField('地区', max_length=50, default='')

    sumCount = models.IntegerField('累计确诊', default=0)

    liveCount = models.IntegerField('治愈', default=0)

    deadCount = models.IntegerField('死亡', default=0)

    updateTime = models.CharField('更新时间', max_length=50, default=str(datetime.datetime.now().date()))



class CovinHistChina(models.Model):

    updateTime = models.CharField('更新时间', max_length=50, default=str(datetime.datetime.now().date()))

    sumCount = models.IntegerField('累计确诊', default=0)

    liveCount = models.IntegerField('治愈', default=0)

    deadCount = models.IntegerField('死亡', default=0)

    foreignConfirm = models.IntegerField('累计境外输入确诊', default=0)



class CovinNews(models.Model):

    updateTime = models.CharField('更新时间', max_length=50, default=str(datetime.datetime.now().date()))

    newsTitle = models.CharField('新闻标题', max_length=200, default='')

newsUrl = models.CharField('新闻链接', max_length=500, default='')

4.4.2 首页的展示

        该网页展示了国内外疫情统计资料的可视化,内容包含了国内外统计历史数据、国内外实时统计、全国各省统计资料、国内历史数据和疫情信息等内容。网页上部显示国内外疫情统计的总体状况,包含现有诊断、累积治愈、累计治疗和累积死亡率等统计。网页下部以图表形式显示各区域的疫情状况,包含区域名称、地区简称、现有确诊、累计确诊、累计治愈和累计死亡等数据。

        数据以字典、列表等数据结构保存,每个地区的数据以一个字典保存,包括地区名称、地区简称、现有确诊、累计确诊、累计治愈和累计死亡等数据。

        实时更新数据的接口是通过爬虫程序从数据源获取最新数据,然后将其保存到数据库中。页面在渲染时从数据库中读取最新数据,保证数据的实时性。

首页

 

4.4.3 国内累计数据

用地图形式来展示

# 国内累计数据

def China_confirm(request):

    # sig_flag = updateDB('国内实时数据')

    # if (sig_flag == 0):

    #     messages.success(request, '当前无网络,只能显示上次更新的数据!')

    data = models.CovinCurrentProvince.objects.all()

    list=[]

    for data_temp in data:

        list.append({'name':data_temp.areaShortName,'value':data_temp.sumCount})

return render(request, 'China_confirm.html',{'db_data_confirm':list})

4.4.4 国内实时数据

以下就是实时的展示

def Province(request):

    # sig_flag = updateDB('国内实时数据')

    # if (sig_flag == 0):

    #     messages.success(request, '当前无网络,只能显示上次更新的数据!')

    areaList = models.CovinCurrentProvince.objects.all().values('areaName')

    areaNameList = []

    for area in areaList:

        areaNameList.append(area['areaName'])

    if request.method == 'GET':

        data = models.CovinHistProvince.objects.filter(areaName='台湾')

        list = []

        for data_temp in data:

            list.append({'time': data_temp.updateTime, 'confirm': data_temp.sumCount, 'live': data_temp.liveCount,

                         'dead': data_temp.deadCount})

        list.sort(key=lambda x: x['time'])

        return render(request, 'Province.html', {'areaNameList': areaNameList, 'Province_data':list, 'areaName_op':'台湾'})

    if request.method == 'POST':

        areaName = request.POST['area_op']

        data = models.CovinHistProvince.objects.filter(areaName=areaName)

        list = []

        for data_temp in data:

            list.append({'time': data_temp.updateTime, 'confirm': data_temp.sumCount, 'live':data_temp.liveCount, 'dead':data_temp.deadCount})

        list.sort(key=lambda x: x['time'])

        return render(request,'Province.html',{'areaNameList': areaNameList, 'Province_data':list, 'areaName_op':areaName})

4.4.5 各省数据

统计各省的数据,代码如下

# 各省统计数据

def Province(request):

    # sig_flag = updateDB('国内实时数据')

    # if (sig_flag == 0):

    #     messages.success(request, '当前无网络,只能显示上次更新的数据!')

    areaList = models.CovinCurrentProvince.objects.all().values('areaName')

    areaNameList = []

    for area in areaList:

        areaNameList.append(area['areaName'])

    if request.method == 'GET':

        data = models.CovinHistProvince.objects.filter(areaName='台湾')

        list = []

        for data_temp in data:

            list.append({'time': data_temp.updateTime, 'confirm': data_temp.sumCount, 'live': data_temp.liveCount,

                         'dead': data_temp.deadCount})

        list.sort(key=lambda x: x['time'])

        return render(request, 'Province.html', {'areaNameList': areaNameList, 'Province_data':list, 'areaName_op':'台湾'})

    if request.method == 'POST':

        areaName = request.POST['area_op']

        data = models.CovinHistProvince.objects.filter(areaName=areaName)

        list = []

        for data_temp in data:

            list.append({'time': data_temp.updateTime, 'confirm': data_temp.sumCount, 'live':data_temp.liveCount, 'dead':data_temp.deadCount})

        list.sort(key=lambda x: x['time'])

        return render(request,'Province.html',{'areaNameList': areaNameList, 'Province_data':list, 'areaName_op':areaName})

4.4.6 中国历史数据

这个页面实现了对我疫情历史数据的分析

4.5 毕业设计成果评价

        健委公布的疫情数据,具有权威性和可靠性,可以保证系统数据的准确性。从用户角度来看,本系统采用了直观、易懂的可视化方式展现数据,能够有效地提高用户对疫情数据的理解和分析能力。

结    论

        本文基于Django框架,设计并实现了一个国内疫情数据可视化Web系统。该系统可以方便地获取有关疫情的详细信息,并进行数据分析和对比。同时,该系统还提供了实时数据更新、多样化的图表展示等功能,使用户能够更加深入地了解疫情发展趋势,进而制定更加科学的防控措施。

参考文献

[1] 黄勇. Python Web开发从入门到实践[M]. 北京:人民邮电出版社,2016.

[2] 张磊. Python Django开发实战[M]. 北京:机械工业出版社,2015.

[3] 郑宝华,赵海涛,朱磊. Django企业级Web开发实战[M]. 北京:人民邮电出版社,2015.

[4] 潘茂林. Python Web开发:Django实战[M]. 北京:人民邮电出版社,2015.

[5] 杨杰. Python编程快速上手[M]. 北京:机械工业出版社,2017.

[6] 徐宝文. Python项目开发实战[M]. 北京:北京航空航天大学出版社,2017.

[7] 李春辉. 基于Python的Web编程[M]. 北京:机械工业出版社,2016.

[8] 李鹏飞. 基于Django的学生信息管理系统设计与实现[D]. 河南工程学院, 2019.

[9] 高超,王雪松. Django Web开发实战[M]. 北京:机械工业出版社,2018.

[10] 刘志军,陈建华. Web应用开发:基于Django框架和Python语言[M]. 北京:清华大学出版社,2012.

致  谢

        在做这个毕业设计,我到了指导老师的解惑,解决我存在的问题,在此表示诚挚的感谢。同时我也要感谢国家卫健委提供的权威疫情数据来源,为本系统的开发和实现提供了可靠的数据保障。

        随着三年的大学生活即将结束,但是在这段经历中,我收获到的不仅仅是成长,还有坚定的决心、无私的奉献。这一切都归功于我的亲密的家人、真挚的朋友,他们给予的爱、宽容、关怀、指导,让我拥有无限的力量,让我去实现自己的梦想!

        最后,我要感谢所有帮助我的人,谢谢你们!

附录

以下就是实时的展示

def Province(request):

    # sig_flag = updateDB('国内实时数据')

    # if (sig_flag == 0):

    #     messages.success(request, '当前无网络,只能显示上次更新的数据!')

    areaList = models.CovinCurrentProvince.objects.all().values('areaName')

    areaNameList = []

    for area in areaList:

        areaNameList.append(area['areaName'])

    if request.method == 'GET':

        data = models.CovinHistProvince.objects.filter(areaName='台湾')

        list = []

        for data_temp in data:

            list.append({'time': data_temp.updateTime, 'confirm': data_temp.sumCount, 'live': data_temp.liveCount,

                         'dead': data_temp.deadCount})

        list.sort(key=lambda x: x['time'])

        return render(request, 'Province.html', {'areaNameList': areaNameList, 'Province_data':list, 'areaName_op':'台湾'})

    if request.method == 'POST':

        areaName = request.POST['area_op']

        data = models.CovinHistProvince.objects.filter(areaName=areaName)

        list = []

        for data_temp in data:

            list.append({'time': data_temp.updateTime, 'confirm': data_temp.sumCount, 'live':data_temp.liveCount, 'dead':data_temp.deadCount})

        list.sort(key=lambda x: x['time'])

        return render(request,'Province.html',{'areaNameList': areaNameList, 'Province_data':list, 'areaName_op':areaName})

关注博主下篇更精彩

一键三连!!!

一键三连!!!

一键三连!!!
感谢一键三连!!!

猜你喜欢

转载自blog.csdn.net/m0_56073435/article/details/131338324