Как создать Бар с ggplot с вероятностью с 2 переменными и 3 под переменными - PullRequest
0 голосов
/ 20 апреля 2020

Отчаянно нуждаюсь в помощи с этим.

Необработанные данные поступают с https://www.hockey-reference.com/play-index/tiny.fcgi?id=mmDlH

Выглядит так: CSV-файл

# A tibble: 6 x 19
  match_no Date  Tm    Opp   Outcome Time      G    PP    SH     S   PIM    GA  PPGA  SHGA
     <dbl> <chr> <chr> <chr> <chr>   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1        1 6/4/… NYI   WSH   W       REG       3     0     0    24     4     0     0     0
2        2 6/4/… WSH   NYI   L       REG       0     0     0    29     2     3     0     0
3        3 6/4/… STL   VAN   W       SO        3     1     0    36     6     2     2     0
4        4 6/4/… VAN   STL   L       SO        2     2     0    25     6     3     1     0
5        5 6/4/… COL   SJS   L       REG       2     0     0    30     4     5     0     0
6        6 6/4/… SJS   COL   W       REG       5     0     0    30     4     2     0     0
# … with 5 more variables: PPO <dbl>, PPOA <dbl>, SA <dbl>, OppPIM <dbl>, DIFF <dbl>

и я могу преобразовать в этот

A tibble: 6 x 5
# Groups:   Tm [1]
  Tm    Outcome Time      n  prob
  <chr> <chr>   <chr> <int> <dbl>
1 ANA   L       OT        7  0.09
2 ANA   L       REG      37  0.45
3 ANA   L       SO        3  0.04
4 ANA   W       OT        5  0.06
5 ANA   W       REG      27  0.33
6 ANA   W       SO        3  0.04

Я использовал это

team_outcomes_regulation <-
df %>%
+ count(Tm,Outcome, Time) %>%
+ group_by(Tm) %>%
+ mutate(prob = round(prop.table(n), 2))

Затем я пытаюсь ggplot с

team_outcomes_regulation %>%
ggplot(aes(x = Tm, y = prob, fill = Time)) 
+ geom_bar(position = "fill",stat = "identity")
+ theme(axis.text.x = element_text(angle = 90))

И это то, что я получаю, , но я отчаянно желаю разделить график на 6 баллов (выигрыши SO, Reg & OT, проигрыши SO, Reg & OT)] 3

Теперь я хочу попробовать сравнить разницу выигрышей с разницей голов с использованием оригинального df.

 # A tibble: 6 x 19
      match_no Date  Tm    Opp   Outcome Time      G    PP    SH     S   PIM    GA  PPGA  SHGA
         <dbl> <chr> <chr> <chr> <chr>   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1        1 6/4/… NYI   WSH   W       REG       3     0     0    24     4     0     0     0
    2        2 6/4/… WSH   NYI   L       REG       0     0     0    29     2     3     0     0
    3        3 6/4/… STL   VAN   W       SO        3     1     0    36     6     2     2     0
    4        4 6/4/… VAN   STL   L       SO        2     2     0    25     6     3     1     0
    5        5 6/4/… COL   SJS   L       REG       2     0     0    30     4     5     0     0
    6        6 6/4/… SJS   COL   W       REG       5     0     0    30     4     2     0     0
    # … with 5 more variables: PPO <dbl>, PPOA <dbl>, SA <dbl>, OppPIM <dbl>, DIFF <dbl>

Итак, теперь я хочу извлечь: 31 команда (Tm), число выигрышей (результат) и разница в голах (сумма DIFF), нужна дополнительная помощь?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы почти на месте, так как вы уже создали график, разделенный между значениями, указанными в вашем столбце "Время". Если вы хотите отобразить все свои перестановки столбцов «Время» И «Результат», это означает, что вам нужно объединить эти значения в один столбец и построить одно и то же. Здесь есть несколько вариантов, но, возможно, самый простой будет следующим:

team_outcomes_regulation$outcome_time <-
    paste(team_outcomes_regulation$Outcome, "by", team_outcomes_regulation$Time)

Тогда ваш график станет:

team_outcomes_regulation %>%
    ggplot(aes(x = Tm, y = prob, fill = outcome_time)) +
    geom_bar(position = "fill",stat = "identity") +
    theme(axis.text.x = element_text(angle = 90))

РЕДАКТИРОВАТЬ: боковой вопрос

Итак, теперь я хочу извлечь: 31 команда (Tm), количество побед (результат) и разница в голах (сумма DIFF), нужна дополнительная помощь?

Для этого я создаю фиктивный набор данных, похожий на ваш, который должен помочь вам визуализировать один подход, который вы могли бы использовать. Хотя есть несколько способов сделать это - то, что я имею здесь, это "неуклюжий" ИМХО.

# dummy data
df <- data.frame(
    Tm <- sample(LETTERS[1:5], 30, replace = TRUE),
    Outcome <- sample(c('W','L'), 30, replace = TRUE),
    Diff <- sample(1:3, 30, replace=TRUE),
    Time <- sample(c('REG', 'SO'), 30, replace=TRUE)
)

Это дает вам 5 команд (от "A" до "E") со случайными результатами, целью различия, и я также добавил «дополнительный» столбец, чтобы показать вам, что он также удаляет ненужные столбцы. Подход здесь заключается в том, чтобы устранить потери и затем суммировать оставшиеся данные, сгруппированные по командам. ВНИМАНИЕ: это означает, что сумма Diff основана только на выигрышах , а не на проигрышах. Если вы хотите включить потери, есть несколько других способов сделать это.

df %>%
    group_by(Tm, Outcome) %>%
    summarize(Wins=n(), Goal.Diff=sum(Diff)) %>%
    dplyr::filter(Outcome=='W')

# A tibble: 4 x 4
# Groups:   Tm [4]
  Tm    Outcome  Wins Goal.Diff
  <fct> <fct>   <int>     <int>
1 A     W           5        10
2 B     W           3         7
3 C     W           4         9
4 D     W           1         2

Это один из способов сделать это - если у вас есть дополнительные вопросы, связанные с этим, я бы предложил вам задать новый вопрос по ТАК. Вы можете связать его с этим, если вы sh, но это отдельный вопрос, поэтому его следует задавать отдельно.

...