机器学习分析预测新冠数据,实现GUI界面

机器学习分析预测新冠数据,实现GUI界面

前言

这次小项目主要是对前段时间学习成果的一次集中展现,新人博主,欢迎指导。

简介

本代码通过分析近88天的疫情数据,将确诊病例数、在国家、地区两个维度进行了可视化展示,并且使用多项式回归和logistic回归对未来的确诊人数进行预测,本代码,使用到了numpy 、panda和datetime处理数据,sklearn建立相应的数学模型, matplotlib绘制图, tkinter制作GUI界面。
time_series_covid19_confirmed_global.csv文件记录了截止到4月19日的新型肺炎确诊情况 最新数据源文件

效果图预览

在这里插入图片描述
在GUI界面选择预测的天数,起止时间,地区可以得出分析预测图像。

整体思路

  1. 获取数据源
    使用SVN从Github上面一个项目仓库CSSEGISandData/COVID-19,下载了一个包含地区维和时间维的确诊患者数量.csv文件。
    SVM使用教程连接
    四月份下载的数据文件

  2. 处理数据
    首先读取.csv文件,转为DataFrame格式。按GUI界面选择的参数截取数据,如:中国-湖北-1月22日-4月19日。先按国家属性做行截取,得到33行各省市数据。再按省属性做行截取,得到一行湖北数据。再按起止时间做列截取,得纯患者人数行DateFrame格式。把时间段转换成时间序列[1,2,3……88],把患者人数转换成List结构。

  3. 进行回归分析
    自变量为时间,因变量为患者数,用多种模型尝试进行拟合。简单线性回归、支持向量回归,拟合效果很差,舍弃。最后留下了效果好的:多项式回归和logistic回归。对应输入的预测天数,反馈出预测图像。

  4. 制作GUI界面
    用tk的标签,输入条,下拉框,画布控件组成。其中两个下拉选项框,负责选择国家和选择的,做了嵌套功能,只有选了中国才能有武汉选项。具体实现方法是在国家选择事件触发一个函数,这个函数会把省选项删除,代入国家参数重新显示一个省选项。在选择完地区成后会触发更新预测图函数,即先把已有的图删除,再重新画一个。

整体代码

import pandas as pd
import numpy as np
import datetime
from sklearn.model_selection import  train_test_split
from sklearn.linear_model import LogisticRegression,LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import matplotlib
from matplotlib.pyplot import MultipleLocator
from matplotlib.backends.backend_tkagg import  FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk
from tkinter import ttk

pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)
# .csv包含93列:Province/State表示省份,Country/Region表示国家,Lat,Long分别表示经纬度,后面每一列分别表示具体日期(1月22日-4月19日)
confirmed_global_path = 'C:\\Users\\chao\\csse_covid_19_time_series\\time_series_covid19_confirmed_global.csv'
confirmed_global_df = pd.DataFrame(pd.read_csv(confirmed_global_path))
cols = confirmed_global_df.keys()#列名
dates = confirmed_global_df.loc[:, cols[4]:].keys()#提取日期列名(1月22日-4月19日)
global  start_date,end_date
start_date=0
end_date=88
matplotlib.use('TkAgg')
window = tk.Tk()
window.geometry("600x900")

label4=tk.Label(window, text='Predicted days: ')
label4.pack()
entry4=tk.Entry(window,width=20,font=("宋体", 10, 'bold'))
entry4.pack()

label3=tk
  • 8
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值