In this assignment, I look at employment and unemployment in Victoria using data from the Australian Bureau of Statistics (ABS). I wanted to see how these figures have changed over time and whether employment and the unemployment rate appear to be related.
The main question for this report is:
How have employment and unemployment changed in Victoria over time, and what is the relationship between employment and the unemployment rate?
To answer this question, I created four visualisations. Three charts show changes in employment and unemployment over time. The fourth chart compares employment with the unemployment rate. I included static and interactive versions so the overall trends can be seen and individual values can be explored.
The packages below are used to read the Excel file, prepare the data, create the charts, and generate this report.
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
theme_set(theme_minimal(base_size = 12))
file_path <- "data/62020003.xlsx"
if (!file.exists(file_path)) {
stop(
"Excel file not found. Please check that ",
"62020003.xlsx is inside the data folder."
)
}
cat("Excel file found successfully.")
## Excel file found successfully.
First, I checked which sheets were available in the workbook. I used
the Data1 sheet for the analysis.
available_sheets <- excel_sheets(file_path)
kable(
data.frame(Sheet = available_sheets),
caption = "Sheets available in the Excel workbook"
)
| Sheet |
|---|
| Index |
| Data1 |
| Enquiries |
if (!"Data1" %in% available_sheets) {
stop("The Data1 sheet was not found.")
}
I then imported the data. The first 10 rows contain metadata, so I skipped those rows when reading the observations.
raw_data <- read_excel(
path = file_path,
sheet = "Data1",
skip = 10,
.name_repair = "unique"
)
cat("Number of observations:", nrow(raw_data), "\n")
## Number of observations: 583
cat("Number of columns:", ncol(raw_data), "\n")
## Number of columns: 85
kable(
head(raw_data, 6),
caption = "First six rows of the imported data"
)
| 28522 | 1638.0600718999999 | 1631.0226347 | 1629.0236225000001 | 1053.6723942000001 | 1051.5126757999999 | 1052.5112253 | 584.38767770000004 | 579.50995890000002 | 576.51239720000001 | 1410.3916320999999 | 1387.3039778 | 1397.3242858999999 | 1006.3870084 | 997.14676529999997 | 1002.5367946 | 404.00462379999999 | 390.15721250000001 | 394.7874913 | 231.69933660000001 | 49.974430699999999 | 181.72490590000001 | 57.836441100000002 | 57.600762600000003 | 57.530166000000001 | 75.831147099999995 | 75.701001700000006 | 75.772889800000002 | 40.504246299999998 | 40.172190499999999 | 39.964396600000001 | 99.402363199999996 | 103.40971949999999 | 114.6719207 | 48.529360599999997 | 53.8988947 | 59.3131536 | 50.873002700000001 | 49.510824800000002 | 55.358767100000001 | 94.8530734 | 54.0180364 | 40.835037 | 19.818847300000002 | 5.2951172 | 14.5237301 | 5.7211230000000004 | 5.9621649999999997 | 6.5763729 | 4.4029470999999996 | 4.8759119000000002 | 5.3347591999999997 | 8.0082090000000008 | 7.8710952000000001 | 8.7610846000000002 | 6.3566890000000003 | 5.1126581 | 9.3739498000000001 | 7.8796876999999999 | 9.5805328999999997 | 7.4006781999999998 | 1737.4624351 | 1734.4323542 | 1743.6955432 | 1102.2017547999999 | 1105.4115704999999 | 1111.8243789000001 | 635.26068039999996 | 629.02078370000004 | 631.87116430000003 | 61.3461286 | 61.252752899999997 | 61.579889199999997 | 79.323729 | 79.581316599999994 | 80.042990599999996 | 44.030283300000001 | 43.604328799999998 | 43.801919900000001 | 1087.9034846 | 277.20965200000001 | 810.69383259999995 | 2831.5990277999999 | 1389.0340309000001 | 1442.5649969000001 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1978-03-01 | 1642.711 | 1639.856 | 1652.718 | 1054.490 | 1052.995 | 1058.051 | 588.2202 | 586.8612 | 594.6663 | 1409.835 | 1406.691 | 1414.751 | 1004.2767 | 1001.8293 | 1006.5070 | 405.5581 | 404.8615 | 408.2441 | 237.9667 | 51.54445 | 186.4222 | 57.95256 | 57.82951 | 58.28307 | 75.83545 | 75.70381 | 76.06732 | 40.73173 | 40.62074 | 41.16098 | 98.95742 | 99.54597 | 104.43953 | 47.98991 | 48.68300 | 49.94429 | 50.96751 | 50.86296 | 54.49523 | 85.40861 | 44.69705 | 40.71156 | 19.03092 | 5.247245 | 13.78367 | 5.681762 | 5.722998 | 5.943664 | 4.352905 | 4.418986 | 4.507625 | 7.973794 | 7.975700 | 8.394711 | 5.693301 | 4.251986 | 9.068059 | 7.405095 | 9.239458 | 6.884747 | 1741.668 | 1739.402 | 1757.157 | 1102.480 | 1101.678 | 1107.996 | 639.1877 | 637.7241 | 649.1615 | 61.44364 | 61.34000 | 61.96613 | 79.28672 | 79.20381 | 79.65800 | 44.26102 | 44.14131 | 44.93298 | 1078.517 | 282.9452 | 795.5714 | 2835.674 | 1390.941 | 1444.733 |
| 1978-04-01 | 1646.521 | 1659.240 | 1664.759 | 1054.877 | 1067.419 | 1068.876 | 591.6444 | 591.8208 | 595.8823 | 1409.283 | 1421.406 | 1421.872 | 1002.2181 | 1014.1737 | 1013.2413 | 407.0646 | 407.2320 | 408.6306 | 242.8866 | 55.63499 | 187.2516 | 58.03881 | 58.48041 | 58.67493 | 75.80821 | 76.70333 | 76.80806 | 40.93009 | 40.93840 | 41.21935 | 98.15713 | 96.46936 | 96.85274 | 47.44235 | 46.32102 | 43.22224 | 50.71479 | 50.14834 | 53.63050 | 76.78601 | 39.24409 | 37.54192 | 20.06673 | 3.978147 | 16.08858 | 5.626088 | 5.494609 | 5.497963 | 4.303867 | 4.159052 | 3.886548 | 7.895082 | 7.811643 | 8.257036 | 5.123652 | 3.728707 | 8.414215 | 7.631289 | 6.673273 | 7.912150 | 1744.678 | 1755.709 | 1761.611 | 1102.319 | 1113.740 | 1112.099 | 642.3592 | 641.9691 | 649.5128 | 61.49879 | 61.88051 | 62.08853 | 79.21764 | 80.03190 | 79.91395 | 44.43855 | 44.40735 | 44.92917 | 1075.646 | 279.5215 | 796.1244 | 2837.257 | 1391.620 | 1445.637 |
| 1978-05-01 | 1649.450 | 1654.286 | 1656.605 | 1054.962 | 1055.798 | 1057.436 | 594.4882 | 598.4877 | 599.1695 | 1408.132 | 1419.953 | 1422.378 | 999.8165 | 1004.3375 | 1005.2343 | 408.3157 | 415.6151 | 417.1435 | 234.2273 | 52.20131 | 182.0260 | 58.09412 | 58.26895 | 58.35065 | 75.76032 | 75.81999 | 75.93760 | 41.08819 | 41.37358 | 41.42071 | 97.22232 | 98.87843 | 100.26568 | 46.97516 | 46.44344 | 45.85505 | 50.24716 | 52.43499 | 54.41062 | 79.08612 | 42.35415 | 36.73197 | 21.17956 | 3.500907 | 17.67865 | 5.566145 | 5.639999 | 5.707060 | 4.262963 | 4.213545 | 4.156208 | 7.793455 | 8.055487 | 8.325012 | 5.267267 | 4.043014 | 8.092962 | 8.292480 | 6.285041 | 8.852400 | 1746.672 | 1753.164 | 1756.871 | 1101.937 | 1102.241 | 1103.291 | 644.7353 | 650.9227 | 653.5801 | 61.51832 | 61.75175 | 61.88231 | 79.13376 | 79.15523 | 79.23058 | 44.56104 | 44.99842 | 45.18213 | 1082.181 | 289.2154 | 792.9655 | 2839.052 | 1392.506 | 1446.546 |
| 1978-06-01 | 1650.767 | 1654.249 | 1653.590 | 1054.511 | 1056.050 | 1055.331 | 596.2555 | 598.1994 | 598.2585 | 1406.133 | 1407.625 | 1405.100 | 997.0041 | 997.5436 | 995.5750 | 409.1292 | 410.0816 | 409.5254 | 248.4894 | 59.75626 | 188.7331 | 58.09255 | 58.22199 | 58.19878 | 75.67407 | 75.80568 | 75.75411 | 41.17164 | 41.30704 | 41.31112 | 95.94795 | 96.75687 | 94.65199 | 46.57187 | 47.64216 | 45.73253 | 49.37608 | 49.11470 | 48.91946 | 76.79696 | 43.23870 | 33.55826 | 17.85503 | 2.493827 | 15.36120 | 5.493053 | 5.525787 | 5.414125 | 4.229642 | 4.316618 | 4.153486 | 7.647717 | 7.587460 | 7.558889 | 5.182340 | 4.162315 | 7.573798 | 6.703738 | 4.006143 | 7.526522 | 1746.715 | 1751.006 | 1748.242 | 1101.083 | 1103.692 | 1101.064 | 645.6316 | 647.3141 | 647.1779 | 61.46908 | 61.62739 | 61.53010 | 79.01617 | 79.22555 | 79.03690 | 44.58108 | 44.69852 | 44.68912 | 1093.037 | 292.0372 | 801.0000 | 2841.279 | 1393.101 | 1448.178 |
| 1978-07-01 | 1649.833 | 1652.498 | 1655.016 | 1053.350 | 1055.095 | 1054.813 | 596.4822 | 597.4027 | 600.2032 | 1403.145 | 1403.856 | 1405.443 | 993.9291 | 992.6724 | 994.4647 | 409.2164 | 411.1838 | 410.9780 | 249.5733 | 60.34808 | 189.2252 | 58.01086 | 58.11086 | 58.19941 | 75.53559 | 75.67584 | 75.65558 | 41.14815 | 41.21528 | 41.40849 | 94.34353 | 94.76424 | 90.06338 | 46.38147 | 45.82354 | 43.45173 | 47.96206 | 48.94070 | 46.61166 | 73.42012 | 41.23383 | 32.18629 | 16.64327 | 2.217902 | 14.42537 | 5.409060 | 5.423585 | 5.160990 | 4.217526 | 4.162300 | 3.956399 | 7.442390 | 7.571935 | 7.206336 | 4.964633 | 3.981257 | 7.262834 | 6.251778 | 3.544901 | 7.083390 | 1744.176 | 1747.262 | 1745.079 | 1099.732 | 1100.919 | 1098.265 | 644.4443 | 646.3434 | 646.8149 | 61.32813 | 61.44329 | 61.36653 | 78.86159 | 78.96249 | 78.77212 | 44.45680 | 44.59173 | 44.62427 | 1098.620 | 295.9655 | 802.6541 | 2843.699 | 1394.230 | 1449.469 |
| 1978-08-01 | 1646.870 | 1644.359 | 1638.671 | 1051.357 | 1049.494 | 1045.062 | 595.5128 | 594.8647 | 593.6095 | 1399.532 | 1392.919 | 1376.933 | 990.9194 | 987.7245 | 982.2486 | 408.6129 | 405.1949 | 394.6842 | 261.7387 | 62.81344 | 198.9253 | 57.85591 | 57.76700 | 57.56721 | 75.33472 | 75.20181 | 74.88424 | 41.04102 | 40.99784 | 40.91133 | 93.02880 | 106.10172 | 100.76081 | 46.67685 | 52.89259 | 51.70427 | 46.35196 | 53.20913 | 49.05654 | 81.71392 | 47.62720 | 34.08671 | 19.04689 | 4.077067 | 14.96983 | 5.346795 | 6.061361 | 5.792741 | 4.250948 | 4.798008 | 4.714247 | 7.221451 | 8.210350 | 7.633287 | 5.602036 | 4.624558 | 7.949867 | 6.783429 | 6.095136 | 6.998675 | 1739.899 | 1750.460 | 1739.432 | 1098.034 | 1102.386 | 1096.766 | 641.8648 | 648.0738 | 642.6660 | 61.12409 | 61.49440 | 61.10698 | 78.67934 | 78.99184 | 78.58912 | 44.23546 | 44.66499 | 44.29229 | 1107.104 | 298.8038 | 808.3000 | 2846.536 | 1395.570 | 1450.966 |
The workbook contains information about the different series, including their descriptions, units, and adjustment types.
metadata <- read_excel(
path = file_path,
sheet = "Data1",
n_max = 10,
col_names = FALSE
)
## New names:
## • `` -> `...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`
## • `` -> `...75`
## • `` -> `...76`
## • `` -> `...77`
## • `` -> `...78`
## • `` -> `...79`
## • `` -> `...80`
## • `` -> `...81`
## • `` -> `...82`
## • `` -> `...83`
## • `` -> `...84`
## • `` -> `...85`
cat("Metadata has been loaded for checking.")
## Metadata has been loaded for checking.
For this report, I used three measures:
The selected series are in columns 3, 33, and 48 of the supplied workbook.
I selected the date, employment, unemployment, and unemployment-rate columns. The date conversion below handles the date formats expected from the workbook.
required_columns <- c(1, 3, 33, 48)
if (ncol(raw_data) < max(required_columns)) {
stop("The workbook does not contain all the expected columns.")
}
date_values <- raw_data[[1]]
if (inherits(date_values, "Date")) {
dates <- as.Date(date_values)
} else if (inherits(date_values, "POSIXt")) {
dates <- as.Date(date_values)
} else if (is.numeric(date_values)) {
dates <- as.Date(
date_values,
origin = "1899-12-30"
)
} else {
date_text <- trimws(as.character(date_values))
dates <- as.Date(
date_text,
tryFormats = c(
"%Y-%m-%d",
"%d/%m/%Y",
"%m/%d/%Y",
"%d-%m-%Y",
"%Y/%m/%d",
"%b %Y",
"%B %Y"
)
)
}
analysis_data <- data.frame(
date = dates,
employment = suppressWarnings(
as.numeric(raw_data[[3]])
),
unemployment = suppressWarnings(
as.numeric(raw_data[[33]])
),
unemployment_rate = suppressWarnings(
as.numeric(raw_data[[48]])
)
) |>
filter(!is.na(date)) |>
arrange(date)
if (nrow(analysis_data) == 0) {
stop(
"No valid dates were found. Please check the first column ",
"of the Data1 sheet."
)
}
kable(
head(analysis_data, 6),
digits = 2,
caption = "First six rows of the prepared data"
)
| date | employment | unemployment | unemployment_rate |
|---|---|---|---|
| 1978-03-01 | 1639.86 | 99.55 | 5.72 |
| 1978-04-01 | 1659.24 | 96.47 | 5.49 |
| 1978-05-01 | 1654.29 | 98.88 | 5.64 |
| 1978-06-01 | 1654.25 | 96.76 | 5.53 |
| 1978-07-01 | 1652.50 | 94.76 | 5.42 |
| 1978-08-01 | 1644.36 | 106.10 | 6.06 |
Before making the charts, I checked the number of observations, the date range, missing values, and duplicate dates.
missing_values <- colSums(is.na(analysis_data))
duplicate_dates <- sum(duplicated(analysis_data$date))
quality_summary <- data.frame(
Check = c(
"Total observations",
"First observation",
"Last observation",
"Duplicate dates"
),
Result = c(
as.character(nrow(analysis_data)),
format(min(analysis_data$date), "%B %Y"),
format(max(analysis_data$date), "%B %Y"),
as.character(duplicate_dates)
)
)
kable(
quality_summary,
caption = "Data quality summary"
)
| Check | Result |
|---|---|
| Total observations | 583 |
| First observation | March 1978 |
| Last observation | September 2026 |
| Duplicate dates | 0 |
kable(
data.frame(
Variable = names(missing_values),
Missing_values = as.integer(missing_values)
),
caption = "Missing values in the selected variables"
)
| Variable | Missing_values |
|---|---|
| date | 0 |
| employment | 0 |
| unemployment | 0 |
| unemployment_rate | 0 |
The checks show whether the data contain missing values or repeated dates. This is useful because data-quality problems can affect the charts and the conclusions drawn from them.
I started by looking at the unemployment rate because it shows what percentage of the labour force was unemployed at different points in time.
ggplot(
analysis_data,
aes(x = date, y = unemployment_rate)
) +
geom_line(
linewidth = 0.7,
na.rm = TRUE
) +
labs(
title = "Unemployment Rate in Victoria Over Time",
subtitle = "Seasonally adjusted data",
x = "Year",
y = "Unemployment rate (%)",
caption = "Source: Australian Bureau of Statistics"
) +
theme_minimal(base_size = 12)
Move the pointer over the line to check the unemployment rate for a particular date.
plotly::plot_ly(
data = analysis_data,
x = ~date,
y = ~unemployment_rate,
type = "scatter",
mode = "lines",
hovertemplate = paste(
"Date: %{x|%b %Y}",
"<br>Unemployment rate: %{y:.2f}%",
"<extra></extra>"
)
) |>
plotly::layout(
title = "Interactive Unemployment Rate in Victoria",
xaxis = list(title = "Year"),
yaxis = list(title = "Unemployment rate (%)")
)
The unemployment rate goes up and down over the period. One of the clearest peaks is around the early 1990s. There is also a noticeable increase around 2020.
After these peaks, the rate falls, although it changes again in later years. This shows that unemployment has not stayed at the same level throughout the period. The chart shows when the changes happened, but it does not explain their causes.
Next, I looked at the total number of employed people in Victoria to see how employment has changed over the years.
ggplot(
analysis_data,
aes(x = date, y = employment)
) +
geom_line(
linewidth = 0.7,
na.rm = TRUE
) +
labs(
title = "Total Employment in Victoria Over Time",
subtitle = "Seasonally adjusted data",
x = "Year",
y = "Employment (thousands of people)",
caption = "Source: Australian Bureau of Statistics"
) +
theme_minimal(base_size = 12)
Hover over the line to see the employment figure for different dates.
plotly::plot_ly(
data = analysis_data,
x = ~date,
y = ~employment,
type = "scatter",
mode = "lines",
hovertemplate = paste(
"Date: %{x|%b %Y}",
"<br>Employment: %{y:.2f} thousand",
"<extra></extra>"
)
) |>
plotly::layout(
title = "Interactive Total Employment in Victoria",
xaxis = list(title = "Year"),
yaxis = list(title = "Employment (thousands of people)")
)
Employment has increased overall during the period covered by the data. The number of employed people rises from around 1.6 million near the beginning of the series to more than 3.8 million near the end.
The increase is not completely steady. There are some periods when employment grows more slowly or falls for a time. A noticeable disruption can also be seen around 2020.
Overall, the chart shows long-term growth in employment. However, the chart alone cannot tell us exactly why employment has increased. Changes in population and economic conditions may also play a part.
The unemployment rate is a percentage, while this chart shows the actual number of unemployed people. Looking at both measures helps give a clearer picture of unemployment.
ggplot(
analysis_data,
aes(x = date, y = unemployment)
) +
geom_line(
linewidth = 0.7,
na.rm = TRUE
) +
labs(
title = "Total Unemployment in Victoria Over Time",
subtitle = "Seasonally adjusted data",
x = "Year",
y = "Unemployed people (thousands)",
caption = "Source: Australian Bureau of Statistics"
) +
theme_minimal(base_size = 12)
Hover over the line to see how the number of unemployed people changes across the series.
plotly::plot_ly(
data = analysis_data,
x = ~date,
y = ~unemployment,
type = "scatter",
mode = "lines",
hovertemplate = paste(
"Date: %{x|%b %Y}",
"<br>Unemployed people: %{y:.2f} thousand",
"<extra></extra>"
)
) |>
plotly::layout(
title = "Interactive Number of Unemployed People in Victoria",
xaxis = list(title = "Year"),
yaxis = list(title = "Unemployed people (thousands)")
)
The number of unemployed people changes considerably over time. There is a clear peak around the early 1990s and another sharp increase around 2020.
The general pattern is similar to the unemployment-rate chart. However, the number of unemployed people and the unemployment rate are different measures. One shows the number of people, while the other shows unemployment as a percentage of the labour force.
Using both charts makes it easier to compare changes in the number of unemployed people with changes in the unemployment rate.
For the final visualisation, I compared employment with the unemployment rate using a scatterplot. Each point represents one observation from the dataset.
ggplot(
analysis_data,
aes(
x = employment,
y = unemployment_rate
)
) +
geom_point(
alpha = 0.6,
na.rm = TRUE
) +
geom_smooth(
method = "lm",
se = TRUE,
na.rm = TRUE
) +
labs(
title = "Employment and Unemployment Rate in Victoria",
subtitle = "Seasonally adjusted observations",
x = "Employment (thousands of people)",
y = "Unemployment rate (%)",
caption = "Source: Australian Bureau of Statistics"
) +
theme_minimal(base_size = 12)
## `geom_smooth()` using formula = 'y ~ x'
Hover over individual points to see the date, employment level, and unemployment rate.
plotly::plot_ly(
data = analysis_data,
x = ~employment,
y = ~unemployment_rate,
type = "scatter",
mode = "markers",
text = ~format(date, "%b %Y"),
hovertemplate = paste(
"Date: %{text}",
"<br>Employment: %{x:.2f} thousand",
"<br>Unemployment rate: %{y:.2f}%",
"<extra></extra>"
)
) |>
plotly::layout(
title = "Interactive Relationship Between Employment and Unemployment Rate",
xaxis = list(title = "Employment (thousands of people)"),
yaxis = list(title = "Unemployment rate (%)")
)
The scatterplot shows a generally downward relationship between employment and the unemployment rate in this dataset. Higher employment levels are often associated with lower unemployment rates.
The fitted line helps show the overall direction of the relationship. However, the points do not all follow the line, which means the relationship is not perfectly linear.
The observations also cover many different years. Population and economic conditions may have changed during this time, so the pattern should be interpreted carefully. The chart shows an association between the two measures, but it does not prove that an increase in employment directly causes the unemployment rate to fall.
The four visualisations helped me look at different parts of Victoria’s labour market.
The employment chart shows an overall increase in the number of employed people across the period. In comparison, the unemployment rate and the number of unemployed people go up and down more noticeably. The early 1990s and around 2020 stand out as periods with higher unemployment.
The scatterplot shows that employment and the unemployment rate generally move in opposite directions across the observations. However, this relationship is not exact, and other factors may affect both measures.
Overall, using the four charts gives a better understanding of how employment and unemployment have changed in Victoria. The interactive charts are also useful because they allow individual dates and values to be checked rather than relying only on the overall trend.
There are a few limitations to this analysis.
A future analysis could compare Victoria with other Australian states or look at different age groups and industries to explore these patterns in more detail.
Australian Bureau of Statistics. (2026). Labour Force, Australia, September 2026. https://www.abs.gov.au/statistics/labour/employment-and-unemployment/labour-force-australia/sep-2026
Plotly Technologies Inc. (n.d.). Plotly for R. https://plotly.com/r/
R Core Team. (2026). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/
Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer. https://ggplot2-book.org/
Wickham, H., François, R., Henry, L., Müller, K., Vaughan, D., & Posit Software, PBC. (2026). dplyr: A grammar of data manipulation. https://dplyr.tidyverse.org/
Wickham, H., & Bryan, J. (n.d.). readxl: Read Excel files. https://readxl.tidyverse.org/
Xie, Y., Allaire, J. J., & Grolemund, G. (2018). R Markdown: The definitive guide. Chapman and Hall/CRC. https://bookdown.org/yihui/rmarkdown/
Xie, Y. (n.d.). knitr: A general-purpose package for dynamic report generation in R. https://yihui.org/knitr/
The final code below checks the number of observations, date range, missing values, and duplicate dates one more time.
cat("Total observations:", nrow(analysis_data), "\n")
## Total observations: 583
cat(
"Date range:",
format(min(analysis_data$date), "%B %Y"),
"to",
format(max(analysis_data$date), "%B %Y"),
"\n"
)
## Date range: March 1978 to September 2026
cat("\nMissing values by variable:\n")
##
## Missing values by variable:
print(colSums(is.na(analysis_data)))
## date employment unemployment unemployment_rate
## 0 0 0 0
cat("\nDuplicate dates:\n")
##
## Duplicate dates:
print(sum(duplicated(analysis_data$date)))
## [1] 0
kable(
head(analysis_data, 6),
digits = 2,
caption = "Final preview of the analysis data"
)
| date | employment | unemployment | unemployment_rate |
|---|---|---|---|
| 1978-03-01 | 1639.86 | 99.55 | 5.72 |
| 1978-04-01 | 1659.24 | 96.47 | 5.49 |
| 1978-05-01 | 1654.29 | 98.88 | 5.64 |
| 1978-06-01 | 1654.25 | 96.76 | 5.53 |
| 1978-07-01 | 1652.50 | 94.76 | 5.42 |
| 1978-08-01 | 1644.36 | 106.10 | 6.06 |