-
Notifications
You must be signed in to change notification settings - Fork 0
/
OPDForecast.Rmd
74 lines (65 loc) · 2.87 KB
/
OPDForecast.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
---
title: "Forecast Number of OPD Patients"
output: html_notebook
---
This is an [R Markdown](http://rmarkdown.rstudio.com) Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the *Run* button within the chunk or by placing your cursor inside it and pressing *Cmd+Shift+Enter*.
```{r}
if (!"install.load" %in% rownames(installed.packages()))
install.packages("install.load")
library(install.load)
if (!"devtools" %in% rownames(installed.packages()))
install.packages("devtools")
library(devtools)
if (!"DBI" %in% rownames(installed.packages()))
devtools::install_github("rstats-db/DBI")
if (!"pool" %in% rownames(installed.packages()))
devtools::install_github("rstudio/pool")
library(DBI)
library(pool)
#install the required packages
pkgs_to_install_load <- c("RMySQL","tidyverse", "scales","data.table", "lubridate")
sapply(pkgs_to_install_load,install_load)
source("UtilityFunctions.R")
```
```{r}
pool <- dbPool(
drv = RMySQL::MySQL(),
dbname = "openmrs",
host = "localhost",
username = "root",
password = ""
)
opd.visits <- pool %>%
tbl(sql("select t1.date_started, t3.birthdate, t3.gender from visit t1
inner join visit_attribute t2
on t1.visit_id = t2.visit_id and
t2.attribute_type_id = 4
and t2.value_reference = 'OPD'
INNER JOIN person t3 on t1.patient_id = t3.person_id where t1.date_started >= '2015-04-01' and t1.voided = 0 AND t3.voided = 0 AND t2.voided=0")) %>%
collect(n = Inf)
```
```{r}
opd.visits <- opd.visits %>%
mutate(gender = factor(gender),
date_started = ymd_hms(date_started),
birthdate = ymd(birthdate),
Age = age(from=birthdate, to=Sys.Date()),
Age.Category = factor(case_when(
Age >=0 & Age<= 14 ~ "Children",
Age >= 15 & Age <= 24 ~ "Youth",
Age >= 25 & Age <= 64 ~ "Adults",
T ~ "Seniors"),
ordered = T, levels = c("Children", "Youth", "Adults", "Seniors")
),
WeekDay = wday(date_started, label = T, abbr = T)
)
```
```{r}
opd.visits %>% ggplot(aes(WeekDay)) + geom_bar(aes(fill=gender), position="dodge") + facet_wrap(~Age.Category)
```
```{r}
opd.visits %>% group_by(Age.Category, gender, WeekDay) %>% summarise(Count = n())
```
Add a new chunk by clicking the *Insert Chunk* button on the toolbar or by pressing *Cmd+Option+I*.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the *Preview* button or press *Cmd+Shift+K* to preview the HTML file).