Как преобразовать во временной ряд и построить график данных с каждым днем ​​в качестве переменной или столбца? - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь получить график количества Cov-19 в Италии с течением времени, и наткнулся на этот репозиторий в GitHub , и попытался поместить данные для Италии как таковые:

require(RCurl)
require(foreign)
x = getURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv")
corona = read.csv(text = x, sep =",",header = T)
str(corona)
Italy <- corona[,corona$Country.Region=='Italy']
Italy <- corona[corona$Country.Region=='Italy',][1,5:ncol(corona)]
head(Italy)[,45:52]

, который выводит:

> head(Italy)[,45:52]
   X3.6.20 X3.7.20 X3.8.20 X3.9.20 X3.10.20 X3.11.20 X3.12.20
17    4636    5883    7375    9172    10149    12462    12462
   X3.13.20
17    17660

Преобразование этого во временной ряд с xts привело меня к нескольким постам, спрашивающим, как преобразовать базу данных в временной ряд, где каждый день является строкой в переменной Date, но в этом кадре данных кажется, что каждая дата является переменной.

Мне не обязательно форматировать это как временной ряд, но я хотел бы построить график с течением времени количество дел.


Вот способ обойти временные ряды:

require(RCurl)
require(foreign)
x = getURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv")
corona = read.csv(text = x, sep =",",header = T)
str(corona)
Italy <- corona[,corona$Country.Region=='Italy']
Italy <- corona[corona$Country.Region=='Italy',][1,5:ncol(corona)]
Italy <- as.matrix(sapply(Italy, as.numeric))
plot(Italy[,1],typ='l',xlab='', ylab='', col='red', lwd=3,
     main="Italy Cov-19 cum cases")

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Мы можем преобразовать в xts и построить

library(xts)
plot(xts(unlist(Italy), order.by = as.Date(sub("X", "", names(Italy)),
        "%m.%d.%y")), , main = "xts plot")

enter image description here


Некоторые значения равны 0, поэтому необходимо преобразовать их в NA поскольку это может привести к Inf значениям, когда преобразование log2 выполнено

library(dplyr)
plot(xts(log(na_if(unlist(Italy), 0), 2), order.by = as.Date(sub("X", "", names(Italy)),
     "%m.%d.%y")), main = 'xts log2 plot')

enter image description here

1 голос
/ 14 марта 2020

Вот решение с tidyverse.

Сначала я использую read_csv для непосредственного чтения в файле csv (в предупреждении указываются классы столбцов, которые можно скопировать в команду , так как все классы данных были угаданы правильно):

library(tidyverse)

data <- read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv")

Даты хранятся в виде имен столбцов. Я использую pivot_longer для преобразования в длинный формат. Когда даты в новом столбце dates, мы можем использовать lubridate::mdy (мдд = месяц / день / год) для преобразования в правильный формат даты:

data_long <- data %>% 
  pivot_longer(cols = -c(`Province/State`, `Country/Region`, Lat, Long),
               names_to = "date",
               values_to = "cases") %>% 
  mutate(date = lubridate::mdy(date))

Теперь мы можем подмножество данных для Италии и участка:

data_long_ital <- data_long %>% 
  filter(`Country/Region` == "Italy")

ggplot(data_long_ital, aes(x = date, y = cases, group = `Country/Region`))+
  geom_line() +
  scale_x_date(date_breaks = "1 weeks")

...