0 前言
🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 大数据医学分析 猴痘疾病数据分析与可视化
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:2分
- 工作量:2分
- 创新点:4分
1 课题背景
猴痘的全球流行数据可视化
2 数据处理
# 加载包
library(ggplot2)
library(dplyr)
library(maps)
library(viridis)
# 读取数据 数据集来自https://github.com/globaldothealth/monkeypox
# Read worldwide case data
case_series <- read.csv("/home/mw/input/monkeypot5928/timeseries-country-confirmed.csv", colClasses = c("Country" = "character")) # ,colClasses = c("Country" = "factor")
head(case_series)
# 地图
world_map <- map_data("world")
head(world_map)
#表示过国家的经纬度
让我们定义一个具有以下特征的函数:
输入:日期、纬度范围、经度范围
输出:所提供日期的累积事例计数地图,以输入的纬度和经度值为界
# 自定义函数
plot_case_map <- function(date, xlim, ylim) {
# Pre-process case and map data
case_map <- case_series[which(case_series$Date == date), c(4, 3)]
colnames(case_map)[1] <- "region"
case_map$region[which(case_map$region == "United States")] <- "USA"
case_map$region[which(case_map$region == "United Kingdom")] <- "UK"
case_map$region[which(case_map$region == "Democratic Republic Of The Congo")] <- "Democratic Republic of the Congo"
case_map$region[which(case_map$region == "Bosnia And Herzegovina")] <- "Bosnia and Herzegovina"
if ("Gibraltar" %in% case_map$region) {
case_map <- case_map[-which(case_map$region == "Gibraltar"), ]
}
if (length(setdiff(world_map$region, case_map$region)) > 0) {
case_map_other <- as.data.frame(cbind(setdiff(world_map$region, case_map$region), NA))
colnames(case_map_other) <- c("region", "Cumulative_cases")
case_map <- rbind(case_map, case_map_other)
}
case_map$Cumulative_cases <- as.numeric(case_map$Cumulative_cases)
case_map <- left_join(case_map, world_map, by = "region")
# Plot case map
ggplot(case_map, aes(long, lat, group = group)) +
geom_polygon(aes(fill = Cumulative_cases), color = "white", size = 0.2) +
scale_fill_viridis_c() +
theme_linedraw() +
theme(legend.position = "right") +
labs(fill = "Cumulative cases") +
theme(legend.direction = "vertical") +
coord_map(xlim = xlim, ylim = ylim)
}
根据函数绘制地图
3 数据可视化
## 绘制截至2022年7月29日的世界猴痘病例地图:
plot_case_map("2022-07-29", c(-180, 180), c(-55, 90))
### 绘制截至2022年5月29日的世界猴痘病例地图
plot_case_map("2022-05-29", c(-180, 180), c(-55, 90))
#绘制截至2022年7月29日的猴痘病例地图:
plot_case_map("2022-07-29", c(-22, 38), c(35, 64))
#美国的猴痘病例数据来源 https://www.cdc.gov/poxvirus/monkeypox/response/2022/us-map.html
us_case_map<- read.csv("/home/mw/input/monkeypot5928/Monkeypox.csv")
head(us_case_map)
us_map <- map_data("state")
us_case_map <- us_case_map[-which(us_case_map$State %in% c("Alaska", "Hawaii", "Puerto Rico", "Non-US Resident")), -3]
colnames(us_case_map)[1] <- "region"
us_case_map$region <- tolower(us_case_map$region)
if (length(setdiff(us_map$region, us_case_map$region)) > 0) {
us_case_map_other <- as.data.frame(cbind(setdiff(us_map$region, us_case_map$region), NA))
colnames(us_case_map_other) <- c("region", "Cases")
us_case_map <- rbind(us_case_map, us_case_map_other)
}
us_case_map$Cases <- as.numeric(us_case_map$Cases)
us_case_map <- left_join(us_case_map, us_map, by = "region")
# Plot US case map
ggplot(us_case_map, aes(long, lat, group = group)) +
geom_polygon(aes(fill = Cases), color = "white", size = 0.2) +
scale_fill_viridis_c() +
theme_linedraw() +
theme(legend.position = "right") +
labs(fill = "Total cases") +
theme(legend.direction = "vertical")
让我们定义一个函数,该函数将国家/地区名称作为输入并绘制:
x 轴上的日期
左侧 Y 轴上的累积案例计数(红色)
右侧 Y 轴上的每日案例计数(蓝色)
plot_case_series <- function(country) {
# Plot cumulative case counts in red
country_series <- case_series[which(case_series$Country == country), ]
par(oma = c(1, 1, 1, 3))
plot(country_series$Cumulative_cases, type = "l", xaxt = "n", xlab = NA, main = paste(country, "reported case time series"), ylab = "Cumulative cases", col.lab = "red", col = "red")
axis(1, at = 1:nrow(country_series), labels = country_series$Date, las = 2, gap.axis = 1, cex.axis = 0.8)
# Plot daily case counts in blue
par(new = TRUE)
plot(country_series$Cases, type = "l", axes = FALSE, xlab = NA, ylab = NA, col = "blue")
axis(4, at = pretty(range(country_series$Cases)))
mtext("Cases", side = 4, line = 3, col = "blue")
grid()
}
现在,我们可以使用此函数来探索多个国家/地区的猴痘病例趋势:
加拿大报告病例曲线
plot_case_series("Canada")
美国病例曲线
plot_case_series("United States")
英国病例曲线
plot_case_series("United Kingdom")