畢業(yè)設計 大數(shù)據疫情數(shù)據分析可視化系統(tǒng)
0 前言
?? 這兩年開始畢業(yè)設計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學弟學妹告訴學長自己做的項目系統(tǒng)達不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設,學長分享優(yōu)質畢業(yè)設計項目,今天要分享的是
?? ?基于python的疫情爬蟲分析可視化系統(tǒng)
難度系數(shù):3分
工作量:3分
創(chuàng)新點:3分
畢設幫助,選題指導,技術解答,歡迎打擾,見B站個人主頁
https://space.bilibili.com/33886978
1 課題背景
自2019年12月12日武漢確診新型冠狀病毒患者開始,歷時三年之久的新冠疫情仍未結束。新型冠狀病毒肺炎(COVID-19)存在人畜跨界傳播、傳染性強、影響因素多樣、傳播途徑復雜等特點,導致肺炎疫情發(fā)病急、發(fā)展快、溯源分析難、社會危害大等問題。隨著新型冠狀病毒毒株的不斷變異,現(xiàn)出現(xiàn)了傳播性極強、免疫逃逸能力極高的變異病毒。 為更直觀、更專業(yè)地了解疫情的變化,本文設計了基于爬蟲、Dianjo、Pyecharts的COVID-19疫情信息可視化系統(tǒng)。該系統(tǒng)主要包括疫情模型預測、疫情信息可視化以及防疫措施指南三大功能,能夠實時動態(tài)展示疫情發(fā)展趨勢,并根據預測模型進行疫情預測以及提供有效的防疫措施。
2 實現(xiàn)效果
首頁

動畫展示

省份統(tǒng)計

省排名

3 Flask框架
簡介
Flask是一個基于Werkzeug和Jinja2的輕量級Web應用程序框架。與其他同類型框架相比,F(xiàn)lask的靈活性、輕便性和安全性更高,而且容易上手,它可以與MVC模式很好地結合進行開發(fā)。Flask也有強大的定制性,開發(fā)者可以依據實際需要增加相應的功能,在實現(xiàn)豐富的功能和擴展的同時能夠保證核心功能的簡單。Flask豐富的插件庫能夠讓用戶實現(xiàn)網站定制的個性化,從而開發(fā)出功能強大的網站。
本項目在Flask開發(fā)后端時,前端請求會遇到跨域的問題,解決該問題有修改數(shù)據類型為jsonp,采用GET方法,或者在Flask端加上響應頭等方式,在此使用安裝Flask-CORS庫的方式解決跨域問題。此外需要安裝請求庫axios。
Flask框架圖

相關代碼:
from flask import Flask, render_template
import csv
import codecs
web = Flask(__name__)
# 首頁
@web.route('/')
def index():
? ?return render_template('index.html')
# 疫情可視化動畫展示模塊
@web.route('/movie')
def movie_list():
? ?movies = [{'file':'top10省現(xiàn)有確診病例對比.mp4','title':'Top10省現(xiàn)有確診病例對比'},
? ? ? ? ? ? ?{'file':'Top15國現(xiàn)有確診病例對比.mp4','title':'Top15國現(xiàn)有確診病例對比'}]
? ?return render_template('movie.html',movies=movies)
# 中國新冠疫情實時數(shù)據地圖模塊
@web.route('/map')
def map():
? ?return render_template('map.html')
# 今日發(fā)生疫情省份統(tǒng)計模塊
@web.route('/pie')
def pie():
? ?with codecs.open(filename='../data/china_data.csv', mode='r', encoding='utf-8') as f:
? ? ? ?reader = csv.reader(f)
? ? ? ?head = next(reader)
? ? ? ?today_confirm1 = {}
? ? ? ?today_confirm2 = []
? ? ? ?for item in reader:
? ? ? ? ? ?args = tuple(item)
? ? ? ? ? ?today_confirm1.update({args[2]: args[3]})
? ? ? ?for key, value in today_confirm1.items():
? ? ? ? ? ?if (value != '0'):
? ? ? ? ? ? ? ?# today_confirm2.append({key: value})
? ? ? ? ? ? ? ?today_confirm2.append({'name': key, 'value': value})
? ? ? ?print(today_confirm2)
? ?return render_template('pie.html',today_confirm=today_confirm2)
# 各省累計確診排名模塊
@web.route('/rank')
def rank():
? ?with codecs.open('../data/china_data.csv', mode='r', encoding='utf-8') as f:
? ? ? ?reader = csv.reader(f)
? ? ? ?head = next(reader)
? ? ? ?province_name = []
? ? ? ?province_confirm = []
? ? ? ?for item in reader:
? ? ? ? ? ?args = tuple(item)
? ? ? ? ? ?# print(args)
? ? ? ? ? ?province_name.append(args[2])
? ? ? ? ? ?province_confirm.append(args[9])
? ? ? ?print(province_name)
? ? ? ?print(province_confirm)
? ?return render_template('rank.html', province_name=province_name,province_confirm=province_confirm)
web.run(debug=True)
4 Echarts
ECharts(Enterprise Charts)是百度開源的數(shù)據可視化工具,底層依賴輕量級Canvas庫ZRender。兼容了幾乎全部常用瀏覽器的特點,使它可廣泛用于PC客戶端和手機客戶端。ECharts能輔助開發(fā)者整合用戶數(shù)據,創(chuàng)新性的完成個性化設置可視化圖表。支持折線圖(區(qū)域圖)、柱狀圖(條狀圖)、散點圖(氣泡圖)、K線圖、餅圖(環(huán)形圖)等,通過導入 js 庫在 Java Web 項目上運行。
5 爬蟲
簡介
Scrapy是基于Twisted的爬蟲框架,它可以從各種數(shù)據源中抓取數(shù)據。其架構清晰,模塊之間的耦合度低,擴展性極強,爬取效率高,可以靈活完成各種需求。能夠方便地用來處理絕大多數(shù)反爬網站,是目前Python中應用最廣泛的爬蟲框架。Scrapy框架主要由五大組件組成,它們分別是調度器(Scheduler)、下載器(Downloader)、爬蟲(Spider)和實體管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。各個組件的作用如下:
調度器(Scheduler):說白了把它假設成為一個URL(抓取網頁的網址或者說是鏈接)的優(yōu)先隊列,由它來決定下一個要抓取的網址是 什么,同時去除重復的網址(不做無用功)。用戶可以自己的需求定制調度器。
下載器(Downloader):是所有組件中負擔最大的,它用于高速地下載網絡上的資源。Scrapy的下載器代碼不會太復雜,但效率高,主要的原因是Scrapy下載器是建立在twisted這個高效的異步模型上的(其實整個框架都在建立在這個模型上的)。
爬蟲(Spider):是用戶最關心的部份。用戶定制自己的爬蟲(通過定制正則表達式等語法),用于從特定的網頁中提取自己需要的信息,即所謂的實體(Item)。 用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個頁面。
實體管道(Item Pipeline):用于處理爬蟲(spider)提取的實體。主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。
Scrapy引擎(Scrapy Engine):Scrapy引擎是整個框架的核心.它用來控制調試器、下載器、爬蟲。實際上,引擎相當于計算機的CPU,它控制著整個流程。
官網架構圖

相關代碼:
# -*- coding: utf-8 -*-
import scrapy
import random
import time
from foodwake.items import FoodwakespiderItem
class FoodwakeSpider(scrapy.Spider):
? ?name = 'foodwake'
? ?allowed_domains = ['www.foodwake.com']
? ?start_urls = ['http://www.foodwake.com/category/food-class/0']
? ?# //:匹配任意位置的節(jié)點 @:匹配屬性
? ?def parse(self, response):
? ? ? ?for box in response.xpath('//div[@class="row margin-b2"]//a'):
? ? ? ? ? ?new_url = box.xpath('.//@href').extract()[0]
? ? ? ? ? ?yield scrapy.http.Request(new_url, callback=self.parse_item)
? ?def parse_item(self, response):
? ? ? ?for box in response.xpath('//div[@class="row margin-b2"]//a'):
? ? ? ? ? ?new_url = box.xpath('.//@href').extract()[0]
? ? ? ? ? ?yield scrapy.http.Request(new_url, meta={"url": new_url}, callback=self.parse_item_info)
? ?def parse_item_info(self, response):
? ? ? ?item = FoodwakespiderItem()
? ? ? ?name = response.xpath('//h1[@class="color-yellow"]/text()').extract()[0].strip()
? ? ? ?# food_nickname = ""
? ? ? ?# try:
? ? ? ?# ? ? nicknames = response.xpath('//h2[@class="h3 text-light"]/text()').extract()[0].strip()
? ? ? ?# ? ? food_nickname = nicknames.split(':')[1]
? ? ? ?# except:
? ? ? ?# ? ? food_nickname = "無"
? ? ? ?# url = response.meta["url"]
? ? ? ?infoList = []
? ? ? ?for box in response.xpath('//table[@class="table table-hover"]//tr'):
? ? ? ? ? ?tds = box.xpath('.//td')
? ? ? ? ? ?if len(tds) == 3:
? ? ? ? ? ? ? ?info = {}
? ? ? ? ? ? ? ?td_name = tds.xpath('.//text()').extract()[0]
? ? ? ? ? ? ? ?td_unit = tds.xpath('.//text()').extract()[1]
? ? ? ? ? ? ? ?td_value = ""
? ? ? ? ? ? ? ?try:
? ? ? ? ? ? ? ? ? ?td_value = td_unit + tds.xpath('.//text()').extract()[2]
? ? ? ? ? ? ? ? ? ?info[td_name] = td_value
? ? ? ? ? ? ? ?except:
? ? ? ? ? ? ? ? ? ?info[td_name] = td_unit
? ? ? ? ? ? ? ?infoList.append(info)
? ? ? ?item['name'] = name
? ? ? ?item['info'] = str(infoList)
? ? ? ?# item['url'] = url
? ? ? ?# item['nickname'] = food_nickname
? ? ? ?yield item
? ? ? ?print("······休眠 1 至 5 秒······")
? ? ? ?time.sleep(random.randint(1, 5))
畢設幫助,選題指導,技術解答,歡迎打擾,見B站個人主頁
https://space.bilibili.com/33886978