📜  如何创建 COVID19 数据表示 GUI?(1)

📅  最后修改于: 2023-12-03 14:52:07.899000             🧑  作者: Mango

如何创建 COVID19 数据表示 GUI?

简介

COVID-19 是一种具有高度感染性和致命性的冠状病毒疾病。在这种情况下,创建 COVID-19 数据表示界面可以帮助人们更好地了解疫情的发展趋势和地区差异,从而采取更有效的对策。本文将介绍如何使用 Python 编程语言和一些库来进行简单的 COVID-19 数据表示 GUI 的创建。

准备

在进行 COVID-19 数据表示 GUI 的开发之前,我们需要准备以下工具和材料:

  • Python 3.6+ 版本
  • PyCharm IDE(或其他 Python IDE)
  • PyQt5 库(用于创建 GUI 界面)
  • Pandas 库(用于处理数据)
  • Matplotlib 库(用于可视化数据)

我们假设大家都已经安装好了Python和PyCharm,并成功安装上述所需的库。

数据来源

在进行 COVID-19 数据表示 GUI 开发之前,我们需要准备用于数据处理和分析的数据集。本文使用的是 JHU CSSE COVID-19 数据集。该数据集包含了全球各地每天的确诊数据、死亡数据和康复数据,我们可以通过对数据进行处理和分析来了解各地 COVID-19 疫情的趋势和差异。

创建 GUI 界面

在 PyCharm 中创建一个新项目,并创建一个名为 covid_gui.py 的 Python 文件。我们将使用 PyQt5 库来创建 GUI 界面。下面是相关的 Python 代码片段:

# 导入 PyQt5 库
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QComboBox, QPushButton, \
    QTableWidget, QTableWidgetItem
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt

# 创建 QApplication 实例
app = QApplication([])

# 创建主窗口
window = QWidget()
window.setWindowTitle("COVID-19 数据表示 GUI")
window.resize(1200, 800)
window.setStyleSheet("font-size: 18px;")

# 创建布局
main_layout = QVBoxLayout()
main_layout.setAlignment(Qt.AlignTop)

# 创建标题
title_layout = QHBoxLayout()
title_label = QLabel("<h1>COVID-19 数据表示 GUI</h1>")
title_layout.addStretch()
title_layout.addWidget(title_label)
title_layout.addStretch()

# 将标题添加到主布局中
main_layout.addLayout(title_layout)

# 创建选择部分
select_layout = QHBoxLayout()
select_layout.addStretch()
select_label1 = QLabel("选择国家/地区:")
select_label1.setFont(QFont("楷体", 20))
select_layout.addWidget(select_label1)
select_label2 = QLabel("选择数据(确诊,死亡或康复):")
select_label2.setFont(QFont("楷体", 20))
select_layout.addWidget(select_label2)

# 将选择部分添加到主布局
main_layout.addLayout(select_layout)

# 创建下拉菜单
combobox1 = QComboBox()
combobox2 = QComboBox()
combobox1.setFont(QFont("楷体", 18))
combobox2.setFont(QFont("楷体", 18))
select_layout.addWidget(combobox1)
select_layout.addWidget(combobox2)

# 创建按钮
button_layout = QHBoxLayout()
button_layout.addStretch()
update_button = QPushButton("更新数据")
update_button.setFont(QFont("楷体", 22))
update_button.setStyleSheet("background-color: #4CAF50; color: white; border-radius: 8px; padding: 8px 16px;")
button_layout.addWidget(update_button)
button_layout.addStretch()

# 将按钮添加到主布局
main_layout.addLayout(button_layout)

# 创建表格
table_layout = QHBoxLayout()
table_widget = QTableWidget()
table_widget.setFont(QFont("楷体", 20))
table_layout.addWidget(table_widget)

# 将表格添加到主布局
main_layout.addLayout(table_layout)

# 设置主窗口的布局
window.setLayout(main_layout)

# 显示窗口
window.show()

# 运行应用程序
app.exec_()

以上代码创建了一个包含以下部分的 GUI 界面:

  • 标题部分:标题部分显示应用程序的名称和标题。
  • 选择部分:选择部分显示两个下拉菜单,分别用于选择国家/地区和数据类型(确诊、死亡或康复)。
  • 更新按钮:更新按钮用于更新显示的数据。
  • 数据表格:用于显示所选国家/地区和数据类型的数据。

此时运行代码,将可以看到如下的 GUI 界面:

COVID-19 数据表示 GUI

处理数据

在完成 GUI 界面的创建之后,我们需要处理数据并更新表格中的内容。我们将使用 Pandas 库来处理 CSV 文件并获取需要显示的数据。我们可以在 GitHub 上下载最新的 COVID-19 数据集,并使用 Pandas 的 read_csv() 方法将数据文件加载到 Pandas 的 DataFrame 中。下面是相关代码:

# 导入 Pandas 库
import pandas as pd

# 加载数据文件
data = pd.read_csv(
    "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/"
    "time_series_covid19_{}_global.csv".format(data_type.lower()))

# 将国家/地区列表添加到下拉菜单中
countries = data["Country/Region"].unique()
combobox1.addItems(sorted(countries))

# 处理数据,然后更新表格中的内容
def update_table():
    country = combobox1.currentText()
    data_by_country = data[(data["Country/Region"] == country)]
    data_by_country = data_by_country.drop(["Province/State", "Country/Region", "Lat", "Long"], axis=1)
    data_by_country = data_by_country.sum().to_frame().T
    data_by_country.index = [country]
    for i in range(len(data_by_country.columns)):
        item = QTableWidgetItem(str(data_by_country.iloc[0, i]))
        item.setTextAlignment(Qt.AlignCenter)
        table_widget.setItem(0, i, item)

以上代码将 CSV 文件加载到 Pandas DataFrame 中,并将可用的国家或地区列表添加到下拉菜单中。然后,我们可以通过调用 update_table() 函数来获取所选国家或地区的数据,并更新数据表格的内容。

可视化数据

除了以表格的形式显示数据,我们还可以使用 Matplotlib 库以图形化形式显示数据。我们可以使用 Pandas 中的 plot() 方法来绘制图表。下面是相关代码:

# 导入 Matplotlib 库
import matplotlib.pyplot as plt

# 创建图表
def plot_data():
    country = combobox1.currentText()
    data_by_country = data[(data["Country/Region"] == country)]
    data_by_country = data_by_country.drop(["Province/State", "Country/Region", "Lat", "Long"], axis=1)
    data_by_country = data_by_country.sum().to_frame().T
    data_by_country.index = [country]
    data_by_country.plot(ax=ax)
    plt.xlabel("日期")
    plt.ylabel("人数")
    plt.title(country + " COVID-19 " + data_type + "数据")
    plt.show()

我们可以在 update_table() 函数的底部添加上面的代码,以便在更新表格之后自动生成图表。

完整的 COVID-19 数据表示 GUI 代码
# 导入相关的库
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QComboBox, QPushButton, \
    QTableWidget, QTableWidgetItem
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt
import pandas as pd
import matplotlib.pyplot as plt

# 创建 QApplication 实例
app = QApplication([])

# 创建主窗口
window = QWidget()
window.setWindowTitle("COVID-19 数据表示 GUI")
window.resize(1200, 800)
window.setStyleSheet("font-size: 18px;")

# 创建布局
main_layout = QVBoxLayout()
main_layout.setAlignment(Qt.AlignTop)

# 创建标题
title_layout = QHBoxLayout()
title_label = QLabel("<h1>COVID-19 数据表示 GUI</h1>")
title_layout.addStretch()
title_layout.addWidget(title_label)
title_layout.addStretch()

# 将标题添加到主布局中
main_layout.addLayout(title_layout)

# 创建选择部分
select_layout = QHBoxLayout()
select_layout.addStretch()
select_label1 = QLabel("选择国家/地区:")
select_label1.setFont(QFont("楷体", 20))
select_layout.addWidget(select_label1)
select_label2 = QLabel("选择数据(确诊,死亡或康复):")
select_label2.setFont(QFont("楷体", 20))
select_layout.addWidget(select_label2)

# 将选择部分添加到主布局
main_layout.addLayout(select_layout)

# 创建下拉菜单
combobox1 = QComboBox()
combobox2 = QComboBox()
combobox1.setFont(QFont("楷体", 18))
combobox2.setFont(QFont("楷体", 18))
select_layout.addWidget(combobox1)
select_layout.addWidget(combobox2)

# 创建按钮
button_layout = QHBoxLayout()
button_layout.addStretch()
update_button = QPushButton("更新数据")
update_button.setFont(QFont("楷体", 22))
update_button.setStyleSheet("background-color: #4CAF50; color: white; border-radius: 8px; padding: 8px 16px;")
button_layout.addWidget(update_button)
button_layout.addStretch()

# 将按钮添加到主布局
main_layout.addLayout(button_layout)

# 创建表格
table_layout = QHBoxLayout()
table_widget = QTableWidget()
table_widget.setFont(QFont("楷体", 20))
table_layout.addWidget(table_widget)

# 将表格添加到主布局
main_layout.addLayout(table_layout)

# 设置主窗口的布局
window.setLayout(main_layout)

# 加载数据文件
data_type = "确诊"
data = pd.read_csv(
    "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/"
    "time_series_covid19_{}_global.csv".format(data_type.lower()))

# 将国家/地区列表添加到下拉菜单中
countries = data["Country/Region"].unique()
combobox1.addItems(sorted(countries))

# 处理数据,然后更新表格中的内容
def update_table():
    country = combobox1.currentText()
    data_by_country = data[(data["Country/Region"] == country)]
    data_by_country = data_by_country.drop(["Province/State", "Country/Region", "Lat", "Long"], axis=1)
    data_by_country = data_by_country.sum().to_frame().T
    data_by_country.index = [country]
    for i in range(len(data_by_country.columns)):
        item = QTableWidgetItem(str(data_by_country.iloc[0, i]))
        item.setTextAlignment(Qt.AlignCenter)
        table_widget.setItem(0, i, item)

# 创建图表
def plot_data():
    country = combobox1.currentText()
    data_by_country = data[(data["Country/Region"] == country)]
    data_by_country = data_by_country.drop(["Province/State", "Country/Region", "Lat", "Long"], axis=1)
    data_by_country = data_by_country.sum().to_frame().T
    data_by_country.index = [country]
    data_by_country.plot(ax=ax)
    plt.xlabel("日期")
    plt.ylabel("人数")
    plt.title(country + " COVID-19 " + data_type + "数据")
    plt.show()

# 更新数据按钮的点击事件
update_button.clicked.connect(update_table)
update_button.clicked.connect(plot_data)

# 显示窗口
window.show()

# 运行应用程序
app.exec_()
结论

本文介绍了如何使用 Python 编程语言和一些库来创建简单的 COVID-19 数据表示 GUI。使用 Pandas 库,我们可以处理 CSV 文件并获取需要显示的数据。我们还使用了 Matplotlib 库来将数据可视化。最后,我们创建了一个 GUI 界面,以便我们可以更轻松地了解全球 COVID-19 疫情的情况。