Как построить непрерывный график для женщин и мужчин отдельно? - PullRequest
0 голосов
/ 20 января 2019

Я использую данные ВОЗ по статистике самоубийств, которые можно найти здесь: https://www.kaggle.com/szamil/who-suicide-statistics.То, что я пытаюсь сделать, это построить линейный график, который будет иметь годы на оси х и уровень самоубийств на оси у.Как вы сможете увидеть в данных, он имеет статистику самоубийств для каждой страны, возрастной группы и пола в отдельности.То, что я хочу сделать, это построить график для одной конкретной страны, суммировать количество самоубийств во всех возрастных группах, но есть две разные линии для женщин и мужчин.В своем коде я создал подмножество данных ВОЗ в соответствии с пользовательским вводом (я также создаю веб-приложение):

who_subset <- who[country, ] 

, где страна является реактивной переменной.Я хочу получить следующее:

1

Код, который я сейчас использую:

library(ggplot2)

ggplot(data = who, aes(x = year, y = suicides_no)) + 
  geom_point() + 
  geom_line(aes(weights = suicides_no), stat = "identity")

Я не могу загрузитьизображение графика, которое я получаю, когда я запускаю это, но оно не является непрерывным и имеет несколько баллов за каждый год.В некотором смысле это выглядит как гистограмма, поскольку соединяет точки по вертикали (на один год), а не имеет одну точку для каждого года, а затем соединяет эти точки по горизонтали.Может ли кто-нибудь помочь мне составить график, который я хочу, который будет похож на тот, что на втором рисунке?Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 21 января 2019
# For lack of a better source:
who <- read.csv("https://github.com/anudeike/who-suicide-stats/raw/master/data/who_suicide_statistics.csv", stringsAsFactors = FALSE)
who_uk <- subset(who, country == "United Kingdom")

Давайте посмотрим на данные:

> str(who_uk)
    'data.frame':   456 obs. of  6 variables:
 $ country    : chr  "United Kingdom" "United Kingdom" "United Kingdom" "United Kingdom" ...
 $ year       : int  1979 1979 1979 1979 1979 1979 1979 1979 1979 1979 ...
 $ sex        : chr  "female" "female" "female" "female" ...
 $ age        : chr  "15-24 years" "25-34 years" "35-54 years" "5-14 years" ...
 $ suicides_no: int  119 203 617 3 742 171 304 522 970 9 ...
 $ population : int  4189200 3917300 6438700 4212200 6191200 2083600 4387000 3991400 6459700 4449000 ...

Поскольку данные разбиты на year, sex и age, нам нужно сначала преобразовать / суммировать их. Делать это во время выполнения в ggplot2 не так уж и оптимально. Итак, как мы это делаем? Существуют более быстрые инструменты, но обработка данных с помощью dplyr, вероятно, является одним из наиболее доступных методов. Давайте сделаем удар:

library(dplyr)

# All suicides
who_uk_all <- who_uk %>% 
group_by(year) %>% 
summarize(suicides_no = sum(suicides_no),
          population = sum(population)) %>%
mutate(rate = 100000 * suicides_no/population)

# By sex
who_uk_sex <- who_uk %>% 
    group_by(year, sex) %>% 
    summarize(suicides_no = sum(suicides_no),
              population = sum(population)) %>%
    mutate(rate = 100000 * suicides_no / population)

Давайте построим это:

ggplot() + 
    geom_line(data = who_uk_all, aes(year, rate)) +
    geom_line(data = who_uk_sex, aes(year, rate, color = sex))

1

Предостережение : и источник данных на вашем изображении, и способ его преобразования, вероятно, отличаются от данных ВОЗ, поэтому у нас также есть немного другой график (также, это Англия, не Великобритания). Более того, кажется действительно странным , что уровень самоубийств всех лиц выше, чем как среди мужчин, так и среди женщин . Дальнейшее исследование определенно оправдано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...