In this project, I explored the Calgary Citizen Satisfaction Survey using association rule mining. I got this dataset from here: https://data.calgary.ca/Help-and-Information/Citizen-Satisfaction-Survey-2018-2021-/btc8-9kef/about_data
The Calgary Citizen Satisfaction Survey is a city-run survey that
collects residents’ opinions about municipal services and quality of
life. The version used in this project includes responses from 2018 to
2021, where people rated services like roads, transit, parks, and social
programs on a 1–5 scale from very dissatisfied to very satisfied. The
goal is to understand whether satisfaction or dissatisfaction with
certain city services tends to appear together.
Rather than predicting an outcome, this analysis focuses on discovering patterns in how citizens evaluate different services at the same time. I start by exploring the data and preparing it for analysis, then gradually move towards mining and interpreting association rules.
library(arules)
library(arulesViz)
library(tidyr)
library(dplyr)
set.seed(123)
The dataset contains respondents’ ratings for multiple municipal services measured on a Likert scale ranging from 1 (very dissatisfied) to 5 (very satisfied).
Before doing any analysis, I loaded the dataset and inspected its structure to understand what kind of variables are available and how responses are recorded.
calgary_raw <- read.csv("Citizen_Satisfaction_Survey.csv", stringsAsFactors = FALSE)
str(calgary_raw)
## 'data.frame': 10002 obs. of 139 variables:
## $ Mweight0: num 0.51 0.6 0.7 0.49 0.77 0.67 0.77 0.41 1.19 1.03 ...
## $ qwave : chr "Year-2021" "Year-2021" "Year-2021" "Year-2021" ...
## $ s4qt : int 4 1 2 3 1 1 1 2 1 1 ...
## $ market2 : int 10 8 12 6 11 6 11 11 6 9 ...
## $ q39 : int 4 1 7 9 4 1 4 7 9 2 ...
## $ q34 : int 1 1 1 1 1 2 1 1 1 1 ...
## $ q37 : int 9 9 8 8 10 1 11 8 3 7 ...
## $ q38 : int 3 2 2 3 2 3 3 2 2 3 ...
## $ q30 : int 6 6 6 6 5 6 6 5 4 6 ...
## $ q32x : int 2 2 2 2 2 2 2 2 1 2 ...
## $ q40 : int 2 2 2 3 2 1 2 2 2 2 ...
## $ sexfix : int 2 1 2 2 2 1 2 2 2 2 ...
## $ q29x : int 1 2 1 1 1 2 1 1 1 1 ...
## $ q2a : int 6 6 8 7 8 7 7 10 8 5 ...
## $ q3 : int 2 2 3 3 1 2 1 2 2 3 ...
## $ q24bx_1 : int 5 6 5 6 7 6 10 8 7 4 ...
## $ q24bx_2 : int 5 7 3 1 3 7 10 8 6 6 ...
## $ q24bx_3 : int 7 7 5 10 7 8 10 10 8 7 ...
## $ q24bx_4 : int 6 7 5 10 8 8 10 10 8 7 ...
## $ q24bx_5 : int 1 6 1 1 7 6 4 10 6 2 ...
## $ q24bx_6 : int 4 6 5 4 5 6 6 9 7 4 ...
## $ q24bx_7 : int 3 6 8 9 8 7 8 10 7 6 ...
## $ q24cx : int 3 4 3 3 3 2 1 4 3 2 ...
## $ q10 : int 2 2 4 1 4 2 3 4 3 2 ...
## $ q19_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ q19_2 : int 1 3 2 5 4 1 2 4 3 3 ...
## $ q19_3 : int 4 4 3 5 4 3 1 4 3 4 ...
## $ q19_4 : int 1 4 5 1 4 1 1 3 3 3 ...
## $ q19_5 : int 1 4 3 3 2 3 3 3 3 3 ...
## $ q19_6 : int NA NA NA NA NA NA NA NA NA NA ...
## $ q19_7 : int 1 4 3 3 1 5 3 3 2 3 ...
## $ q19_8 : int 1 4 3 2 1 3 2 4 3 3 ...
## $ q11a : int 5 7 7 8 8 6 8 8 5 7 ...
## $ q12 : int 4 2 2 4 2 5 2 4 5 3 ...
## $ q8_1 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_2 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_3 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_4 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_5 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q8_6 : int 5 5 2 5 5 5 5 5 5 5 ...
## $ q8_7 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_8 : int 5 5 2 5 5 5 5 5 5 5 ...
## $ q8_9 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_10 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_11 : int 5 5 2 5 5 5 5 5 5 5 ...
## $ q8_12 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_13 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_14 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_15 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_16 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q8_17 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q8_18 : int 5 5 2 5 5 5 5 5 5 5 ...
## $ q8_19 : int 2 4 5 4 4 4 4 4 3 4 ...
## $ q8_20 : int 1 4 5 4 2 4 4 4 3 4 ...
## $ q8_21 : int 4 4 5 4 4 4 4 4 3 4 ...
## $ q8_22 : int 3 4 5 4 4 4 4 4 3 4 ...
## $ q8_23 : int 4 3 5 4 4 4 4 4 4 4 ...
## $ q8_24 : int 4 3 5 4 3 4 2 4 4 4 ...
## $ q8_25 : int 1 2 5 4 4 4 3 4 3 4 ...
## $ q8_26 : int 1 4 5 3 4 4 1 4 4 4 ...
## $ q8_27 : int 1 3 5 4 4 4 4 4 3 4 ...
## $ q8_28 : int 3 4 5 5 4 4 3 4 3 4 ...
## $ q8_29 : int 4 4 5 4 4 4 3 4 3 4 ...
## $ q8_30 : int 4 4 5 5 3 4 4 4 3 4 ...
## $ q8_31 : int 3 4 5 4 4 4 3 4 3 4 ...
## $ q8_32 : int 1 4 5 4 4 4 1 4 3 4 ...
## $ q8_33 : int 4 4 5 4 3 4 4 4 4 4 ...
## $ q8_34 : int 2 1 5 4 3 3 2 4 3 4 ...
## $ q8_35 : int 4 4 5 4 2 3 3 4 3 4 ...
## $ q9_1_1 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q9_1_2 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q9_1_3 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_4 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_5 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_6 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_7 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q9_1_8 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_9 : int 5 5 4 5 5 5 5 5 5 5 ...
## $ q9_1_10 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_11 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_12 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_13 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_14 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_15 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_16 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_17 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_18 : int 5 5 3 5 5 5 5 5 5 5 ...
## $ q9_1_19 : int 2 3 5 2 4 3 3 3 3 3 ...
## $ q9_1_20 : int 2 4 5 4 3 3 3 3 3 3 ...
## $ q9_1_21 : int 1 4 5 3 3 2 3 4 3 3 ...
## $ q9_1_22 : int 3 3 5 3 2 2 2 4 3 2 ...
## $ q9_1_23 : int 1 3 5 4 4 3 2 4 3 3 ...
## $ q9_1_24 : int 3 3 5 4 3 3 3 4 3 3 ...
## $ q9_1_25 : int 1 4 5 3 3 3 3 4 3 3 ...
## $ q9_1_26 : int 1 4 5 3 2 2 3 4 3 2 ...
## $ q9_1_27 : int 1 3 5 4 3 3 3 4 3 3 ...
## $ q9_1_28 : int 3 3 5 5 2 2 2 4 3 3 ...
## $ q9_1_29 : int 2 3 5 3 3 3 3 4 3 3 ...
## $ q9_1_30 : int 5 3 5 5 3 3 2 4 3 3 ...
## [list output truncated]
head(calgary_raw)
After loading the dataset, I inspected its structure and a few sample rows to understand what the data looked like. The survey contained around 10k responses and a large number of variables, most of which were coded as numeric values representing survey answers. I also noticed that some questions contained missing values. This showed that the dataset was large, contained many survey questions, and included missing values, so some preprocessing would be required before analysis.
The dataset contains many survey questions (139 columns), so I focused on the questions that talked about the satisfaction with municipal services. I selected services related to transportation, infrastructure, maintenance, parks, and social services.
calgary_sel <- calgary_raw %>%
select(
q9_1_10, # Transportation planning
q9_1_11, # Calgary Transit
q9_1_12, # Roads & infrastructure
q9_1_13, # Road maintenance
q9_1_14, # Spring road cleaning
q9_1_15, # Snow removal
q9_1_19, # Parks & open spaces
q9_1_21, # Social services
q9_1_24, # Recreation facilities
q9_1_28, # City land use planning
q9_1_35 # 311 service
)
Association rule mining treats each row as a complete transaction, so missing values can distort results. To avoid this, I removed rows with missing service ratings. I also changed the column names from a format like q1_1_10 to a more understandable format like TransitPlanning.
calgary_sel <- calgary_sel %>%
filter(if_all(everything(), ~ !is.na(.)))
colnames(calgary_sel ) <- c(
"TransitPlanning",
"TransitService",
"RoadInfrastructure",
"RoadMaintenance",
"SpringCleaning",
"SnowRemoval",
"Parks",
"SocialServices",
"RecreationFacilities",
"LandUsePlanning",
"Service311"
)
head(calgary_sel)
Before transforming the data, I checked how often each rating appears. This helped confirm that the Likert scale (1–5) is used consistently and gives an early sense of whether responses are skewed toward high, neutral, or low satisfaction.
summary(calgary_sel)
## TransitPlanning TransitService RoadInfrastructure RoadMaintenance
## Min. :1.000 Min. :1.00 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:3.00 1st Qu.:3.000 1st Qu.:3.000
## Median :4.000 Median :4.00 Median :4.000 Median :3.000
## Mean :3.737 Mean :3.85 Mean :3.765 Mean :3.582
## 3rd Qu.:5.000 3rd Qu.:5.00 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.00 Max. :5.000 Max. :5.000
## SpringCleaning SnowRemoval Parks SocialServices
## Min. :1.00 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.00 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000
## Median :4.00 Median :4.000 Median :4.000 Median :4.000
## Mean :3.95 Mean :3.641 Mean :4.015 Mean :3.792
## 3rd Qu.:5.00 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.00 Max. :5.000 Max. :5.000 Max. :5.000
## RecreationFacilities LandUsePlanning Service311
## Min. :1.000 Min. :1.000 Min. :1.00
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.00
## Median :4.000 Median :3.000 Median :4.00
## Mean :3.894 Mean :3.721 Mean :4.05
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.00
## Max. :5.000 Max. :5.000 Max. :5.00
The selected service variables all followed the same 1–5 Likert rating scale, which made them directly comparable across services. Ratings were generally skewed toward higher values, particularly for transportation, infrastructure, and maintenance-related services. In contrast, services such as social services and 311 displayed slightly more spread across the scale.
To make the results easier to interpret and suitable for association rule mining, I converted the 1–5 ratings into three categories:
Low (1–2)
Neutral (3)
High (4–5)
This also reduces noise while keeping the overall sentiment of each response.
calgary_labeled <- calgary_sel %>%
mutate(across(
everything(),
~ case_when(
. %in% c(1, 2) ~ paste0(cur_column(), "_low"),
. == 3 ~ paste0(cur_column(), "_neutral"),
. %in% c(4, 5) ~ paste0(cur_column(), "_high"),
TRUE ~ NA_character_
)
))
calgary_labeled <- calgary_labeled %>%
filter(if_all(everything(), ~ !is.na(.)))
unique(unlist(calgary_labeled))
## [1] "TransitPlanning_high" "TransitPlanning_neutral"
## [3] "TransitPlanning_low" "TransitService_high"
## [5] "TransitService_neutral" "TransitService_low"
## [7] "RoadInfrastructure_high" "RoadInfrastructure_neutral"
## [9] "RoadInfrastructure_low" "RoadMaintenance_high"
## [11] "RoadMaintenance_neutral" "RoadMaintenance_low"
## [13] "SpringCleaning_high" "SpringCleaning_neutral"
## [15] "SpringCleaning_low" "SnowRemoval_high"
## [17] "SnowRemoval_neutral" "SnowRemoval_low"
## [19] "Parks_low" "Parks_neutral"
## [21] "Parks_high" "SocialServices_low"
## [23] "SocialServices_high" "SocialServices_neutral"
## [25] "RecreationFacilities_neutral" "RecreationFacilities_high"
## [27] "RecreationFacilities_low" "LandUsePlanning_neutral"
## [29] "LandUsePlanning_high" "LandUsePlanning_low"
## [31] "Service311_low" "Service311_high"
## [33] "Service311_neutral"
table(unlist(calgary_labeled), useNA = "ifany")
##
## LandUsePlanning_high LandUsePlanning_low
## 4922 1335
## LandUsePlanning_neutral Parks_high
## 3745 6839
## Parks_low Parks_neutral
## 376 2787
## RecreationFacilities_high RecreationFacilities_low
## 5872 616
## RecreationFacilities_neutral RoadInfrastructure_high
## 3514 5212
## RoadInfrastructure_low RoadInfrastructure_neutral
## 1085 3705
## RoadMaintenance_high RoadMaintenance_low
## 4811 2084
## RoadMaintenance_neutral Service311_high
## 3107 7055
## Service311_low Service311_neutral
## 460 2487
## SnowRemoval_high SnowRemoval_low
## 5175 1892
## SnowRemoval_neutral SocialServices_high
## 2935 5095
## SocialServices_low SocialServices_neutral
## 909 3998
## SpringCleaning_high SpringCleaning_low
## 6473 567
## SpringCleaning_neutral TransitPlanning_high
## 2962 5104
## TransitPlanning_low TransitPlanning_neutral
## 1287 3611
## TransitService_high TransitService_low
## 5830 976
## TransitService_neutral
## 3196
High satisfaction appeared most frequently across services such as Parks, Service311, and SpringCleaning, while low satisfaction was less common overall. Neutral responses remained present for several services, which meant that there were a lot of mixed opinions.
At this stage, I removed neutral responses from the data. Neutral ratings were very common in the survey, but they do not clearly indicate either satisfaction or dissatisfaction. Since association rule mining works best when items represent clear signals, I decided to keep only low and high ratings.
After this, each respondent was represented by a set of satisfaction or dissatisfaction items that could be used directly for association rule mining.
calgary_long <- calgary_labeled %>%
mutate(respondent_id = row_number()) %>%
pivot_longer(
cols = -respondent_id,
names_to = "service",
values_to = "level"
) %>%
filter(!grepl("_neutral$", level)) %>%
select(respondent_id, level)
head(calgary_long)
After restructuring the data, I converted each respondent’s set of satisfaction and dissatisfaction items into a transaction format.
write.table(
calgary_long,
file = "calgary_baskets.csv",
sep = ",",
row.names = FALSE,
col.names = FALSE,
quote = FALSE
)
calgary_trans <- read.transactions(
"calgary_baskets.csv",
format = "single",
cols = c(1, 2),
sep = ","
)
summary(calgary_trans)
## transactions as itemMatrix in sparse format with
## 9948 rows (elements/itemsets/transactions) and
## 22 columns (items) and a density of 0.3380076
##
## most frequent items:
## Service311_high Parks_high SpringCleaning_high
## 7055 6839 6473
## RecreationFacilities_high TransitService_high (Other)
## 5872 5830 41906
##
## element (itemset/transaction) length distribution:
## sizes
## 1 2 3 4 5 6 7 8 9 10 11
## 122 207 261 362 641 1225 1815 2020 1695 1067 533
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 6.000 8.000 7.436 9.000 11.000
##
## includes extended item information - examples:
## labels
## 1 LandUsePlanning_high
## 2 LandUsePlanning_low
## 3 Parks_high
##
## includes extended transaction information - examples:
## transactionID
## 1 1
## 2 10
## 3 100
inspect(calgary_trans[1:10])
## items transactionID
## [1] {Parks_low,
## RoadInfrastructure_high,
## RoadMaintenance_high,
## Service311_low,
## SnowRemoval_high,
## SocialServices_low,
## SpringCleaning_high,
## TransitPlanning_high,
## TransitService_high} 1
## [2] {RoadInfrastructure_high,
## RoadMaintenance_high,
## SnowRemoval_high,
## SpringCleaning_high,
## TransitPlanning_high,
## TransitService_high} 10
## [3] {LandUsePlanning_high,
## Parks_high,
## RecreationFacilities_high,
## RoadInfrastructure_high,
## RoadMaintenance_high,
## Service311_high,
## SnowRemoval_high,
## SocialServices_high,
## SpringCleaning_high,
## TransitPlanning_high,
## TransitService_high} 100
## [4] {LandUsePlanning_high,
## Parks_high,
## RecreationFacilities_high,
## Service311_high,
## SocialServices_high} 1000
## [5] {LandUsePlanning_low,
## Parks_low,
## Service311_high,
## SnowRemoval_low,
## TransitPlanning_low,
## TransitService_high} 10000
## [6] {LandUsePlanning_high,
## Parks_high,
## RecreationFacilities_high,
## RoadMaintenance_low,
## Service311_high,
## SpringCleaning_high,
## TransitPlanning_high,
## TransitService_high} 10001
## [7] {RoadMaintenance_low} 10002
## [8] {LandUsePlanning_high,
## Parks_high,
## RecreationFacilities_high,
## RoadInfrastructure_low,
## RoadMaintenance_low,
## Service311_high,
## SocialServices_high} 1001
## [9] {LandUsePlanning_high,
## Parks_high,
## RecreationFacilities_high,
## RoadInfrastructure_high,
## Service311_high,
## SnowRemoval_low,
## SocialServices_high,
## TransitPlanning_low} 1002
## [10] {LandUsePlanning_low,
## RoadInfrastructure_high,
## RoadMaintenance_high,
## Service311_low,
## SnowRemoval_high,
## SocialServices_low,
## SpringCleaning_high,
## TransitPlanning_high,
## TransitService_high} 1003
size(calgary_trans)
## [1] 9 6 11 5 6 8 1 7 8 9 8 9 9 7 10 8 6 6 8 10 10 11 7 8
## [25] 6 8 7 10 8 6 5 6 9 6 6 6 8 7 9 5 9 7 9 9 11 8 8 11
## [49] 8 9 8 9 6 9 9 7 7 6 9 7 9 6 7 7 6 6 5 9 9 10 7 10
## [73] 10 7 8 10 8 8 7 6 6 7 7 6 6 9 10 8 6 8 9 8 10 8 10 6
## [97] 8 7 10 7 7 7 8 8 9 9 9 6 8 7 9 11 11 9 10 6 9 6 5 10
## [121] 8 8 8 6 10 10 6 6 10 8 9 9 7 7 8 8 6 8 8 7 7 9 9 8
## [145] 8 8 8 9 7 8 6 9 11 11 7 8 8 7 10 8 7 10 8 9 10 10 8 5
## [169] 9 11 7 6 8 9 5 8 9 10 10 8 9 8 9 7 11 8 6 6 11 6 6 7
## [193] 9 9 7 11 5 5 6 6 11 8 10 11 7 7 7 7 9 7 8 8 11 9 9 7
## [217] 6 10 8 9 11 10 10 7 6 8 7 6 5 8 9 7 8 6 7 9 7 8 11 8
## [241] 9 7 10 9 11 9 9 10 9 9 9 7 6 10 7 8 8 11 8 8 11 9 8 9
## [265] 11 8 8 9 9 9 8 10 8 7 8 7 10 6 9 8 8 6 10 10 11 9 7 9
## [289] 8 9 9 10 8 7 10 8 9 9 10 6 6 8 8 6 8 8 8 10 8 9 10 9
## [313] 8 9 11 6 11 8 9 8 8 9 8 10 9 9 10 7 7 8 10 8 11 6 7 10
## [337] 9 9 7 7 8 7 6 10 7 6 9 10 5 9 8 5 9 8 10 8 9 8 8 10
## [361] 8 7 10 9 10 8 7 8 8 7 9 6 8 7 9 10 10 9 10 6 11 11 8 9
## [385] 8 6 6 11 6 9 10 5 7 7 7 9 6 8 10 8 8 9 8 8 8 7 8 10
## [409] 9 6 7 8 10 8 10 10 9 8 7 7 8 9 11 8 8 9 8 8 10 10 10 7
## [433] 8 7 9 7 7 8 9 9 9 9 9 9 7 9 7 8 6 8 7 8 8 6 9 10
## [457] 8 9 9 10 7 10 6 7 7 8 7 10 7 8 8 11 9 7 8 9 10 10 9 8
## [481] 8 9 9 10 9 7 8 9 8 7 8 8 10 9 10 10 7 11 8 6 9 7 6 8
## [505] 11 9 7 6 7 10 6 9 7 8 7 7 7 7 10 9 9 6 8 10 10 8 6 8
## [529] 7 7 11 8 10 11 10 10 6 7 10 10 6 7 7 7 8 5 8 10 8 9 8 6
## [553] 8 6 6 7 5 8 9 9 6 9 9 8 8 8 11 7 8 8 9 6 9 8 5 5
## [577] 8 9 10 7 6 9 7 9 9 9 10 11 7 7 10 9 9 10 7 9 8 5 5 8
## [601] 8 10 8 7 11 10 8 7 10 9 7 11 8 6 8 8 7 6 8 9 9 9 6 11
## [625] 9 6 7 10 9 6 8 8 6 7 5 8 5 8 6 7 9 7 7 8 6 8 8 7
## [649] 9 7 8 9 11 10 9 6 9 7 10 7 7 6 6 8 9 7 10 7 9 9 5 5
## [673] 7 7 5 10 6 7 10 8 9 6 5 8 7 8 9 9 7 6 6 9 8 9 8 6
## [697] 7 8 9 10 5 5 7 6 8 7 7 7 10 9 7 7 8 6 6 7 8 6 7 10
## [721] 5 8 6 9 8 7 8 8 8 8 8 9 6 10 9 9 6 9 11 6 10 6 7 10
## [745] 7 8 10 7 9 8 7 7 9 9 7 6 8 10 8 8 6 9 8 10 7 10 7 10
## [769] 8 6 8 10 7 5 7 6 6 8 8 9 7 6 8 8 9 11 7 7 8 6 8 9
## [793] 7 8 6 6 6 9 8 11 7 9 6 9 7 9 8 9 8 11 7 8 7 10 7 8
## [817] 9 9 11 5 7 6 8 9 7 10 9 8 8 7 10 9 8 8 11 7 10 8 10 7
## [841] 6 9 9 11 5 7 7 10 9 8 8 6 9 7 6 9 7 8 9 10 10 7 10 10
## [865] 7 6 7 9 8 9 7 8 5 8 11 10 7 9 9 7 8 11 11 5 8 9 9 7
## [889] 9 9 10 10 7 7 8 8 9 8 8 9 10 9 7 9 7 8 11 8 8 7 10 8
## [913] 9 9 8 9 8 7 5 8 8 7 7 9 11 10 7 9 9 6 9 8 8 7 10 10
## [937] 5 8 10 7 9 9 7 7 8 10 8 7 9 9 8 8 8 7 11 7 7 6 10 8
## [961] 10 7 10 7 5 9 5 9 7 7 7 9 9 10 7 9 10 8 10 8 6 8 7 7
## [985] 10 9 8 9 10 7 8 10 8 8 6 6 7 8 9 10 10 9 7 7 10 8 7 7
## [1009] 8 7 11 10 8 9 7 8 9 9 9 10 5 8 6 6 8 5 7 9 10 11 8 9
## [1033] 8 7 10 11 10 5 8 8 11 9 7 7 9 6 8 8 9 8 8 9 6 8 7 6
## [1057] 11 10 8 6 10 11 10 8 7 7 9 8 8 9 8 7 9 8 10 10 9 8 5 11
## [1081] 9 7 9 10 11 11 9 9 9 7 9 10 8 6 8 10 8 9 6 9 8 8 9 5
## [1105] 6 8 6 8 9 7 7 7 7 9 8 7 8 8 10 6 10 8 9 7 6 7 5 10
## [1129] 11 9 7 7 7 10 10 10 8 7 7 8 8 7 9 6 11 11 10 7 7 6 7 10
## [1153] 7 8 11 11 5 7 9 6 6 11 10 7 8 11 8 10 6 5 11 10 7 9 6 10
## [1177] 10 11 8 9 8 7 11 11 11 6 7 9 11 8 9 5 6 6 11 8 8 6 6 10
## [1201] 6 9 8 8 8 6 10 8 9 9 9 5 7 8 8 8 7 7 9 8 6 8 6 7
## [1225] 8 6 8 9 7 8 6 10 9 7 9 10 6 8 7 7 8 9 9 5 8 9 7 7
## [1249] 6 8 9 8 8 6 9 9 6 10 6 7 9 10 9 8 9 8 11 8 8 10 5 10
## [1273] 7 6 8 5 9 8 7 8 10 8 8 8 8 10 8 7 11 6 7 7 9 8 6 8
## [1297] 9 9 9 10 6 9 6 7 9 8 7 9 9 6 8 10 9 5 8 7 10 7 7 6
## [1321] 8 6 7 7 9 9 9 9 9 8 10 7 8 7 9 7 7 8 6 9 6 9 9 6
## [1345] 6 9 7 7 9 7 7 11 8 7 7 9 7 10 8 7 7 8 9 6 6 7 8 5
## [1369] 7 10 7 8 7 7 8 10 11 8 6 7 6 7 8 9 7 6 7 7 10 8 8 7
## [1393] 5 7 9 7 8 7 8 10 6 9 11 10 5 10 7 5 11 8 10 10 9 7 9 7
## [1417] 9 7 9 10 6 8 8 8 10 6 7 10 8 8 6 9 6 6 8 7 7 10 8 8
## [1441] 9 6 11 10 10 11 6 7 8 7 11 9 6 10 8 7 6 7 8 8 9 8 9 8
## [1465] 7 8 6 7 7 8 8 9 8 8 7 9 6 7 10 6 7 7 9 8 11 8 10 7
## [1489] 11 9 11 5 8 8 10 8 11 8 7 6 8 11 11 8 9 8 7 11 9 8 7 9
## [1513] 8 8 6 8 8 7 7 7 9 6 7 5 9 8 7 10 8 11 7 6 8 5 7 7
## [1537] 8 9 7 6 8 8 8 7 7 9 11 8 8 7 8 8 8 8 7 10 6 7 8 9
## [1561] 7 8 10 8 8 8 9 7 8 8 9 8 8 9 11 9 7 7 7 9 9 6 11 10
## [1585] 6 9 9 5 8 9 6 8 7 11 9 6 8 6 7 9 10 6 7 9 6 11 7 6
## [1609] 8 10 9 8 8 6 10 6 5 9 7 10 9 8 9 7 6 9 10 9 7 7 11 8
## [1633] 9 8 10 5 7 10 10 7 11 8 7 7 9 8 8 8 9 9 10 7 6 8 9 10
## [1657] 8 6 7 7 8 7 9 6 10 8 10 8 9 10 7 11 10 9 7 9 8 9 9 6
## [1681] 9 7 7 8 11 6 10 10 7 7 7 9 7 9 9 8 10 7 10 8 8 8 6 5
## [1705] 7 5 7 9 10 7 9 7 6 9 9 10 6 7 8 10 10 9 8 6 9 9 7 7
## [1729] 8 11 7 7 9 9 10 10 7 6 7 8 7 7 9 10 6 7 9 9 8 8 8 6
## [1753] 6 7 9 7 7 9 10 11 7 10 10 9 6 11 7 10 10 5 9 7 7 6 7 8
## [1777] 8 6 11 10 7 6 8 9 10 7 9 11 6 8 8 8 6 5 7 8 8 7 9 10
## [1801] 11 9 11 11 10 6 10 7 8 11 8 8 7 7 10 9 10 10 8 8 10 8 6 8
## [1825] 6 6 7 8 6 10 8 9 7 6 8 8 6 9 8 10 10 10 6 7 9 7 10 5
## [1849] 10 8 8 10 7 8 10 8 8 8 8 10 8 10 10 10 7 8 10 7 9 7 7 8
## [1873] 6 7 9 9 7 9 7 8 8 9 9 10 8 7 10 10 9 7 8 10 10 10 9 9
## [1897] 10 10 9 7 10 7 8 7 9 9 7 7 8 8 8 9 10 8 10 9 10 7 8 7
## [1921] 10 10 9 9 9 9 10 8 8 7 8 7 11 10 8 8 8 11 8 6 9 6 8 6
## [1945] 8 10 7 8 9 9 6 7 6 8 10 9 5 6 6 7 8 10 9 5 8 9 9 9
## [1969] 7 8 10 10 10 9 8 10 6 7 9 10 11 9 7 8 9 9 9 8 8 9 11 8
## [1993] 7 10 8 8 10 9 9 9 7 7 9 10 8 6 11 8 7 9 10 8 10 8 8 9
## [2017] 8 10 7 7 10 8 10 9 7 10 10 9 7 10 9 7 7 9 11 8 6 7 7 9
## [2041] 6 6 8 8 9 10 7 7 11 8 6 6 11 6 7 6 8 9 8 10 10 9 10 8
## [2065] 10 7 6 8 10 7 9 8 9 8 8 6 10 9 11 9 6 10 9 8 9 9 10 9
## [2089] 8 8 7 11 7 9 9 6 11 9 7 8 8 7 8 9 9 8 9 8 9 8 10 7
## [2113] 7 9 11 11 9 8 8 8 6 10 7 6 9 7 6 11 7 7 8 10 10 7 8 9
## [2137] 8 11 8 8 6 8 7 6 8 8 7 7 10 9 8 9 9 6 9 10 8 10 7 9
## [2161] 9 8 8 6 10 9 8 7 6 6 7 9 10 9 5 8 8 8 8 6 10 6 6 8
## [2185] 7 11 8 6 8 7 5 8 8 7 5 9 7 8 8 7 8 6 7 10 10 8 9 5
## [2209] 5 5 6 9 9 9 10 8 10 7 9 8 9 7 8 8 8 5 8 8 8 9 8 9
## [2233] 6 8 7 7 8 9 9 8 9 9 8 5 11 7 7 10 7 9 7 6 7 9 9 7
## [2257] 10 10 9 6 7 7 6 8 8 8 7 5 7 7 10 9 7 7 6 10 8 6 9 5
## [2281] 6 7 11 10 7 8 10 7 7 8 10 5 8 5 6 5 6 9 8 9 7 6 7 10
## [2305] 9 9 8 9 8 5 9 7 9 6 9 11 6 6 8 11 8 9 9 8 9 8 6 11
## [2329] 8 7 11 9 8 9 9 7 8 7 7 9 9 8 7 9 7 10 11 10 9 7 7 9
## [2353] 5 8 6 10 7 7 10 9 10 8 10 9 8 7 6 10 6 8 7 9 9 9 9 9
## [2377] 10 9 10 11 9 8 7 9 6 9 10 11 8 9 7 8 9 5 7 7 6 6 7 11
## [2401] 8 7 6 6 9 8 8 5 9 7 9 10 7 8 8 10 8 10 6 11 9 8 7 8
## [2425] 7 9 8 8 10 11 5 10 7 9 9 7 9 8 9 7 9 9 9 7 7 7 9 7
## [2449] 8 7 7 8 7 7 6 8 9 8 6 10 8 7 6 11 10 6 9 8 9 7 7 8
## [2473] 8 7 6 10 6 8 10 7 9 9 9 11 8 9 7 5 10 11 8 8 10 10 6 9
## [2497] 8 8 7 8 8 9 10 5 10 11 11 10 11 8 6 7 7 9 8 8 9 10 8 7
## [2521] 8 8 10 8 8 9 8 8 8 9 8 11 8 10 7 5 9 9 6 8 9 8 11 9
## [2545] 8 8 7 6 6 9 6 9 10 6 10 8 9 9 10 10 7 8 7 11 7 7 7 11
## [2569] 10 10 8 8 10 8 8 8 9 6 7 7 9 7 10 7 9 7 8 10 9 9 9 9
## [2593] 7 9 8 6 8 9 10 8 8 8 9 10 9 11 7 8 5 9 8 9 9 8 7 7
## [2617] 8 10 7 9 8 7 8 7 6 8 8 7 8 9 7 5 7 10 10 7 7 6 8 9
## [2641] 7 9 11 8 5 9 6 6 8 9 8 8 5 8 9 7 7 5 8 7 9 7 11 7
## [2665] 7 6 7 10 10 7 8 9 5 11 9 7 6 6 9 9 9 9 8 10 5 8 8 8
## [2689] 9 10 8 9 6 8 6 11 9 9 7 9 9 9 7 7 8 7 6 7 5 9 9 8
## [2713] 8 7 7 10 6 8 8 10 9 8 9 8 8 7 7 8 9 10 5 9 10 11 8 8
## [2737] 8 9 7 8 5 6 10 11 7 7 7 8 7 7 7 9 10 10 8 7 8 9 11 9
## [2761] 6 6 10 8 9 9 8 10 10 7 6 9 7 9 8 9 8 10 7 9 6 10 10 8
## [2785] 8 8 9 7 7 9 7 6 7 7 7 8 10 6 7 9 8 9 10 6 9 7 10 9
## [2809] 7 9 9 9 9 7 6 10 7 7 11 9 7 7 11 8 5 9 10 7 10 7 6 8
## [2833] 7 7 8 9 8 11 11 7 9 10 11 6 10 7 7 8 9 10 8 8 8 8 8 9
## [2857] 8 9 7 8 7 9 10 10 8 10 10 10 8 8 8 8 11 9 8 6 6 9 8 7
## [2881] 7 8 8 8 9 10 9 8 6 9 9 9 10 6 8 9 7 10 8 11 7 10 6 7
## [2905] 8 5 9 8 8 9 7 7 11 6 8 7 6 9 8 7 9 8 7 10 7 8 10 5
## [2929] 9 9 11 7 10 9 8 5 10 9 7 9 10 11 5 7 10 10 7 10 9 9 10 8
## [2953] 6 8 8 9 11 10 7 8 7 8 9 8 9 8 8 6 9 8 8 7 8 11 8 6
## [2977] 6 9 10 6 8 8 7 8 9 7 8 8 8 10 7 5 8 9 9 8 7 7 9 6
## [3001] 9 8 9 9 7 10 9 8 7 7 9 11 8 10 11 7 8 9 11 9 11 6 11 7
## [3025] 9 10 6 8 6 9 5 9 9 7 9 9 8 10 9 10 7 10 8 10 9 9 9 8
## [3049] 6 8 6 6 9 8 9 7 10 6 9 7 11 7 8 9 9 7 7 10 7 6 5 7
## [3073] 10 10 8 10 9 10 8 7 10 9 7 9 8 8 9 9 9 8 7 8 11 9 11 11
## [3097] 9 7 9 10 8 9 8 8 9 6 9 10 10 8 11 7 7 9 10 10 9 9 10 9
## [3121] 10 7 7 7 8 7 10 6 10 6 7 11 9 11 7 8 8 8 8 8 8 6 8 7
## [3145] 7 7 10 10 6 7 8 6 8 8 9 10 7 10 7 9 6 8 8 9 7 7 10 11
## [3169] 10 11 9 9 9 9 10 9 7 6 9 8 11 7 11 9 9 8 8 6 6 10 7 7
## [3193] 6 7 9 5 7 8 6 8 7 7 10 8 10 9 6 7 7 10 10 6 9 9 6 9
## [3217] 7 8 9 7 9 5 11 10 5 10 9 9 9 10 6 8 9 9 10 5 6 8 9 6
## [3241] 9 7 6 8 9 8 7 7 6 9 9 7 9 7 7 9 7 7 7 6 5 7 8 8
## [3265] 10 10 7 7 11 6 7 10 9 7 9 9 7 11 6 8 7 7 8 10 7 7 9 8
## [3289] 6 7 8 9 8 6 10 10 10 8 11 7 9 6 6 9 7 11 11 5 10 5 8 7
## [3313] 7 11 6 9 11 9 8 7 8 10 7 8 7 6 8 11 8 8 6 8 9 6 11 8
## [3337] 10 10 8 8 9 8 10 7 10 6 11 9 6 6 7 6 11 7 9 10 8 6 8 8
## [3361] 8 9 9 6 8 8 9 9 9 8 7 9 11 7 9 7 9 6 8 10 7 9 11 9
## [3385] 7 7 9 8 11 9 5 8 11 7 8 7 10 10 10 8 8 9 6 9 9 8 8 11
## [3409] 9 11 8 8 9 9 7 9 9 7 8 10 7 8 11 9 8 8 8 9 10 7 8 8
## [3433] 7 8 10 7 9 7 10 7 9 7 10 6 10 9 9 9 7 5 10 6 9 10 10 9
## [3457] 8 7 9 5 8 7 8 8 8 10 6 6 7 9 5 8 9 8 8 8 9 9 9 5
## [3481] 10 10 9 6 6 8 9 11 8 9 9 7 8 5 10 6 9 10 9 8 7 7 8 11
## [3505] 10 10 9 9 7 6 9 10 7 6 9 7 11 11 8 7 9 6 8 9 8 10 6 7
## [3529] 9 6 8 9 8 9 8 10 7 8 7 10 9 10 7 8 10 5 8 7 10 7 7 7
## [3553] 7 8 7 10 8 5 8 11 8 8 9 7 8 6 8 9 7 7 6 9 9 6 8 8
## [3577] 9 10 9 9 6 9 10 8 6 11 6 7 10 9 8 6 8 5 9 10 7 7 6 8
## [3601] 9 8 9 8 7 10 8 7 8 8 7 8 8 11 8 11 11 9 8 6 9 8 6 9
## [3625] 7 10 9 9 9 9 5 7 9 9 10 11 9 8 10 5 9 9 10 7 7 10 10 10
## [3649] 7 8 8 10 5 7 10 10 7 8 7 8 10 6 7 8 9 11 7 10 9 10 8 8
## [3673] 8 8 7 7 11 10 9 9 7 9 9 9 10 7 10 7 8 7 8 5 8 6 8 7
## [3697] 10 8 10 9 8 9 6 9 8 7 6 6 10 9 7 9 9 6 8 11 8 8 8 7
## [3721] 11 8 8 10 10 6 7 9 10 8 9 9 6 6 10 7 8 5 7 8 11 8 9 8
## [3745] 9 8 8 6 7 9 8 10 7 8 8 9 9 10 8 9 10 9 10 6 8 9 8 10
## [3769] 7 7 7 7 5 7 9 8 9 10 8 10 6 10 9 9 9 6 6 9 8 8 7 10
## [3793] 10 6 7 7 11 5 6 6 7 7 9 10 9 6 6 8 11 9 10 7 7 8 8 7
## [3817] 7 7 6 8 9 9 10 6 10 8 7 10 8 8 6 8 8 9 7 9 8 7 9 9
## [3841] 7 9 6 10 9 9 11 9 8 5 7 8 9 8 8 9 7 8 9 7 6 10 8 9
## [3865] 5 11 10 11 7 7 11 10 11 11 9 10 7 6 10 7 7 8 10 7 11 11 5 8
## [3889] 8 7 7 9 7 6 7 9 8 9 6 9 8 9 8 8 6 7 9 9 9 9 10 8
## [3913] 7 7 7 8 9 7 9 11 10 10 7 8 7 7 6 9 6 8 8 10 10 9 9 7
## [3937] 11 11 8 7 5 7 7 10 7 7 10 7 8 8 8 10 9 8 6 8 6 8 10 9
## [3961] 7 5 5 8 8 7 10 8 11 8 6 8 9 6 10 8 8 9 9 7 8 8 11 7
## [3985] 5 7 9 10 11 10 10 5 6 9 6 9 7 8 8 8 6 7 11 8 9 8 6 7
## [4009] 7 9 7 10 7 5 7 10 10 8 6 11 11 7 10 6 11 9 10 7 9 6 8 8
## [4033] 10 5 9 7 8 7 7 9 6 7 7 9 7 10 7 8 9 9 7 9 8 8 8 9
## [4057] 7 8 8 8 7 7 6 8 8 7 6 8 8 10 6 8 11 6 9 5 7 7 10 10
## [4081] 9 8 6 5 9 7 7 9 10 8 7 7 10 7 8 8 6 11 7 10 8 9 9 10
## [4105] 8 9 11 6 10 6 7 5 9 7 9 7 9 8 7 9 8 8 10 7 7 10 5 8
## [4129] 6 7 6 7 8 6 8 8 11 10 10 10 10 6 7 8 6 10 10 10 9 8 10 8
## [4153] 9 9 8 9 10 10 7 6 8 8 6 10 8 9 9 7 9 7 9 6 8 8 8 8
## [4177] 8 10 8 10 9 8 7 7 7 10 6 6 8 5 8 5 10 8 8 7 8 11 6 10
## [4201] 8 10 11 5 7 8 9 6 8 9 8 10 8 10 7 11 9 8 5 10 9 8 10 11
## [4225] 9 8 10 6 9 9 8 9 7 7 6 7 8 7 8 11 8 10 6 7 8 7 10 10
## [4249] 10 6 9 5 10 9 7 5 8 6 8 9 10 10 9 9 6 6 11 9 8 7 7 8
## [4273] 8 5 9 8 9 7 9 7 9 7 6 7 6 7 9 8 5 10 6 11 7 10 5 7
## [4297] 8 6 6 9 9 10 11 8 11 7 10 8 10 11 8 9 8 11 10 6 9 7 6 9
## [4321] 8 8 7 9 7 8 6 5 6 6 8 10 7 8 8 9 10 8 6 8 10 8 8 8
## [4345] 11 8 11 9 8 10 7 7 10 7 7 9 8 6 10 10 8 10 7 11 7 7 8 7
## [4369] 7 8 7 7 8 7 10 7 11 8 6 9 8 6 9 9 10 7 8 6 7 11 6 6
## [4393] 8 8 8 8 10 8 6 8 8 10 10 6 7 8 6 7 7 7 8 7 7 7 9 11
## [4417] 8 9 7 6 7 7 5 8 10 10 9 8 6 7 8 6 7 8 11 9 7 8 9 6
## [4441] 8 7 8 7 8 8 10 8 7 9 8 9 6 11 7 8 6 10 6 6 9 7 8 7
## [4465] 6 6 9 9 9 10 11 10 10 7 6 11 7 8 11 8 7 8 10 8 7 10 9 8
## [4489] 7 7 9 8 10 9 8 7 11 6 9 6 6 6 9 8 8 9 6 11 6 8 8 10
## [4513] 8 9 7 7 8 7 9 9 8 8 7 7 9 7 8 8 8 9 8 8 9 9 9 10
## [4537] 11 7 10 9 8 10 10 8 9 9 7 9 9 8 6 7 8 10 9 5 9 10 8 7
## [4561] 8 11 8 6 10 9 11 9 11 7 9 8 9 9 10 7 7 8 9 6 9 11 8 6
## [4585] 8 8 7 9 5 7 7 6 7 10 11 9 6 9 6 8 6 10 11 6 8 8 8 11
## [4609] 10 10 6 9 7 5 8 6 6 6 8 10 9 9 8 9 8 11 9 8 8 9 8 8
## [4633] 6 9 9 9 9 7 9 7 9 7 6 9 11 5 6 9 7 7 6 7 8 8 7 6
## [4657] 8 11 7 5 6 7 9 9 11 9 11 6 6 6 9 8 8 11 7 8 7 10 8 8
## [4681] 9 9 7 8 8 10 7 7 11 10 8 9 8 6 5 9 10 10 6 11 7 11 7 5
## [4705] 8 8 8 11 7 9 6 8 10 9 6 7 11 8 6 7 6 10 10 8 8 9 8 8
## [4729] 7 10 10 7 9 8 8 9 9 9 11 8 8 8 7 8 7 5 7 9 5 9 10 8
## [4753] 6 8 10 7 7 8 7 7 5 10 8 9 9 6 10 7 9 6 8 9 9 8 9 9
## [4777] 9 7 10 9 11 6 9 8 6 7 9 8 7 7 5 7 10 7 9 10 9 5 8 6
## [4801] 6 10 8 7 9 8 9 8 9 5 7 10 9 10 8 9 7 6 9 7 9 8 9 7
## [4825] 8 5 10 9 8 8 9 9 8 11 11 7 10 6 6 8 8 7 9 7 8 6 5 11
## [4849] 6 9 7 8 9 10 10 7 9 8 8 9 6 8 8 10 7 6 6 6 10 6 9 11
## [4873] 8 6 5 8 7 8 6 7 8 6 11 11 7 7 7 8 9 11 11 5 5 8 8 10
## [4897] 10 11 10 9 8 8 10 11 7 10 6 7 8 5 8 8 7 9 5 10 8 9 9 6
## [4921] 8 5 9 8 9 7 7 8 6 8 7 7 9 7 9 7 9 7 7 9 8 8 7 10
## [4945] 11 9 9 7 11 9 9 11 9 8 7 6 6 7 7 7 9 8 8 9 7 7 8 10
## [4969] 11 7 9 8 7 9 7 8 7 8 9 7 7 9 8 9 6 10 6 8 8 7 7 8
## [4993] 8 10 7 9 8 11 9 10 10 10 8 11 7 6 10 8 8 6 10 11 6 8 6 6
## [5017] 8 8 9 5 9 10 10 8 8 8 8 7 10 9 10 6 11 10 8 9 10 7 8 8
## [5041] 6 10 9 8 9 10 6 10 7 7 11 7 8 8 8 10 7 8 11 6 6 7 8 8
## [5065] 10 9 7 7 7 11 6 8 8 11 8 8 9 9 9 7 8 9 5 8 8 6 8 8
## [5089] 11 11 9 8 8 8 7 7 9 6 6 9 9 10 7 8 9 7 9 9 9 8 6 6
## [5113] 6 9 8 9 7 8 8 9 7 8 9 6 6 7 9 8 7 6 8 9 10 7 9 9
## [5137] 10 9 10 9 9 9 9 8 11 6 9 8 6 11 9 9 7 7 10 8 8 9 11 8
## [5161] 7 10 8 6 5 5 10 8 5 7 10 6 8 8 6 9 7 9 9 6 6 7 7 10
## [5185] 6 6 8 8 10 9 6 9 7 10 7 9 9 10 6 8 7 6 9 8 7 9 6 9
## [5209] 9 7 11 10 5 5 7 8 8 7 9 10 6 7 8 7 9 9 6 8 10 8 6 8
## [5233] 11 8 7 9 6 6 8 9 5 8 6 8 9 6 7 7 8 11 7 8 11 8 9 6
## [5257] 8 8 11 8 6 7 7 11 11 9 7 9 8 5 6 5 6 8 8 9 10 9 9 6
## [5281] 11 9 9 6 8 10 11 6 7 9 8 7 8 9 7 8 10 9 8 9 7 10 9 10
## [5305] 7 7 11 7 10 7 11 9 8 6 7 6 6 9 7 7 10 5 7 8 6 9 11 8
## [5329] 10 10 7 9 9 8 7 7 7 9 6 7 8 7 7 8 8 8 9 8 8 10 8 11
## [5353] 8 7 9 11 8 7 7 8 8 7 10 9 6 8 8 8 7 9 7 8 8 8 8 7
## [5377] 8 6 8 8 8 10 7 9 8 8 10 6 7 8 7 10 11 8 10 10 7 10 11 11
## [5401] 10 9 8 8 10 6 10 6 7 6 8 6 6 9 7 7 7 8 11 9 9 7 9 10
## [5425] 7 6 8 7 9 7 8 7 9 9 6 9 7 8 10 6 6 7 8 8 5 9 8 9
## [5449] 7 8 8 9 7 10 6 9 9 7 7 9 9 9 11 9 7 10 5 9 8 8 7 10
## [5473] 7 7 6 7 6 10 9 8 8 9 7 6 9 9 8 8 7 8 6 8 6 9 8 9
## [5497] 10 10 8 7 11 5 9 8 9 7 7 7 7 6 7 9 10 9 11 9 9 10 9 9
## [5521] 6 7 6 7 8 10 8 5 10 6 10 7 9 10 11 8 7 10 8 9 5 8 8 8
## [5545] 9 9 9 5 6 7 6 9 11 5 6 6 7 11 9 6 8 9 8 7 5 8 9 11
## [5569] 6 9 9 8 9 7 8 8 8 8 11 5 9 7 11 7 7 10 6 8 6 6 7 10
## [5593] 7 7 9 9 8 6 7 11 6 11 7 11 9 6 10 11 9 11 5 8 11 9 11 8
## [5617] 5 9 11 8 5 8 7 9 11 6 7 10 11 8 5 9 7 6 9 10 5 5 7 9
## [5641] 9 10 9 11 9 11 10 10 9 8 9 8 6 10 9 8 7 7 10 9 6 9 6 8
## [5665] 10 8 9 9 6 7 7 7 8 6 9 10 6 9 8 11 7 6 10 6 11 10 8 11
## [5689] 7 11 9 6 11 8 8 10 7 9 10 7 11 8 8 7 7 9 7 10 7 7 9 6
## [5713] 8 10 10 11 10 6 11 5 10 7 9 10 11 8 5 8 11 6 8 7 7 8 11 7
## [5737] 9 8 7 10 8 6 6 7 8 8 11 6 7 7 10 8 8 8 10 10 11 10 5 9
## [5761] 10 9 8 7 10 9 8 7 10 10 7 7 8 7 7 7 7 10 6 11 8 8 8 10
## [5785] 7 11 7 11 11 7 6 8 10 8 10 6 9 9 6 10 8 7 9 6 6 7 7 10
## [5809] 7 6 7 6 7 9 9 6 8 11 8 10 7 8 7 9 6 7 6 9 7 8 8 6
## [5833] 10 9 10 8 11 8 7 9 10 10 10 7 8 7 8 7 8 6 9 6 7 9 7 10
## [5857] 7 6 7 8 9 7 7 9 8 7 8 9 6 9 9 8 6 8 11 7 9 11 8 8
## [5881] 9 7 5 8 9 9 10 10 10 7 7 9 10 6 10 9 10 8 8 9 7 7 8 9
## [5905] 8 11 9 11 8 6 9 7 8 7 7 10 11 6 6 6 9 9 9 8 9 8 11 7
## [5929] 9 9 7 8 8 7 8 9 9 7 5 8 10 7 8 9 9 7 9 10 7 8 9 8
## [5953] 9 8 7 6 9 7 5 7 8 9 8 7 8 7 8 6 8 8 9 8 9 8 8 10
## [5977] 8 5 9 9 8 9 8 9 9 9 8 7 7 9 5 8 9 7 7 6 7 8 8 8
## [6001] 6 6 8 7 9 7 9 8 9 8 9 8 11 9 7 10 9 9 9 8 8 9 8 11
## [6025] 8 7 9 7 9 6 7 10 6 10 8 10 10 10 8 8 9 8 7 7 8 10 10 7
## [6049] 9 10 8 6 9 11 7 5 5 8 9 7 9 8 5 9 6 8 9 9 8 8 8 8
## [6073] 6 7 8 7 8 9 9 8 5 8 8 7 8 11 11 8 10 9 9 5 10 10 7 6
## [6097] 10 8 8 7 9 8 9 8 9 6 6 10 9 11 8 8 7 6 7 8 6 8 11 8
## [6121] 9 8 6 5 7 6 10 8 9 10 6 8 8 9 8 6 10 9 7 7 6 9 6 9
## [6145] 11 7 7 8 9 9 6 6 7 9 10 9 9 11 8 8 7 6 6 11 10 9 9 7
## [6169] 7 7 8 10 7 8 6 8 8 10 8 8 7 9 10 8 9 10 9 9 11 7 8 10
## [6193] 7 7 9 10 9 11 9 6 6 7 8 8 11 8 9 9 8 6 7 9 7 6 6 5
## [6217] 6 6 8 8 8 7 10 10 9 8 9 9 9 6 11 9 6 8 7 6 9 6 8 6
## [6241] 8 8 8 9 8 7 6 9 7 6 9 7 11 6 10 8 9 9 10 7 7 7 9 8
## [6265] 6 9 8 7 8 9 6 9 10 6 10 8 10 5 8 9 8 9 7 6 9 8 11 11
## [6289] 9 7 10 5 7 10 10 8 9 10 9 8 7 6 10 9 6 7 6 8 9 11 8 10
## [6313] 10 8 8 9 6 10 9 7 6 6 8 8 10 10 11 6 11 7 5 6 8 9 10 6
## [6337] 10 8 7 7 11 10 7 8 8 8 8 6 6 8 8 7 7 6 9 7 9 9 7 8
## [6361] 7 10 6 8 9 10 7 9 8 8 10 10 7 11 9 7 7 7 7 7 9 9 9 9
## [6385] 9 7 8 8 10 9 6 10 8 8 6 8 8 10 7 8 9 7 8 7 8 6 8 10
## [6409] 6 10 6 7 8 11 9 10 8 11 6 9 9 7 7 6 6 6 10 11 10 7 7 7
## [6433] 9 8 6 9 9 9 7 9 9 7 9 5 9 9 7 7 5 7 8 8 8 7 9 7
## [6457] 8 8 11 6 8 6 8 8 11 8 9 6 9 8 8 6 7 6 9 9 7 10 9 7
## [6481] 10 7 7 6 5 8 7 7 8 8 8 10 7 11 7 10 11 9 6 9 9 8 8 6
## [6505] 7 6 6 8 7 6 5 8 8 8 7 5 6 10 7 9 7 7 7 6 7 10 6 7
## [6529] 8 7 7 10 9 7 9 10 7 9 11 11 8 9 7 8 10 9 6 11 5 8 10 7
## [6553] 8 8 8 9 9 8 8 9 10 7 10 7 6 9 7 7 9 8 11 8 6 9 8 8
## [6577] 6 9 10 6 11 10 7 8 10 10 8 5 9 8 10 10 8 7 11 9 6 8 11 8
## [6601] 8 8 7 9 8 8 8 7 6 10 11 11 7 7 6 8 8 10 8 7 9 7 10 7
## [6625] 8 9 11 7 9 8 8 7 7 8 9 7 9 6 7 6 7 8 7 6 10 9 8 7
## [6649] 7 6 10 9 8 8 10 10 6 10 9 8 8 8 6 7 10 10 10 9 9 8 7 8
## [6673] 9 9 10 8 8 11 6 10 7 11 7 7 7 9 6 8 8 7 6 11 7 7 9 11
## [6697] 7 8 6 8 8 6 7 5 10 8 9 8 8 6 9 8 7 8 6 9 8 9 6 6
## [6721] 9 10 9 8 7 7 8 8 7 7 7 7 10 7 7 6 7 6 8 6 10 8 9 9
## [6745] 8 6 5 6 7 6 6 11 11 10 7 9 8 7 9 8 10 7 8 9 7 7 11 8
## [6769] 9 8 8 9 6 8 8 7 10 8 7 9 6 7 6 11 6 6 9 6 8 7 10 7
## [6793] 10 10 9 8 7 8 10 9 9 9 8 6 6 7 10 7 7 8 8 9 7 6 10 7
## [6817] 5 10 6 7 6 8 11 7 11 8 7 7 6 8 9 9 6 7 8 7 8 8 8 6
## [6841] 10 7 6 8 10 8 9 8 7 7 9 7 9 8 9 8 8 9 7 8 9 11 6 9
## [6865] 11 9 7 7 5 8 11 7 10 9 6 9 10 7 6 7 11 6 8 8 9 8 9 8
## [6889] 8 7 10 7 8 7 8 7 8 9 7 7 8 8 10 9 7 10 9 10 6 7 7 8
## [6913] 6 10 9 6 9 8 10 10 8 6 6 8 11 8 6 8 8 8 8 6 5 8 7 8
## [6937] 8 8 6 6 9 8 7 8 8 5 10 11 9 9 8 8 10 11 5 6 9 11 10 10
## [6961] 9 9 9 9 8 6 9 6 7 8 10 10 5 7 10 6 7 8 7 8 8 10 10 10
## [6985] 11 5 9 10 8 10 7 10 8 6 6 11 8 5 8 7 6 10 6 8 9 7 6 5
## [7009] 6 5 7 6 6 9 6 5 8 8 10 7 8 8 8 7 11 8 9 8 9 10 10 8
## [7033] 9 8 7 10 8 8 8 8 7 8 7 8 9 8 7 9 10 11 7 8 5 10 7 7
## [7057] 11 8 7 9 9 11 8 9 9 10 10 11 8 9 7 7 9 7 7 10 5 9 10 9
## [7081] 7 9 11 6 8 9 6 7 10 6 7 7 7 8 10 10 6 7 7 9 9 7 8 10
## [7105] 8 8 9 11 11 9 8 7 9 6 8 6 8 8 9 10 8 7 8 8 8 9 8 5
## [7129] 5 10 7 8 6 9 8 7 8 9 6 8 6 9 10 10 8 9 5 9 8 9 7 8
## [7153] 10 5 8 9 8 7 7 11 7 9 6 8 9 9 9 10 11 11 9 10 6 9 8 11
## [7177] 8 10 10 11 10 7 7 8 9 5 11 9 6 5 9 8 5 9 11 9 8 8 9 9
## [7201] 6 10 11 10 10 8 8 5 8 9 6 7 9 7 8 8 9 8 8 9 8 8 9 8
## [7225] 9 8 10 7 10 9 7 2 6 10 5 6 4 6 2 1 2 6 3 7 7 4 9 4
## [7249] 8 2 2 9 3 5 7 9 8 2 4 7 5 9 4 8 8 7 8 4 7 8 9 7
## [7273] 7 4 4 3 5 4 3 1 6 7 8 3 7 4 6 4 5 6 3 8 10 6 8 5
## [7297] 6 4 7 3 7 7 2 7 7 6 4 8 7 5 4 6 5 4 9 3 5 5 9 11
## [7321] 10 6 4 5 6 9 5 5 1 1 4 4 8 2 3 4 9 8 3 6 5 4 2 4
## [7345] 10 7 4 8 8 3 9 2 5 5 3 5 4 1 5 9 3 3 2 5 4 8 2 6
## [7369] 8 10 7 6 3 3 5 4 7 5 7 10 2 10 9 3 1 6 5 10 7 3 9 6
## [7393] 5 9 10 5 6 2 7 9 8 5 8 7 7 3 7 7 4 2 5 6 8 8 6 2
## [7417] 4 10 9 6 4 4 2 8 7 10 3 7 4 4 5 8 3 8 5 10 2 4 7 7
## [7441] 2 7 10 4 5 9 10 9 8 10 6 4 4 9 5 4 7 9 2 2 4 5 5 7
## [7465] 3 7 7 5 8 6 7 4 2 10 4 10 2 9 3 5 1 5 5 4 6 6 4 2
## [7489] 7 6 7 2 4 5 5 9 8 6 2 5 3 7 4 2 4 5 3 5 3 4 8 3
## [7513] 5 10 4 3 7 5 8 6 5 9 7 2 3 8 4 8 4 2 8 3 6 6 3 2
## [7537] 1 6 3 8 5 4 7 8 9 5 11 5 4 4 3 3 2 8 8 7 10 1 7 4
## [7561] 4 4 4 11 7 8 6 4 3 7 6 4 7 8 7 3 8 5 6 9 2 7 6 4
## [7585] 7 4 7 7 5 4 7 6 7 7 7 6 3 7 11 8 7 8 6 5 9 7 3 4
## [7609] 5 3 6 7 5 10 3 11 6 8 2 7 5 10 4 11 2 6 5 8 8 5 8 6
## [7633] 5 2 10 3 11 7 6 5 8 11 5 5 7 1 8 3 5 10 5 5 4 3 5 3
## [7657] 10 8 6 11 10 9 6 7 3 5 4 8 4 3 7 4 11 4 5 4 4 8 5 6
## [7681] 4 5 5 11 3 4 8 6 4 7 5 8 4 4 8 1 5 4 5 5 5 6 3 9
## [7705] 7 8 1 9 4 4 7 7 10 7 4 6 6 5 7 6 3 8 4 5 6 7 5 6
## [7729] 7 6 4 3 4 3 5 7 5 4 4 4 9 5 6 8 5 3 7 6 4 7 2 10
## [7753] 3 11 10 8 5 8 3 6 2 5 1 5 4 4 11 2 10 8 5 9 4 1 5 3
## [7777] 9 4 5 8 3 9 7 9 4 4 7 4 5 10 1 5 9 3 7 5 11 7 7 4
## [7801] 7 5 7 6 3 5 2 6 2 6 4 7 8 5 11 7 10 5 3 2 1 6 2 9
## [7825] 8 7 5 9 4 6 4 4 6 6 6 9 7 2 7 1 6 5 6 6 3 3 8 4
## [7849] 7 8 9 7 7 9 8 8 4 9 4 9 4 9 5 5 11 5 5 10 6 9 6 7
## [7873] 4 3 9 3 4 4 9 7 7 9 8 4 10 2 3 4 4 2 8 4 8 5 6 5
## [7897] 2 5 7 5 2 8 5 9 3 5 8 3 5 5 5 4 10 4 4 4 4 5 5 1
## [7921] 10 2 4 6 7 6 4 2 5 2 11 5 5 4 9 4 3 9 10 6 2 5 6 2
## [7945] 7 6 1 2 4 3 7 11 4 8 6 5 11 3 5 5 4 6 7 4 9 3 3 3
## [7969] 4 8 8 6 4 7 10 7 6 8 9 7 7 3 9 2 6 5 8 7 5 5 8 10
## [7993] 9 3 4 7 5 7 9 4 3 4 7 7 6 10 2 6 6 7 7 8 1 5 6 8
## [8017] 9 8 3 4 5 6 7 9 3 4 2 2 2 4 6 6 5 9 3 9 8 5 9 7
## [8041] 5 9 11 9 5 6 2 4 2 9 6 6 9 8 1 3 9 6 7 5 7 8 3 11
## [8065] 8 3 2 1 2 4 1 3 7 10 3 6 8 1 6 9 7 7 10 4 7 2 8 7
## [8089] 1 5 6 6 8 5 4 4 4 10 9 5 2 7 11 11 1 7 2 3 6 8 4 7
## [8113] 6 9 5 5 10 3 9 3 10 10 5 5 11 7 4 5 9 7 4 6 8 7 3 4
## [8137] 6 5 2 7 1 3 9 1 5 8 1 1 6 7 7 5 9 4 2 8 6 6 5 10
## [8161] 6 11 6 9 1 8 5 11 8 2 9 9 6 10 5 2 8 3 2 7 6 4 1 7
## [8185] 4 8 7 2 4 1 1 4 8 8 11 8 4 7 5 4 11 5 7 11 8 7 5 6
## [8209] 6 2 3 7 6 7 8 9 1 6 7 9 6 3 7 7 5 7 4 3 5 7 9 8
## [8233] 5 6 5 4 9 10 9 5 1 1 8 7 4 5 6 8 9 5 4 5 5 7 8 6
## [8257] 7 7 3 4 5 3 9 4 6 2 1 8 8 4 7 5 6 7 7 8 4 6 8 3
## [8281] 7 4 6 3 7 1 7 4 6 11 3 5 8 6 1 5 9 7 8 4 6 11 6 4
## [8305] 9 4 8 6 1 7 10 7 9 6 2 7 6 1 2 4 2 6 3 8 4 7 1 6
## [8329] 3 5 8 6 6 8 6 5 6 8 5 8 1 8 6 6 9 7 6 9 5 2 5 6
## [8353] 8 5 9 8 6 6 6 9 6 7 4 7 7 8 7 3 9 4 6 1 6 8 6 9
## [8377] 8 4 5 4 8 1 5 5 2 7 9 11 2 7 9 6 4 7 7 2 4 1 6 9
## [8401] 4 6 6 8 5 5 5 7 9 5 2 5 4 5 6 1 5 5 7 8 5 3 5 6
## [8425] 6 6 2 5 7 1 10 6 1 8 7 8 8 5 1 4 5 10 5 6 3 10 5 8
## [8449] 7 6 1 8 9 9 10 2 5 6 10 6 3 5 6 8 6 8 7 3 2 6 1 4
## [8473] 9 11 6 2 2 9 2 5 1 3 4 3 10 4 7 9 4 1 4 6 1 2 3 8
## [8497] 10 4 4 3 5 5 8 7 6 1 9 3 10 5 3 5 4 6 4 10 9 11 7 6
## [8521] 10 5 5 4 5 4 8 8 4 4 4 6 5 5 1 3 9 10 2 6 4 3 6 1
## [8545] 6 3 2 3 8 9 7 9 6 7 7 3 5 1 9 9 8 6 7 6 4 2 5 5
## [8569] 5 6 6 6 4 5 7 5 4 2 10 4 9 3 7 4 6 6 6 3 8 9 2 10
## [8593] 8 5 5 4 6 3 3 5 5 6 6 1 5 4 2 7 10 6 4 5 7 3 2 2
## [8617] 3 2 5 7 1 2 6 9 6 6 5 6 4 1 3 6 4 7 6 7 6 9 3 2
## [8641] 5 11 6 1 10 8 10 5 6 4 7 4 3 9 5 3 5 9 3 7 5 4 9 3
## [8665] 6 10 1 7 9 7 4 6 3 8 3 5 6 8 7 4 6 10 4 4 11 2 4 7
## [8689] 6 8 8 5 2 2 4 4 9 8 8 2 6 5 7 5 3 6 3 3 2 2 1 9
## [8713] 7 6 11 5 8 6 10 6 9 9 1 7 9 8 5 7 11 4 6 2 7 4 3 4
## [8737] 2 9 9 6 2 9 6 10 4 9 3 5 3 1 3 1 11 9 10 8 7 8 6 3
## [8761] 3 1 4 5 9 6 2 4 2 2 9 7 3 4 6 3 8 9 5 3 10 7 6 6
## [8785] 4 6 5 7 4 6 6 7 11 9 2 5 4 5 9 4 8 5 4 7 2 4 7 2
## [8809] 4 7 6 9 2 1 3 8 3 6 7 4 8 2 7 11 7 6 11 4 5 5 5 7
## [8833] 2 7 5 1 6 5 8 4 4 1 10 6 5 7 9 11 2 4 8 2 4 6 11 9
## [8857] 3 5 4 7 5 3 9 6 5 8 8 3 6 9 3 10 6 4 3 8 6 10 6 6
## [8881] 6 3 2 6 5 7 8 5 7 2 4 4 5 6 6 5 5 4 8 9 5 11 5 4
## [8905] 9 4 4 3 4 6 8 6 2 8 9 4 6 7 7 5 5 8 7 7 8 10 8 2
## [8929] 2 9 1 8 3 4 7 5 8 7 10 6 1 7 9 9 6 8 11 2 5 7 11 6
## [8953] 4 10 6 10 9 4 7 5 11 5 4 11 9 4 3 5 7 5 3 1 3 2 6 7
## [8977] 6 5 7 5 4 3 7 5 5 9 7 5 8 8 3 6 4 8 4 3 7 8 7 7
## [9001] 3 4 7 4 9 7 1 1 7 1 5 4 4 7 5 4 11 5 1 8 1 3 4 5
## [9025] 5 6 10 2 7 2 7 7 5 5 3 5 5 5 11 4 3 11 9 3 3 5 5 8
## [9049] 7 5 7 9 9 8 9 2 4 5 5 7 11 5 11 11 4 11 5 3 9 7 11 4
## [9073] 8 6 6 8 3 5 3 6 4 8 3 3 2 2 6 8 8 2 5 6 3 10 8 4
## [9097] 3 7 7 4 4 7 6 5 4 2 7 3 8 3 5 3 7 9 1 4 5 8 5 9
## [9121] 6 4 3 2 6 3 6 6 2 10 7 1 8 6 2 3 4 9 4 10 7 5 5 5
## [9145] 6 7 8 6 2 4 6 4 2 3 7 5 6 10 6 9 6 7 5 6 6 3 5 1
## [9169] 4 8 7 5 9 7 2 3 5 4 4 2 4 4 6 6 9 11 5 6 1 6 6 4
## [9193] 6 5 8 10 8 4 9 2 11 5 5 9 2 9 5 3 7 2 4 7 2 7 9 9
## [9217] 7 8 7 2 6 5 5 7 8 4 5 4 9 6 4 7 6 3 3 11 6 8 6 5
## [9241] 9 3 5 8 3 4 4 3 9 3 6 2 5 8 3 6 4 6 7 7 11 8 6 8
## [9265] 3 6 11 7 4 11 7 7 4 5 4 1 6 4 2 4 8 11 1 4 6 2 3 9
## [9289] 6 4 3 7 6 10 7 9 5 2 5 4 4 4 10 3 6 8 2 4 2 6 6 8
## [9313] 2 10 4 6 9 1 3 10 8 5 8 7 8 4 5 7 10 9 7 4 1 7 8 5
## [9337] 5 4 7 3 1 3 6 5 5 9 7 6 3 2 6 2 8 7 9 5 7 4 5 3
## [9361] 4 8 4 6 4 6 3 8 4 5 5 9 6 5 9 6 2 6 7 9 6 8 5 3
## [9385] 3 4 6 5 1 8 1 5 5 5 5 6 7 6 6 9 9 5 3 2 5 2 5 4
## [9409] 3 5 7 3 6 6 1 7 10 7 6 5 4 9 3 7 9 1 6 6 5 3 6 4
## [9433] 8 5 5 2 6 7 1 4 3 6 2 10 7 9 10 1 5 8 4 10 5 2 7 5
## [9457] 7 6 2 5 5 5 1 6 4 8 6 5 3 2 4 6 1 8 5 2 11 10 7 2
## [9481] 4 7 5 7 2 9 2 11 5 3 7 8 1 6 4 6 6 11 7 6 8 6 5 4
## [9505] 7 5 4 8 1 7 9 9 10 1 3 7 7 1 11 7 7 9 7 5 1 3 5 1
## [9529] 1 4 5 3 7 9 7 3 4 4 6 3 6 3 3 8 7 2 9 1 6 2 9 6
## [9553] 5 7 7 2 9 9 3 8 4 4 7 6 4 7 10 9 3 8 5 1 9 4 2 3
## [9577] 6 9 6 7 10 6 4 2 9 5 3 7 5 8 5 5 6 4 7 1 5 6 9 7
## [9601] 7 2 7 6 1 1 1 5 7 9 5 8 3 6 7 9 9 6 4 5 6 10 4 5
## [9625] 3 3 7 5 2 4 2 4 8 3 1 5 7 2 5 4 2 3 5 8 8 8 2 3
## [9649] 3 2 9 7 8 6 11 3 9 5 4 2 5 11 2 2 6 8 5 8 6 2 8 4
## [9673] 7 2 2 4 10 2 2 9 7 4 5 9 5 6 7 6 3 3 11 5 6 8 5 3
## [9697] 4 8 2 5 7 3 6 6 9 9 4 6 7 4 3 5 5 4 7 10 4 8 3 7
## [9721] 9 7 8 9 6 6 3 6 4 11 8 4 2 8 2 2 6 3 3 3 8 8 4 6
## [9745] 11 5 8 3 7 4 4 9 3 5 9 5 7 7 6 10 7 4 9 1 7 3 1 3
## [9769] 7 9 2 10 9 3 9 10 5 6 4 3 3 2 4 7 8 6 5 6 8 2 8 8
## [9793] 9 8 6 2 4 7 7 2 6 5 6 3 6 10 2 3 6 8 7 6 7 3 5 8
## [9817] 5 4 6 6 8 1 3 1 4 1 3 7 7 5 10 6 3 3 7 5 3 4 10 8
## [9841] 2 4 3 8 1 7 7 9 3 4 10 7 10 6 4 7 3 5 6 4 7 7 11 4
## [9865] 3 2 2 7 8 7 4 7 6 7 5 2 6 3 7 2 5 4 6 3 5 2 4 4
## [9889] 6 5 10 2 8 5 5 4 5 4 7 6 3 11 2 5 11 4 6 5 2 1 3 10
## [9913] 6 6 6 9 2 11 6 4 7 5 1 8 5 11 11 6 4 4 4 5 8 3 5 2
## [9937] 3 8 9 5 4 8 5 8 1 10 8 10
length(calgary_trans)
## [1] 9948
High satisfaction with services such as Service311, Parks, and Spring Cleaning appeared most frequently, indicating that positive ratings dominated the transactions.
Before mining rules, I examined item frequencies to understand which satisfaction levels appear most often. This also helps guide the choice of support thresholds.
itemFrequency(calgary_trans, type = "relative")
## LandUsePlanning_high LandUsePlanning_low Parks_high
## 0.49477282 0.13419783 0.68747487
## Parks_low RecreationFacilities_high RecreationFacilities_low
## 0.03779654 0.59026940 0.06192199
## RoadInfrastructure_high RoadInfrastructure_low RoadMaintenance_high
## 0.52392441 0.10906715 0.48361480
## RoadMaintenance_low Service311_high Service311_low
## 0.20948934 0.70918778 0.04624045
## SnowRemoval_high SnowRemoval_low SocialServices_high
## 0.52020507 0.19018898 0.51216325
## SocialServices_low SpringCleaning_high SpringCleaning_low
## 0.09137515 0.65068355 0.05699638
## TransitPlanning_high TransitPlanning_low TransitService_high
## 0.51306795 0.12937274 0.58604745
## TransitService_low
## 0.09811017
itemFrequencyPlot(
calgary_trans,
topN = 20,
type = "relative"
)
itemFrequencyPlot(
calgary_trans,
topN = 20,
type = "absolute"
)
After identifying the most frequent satisfaction items, I focused on these items to see how they appeared together within the same responses. I then used cross tables to examine co-occurrence in terms of counts, support, and lift. Since some items appear far more often than others, I limited the next step to the ten most frequent items.
top_items <- names(sort(itemFrequency(calgary_trans), decreasing = TRUE)[1:10])
calgary_top <- calgary_trans[, top_items]
crossTable(calgary_top, measure = "count")
## Service311_high Parks_high SpringCleaning_high
## Service311_high 7055 5724 4358
## Parks_high 5724 6839 4178
## SpringCleaning_high 4358 4178 6473
## RecreationFacilities_high 5168 5244 3411
## TransitService_high 3804 3590 4952
## RoadInfrastructure_high 3288 3113 4733
## SnowRemoval_high 3239 3074 4727
## TransitPlanning_high 3195 3006 4610
## SocialServices_high 4727 4723 2783
## LandUsePlanning_high 4614 4580 2662
## RecreationFacilities_high TransitService_high
## Service311_high 5168 3804
## Parks_high 5244 3590
## SpringCleaning_high 3411 4952
## RecreationFacilities_high 5872 2895
## TransitService_high 2895 5830
## RoadInfrastructure_high 2438 4519
## SnowRemoval_high 2415 4459
## TransitPlanning_high 2336 4617
## SocialServices_high 4501 2322
## LandUsePlanning_high 4412 2191
## RoadInfrastructure_high SnowRemoval_high
## Service311_high 3288 3239
## Parks_high 3113 3074
## SpringCleaning_high 4733 4727
## RecreationFacilities_high 2438 2415
## TransitService_high 4519 4459
## RoadInfrastructure_high 5212 4356
## SnowRemoval_high 4356 5175
## TransitPlanning_high 4398 4238
## SocialServices_high 1926 1875
## LandUsePlanning_high 1804 1743
## TransitPlanning_high SocialServices_high
## Service311_high 3195 4727
## Parks_high 3006 4723
## SpringCleaning_high 4610 2783
## RecreationFacilities_high 2336 4501
## TransitService_high 4617 2322
## RoadInfrastructure_high 4398 1926
## SnowRemoval_high 4238 1875
## TransitPlanning_high 5104 1830
## SocialServices_high 1830 5095
## LandUsePlanning_high 1722 4279
## LandUsePlanning_high
## Service311_high 4614
## Parks_high 4580
## SpringCleaning_high 2662
## RecreationFacilities_high 4412
## TransitService_high 2191
## RoadInfrastructure_high 1804
## SnowRemoval_high 1743
## TransitPlanning_high 1722
## SocialServices_high 4279
## LandUsePlanning_high 4922
crossTable(calgary_top, measure = "support")
## Service311_high Parks_high SpringCleaning_high
## Service311_high 0.7091878 0.5753920 0.4380780
## Parks_high 0.5753920 0.6874749 0.4199839
## SpringCleaning_high 0.4380780 0.4199839 0.6506836
## RecreationFacilities_high 0.5195014 0.5271411 0.3428830
## TransitService_high 0.3823884 0.3608766 0.4977885
## RoadInfrastructure_high 0.3305187 0.3129272 0.4757740
## SnowRemoval_high 0.3255931 0.3090068 0.4751709
## TransitPlanning_high 0.3211701 0.3021713 0.4634097
## SocialServices_high 0.4751709 0.4747688 0.2797547
## LandUsePlanning_high 0.4638118 0.4603940 0.2675915
## RecreationFacilities_high TransitService_high
## Service311_high 0.5195014 0.3823884
## Parks_high 0.5271411 0.3608766
## SpringCleaning_high 0.3428830 0.4977885
## RecreationFacilities_high 0.5902694 0.2910133
## TransitService_high 0.2910133 0.5860474
## RoadInfrastructure_high 0.2450744 0.4542622
## SnowRemoval_high 0.2427624 0.4482308
## TransitPlanning_high 0.2348211 0.4641134
## SocialServices_high 0.4524528 0.2334138
## LandUsePlanning_high 0.4435062 0.2202453
## RoadInfrastructure_high SnowRemoval_high
## Service311_high 0.3305187 0.3255931
## Parks_high 0.3129272 0.3090068
## SpringCleaning_high 0.4757740 0.4751709
## RecreationFacilities_high 0.2450744 0.2427624
## TransitService_high 0.4542622 0.4482308
## RoadInfrastructure_high 0.5239244 0.4378770
## SnowRemoval_high 0.4378770 0.5202051
## TransitPlanning_high 0.4420989 0.4260153
## SocialServices_high 0.1936068 0.1884801
## LandUsePlanning_high 0.1813430 0.1752111
## TransitPlanning_high SocialServices_high
## Service311_high 0.3211701 0.4751709
## Parks_high 0.3021713 0.4747688
## SpringCleaning_high 0.4634097 0.2797547
## RecreationFacilities_high 0.2348211 0.4524528
## TransitService_high 0.4641134 0.2334138
## RoadInfrastructure_high 0.4420989 0.1936068
## SnowRemoval_high 0.4260153 0.1884801
## TransitPlanning_high 0.5130680 0.1839566
## SocialServices_high 0.1839566 0.5121632
## LandUsePlanning_high 0.1731001 0.4301367
## LandUsePlanning_high
## Service311_high 0.4638118
## Parks_high 0.4603940
## SpringCleaning_high 0.2675915
## RecreationFacilities_high 0.4435062
## TransitService_high 0.2202453
## RoadInfrastructure_high 0.1813430
## SnowRemoval_high 0.1752111
## TransitPlanning_high 0.1731001
## SocialServices_high 0.4301367
## LandUsePlanning_high 0.4947728
crossTable(calgary_top, measure = "lift")
## Service311_high Parks_high SpringCleaning_high
## Service311_high NA 1.1801733 0.9493369
## Parks_high 1.1801733 NA 0.9388712
## SpringCleaning_high 0.9493369 0.9388712 NA
## RecreationFacilities_high 1.2410098 1.2990319 0.8927417
## TransitService_high 0.9200485 0.8957134 1.3053959
## RoadInfrastructure_high 0.8895414 0.8687961 1.3956042
## SnowRemoval_high 0.8825501 0.8640456 1.4038006
## TransitPlanning_high 0.8826712 0.8566856 1.3880990
## SocialServices_high 1.3082182 1.3483944 0.8394584
## LandUsePlanning_high 1.3218274 1.3535274 0.8311829
## RecreationFacilities_high TransitService_high
## Service311_high 1.2410098 0.9200485
## Parks_high 1.2990319 0.8957134
## SpringCleaning_high 0.8927417 1.3053959
## RecreationFacilities_high NA 0.8412590
## TransitService_high 0.8412590 NA
## RoadInfrastructure_high 0.7924631 1.4794666
## SnowRemoval_high 0.7905995 1.4702607
## TransitPlanning_high 0.7753752 1.5435348
## SocialServices_high 1.4966304 0.7776519
## LandUsePlanning_high 1.5186008 0.7595703
## RoadInfrastructure_high SnowRemoval_high
## Service311_high 0.8895414 0.8825501
## Parks_high 0.8687961 0.8640456
## SpringCleaning_high 1.3956042 1.4038006
## RecreationFacilities_high 0.7924631 0.7905995
## TransitService_high 1.4794666 1.4702607
## RoadInfrastructure_high NA 1.6066042
## SnowRemoval_high 1.6066042 NA
## TransitPlanning_high 1.6446592 1.5961574
## SocialServices_high 0.7215118 0.7074284
## LandUsePlanning_high 0.6995621 0.6807399
## TransitPlanning_high SocialServices_high
## Service311_high 0.8826712 1.3082182
## Parks_high 0.8566856 1.3483944
## SpringCleaning_high 1.3880990 0.8394584
## RecreationFacilities_high 0.7753752 1.4966304
## TransitService_high 1.5435348 0.7776519
## RoadInfrastructure_high 1.6446592 0.7215118
## SnowRemoval_high 1.5961574 0.7074284
## TransitPlanning_high NA 0.7000548
## SocialServices_high 0.7000548 NA
## LandUsePlanning_high 0.6818937 1.6974315
## LandUsePlanning_high
## Service311_high 1.3218274
## Parks_high 1.3535274
## SpringCleaning_high 0.8311829
## RecreationFacilities_high 1.5186008
## TransitService_high 0.7595703
## RoadInfrastructure_high 0.6995621
## SnowRemoval_high 0.6807399
## TransitPlanning_high 0.6818937
## SocialServices_high 1.6974315
## LandUsePlanning_high NA
Looking at the cross tables, many city services related to everyday operations tend to appear together. For example, road infrastructure, snow removal, spring cleaning, and transit-related services often co-occur within the same responses. The lift values for several of these pairs are above 1, which suggests that these combinations are not random and that people often evaluate these services as a group.
On the other hand, services such as social services and land use planning show weaker links with operational services. This suggests that respondents may be thinking about these areas separately rather than as part of the same overall experience.
I then used the Eclat algorithm to find frequent itemsets in the data. This step helped me see which service satisfaction levels tended to appear together across respondents before moving on to association rules.
freq_itemsets <- eclat(
calgary_trans,
parameter = list(supp = 0.05, maxlen = 3)
)
## Eclat
##
## parameter specification:
## tidLists support minlen maxlen target ext
## FALSE 0.05 1 3 frequent itemsets TRUE
##
## algorithmic control:
## sparse sort verbose
## 7 -2 TRUE
##
## Absolute minimum support count: 497
##
## create itemset ...
## set transactions ...[22 item(s), 9948 transaction(s)] done [0.00s].
## sorting and recoding items ... [20 item(s)] done [0.00s].
## creating bit matrix ... [20 row(s), 9948 column(s)] done [0.00s].
## writing ... [379 set(s)] done [0.00s].
## Creating S4 object ... done [0.00s].
summary(freq_itemsets)
## set of 379 itemsets
##
## most frequent items:
## Parks_high Service311_high RecreationFacilities_high
## 85 85 83
## LandUsePlanning_high SocialServices_high (Other)
## 82 82 576
##
## element (itemset/transaction) length distribution:sizes
## 1 2 3
## 20 104 255
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 2.00 3.00 2.62 3.00 3.00
##
## summary of quality measures:
## support count
## Min. :0.05016 Min. : 499
## 1st Qu.:0.09278 1st Qu.: 923
## Median :0.15149 Median :1507
## Mean :0.20311 Mean :2021
## 3rd Qu.:0.26830 3rd Qu.:2669
## Max. :0.70919 Max. :7055
##
## includes transaction ID lists: FALSE
##
## mining info:
## data ntransactions support
## calgary_trans 9948 0.05
## call
## eclat(data = calgary_trans, parameter = list(supp = 0.05, maxlen = 3))
inspect(sort(freq_itemsets, by = "support")[1:15])
## items support count
## [1] {Service311_high} 0.7091878 7055
## [2] {Parks_high} 0.6874749 6839
## [3] {SpringCleaning_high} 0.6506836 6473
## [4] {RecreationFacilities_high} 0.5902694 5872
## [5] {TransitService_high} 0.5860474 5830
## [6] {Parks_high,
## Service311_high} 0.5753920 5724
## [7] {Parks_high,
## RecreationFacilities_high} 0.5271411 5244
## [8] {RoadInfrastructure_high} 0.5239244 5212
## [9] {SnowRemoval_high} 0.5202051 5175
## [10] {RecreationFacilities_high,
## Service311_high} 0.5195014 5168
## [11] {TransitPlanning_high} 0.5130680 5104
## [12] {SocialServices_high} 0.5121632 5095
## [13] {SpringCleaning_high,
## TransitService_high} 0.4977885 4952
## [14] {LandUsePlanning_high} 0.4947728 4922
## [15] {Parks_high,
## RecreationFacilities_high,
## Service311_high} 0.4839164 4814
The results are dominated by high satisfaction items. Services like 311, parks, spring cleaning, recreation facilities, and transit services appear very frequently on their own, which suggests that positive evaluations are common across the dataset. This is also reflected in the high support values for single-item itemsets.
When looking at combinations, many frequent itemsets involve everyday city services appearing together. For example, parks, recreation facilities, and 311 services often co-occur, both as pairs and as three-item combinations. This suggests that respondents who rate one of these services highly often rate the others highly as well.
At this stage, the analysis was still exploratory, since frequent itemsets only show co-occurrence and do not indicate direction. To understand which service ratings tend to lead to others, I moved on to association rule mining using Apriori.
I applied the Apriori algorithm to generate association rules using relatively loose thresholds for support and confidence. I did this on purpose to avoid being too restrictive at the start and to see a wider range of possible patterns in the data.
rules <- apriori(
calgary_trans,
parameter = list(support = 0.04, confidence = 0.6, minlen = 2, maxlen = 3))
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.6 0.1 1 none FALSE TRUE 5 0.04 2
## maxlen target ext
## 3 rules TRUE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 397
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[22 item(s), 9948 transaction(s)] done [0.00s].
## sorting and recoding items ... [21 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3
## done [0.00s].
## writing ... [649 rule(s)] done [0.00s].
## creating S4 object ... done [0.00s].
With a minimum support of 4% and confidence of 60%, the algorithm produced 649 rules involving combinations of two or three items. This indicates that there are many recurring co-evaluation patterns across services once direction is taken into account.
I inspected the rules sorted by support, confidence, and lift to see how different types of patterns emerge.
inspect(sort(rules, by = "support")[1:10])
## lhs rhs support confidence coverage lift count
## [1] {Parks_high} => {Service311_high} 0.5753920 0.8369645 0.6874749 1.180173 5724
## [2] {Service311_high} => {Parks_high} 0.5753920 0.8113395 0.7091878 1.180173 5724
## [3] {RecreationFacilities_high} => {Parks_high} 0.5271411 0.8930518 0.5902694 1.299032 5244
## [4] {Parks_high} => {RecreationFacilities_high} 0.5271411 0.7667788 0.6874749 1.299032 5244
## [5] {RecreationFacilities_high} => {Service311_high} 0.5195014 0.8801090 0.5902694 1.241010 5168
## [6] {Service311_high} => {RecreationFacilities_high} 0.5195014 0.7325301 0.7091878 1.241010 5168
## [7] {TransitService_high} => {SpringCleaning_high} 0.4977885 0.8493997 0.5860474 1.305396 4952
## [8] {SpringCleaning_high} => {TransitService_high} 0.4977885 0.7650239 0.6506836 1.305396 4952
## [9] {Parks_high,
## RecreationFacilities_high} => {Service311_high} 0.4839164 0.9180015 0.5271411 1.294441 4814
## [10] {RecreationFacilities_high,
## Service311_high} => {Parks_high} 0.4839164 0.9315015 0.5195014 1.354961 4814
inspect(sort(rules, by = "confidence")[1:10])
## lhs rhs support confidence coverage lift count
## [1] {RoadMaintenance_high,
## SocialServices_low} => {SpringCleaning_high} 0.06272618 0.9826772 0.06383193 1.510223 624
## [2] {RecreationFacilities_low,
## SnowRemoval_high} => {SpringCleaning_high} 0.04232006 0.9813520 0.04312425 1.508186 421
## [3] {RoadInfrastructure_high,
## SocialServices_low} => {TransitPlanning_high} 0.06292722 0.9811912 0.06413349 1.912400 626
## [4] {RoadInfrastructure_high,
## SocialServices_low} => {SpringCleaning_high} 0.06292722 0.9811912 0.06413349 1.507939 626
## [5] {RoadMaintenance_high,
## SnowRemoval_high} => {SpringCleaning_high} 0.41495778 0.9809886 0.42299960 1.507628 4128
## [6] {LandUsePlanning_high,
## SocialServices_high} => {Service311_high} 0.42108967 0.9789670 0.43013671 1.380406 4189
## [7] {SnowRemoval_high,
## SocialServices_low} => {SpringCleaning_high} 0.06312827 0.9781931 0.06453559 1.503332 628
## [8] {LandUsePlanning_low,
## SnowRemoval_high} => {SpringCleaning_high} 0.09509449 0.9772727 0.09730599 1.501917 946
## [9] {LandUsePlanning_high,
## TransitPlanning_low} => {Parks_high} 0.08082027 0.9769137 0.08273020 1.421017 804
## [10] {RoadMaintenance_high,
## SocialServices_low} => {TransitService_high} 0.06232409 0.9763780 0.06383193 1.666039 620
inspect(sort(rules, by = "lift")[1:10])
## lhs rhs support confidence coverage lift count
## [1] {RoadInfrastructure_low,
## SnowRemoval_low} => {RoadMaintenance_low} 0.04111379 0.7687970 0.05347809 3.669862 409
## [2] {LandUsePlanning_high,
## RoadInfrastructure_low} => {RoadMaintenance_low} 0.04694411 0.6908284 0.06795336 3.297678 467
## [3] {RoadInfrastructure_low} => {RoadMaintenance_low} 0.07529152 0.6903226 0.10906715 3.295263 749
## [4] {RoadInfrastructure_low,
## SocialServices_high} => {RoadMaintenance_low} 0.04704463 0.6892489 0.06825493 3.290138 468
## [5] {RoadInfrastructure_low,
## Service311_high} => {RoadMaintenance_low} 0.05579011 0.6843403 0.08152392 3.266707 555
## [6] {Parks_high,
## RoadInfrastructure_low} => {RoadMaintenance_low} 0.05518697 0.6836862 0.08071974 3.263584 549
## [7] {RecreationFacilities_high,
## RoadInfrastructure_low} => {RoadMaintenance_low} 0.05076397 0.6833559 0.07428629 3.262008 505
## [8] {RoadInfrastructure_high,
## SocialServices_low} => {RoadMaintenance_high} 0.06222356 0.9702194 0.06413349 2.006182 619
## [9] {LandUsePlanning_low,
## TransitPlanning_high} => {RoadMaintenance_high} 0.09207881 0.9631966 0.09559710 1.991661 916
## [10] {LandUsePlanning_low,
## RoadInfrastructure_high} => {RoadMaintenance_high} 0.09278247 0.9614583 0.09650181 1.988066 923
Rules with the highest support mainly involve highly rated services such as parks, 311 services, recreation facilities, and transit. These combinations appear very often and reflect common positive evaluations across respondents.
When sorting by confidence, the strongest rules show cases where certain service ratings almost always lead to another. Many of these involve road maintenance, snow removal, and spring cleaning, with confidence values close to 1.
Rules ranked by lift highlight more specific relationships, especially around low ratings. In particular, low satisfaction with road infrastructure is strongly linked to low road maintenance, standing out as a non-random association.
After generating the full set of rules, I removed redundant ones to avoid repeating the same information in different forms. This made the rule set easier to work with and interpret.
rules_nr <- rules[!is.redundant(rules)]
is.maximal(rules_nr)
## {Parks_high,SpringCleaning_low}
## TRUE
## {Service311_high,SpringCleaning_low}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high}
## FALSE
## {RecreationFacilities_low,TransitPlanning_high}
## FALSE
## {RecreationFacilities_low,SnowRemoval_high}
## FALSE
## {RecreationFacilities_low,RoadInfrastructure_high}
## FALSE
## {RecreationFacilities_low,TransitService_high}
## FALSE
## {RecreationFacilities_low,SpringCleaning_high}
## FALSE
## {RoadMaintenance_high,SocialServices_low}
## FALSE
## {SocialServices_low,TransitPlanning_high}
## FALSE
## {SnowRemoval_high,SocialServices_low}
## FALSE
## {RoadInfrastructure_high,SocialServices_low}
## FALSE
## {SocialServices_low,TransitService_high}
## FALSE
## {SocialServices_low,SpringCleaning_high}
## FALSE
## {LandUsePlanning_high,TransitService_low}
## FALSE
## {SocialServices_high,TransitService_low}
## FALSE
## {RecreationFacilities_high,TransitService_low}
## FALSE
## {Parks_high,TransitService_low}
## FALSE
## {Service311_high,TransitService_low}
## FALSE
## {RoadInfrastructure_low,RoadMaintenance_low}
## FALSE
## {LandUsePlanning_high,RoadInfrastructure_low}
## FALSE
## {RoadInfrastructure_low,SocialServices_high}
## FALSE
## {RecreationFacilities_high,RoadInfrastructure_low}
## FALSE
## {Parks_high,RoadInfrastructure_low}
## FALSE
## {RoadInfrastructure_low,Service311_high}
## FALSE
## {LandUsePlanning_high,TransitPlanning_low}
## FALSE
## {SocialServices_high,TransitPlanning_low}
## FALSE
## {RecreationFacilities_high,TransitPlanning_low}
## FALSE
## {Parks_high,TransitPlanning_low}
## FALSE
## {Service311_high,TransitPlanning_low}
## FALSE
## {LandUsePlanning_low,RoadMaintenance_high}
## FALSE
## {LandUsePlanning_low,TransitPlanning_high}
## FALSE
## {LandUsePlanning_low,SnowRemoval_high}
## FALSE
## {LandUsePlanning_low,RoadInfrastructure_high}
## FALSE
## {LandUsePlanning_low,TransitService_high}
## FALSE
## {LandUsePlanning_low,SpringCleaning_high}
## FALSE
## {LandUsePlanning_high,SnowRemoval_low}
## FALSE
## {SnowRemoval_low,SocialServices_high}
## FALSE
## {RecreationFacilities_high,SnowRemoval_low}
## FALSE
## {Parks_high,SnowRemoval_low}
## FALSE
## {Service311_high,SnowRemoval_low}
## FALSE
## {LandUsePlanning_high,RoadMaintenance_low}
## FALSE
## {RoadMaintenance_low,SocialServices_high}
## FALSE
## {RecreationFacilities_high,RoadMaintenance_low}
## FALSE
## {Parks_high,RoadMaintenance_low}
## FALSE
## {RoadMaintenance_low,Service311_high}
## FALSE
## {LandUsePlanning_high,SocialServices_high}
## FALSE
## {LandUsePlanning_high,SocialServices_high}
## FALSE
## {LandUsePlanning_high,RecreationFacilities_high}
## FALSE
## {LandUsePlanning_high,RecreationFacilities_high}
## FALSE
## {LandUsePlanning_high,Parks_high}
## FALSE
## {LandUsePlanning_high,Parks_high}
## FALSE
## {LandUsePlanning_high,Service311_high}
## FALSE
## {LandUsePlanning_high,Service311_high}
## FALSE
## {RoadMaintenance_high,TransitPlanning_high}
## FALSE
## {RoadMaintenance_high,TransitPlanning_high}
## FALSE
## {RoadMaintenance_high,SnowRemoval_high}
## FALSE
## {RoadMaintenance_high,SnowRemoval_high}
## FALSE
## {RoadInfrastructure_high,RoadMaintenance_high}
## FALSE
## {RoadInfrastructure_high,RoadMaintenance_high}
## FALSE
## {RoadMaintenance_high,TransitService_high}
## FALSE
## {RoadMaintenance_high,TransitService_high}
## FALSE
## {RoadMaintenance_high,SpringCleaning_high}
## FALSE
## {RoadMaintenance_high,SpringCleaning_high}
## FALSE
## {RoadMaintenance_high,Service311_high}
## FALSE
## {RecreationFacilities_high,SocialServices_high}
## FALSE
## {RecreationFacilities_high,SocialServices_high}
## FALSE
## {Parks_high,SocialServices_high}
## FALSE
## {Parks_high,SocialServices_high}
## FALSE
## {Service311_high,SocialServices_high}
## FALSE
## {Service311_high,SocialServices_high}
## FALSE
## {SnowRemoval_high,TransitPlanning_high}
## FALSE
## {SnowRemoval_high,TransitPlanning_high}
## FALSE
## {RoadInfrastructure_high,TransitPlanning_high}
## FALSE
## {RoadInfrastructure_high,TransitPlanning_high}
## FALSE
## {TransitPlanning_high,TransitService_high}
## FALSE
## {TransitPlanning_high,TransitService_high}
## FALSE
## {SpringCleaning_high,TransitPlanning_high}
## FALSE
## {SpringCleaning_high,TransitPlanning_high}
## FALSE
## {Service311_high,TransitPlanning_high}
## FALSE
## {RoadInfrastructure_high,SnowRemoval_high}
## FALSE
## {RoadInfrastructure_high,SnowRemoval_high}
## FALSE
## {SnowRemoval_high,TransitService_high}
## FALSE
## {SnowRemoval_high,TransitService_high}
## FALSE
## {SnowRemoval_high,SpringCleaning_high}
## FALSE
## {SnowRemoval_high,SpringCleaning_high}
## FALSE
## {Service311_high,SnowRemoval_high}
## FALSE
## {RoadInfrastructure_high,TransitService_high}
## FALSE
## {RoadInfrastructure_high,TransitService_high}
## FALSE
## {RoadInfrastructure_high,SpringCleaning_high}
## FALSE
## {RoadInfrastructure_high,SpringCleaning_high}
## FALSE
## {RoadInfrastructure_high,Service311_high}
## FALSE
## {Parks_high,RecreationFacilities_high}
## FALSE
## {Parks_high,RecreationFacilities_high}
## FALSE
## {RecreationFacilities_high,Service311_high}
## FALSE
## {RecreationFacilities_high,Service311_high}
## FALSE
## {SpringCleaning_high,TransitService_high}
## FALSE
## {SpringCleaning_high,TransitService_high}
## FALSE
## {Parks_high,TransitService_high}
## FALSE
## {Service311_high,TransitService_high}
## FALSE
## {Parks_high,SpringCleaning_high}
## FALSE
## {Parks_high,SpringCleaning_high}
## FALSE
## {Service311_high,SpringCleaning_high}
## FALSE
## {Service311_high,SpringCleaning_high}
## FALSE
## {Parks_high,Service311_high}
## FALSE
## {Parks_high,Service311_high}
## FALSE
## {RecreationFacilities_low,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,RoadMaintenance_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,RoadMaintenance_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {RecreationFacilities_low,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {RecreationFacilities_low,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,TransitPlanning_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,TransitPlanning_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,SnowRemoval_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,SnowRemoval_high}
## TRUE
## {RecreationFacilities_low,SnowRemoval_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,SnowRemoval_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RecreationFacilities_low,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,SpringCleaning_high}
## TRUE
## {RecreationFacilities_low,RoadInfrastructure_high,SpringCleaning_high}
## TRUE
## {RecreationFacilities_low,SpringCleaning_high,TransitService_high}
## TRUE
## {RecreationFacilities_low,SpringCleaning_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SocialServices_low,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,SocialServices_low,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,SocialServices_low}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,SocialServices_low}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SocialServices_low}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SocialServices_low}
## TRUE
## {RoadMaintenance_high,SocialServices_low,TransitService_high}
## TRUE
## {RoadMaintenance_high,SocialServices_low,TransitService_high}
## TRUE
## {RoadMaintenance_high,SocialServices_low,SpringCleaning_high}
## TRUE
## {RoadMaintenance_high,SocialServices_low,SpringCleaning_high}
## TRUE
## {SnowRemoval_high,SocialServices_low,TransitPlanning_high}
## TRUE
## {SnowRemoval_high,SocialServices_low,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SocialServices_low,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SocialServices_low,TransitPlanning_high}
## TRUE
## {SocialServices_low,TransitPlanning_high,TransitService_high}
## TRUE
## {SocialServices_low,TransitPlanning_high,TransitService_high}
## TRUE
## {SocialServices_low,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {SocialServices_low,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,SocialServices_low}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,SocialServices_low}
## TRUE
## {SnowRemoval_high,SocialServices_low,TransitService_high}
## TRUE
## {SnowRemoval_high,SocialServices_low,TransitService_high}
## TRUE
## {SnowRemoval_high,SocialServices_low,SpringCleaning_high}
## TRUE
## {SnowRemoval_high,SocialServices_low,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,SocialServices_low,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SocialServices_low,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SocialServices_low,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,SocialServices_low,SpringCleaning_high}
## TRUE
## {SocialServices_low,SpringCleaning_high,TransitService_high}
## TRUE
## {SocialServices_low,SpringCleaning_high,TransitService_high}
## TRUE
## {LandUsePlanning_high,SocialServices_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,SocialServices_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,Parks_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,Parks_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,Service311_high,TransitService_low}
## TRUE
## {LandUsePlanning_high,Service311_high,TransitService_low}
## TRUE
## {RecreationFacilities_high,SocialServices_high,TransitService_low}
## TRUE
## {RecreationFacilities_high,SocialServices_high,TransitService_low}
## TRUE
## {Parks_high,SocialServices_high,TransitService_low}
## TRUE
## {Parks_high,SocialServices_high,TransitService_low}
## TRUE
## {Service311_high,SocialServices_high,TransitService_low}
## TRUE
## {Service311_high,SocialServices_high,TransitService_low}
## TRUE
## {Parks_high,RecreationFacilities_high,TransitService_low}
## TRUE
## {Parks_high,RecreationFacilities_high,TransitService_low}
## TRUE
## {RecreationFacilities_high,Service311_high,TransitService_low}
## TRUE
## {RecreationFacilities_high,Service311_high,TransitService_low}
## TRUE
## {Parks_high,Service311_high,TransitService_low}
## TRUE
## {Parks_high,Service311_high,TransitService_low}
## TRUE
## {RoadInfrastructure_low,RoadMaintenance_low,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,RoadInfrastructure_low,RoadMaintenance_low}
## TRUE
## {LandUsePlanning_high,RoadInfrastructure_low,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RoadInfrastructure_low,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,RoadInfrastructure_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,RoadInfrastructure_low}
## TRUE
## {LandUsePlanning_high,Parks_high,RoadInfrastructure_low}
## TRUE
## {LandUsePlanning_high,Parks_high,RoadInfrastructure_low}
## TRUE
## {LandUsePlanning_high,RoadInfrastructure_low,Service311_high}
## TRUE
## {LandUsePlanning_high,RoadInfrastructure_low,Service311_high}
## TRUE
## {RecreationFacilities_high,RoadInfrastructure_low,SocialServices_high}
## TRUE
## {RecreationFacilities_high,RoadInfrastructure_low,SocialServices_high}
## TRUE
## {Parks_high,RoadInfrastructure_low,SocialServices_high}
## TRUE
## {Parks_high,RoadInfrastructure_low,SocialServices_high}
## TRUE
## {RoadInfrastructure_low,Service311_high,SocialServices_high}
## TRUE
## {RoadInfrastructure_low,Service311_high,SocialServices_high}
## TRUE
## {Parks_high,RecreationFacilities_high,RoadInfrastructure_low}
## TRUE
## {Parks_high,RecreationFacilities_high,RoadInfrastructure_low}
## TRUE
## {RecreationFacilities_high,RoadInfrastructure_low,Service311_high}
## TRUE
## {RecreationFacilities_high,RoadInfrastructure_low,Service311_high}
## TRUE
## {Parks_high,RoadInfrastructure_low,Service311_high}
## TRUE
## {Parks_high,RoadInfrastructure_low,Service311_high}
## TRUE
## {LandUsePlanning_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,Parks_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,Parks_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,Service311_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_high,Service311_high,TransitPlanning_low}
## TRUE
## {RecreationFacilities_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {RecreationFacilities_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {Parks_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {Parks_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {Service311_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {Service311_high,SocialServices_high,TransitPlanning_low}
## TRUE
## {Parks_high,RecreationFacilities_high,TransitPlanning_low}
## TRUE
## {Parks_high,RecreationFacilities_high,TransitPlanning_low}
## TRUE
## {RecreationFacilities_high,Service311_high,TransitPlanning_low}
## TRUE
## {RecreationFacilities_high,Service311_high,TransitPlanning_low}
## TRUE
## {Parks_high,Service311_high,TransitPlanning_low}
## TRUE
## {Parks_high,Service311_high,TransitPlanning_low}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,RoadMaintenance_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,RoadMaintenance_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,RoadMaintenance_high,Service311_high}
## TRUE
## {LandUsePlanning_low,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,TransitPlanning_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,TransitPlanning_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,Service311_high,TransitPlanning_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,SnowRemoval_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,SnowRemoval_high}
## TRUE
## {LandUsePlanning_low,SnowRemoval_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,SnowRemoval_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,Service311_high,SnowRemoval_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,RoadInfrastructure_high,Service311_high}
## TRUE
## {LandUsePlanning_low,SpringCleaning_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,SpringCleaning_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,Service311_high,TransitService_high}
## TRUE
## {LandUsePlanning_low,Parks_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_low,Service311_high,SpringCleaning_high}
## TRUE
## {LandUsePlanning_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {LandUsePlanning_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,Parks_high,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,Parks_high,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,Service311_high,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,Service311_high,SnowRemoval_low}
## TRUE
## {RecreationFacilities_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {RecreationFacilities_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {Parks_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {Parks_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {Service311_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {Service311_high,SnowRemoval_low,SocialServices_high}
## TRUE
## {RecreationFacilities_high,SnowRemoval_low,SpringCleaning_high}
## TRUE
## {Parks_high,RecreationFacilities_high,SnowRemoval_low}
## TRUE
## {Parks_high,RecreationFacilities_high,SnowRemoval_low}
## TRUE
## {RecreationFacilities_high,Service311_high,SnowRemoval_low}
## TRUE
## {RecreationFacilities_high,Service311_high,SnowRemoval_low}
## TRUE
## {Parks_high,SnowRemoval_low,TransitService_high}
## TRUE
## {Service311_high,SnowRemoval_low,TransitService_high}
## TRUE
## {Parks_high,SnowRemoval_low,SpringCleaning_high}
## TRUE
## {Service311_high,SnowRemoval_low,SpringCleaning_high}
## TRUE
## {Parks_high,Service311_high,SnowRemoval_low}
## TRUE
## {Parks_high,Service311_high,SnowRemoval_low}
## TRUE
## {LandUsePlanning_high,RoadMaintenance_low,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RoadMaintenance_low,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,RoadMaintenance_low}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,RoadMaintenance_low}
## TRUE
## {LandUsePlanning_high,RoadMaintenance_low,SpringCleaning_high}
## TRUE
## {LandUsePlanning_high,Parks_high,RoadMaintenance_low}
## TRUE
## {LandUsePlanning_high,Parks_high,RoadMaintenance_low}
## TRUE
## {LandUsePlanning_high,RoadMaintenance_low,Service311_high}
## TRUE
## {LandUsePlanning_high,RoadMaintenance_low,Service311_high}
## TRUE
## {RecreationFacilities_high,RoadMaintenance_low,SocialServices_high}
## TRUE
## {RecreationFacilities_high,RoadMaintenance_low,SocialServices_high}
## TRUE
## {RoadMaintenance_low,SocialServices_high,SpringCleaning_high}
## TRUE
## {Parks_high,RoadMaintenance_low,SocialServices_high}
## TRUE
## {Parks_high,RoadMaintenance_low,SocialServices_high}
## TRUE
## {RoadMaintenance_low,Service311_high,SocialServices_high}
## TRUE
## {RoadMaintenance_low,Service311_high,SocialServices_high}
## TRUE
## {RecreationFacilities_high,RoadMaintenance_low,TransitService_high}
## TRUE
## {RecreationFacilities_high,RoadMaintenance_low,SpringCleaning_high}
## TRUE
## {Parks_high,RecreationFacilities_high,RoadMaintenance_low}
## TRUE
## {Parks_high,RecreationFacilities_high,RoadMaintenance_low}
## TRUE
## {RecreationFacilities_high,RoadMaintenance_low,Service311_high}
## TRUE
## {RecreationFacilities_high,RoadMaintenance_low,Service311_high}
## TRUE
## {Parks_high,RoadMaintenance_low,TransitService_high}
## TRUE
## {RoadMaintenance_low,Service311_high,TransitService_high}
## TRUE
## {Parks_high,RoadMaintenance_low,SpringCleaning_high}
## TRUE
## {RoadMaintenance_low,Service311_high,SpringCleaning_high}
## TRUE
## {Parks_high,RoadMaintenance_low,Service311_high}
## TRUE
## {Parks_high,RoadMaintenance_low,Service311_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Parks_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Parks_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Parks_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Service311_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Service311_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Service311_high,SocialServices_high}
## TRUE
## {LandUsePlanning_high,Parks_high,RecreationFacilities_high}
## TRUE
## {LandUsePlanning_high,Parks_high,RecreationFacilities_high}
## TRUE
## {LandUsePlanning_high,Parks_high,RecreationFacilities_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,Service311_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,Service311_high}
## TRUE
## {LandUsePlanning_high,RecreationFacilities_high,Service311_high}
## TRUE
## {LandUsePlanning_high,Parks_high,Service311_high}
## TRUE
## {LandUsePlanning_high,Parks_high,Service311_high}
## TRUE
## {LandUsePlanning_high,Parks_high,Service311_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadMaintenance_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SnowRemoval_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RoadMaintenance_high,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,RoadMaintenance_high,SpringCleaning_high}
## TRUE
## {RoadMaintenance_high,SpringCleaning_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SpringCleaning_high,TransitService_high}
## TRUE
## {RoadMaintenance_high,SpringCleaning_high,TransitService_high}
## TRUE
## {Parks_high,RecreationFacilities_high,SocialServices_high}
## TRUE
## {Parks_high,RecreationFacilities_high,SocialServices_high}
## TRUE
## {Parks_high,RecreationFacilities_high,SocialServices_high}
## TRUE
## {RecreationFacilities_high,Service311_high,SocialServices_high}
## TRUE
## {RecreationFacilities_high,Service311_high,SocialServices_high}
## TRUE
## {RecreationFacilities_high,Service311_high,SocialServices_high}
## TRUE
## {Parks_high,Service311_high,SocialServices_high}
## TRUE
## {Parks_high,Service311_high,SocialServices_high}
## TRUE
## {Parks_high,Service311_high,SocialServices_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,TransitPlanning_high}
## TRUE
## {SnowRemoval_high,TransitPlanning_high,TransitService_high}
## TRUE
## {SnowRemoval_high,TransitPlanning_high,TransitService_high}
## TRUE
## {SnowRemoval_high,TransitPlanning_high,TransitService_high}
## TRUE
## {SnowRemoval_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {SnowRemoval_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {SnowRemoval_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {RoadInfrastructure_high,SpringCleaning_high,TransitPlanning_high}
## TRUE
## {SpringCleaning_high,TransitPlanning_high,TransitService_high}
## TRUE
## {SpringCleaning_high,TransitPlanning_high,TransitService_high}
## TRUE
## {SpringCleaning_high,TransitPlanning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {RoadInfrastructure_high,SnowRemoval_high,SpringCleaning_high}
## TRUE
## {SnowRemoval_high,SpringCleaning_high,TransitService_high}
## TRUE
## {SnowRemoval_high,SpringCleaning_high,TransitService_high}
## TRUE
## {SnowRemoval_high,SpringCleaning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SpringCleaning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SpringCleaning_high,TransitService_high}
## TRUE
## {RoadInfrastructure_high,SpringCleaning_high,TransitService_high}
## TRUE
## {Parks_high,RecreationFacilities_high,Service311_high}
## TRUE
## {Parks_high,RecreationFacilities_high,Service311_high}
## TRUE
## {Parks_high,RecreationFacilities_high,Service311_high}
## TRUE
is.significant(rules_nr, calgary_trans)
## [1] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [25] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [37] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [49] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [73] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [85] TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [97] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
## [109] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [133] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [145] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [157] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [169] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [193] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [205] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [217] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [229] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [253] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [265] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [277] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [289] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [313] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [325] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [337] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [349] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [361] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [373] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [385] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [397] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
inspect(head(sort(rules_nr, by = "lift"), 10))
## lhs rhs support confidence coverage lift count
## [1] {RoadInfrastructure_low,
## SnowRemoval_low} => {RoadMaintenance_low} 0.04111379 0.7687970 0.05347809 3.669862 409
## [2] {LandUsePlanning_high,
## RoadInfrastructure_low} => {RoadMaintenance_low} 0.04694411 0.6908284 0.06795336 3.297678 467
## [3] {RoadInfrastructure_low} => {RoadMaintenance_low} 0.07529152 0.6903226 0.10906715 3.295263 749
## [4] {RoadInfrastructure_high,
## SocialServices_low} => {RoadMaintenance_high} 0.06222356 0.9702194 0.06413349 2.006182 619
## [5] {LandUsePlanning_low,
## TransitPlanning_high} => {RoadMaintenance_high} 0.09207881 0.9631966 0.09559710 1.991661 916
## [6] {LandUsePlanning_low,
## RoadInfrastructure_high} => {RoadMaintenance_high} 0.09278247 0.9614583 0.09650181 1.988066 923
## [7] {SnowRemoval_high,
## SocialServices_low} => {RoadMaintenance_high} 0.06202252 0.9610592 0.06453559 1.987241 617
## [8] {RecreationFacilities_low,
## RoadInfrastructure_high} => {RoadMaintenance_high} 0.04141536 0.9537037 0.04342581 1.972032 412
## [9] {SocialServices_low,
## TransitPlanning_high} => {RoadMaintenance_high} 0.06212304 0.9537037 0.06513872 1.972032 618
## [10] {LandUsePlanning_low,
## SnowRemoval_high} => {RoadMaintenance_high} 0.09217933 0.9473140 0.09730599 1.958819 917
When ranking the remaining rules by lift, the strongest associations mainly involve low ratings related to road infrastructure, road maintenance, and snow removal. In particular, low satisfaction with road infrastructure is strongly linked to low road maintenance.
Compared to the earlier high-support rules, these patterns occur less often but are more informative, since they point to specific problem areas rather than overall positive sentiment.
After cleaning the rule set, I used several visualisations to better understand how the remaining rules compare in terms of support, confidence, and lift
plot(rules_nr, method = "grouped")
plot(rules_nr, method = "paracoord", control = list(reorder = TRUE))
plot(rules_nr, measure = c("support", "lift"), shading = "confidence")
plot(rules_nr, method = "matrix", measure = "lift")
## Itemsets in Antecedent (LHS)
## [1] "{RoadInfrastructure_low,SnowRemoval_low}"
## [2] "{LandUsePlanning_high,RoadInfrastructure_low}"
## [3] "{RoadInfrastructure_high,SocialServices_low}"
## [4] "{SnowRemoval_high,SocialServices_low}"
## [5] "{LandUsePlanning_low,RoadInfrastructure_high}"
## [6] "{LandUsePlanning_low,TransitPlanning_high}"
## [7] "{RoadMaintenance_high,SocialServices_low}"
## [8] "{SocialServices_low,TransitPlanning_high}"
## [9] "{RecreationFacilities_low,SnowRemoval_high}"
## [10] "{RecreationFacilities_low,RoadInfrastructure_high}"
## [11] "{LandUsePlanning_low,SnowRemoval_high}"
## [12] "{RoadMaintenance_high,TransitService_high}"
## [13] "{LandUsePlanning_low,RoadMaintenance_high}"
## [14] "{LandUsePlanning_low,TransitService_high}"
## [15] "{RecreationFacilities_low,TransitPlanning_high}"
## [16] "{SpringCleaning_high,TransitPlanning_high}"
## [17] "{SnowRemoval_high,TransitPlanning_high}"
## [18] "{RoadInfrastructure_high,TransitService_high}"
## [19] "{LandUsePlanning_low,SpringCleaning_high}"
## [20] "{RecreationFacilities_low,TransitService_high}"
## [21] "{RoadMaintenance_high,SpringCleaning_high}"
## [22] "{SnowRemoval_high,TransitService_high}"
## [23] "{SocialServices_low,SpringCleaning_high}"
## [24] "{SocialServices_low,TransitService_high}"
## [25] "{RoadInfrastructure_high,SpringCleaning_high}"
## [26] "{RecreationFacilities_low,RoadMaintenance_high}"
## [27] "{RoadInfrastructure_high,SnowRemoval_high}"
## [28] "{RecreationFacilities_low,SpringCleaning_high}"
## [29] "{RoadMaintenance_high,SnowRemoval_high}"
## [30] "{RoadMaintenance_high,TransitPlanning_high}"
## [31] "{RoadInfrastructure_high,TransitPlanning_high}"
## [32] "{SpringCleaning_high,TransitService_high}"
## [33] "{SnowRemoval_high,SpringCleaning_high}"
## [34] "{TransitPlanning_high,TransitService_high}"
## [35] "{RoadInfrastructure_high,RoadMaintenance_high}"
## [36] "{LandUsePlanning_high,Service311_high}"
## [37] "{Service311_high,SocialServices_high}"
## [38] "{LandUsePlanning_high,Parks_high}"
## [39] "{RoadMaintenance_low,SocialServices_high}"
## [40] "{RoadInfrastructure_low,SocialServices_high}"
## [41] "{Parks_high,SocialServices_high}"
## [42] "{LandUsePlanning_high,TransitPlanning_low}"
## [43] "{SocialServices_high,TransitPlanning_low}"
## [44] "{RecreationFacilities_high,Service311_high}"
## [45] "{SocialServices_high,TransitService_low}"
## [46] "{RecreationFacilities_high,TransitService_low}"
## [47] "{LandUsePlanning_high,TransitService_low}"
## [48] "{LandUsePlanning_high,RoadMaintenance_low}"
## [49] "{LandUsePlanning_high,SnowRemoval_low}"
## [50] "{SnowRemoval_low,SocialServices_high}"
## [51] "{RecreationFacilities_high,SocialServices_high}"
## [52] "{RecreationFacilities_high,TransitPlanning_low}"
## [53] "{LandUsePlanning_high,RecreationFacilities_high}"
## [54] "{RecreationFacilities_high,RoadMaintenance_low}"
## [55] "{RecreationFacilities_high,RoadInfrastructure_low}"
## [56] "{Parks_high,TransitPlanning_low}"
## [57] "{Parks_high,RecreationFacilities_high}"
## [58] "{RecreationFacilities_high,SnowRemoval_low}"
## [59] "{RoadInfrastructure_low}"
## [60] "{Parks_high,Service311_high}"
## [61] "{Parks_high,TransitService_low}"
## [62] "{Service311_high,TransitService_low}"
## [63] "{Parks_high,RoadMaintenance_low}"
## [64] "{RoadMaintenance_high}"
## [65] "{Parks_high,RoadInfrastructure_low}"
## [66] "{RoadMaintenance_low,Service311_high}"
## [67] "{LandUsePlanning_high,SocialServices_high}"
## [68] "{RoadInfrastructure_low,Service311_high}"
## [69] "{Service311_high,TransitPlanning_low}"
## [70] "{Parks_high,SnowRemoval_low}"
## [71] "{LandUsePlanning_high}"
## [72] "{SocialServices_high}"
## [73] "{TransitPlanning_high}"
## [74] "{RoadInfrastructure_high}"
## [75] "{Service311_high,SnowRemoval_low}"
## [76] "{SnowRemoval_high}"
## [77] "{LandUsePlanning_low,Service311_high}"
## [78] "{RecreationFacilities_high}"
## [79] "{LandUsePlanning_low}"
## [80] "{SocialServices_low}"
## [81] "{RecreationFacilities_low}"
## [82] "{TransitService_high}"
## [83] "{RoadMaintenance_low,SpringCleaning_high}"
## [84] "{SpringCleaning_high}"
## [85] "{LandUsePlanning_low,Parks_high}"
## [86] "{Parks_high}"
## [87] "{RoadMaintenance_low,TransitService_high}"
## [88] "{Service311_high}"
## [89] "{TransitService_low}"
## [90] "{SnowRemoval_low,SpringCleaning_high}"
## [91] "{SnowRemoval_low,TransitService_high}"
## [92] "{TransitPlanning_low}"
## [93] "{RoadMaintenance_low}"
## [94] "{SnowRemoval_low}"
## [95] "{SpringCleaning_low}"
## Itemsets in Consequent (RHS)
## [1] "{Service311_high}" "{Parks_high}"
## [3] "{SpringCleaning_high}" "{RecreationFacilities_high}"
## [5] "{TransitService_high}" "{SocialServices_high}"
## [7] "{LandUsePlanning_high}" "{SnowRemoval_high}"
## [9] "{RoadInfrastructure_high}" "{TransitPlanning_high}"
## [11] "{RoadMaintenance_high}" "{RoadMaintenance_low}"
From the grouped plot, it is clear that many rules are centred around combinations involving road maintenance, snow removal, transit planning, and recreation facilities. These combinations repeatedly appear across multiple outcomes, especially for services related to maintenance. This suggests that dissatisfaction or satisfaction in these areas tends to co-occur.
In the parallel coordinates plot, most rules converge toward high satisfaction levels, which fits the overall positive trend in the data. However, one pattern is especially noticeable on the lower end: low road infrastructure combined with low snow removal often leads to low road maintenance. This stands out visually because the lines are darker, indicating higher confidence, meaning that when these conditions occur, the outcome is very likely to follow.
This scatter plot shows the relationship between support and lift for all extracted rules, with colour indicating confidence.
Two clear clusters appear. On the right, there is a dense group of rules with high support and moderate lift. These rules are common across many responses and mostly reflect broadly positive service evaluations. Their lift values are close to 1–2, meaning they are frequent but not especially surprising.
On the left, there is a larger spread of rules with lower support but higher lift. These rules occur less often, but when they do occur, they are much more informative. Many of these high-lift rules also show strong confidence, indicating reliable patterns despite their lower frequency.
I then ranked the cleaned rules by lift and confidence to identify the strongest and most meaningful associations.
rules_ranked <- sort(rules_nr, by = c("lift", "confidence"), decreasing = TRUE)
inspect(head(rules_ranked, 20))
## lhs rhs support confidence coverage lift count
## [1] {RoadInfrastructure_low,
## SnowRemoval_low} => {RoadMaintenance_low} 0.04111379 0.7687970 0.05347809 3.669862 409
## [2] {LandUsePlanning_high,
## RoadInfrastructure_low} => {RoadMaintenance_low} 0.04694411 0.6908284 0.06795336 3.297678 467
## [3] {RoadInfrastructure_low} => {RoadMaintenance_low} 0.07529152 0.6903226 0.10906715 3.295263 749
## [4] {RoadInfrastructure_high,
## SocialServices_low} => {RoadMaintenance_high} 0.06222356 0.9702194 0.06413349 2.006182 619
## [5] {LandUsePlanning_low,
## TransitPlanning_high} => {RoadMaintenance_high} 0.09207881 0.9631966 0.09559710 1.991661 916
## [6] {LandUsePlanning_low,
## RoadInfrastructure_high} => {RoadMaintenance_high} 0.09278247 0.9614583 0.09650181 1.988066 923
## [7] {SnowRemoval_high,
## SocialServices_low} => {RoadMaintenance_high} 0.06202252 0.9610592 0.06453559 1.987241 617
## [8] {RecreationFacilities_low,
## RoadInfrastructure_high} => {RoadMaintenance_high} 0.04141536 0.9537037 0.04342581 1.972032 412
## [9] {SocialServices_low,
## TransitPlanning_high} => {RoadMaintenance_high} 0.06212304 0.9537037 0.06513872 1.972032 618
## [10] {LandUsePlanning_low,
## SnowRemoval_high} => {RoadMaintenance_high} 0.09217933 0.9473140 0.09730599 1.958819 917
## [11] {RecreationFacilities_low,
## SnowRemoval_high} => {RoadMaintenance_high} 0.04081222 0.9463869 0.04312425 1.956902 406
## [12] {SnowRemoval_high,
## TransitPlanning_high} => {RoadMaintenance_high} 0.39987937 0.9386503 0.42601528 1.940905 3978
## [13] {RecreationFacilities_low,
## TransitPlanning_high} => {RoadMaintenance_high} 0.04081222 0.9376443 0.04352634 1.938825 406
## [14] {RoadInfrastructure_high,
## SnowRemoval_high} => {RoadMaintenance_high} 0.40832328 0.9325069 0.43787696 1.928202 4062
## [15] {RoadInfrastructure_high,
## TransitPlanning_high} => {RoadMaintenance_high} 0.41043426 0.9283765 0.44209891 1.919661 4083
## [16] {RoadInfrastructure_low,
## SocialServices_high} => {LandUsePlanning_high} 0.06473663 0.9484536 0.06825493 1.916948 644
## [17] {RoadInfrastructure_high,
## SocialServices_low} => {TransitPlanning_high} 0.06292722 0.9811912 0.06413349 1.912400 626
## [18] {RoadMaintenance_high,
## SocialServices_low} => {TransitPlanning_high} 0.06212304 0.9732283 0.06383193 1.896880 618
## [19] {RoadMaintenance_low,
## SocialServices_high} => {LandUsePlanning_high} 0.12404503 0.9384030 0.13218737 1.896634 1234
## [20] {LandUsePlanning_low,
## TransitService_high} => {RoadMaintenance_high} 0.09217933 0.9151697 0.10072376 1.892352 917
I further filtered the rules using minimum thresholds for support, confidence, and lift to retain only the most meaningful associations.
rules_top <- rules_nr[
quality(rules_nr)$support >= 0.05 &
quality(rules_nr)$confidence >= 0.7 &
quality(rules_nr)$lift >= 1.8
]
summary(rules_top)
## set of 60 rules
##
## rule length distribution (lhs + rhs):sizes
## 3
## 60
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3 3 3 3 3 3
##
## summary of quality measures:
## support confidence coverage lift
## Min. :0.06001 Min. :0.8733 Min. :0.06383 Min. :1.806
## 1st Qu.:0.06293 1st Qu.:0.9304 1st Qu.:0.06818 1st Qu.:1.835
## Median :0.09258 Median :0.9463 Median :0.09731 Median :1.850
## Mean :0.20103 Mean :0.9418 Mean :0.21551 Mean :1.867
## 3rd Qu.:0.40764 3rd Qu.:0.9611 3rd Qu.:0.43144 3rd Qu.:1.884
## Max. :0.42501 Max. :0.9812 Max. :0.47577 Max. :2.006
## count
## Min. : 597
## 1st Qu.: 626
## Median : 921
## Mean :2000
## 3rd Qu.:4055
## Max. :4228
##
## mining info:
## data ntransactions support confidence
## calgary_trans 9948 0.04 0.6
## call
## apriori(data = calgary_trans, parameter = list(support = 0.04, confidence = 0.6, minlen = 2, maxlen = 3))
I visualised the final set of selected rules to examine their patterns in terms of support, confidence, and lift.
plot(rules_top, method = "grouped")
plot(rules_top, method = "paracoord", control = list(reorder = TRUE))
plot(rules_top, measure = c("support", "lift"), shading = "confidence")
plot(rules_top, method = "matrix", measure = "lift")
## Itemsets in Antecedent (LHS)
## [1] "{RoadInfrastructure_high,SocialServices_low}"
## [2] "{RoadInfrastructure_high,TransitPlanning_high}"
## [3] "{RoadInfrastructure_low,SocialServices_high}"
## [4] "{LandUsePlanning_low,RoadInfrastructure_high}"
## [5] "{SnowRemoval_high,SocialServices_low}"
## [6] "{RoadMaintenance_low,SocialServices_high}"
## [7] "{LandUsePlanning_low,TransitPlanning_high}"
## [8] "{LandUsePlanning_low,TransitService_high}"
## [9] "{SocialServices_high,TransitPlanning_low}"
## [10] "{SnowRemoval_high,TransitPlanning_high}"
## [11] "{SocialServices_low,TransitPlanning_high}"
## [12] "{RoadMaintenance_high,SocialServices_low}"
## [13] "{SnowRemoval_high,TransitService_high}"
## [14] "{SocialServices_low,TransitService_high}"
## [15] "{RoadInfrastructure_high,SnowRemoval_high}"
## [16] "{LandUsePlanning_low,SnowRemoval_high}"
## [17] "{SocialServices_high,TransitService_low}"
## [18] "{LandUsePlanning_high,RoadInfrastructure_low}"
## [19] "{LandUsePlanning_low,RoadMaintenance_high}"
## [20] "{SnowRemoval_low,SocialServices_high}"
## [21] "{LandUsePlanning_low,SpringCleaning_high}"
## [22] "{RoadInfrastructure_high,TransitService_high}"
## [23] "{RoadInfrastructure_high,SpringCleaning_high}"
## [24] "{SocialServices_low,SpringCleaning_high}"
## [25] "{LandUsePlanning_high,TransitPlanning_low}"
## [26] "{RecreationFacilities_high,SocialServices_high}"
## [27] "{RoadMaintenance_high,SnowRemoval_high}"
## [28] "{SpringCleaning_high,TransitPlanning_high}"
## [29] "{LandUsePlanning_high,TransitService_low}"
## [30] "{RoadMaintenance_high,TransitPlanning_high}"
## [31] "{RoadMaintenance_high,TransitService_high}"
## [32] "{TransitPlanning_high,TransitService_high}"
## [33] "{LandUsePlanning_high,RoadMaintenance_low}"
## [34] "{RoadInfrastructure_high,RoadMaintenance_high}"
## [35] "{LandUsePlanning_high,SnowRemoval_low}"
## [36] "{LandUsePlanning_high,RecreationFacilities_high}"
## [37] "{SnowRemoval_high,SpringCleaning_high}"
## Itemsets in Consequent (RHS)
## [1] "{SocialServices_high}" "{RoadInfrastructure_high}"
## [3] "{SnowRemoval_high}" "{TransitPlanning_high}"
## [5] "{LandUsePlanning_high}" "{RoadMaintenance_high}"
After filtering the rules more strictly, the grouped plot looks a lot simpler. There are far fewer rules now, and most of the remaining ones are related to road maintenance and other infrastructure services. I can clearly see road infrastructure, snow removal, and transit planning showing up together on the left, with road maintenance appearing on the right.
In the filtered parallel coordinates plot, most rules still converge toward high satisfaction outcomes on the RHS. The stronger rules mainly connect combinations of service ratings to other high-rated services, rather than to low road maintenance. While low road infrastructure and low snow removal appeared together in earlier analyses, that pattern is no longer prominent after applying the stricter support, confidence, and lift thresholds.
The scatter plot shows a clear trade-off between support and lift. Most rules fall into two groups: one with lower support but higher lift, and another with higher support but slightly lower lift. The darker points indicate higher confidence, which means these rules are very consistent when they occur. Overall, the plot shows that the strongest rules either capture very reliable but less common patterns, or more common patterns with still reasonably strong associations.
In this project, I used association rule mining to explore how people in Calgary rate different city services. Instead of trying to predict satisfaction, I focused on finding patterns in how service ratings appear together across survey responses.
I transformed the survey results into transactional data by grouping ratings into low and high categories and removing neutral responses. This allowed me to focus on clearer satisfaction and dissatisfaction signals and apply association rule mining more effectively. I first used Eclat to identify frequent co-occurring service ratings and then applied Apriori to analyse directional relationships using support, confidence, and lift.
The results show that high satisfaction dominates the dataset. Services such as parks, recreation facilities, and 311 services often appear together, which suggests that respondents tend to evaluate these everyday services in a similar way. At the same time, the strongest and most informative rules involve dissatisfaction. In particular, low ratings for road infrastructure and snow removal are strongly associated with low road maintenance, even though these patterns occur less frequently overall.
Overall, this analysis shows that association rule mining can reveal both broad satisfaction trends and specific problem areas in survey data. The results highlight how closely related services are often evaluated together and how dissatisfaction in infrastructure-related services tends to cluster around maintenance issues.