#read csv file
garment_prod <-read.csv("/Users/lakshmimounikab/Desktop/Stats with R/R practice/garment_prod.csv")
summary(garment_prod)
##      date             quarter           department            day           
##  Length:1197        Length:1197        Length:1197        Length:1197       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##       team        targeted_productivity      smv             wip         
##  Min.   : 1.000   Min.   :0.0700        Min.   : 2.90   Min.   :    7.0  
##  1st Qu.: 3.000   1st Qu.:0.7000        1st Qu.: 3.94   1st Qu.:  774.5  
##  Median : 6.000   Median :0.7500        Median :15.26   Median : 1039.0  
##  Mean   : 6.427   Mean   :0.7296        Mean   :15.06   Mean   : 1190.5  
##  3rd Qu.: 9.000   3rd Qu.:0.8000        3rd Qu.:24.26   3rd Qu.: 1252.5  
##  Max.   :12.000   Max.   :0.8000        Max.   :54.56   Max.   :23122.0  
##                                                         NA's   :506      
##    over_time       incentive         idle_time           idle_men      
##  Min.   :    0   Min.   :   0.00   Min.   :  0.0000   Min.   : 0.0000  
##  1st Qu.: 1440   1st Qu.:   0.00   1st Qu.:  0.0000   1st Qu.: 0.0000  
##  Median : 3960   Median :   0.00   Median :  0.0000   Median : 0.0000  
##  Mean   : 4567   Mean   :  38.21   Mean   :  0.7302   Mean   : 0.3693  
##  3rd Qu.: 6960   3rd Qu.:  50.00   3rd Qu.:  0.0000   3rd Qu.: 0.0000  
##  Max.   :25920   Max.   :3600.00   Max.   :300.0000   Max.   :45.0000  
##                                                                        
##  no_of_style_change no_of_workers   actual_productivity
##  Min.   :0.0000     Min.   : 2.00   Min.   :0.2337     
##  1st Qu.:0.0000     1st Qu.: 9.00   1st Qu.:0.6503     
##  Median :0.0000     Median :34.00   Median :0.7733     
##  Mean   :0.1504     Mean   :34.61   Mean   :0.7351     
##  3rd Qu.:0.0000     3rd Qu.:57.00   3rd Qu.:0.8503     
##  Max.   :2.0000     Max.   :89.00   Max.   :1.1204     
## 
# load dplyr library
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

PART-1

Group by function and group summary

# Group by quarter for actual and targeted productivity
qtr_group <- garment_prod %>% group_by(quarter) %>%
  summarise(avg_qtr_targeted = mean(targeted_productivity),
            avg_qtr_actual = mean(actual_productivity))
View(qtr_group)
summary(qtr_group)
##    quarter          avg_qtr_targeted avg_qtr_actual  
##  Length:5           Min.   :0.7145   Min.   :0.7048  
##  Class :character   1st Qu.:0.7182   1st Qu.:0.7091  
##  Mode  :character   Median :0.7212   Median :0.7437  
##                     Mean   :0.7260   Mean   :0.7471  
##                     3rd Qu.:0.7321   3rd Qu.:0.7516  
##                     Max.   :0.7441   Max.   :0.8262
# Group by team for smv and incentive
team_group <- garment_prod %>% group_by(team) %>%
  summarise(std_smv = sd(smv), std_incentive = sd(incentive))
View(team_group)
summary(team_group)
##       team          std_smv       std_incentive   
##  Min.   : 1.00   Min.   : 5.579   Min.   : 22.13  
##  1st Qu.: 3.75   1st Qu.: 9.895   1st Qu.: 95.23  
##  Median : 6.50   Median :11.167   Median :100.48  
##  Mean   : 6.50   Mean   :10.520   Mean   :129.97  
##  3rd Qu.: 9.25   3rd Qu.:11.879   3rd Qu.:126.02  
##  Max.   :12.00   Max.   :12.574   Max.   :351.52
# Group by day for overtime and no of workers
day_group <- garment_prod %>% group_by(day) %>%
  summarise(sum_over_time = sum(over_time), total_no_of_workers = sum(no_of_workers))
View(day_group)
summary(day_group)
##      day            sum_over_time     total_no_of_workers
##  Length:6           Min.   : 863490   Min.   :6264       
##  Class :character   1st Qu.: 869975   1st Qu.:6949       
##  Mode  :character   Median : 885340   Median :6996       
##                     Mean   : 911208   Mean   :6905       
##                     3rd Qu.: 921008   3rd Qu.:7036       
##                     Max.   :1035330   Max.   :7190
# Group by date, day and team
mul_group <- garment_prod %>% group_by(date,day,team) %>%
  summarise(mean_qtr_targeted_prod = mean(targeted_productivity),
            mean_qtr_actual_prod = mean(actual_productivity),
            mean_over_time = mean(over_time),
            std_over_time = sd(over_time),
            mean_no_of_workers = mean(no_of_workers),
            std_no_of_workers = sd(no_of_workers))
## `summarise()` has grouped output by 'date', 'day'. You can override using the
## `.groups` argument.
View(mul_group)

Expected probability for groups

qtr_grouped_data <- qtr_group %>%
  mutate(prob_targeted= avg_qtr_targeted / sum(avg_qtr_targeted), prob_actual = avg_qtr_actual / sum(avg_qtr_actual))
View(qtr_grouped_data)
team_grouped_data <- team_group %>%
  mutate(prob_smv = std_smv/ sum(std_smv),
         prob_incentive= std_incentive / sum(std_incentive))
View(team_grouped_data)
day_grouped_data <- day_group %>%
  mutate(prob_over_time = sum_over_time / sum(sum_over_time),
         prob_no_of_workers = total_no_of_workers / sum(total_no_of_workers))
View(day_grouped_data)

Visualize the grouped data

ggplot(qtr_grouped_data, aes(x = quarter, y = avg_qtr_targeted)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "black") +
  labs(
    title = "Bar Graph for Grouped data by Quarter",
    x = "Quarter",
    y = "Avg_qtr_targeted"
  ) +
  theme_minimal()

ggplot(team_grouped_data, aes(x = std_incentive, y = std_smv, color = team)) +
  geom_point() +
  labs(
    title = "Scatter Plot for Team Grouped data",
    x = "std_incentive",
    y = "std_smv",
    color = "Team"
  ) +
  theme_minimal()

ggplot(day_grouped_data, aes(x = day, y = sum_over_time, group = 1)) +
  geom_line() +
  geom_point() +
  labs(title = "Line Plot for Grouped Data", x = "Category", y = "Mean Value") +
  theme_minimal()

Lowest probability and anomaly

min_qtr_grouped_data <- qtr_grouped_data %>%
  filter(prob_targeted == min(prob_targeted)) %>%
  mutate(Anomaly_1 ="Targeted Prob anomaly")
View(min_qtr_grouped_data)
summary(min_qtr_grouped_data)
##    quarter          avg_qtr_targeted avg_qtr_actual   prob_targeted   
##  Length:1           Min.   :0.7145   Min.   :0.7091   Min.   :0.1968  
##  Class :character   1st Qu.:0.7145   1st Qu.:0.7091   1st Qu.:0.1968  
##  Mode  :character   Median :0.7145   Median :0.7091   Median :0.1968  
##                     Mean   :0.7145   Mean   :0.7091   Mean   :0.1968  
##                     3rd Qu.:0.7145   3rd Qu.:0.7091   3rd Qu.:0.1968  
##                     Max.   :0.7145   Max.   :0.7091   Max.   :0.1968  
##   prob_actual      Anomaly_1        
##  Min.   :0.1898   Length:1          
##  1st Qu.:0.1898   Class :character  
##  Median :0.1898   Mode  :character  
##  Mean   :0.1898                     
##  3rd Qu.:0.1898                     
##  Max.   :0.1898
min_team_grouped_data <- team_grouped_data %>%
  filter(prob_smv == min(prob_smv)) %>%
  mutate(Anomaly_2 ="SMV Prob anomaly")
View(min_team_grouped_data)
summary(min_team_grouped_data)
##       team       std_smv      std_incentive      prob_smv     
##  Min.   :12   Min.   :5.579   Min.   :108.7   Min.   :0.0442  
##  1st Qu.:12   1st Qu.:5.579   1st Qu.:108.7   1st Qu.:0.0442  
##  Median :12   Median :5.579   Median :108.7   Median :0.0442  
##  Mean   :12   Mean   :5.579   Mean   :108.7   Mean   :0.0442  
##  3rd Qu.:12   3rd Qu.:5.579   3rd Qu.:108.7   3rd Qu.:0.0442  
##  Max.   :12   Max.   :5.579   Max.   :108.7   Max.   :0.0442  
##  prob_incentive     Anomaly_2        
##  Min.   :0.06972   Length:1          
##  1st Qu.:0.06972   Class :character  
##  Median :0.06972   Mode  :character  
##  Mean   :0.06972                     
##  3rd Qu.:0.06972                     
##  Max.   :0.06972
min_day_grouped_data <- day_grouped_data %>%
  filter(prob_over_time == min(prob_over_time)) %>%
  mutate(Anomaly_3 ="Over time Prob anomaly")
View(min_day_grouped_data)
summary(min_day_grouped_data)
##      day            sum_over_time    total_no_of_workers prob_over_time  
##  Length:1           Min.   :863490   Min.   :7190        Min.   :0.1579  
##  Class :character   1st Qu.:863490   1st Qu.:7190        1st Qu.:0.1579  
##  Mode  :character   Median :863490   Median :7190        Median :0.1579  
##                     Mean   :863490   Mean   :7190        Mean   :0.1579  
##                     3rd Qu.:863490   3rd Qu.:7190        3rd Qu.:0.1579  
##                     Max.   :863490   Max.   :7190        Max.   :0.1579  
##  prob_no_of_workers  Anomaly_3        
##  Min.   :0.1736     Length:1          
##  1st Qu.:0.1736     Class :character  
##  Median :0.1736     Mode  :character  
##  Mean   :0.1736                       
##  3rd Qu.:0.1736                       
##  Max.   :0.1736

Combining the results back into the original data frame

data <- garment_prod %>%
  left_join(min_qtr_grouped_data, by="quarter") %>%
  left_join(min_team_grouped_data, by="team") %>%
  left_join(min_day_grouped_data, by="day") 
data$Anomaly_1[is.na(data$Anomaly_1)] <- "Not Anomaly"
data$Anomaly_2[is.na(data$Anomaly_2)] <- "Not Anomaly"
data$Anomaly_3[is.na(data$Anomaly_3)] <- "Not Anomaly"
summary(data)
##      date             quarter           department            day           
##  Length:1197        Length:1197        Length:1197        Length:1197       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##       team        targeted_productivity      smv             wip         
##  Min.   : 1.000   Min.   :0.0700        Min.   : 2.90   Min.   :    7.0  
##  1st Qu.: 3.000   1st Qu.:0.7000        1st Qu.: 3.94   1st Qu.:  774.5  
##  Median : 6.000   Median :0.7500        Median :15.26   Median : 1039.0  
##  Mean   : 6.427   Mean   :0.7296        Mean   :15.06   Mean   : 1190.5  
##  3rd Qu.: 9.000   3rd Qu.:0.8000        3rd Qu.:24.26   3rd Qu.: 1252.5  
##  Max.   :12.000   Max.   :0.8000        Max.   :54.56   Max.   :23122.0  
##                                                         NA's   :506      
##    over_time       incentive         idle_time           idle_men      
##  Min.   :    0   Min.   :   0.00   Min.   :  0.0000   Min.   : 0.0000  
##  1st Qu.: 1440   1st Qu.:   0.00   1st Qu.:  0.0000   1st Qu.: 0.0000  
##  Median : 3960   Median :   0.00   Median :  0.0000   Median : 0.0000  
##  Mean   : 4567   Mean   :  38.21   Mean   :  0.7302   Mean   : 0.3693  
##  3rd Qu.: 6960   3rd Qu.:  50.00   3rd Qu.:  0.0000   3rd Qu.: 0.0000  
##  Max.   :25920   Max.   :3600.00   Max.   :300.0000   Max.   :45.0000  
##                                                                        
##  no_of_style_change no_of_workers   actual_productivity avg_qtr_targeted
##  Min.   :0.0000     Min.   : 2.00   Min.   :0.2337      Min.   :0.7145  
##  1st Qu.:0.0000     1st Qu.: 9.00   1st Qu.:0.6503      1st Qu.:0.7145  
##  Median :0.0000     Median :34.00   Median :0.7733      Median :0.7145  
##  Mean   :0.1504     Mean   :34.61   Mean   :0.7351      Mean   :0.7145  
##  3rd Qu.:0.0000     3rd Qu.:57.00   3rd Qu.:0.8503      3rd Qu.:0.7145  
##  Max.   :2.0000     Max.   :89.00   Max.   :1.1204      Max.   :0.7145  
##                                                         NA's   :949     
##  avg_qtr_actual   prob_targeted     prob_actual      Anomaly_1        
##  Min.   :0.7091   Min.   :0.1968   Min.   :0.1898   Length:1197       
##  1st Qu.:0.7091   1st Qu.:0.1968   1st Qu.:0.1898   Class :character  
##  Median :0.7091   Median :0.1968   Median :0.1898   Mode  :character  
##  Mean   :0.7091   Mean   :0.1968   Mean   :0.1898                     
##  3rd Qu.:0.7091   3rd Qu.:0.1968   3rd Qu.:0.1898                     
##  Max.   :0.7091   Max.   :0.1968   Max.   :0.1898                     
##  NA's   :949      NA's   :949      NA's   :949                        
##     std_smv      std_incentive      prob_smv      prob_incentive  
##  Min.   :5.579   Min.   :108.7   Min.   :0.0442   Min.   :0.0697  
##  1st Qu.:5.579   1st Qu.:108.7   1st Qu.:0.0442   1st Qu.:0.0697  
##  Median :5.579   Median :108.7   Median :0.0442   Median :0.0697  
##  Mean   :5.579   Mean   :108.7   Mean   :0.0442   Mean   :0.0697  
##  3rd Qu.:5.579   3rd Qu.:108.7   3rd Qu.:0.0442   3rd Qu.:0.0697  
##  Max.   :5.579   Max.   :108.7   Max.   :0.0442   Max.   :0.0697  
##  NA's   :1098    NA's   :1098    NA's   :1098     NA's   :1098    
##   Anomaly_2         sum_over_time    total_no_of_workers prob_over_time  
##  Length:1197        Min.   :863490   Min.   :7190        Min.   :0.1579  
##  Class :character   1st Qu.:863490   1st Qu.:7190        1st Qu.:0.1579  
##  Mode  :character   Median :863490   Median :7190        Median :0.1579  
##                     Mean   :863490   Mean   :7190        Mean   :0.1579  
##                     3rd Qu.:863490   3rd Qu.:7190        3rd Qu.:0.1579  
##                     Max.   :863490   Max.   :7190        Max.   :0.1579  
##                     NA's   :989      NA's   :989         NA's   :989     
##  prob_no_of_workers  Anomaly_3        
##  Min.   :0.1736     Length:1197       
##  1st Qu.:0.1736     Class :character  
##  Median :0.1736     Mode  :character  
##  Mean   :0.1736                       
##  3rd Qu.:0.1736                       
##  Max.   :0.1736                       
##  NA's   :989

CONCLUSION:

The above summary is the combinations of all the possible summaries within the dataset. It also includes probabilities and anomalies. There are 3 grouped datasets, based on quarter, team and department. Anomaly length for each group summary is low which implies that the probability of observing a group with low probability is low. Since these probabilities are low, these groups can be classified as rare, which could be worth investigating in the future.

PART-2

# Generate all combinations of the categorical variables
data <- garment_prod
combinations <-expand.grid(cat1 = unique(data$quarter), cat2 = unique(data$department), cat3 = unique(data$team))
print(combinations)
##         cat1       cat2 cat3
## 1   Quarter1     sweing    8
## 2   Quarter2     sweing    8
## 3   Quarter3     sweing    8
## 4   Quarter4     sweing    8
## 5   Quarter5     sweing    8
## 6   Quarter1 finishing     8
## 7   Quarter2 finishing     8
## 8   Quarter3 finishing     8
## 9   Quarter4 finishing     8
## 10  Quarter5 finishing     8
## 11  Quarter1  finishing    8
## 12  Quarter2  finishing    8
## 13  Quarter3  finishing    8
## 14  Quarter4  finishing    8
## 15  Quarter5  finishing    8
## 16  Quarter1     sweing    1
## 17  Quarter2     sweing    1
## 18  Quarter3     sweing    1
## 19  Quarter4     sweing    1
## 20  Quarter5     sweing    1
## 21  Quarter1 finishing     1
## 22  Quarter2 finishing     1
## 23  Quarter3 finishing     1
## 24  Quarter4 finishing     1
## 25  Quarter5 finishing     1
## 26  Quarter1  finishing    1
## 27  Quarter2  finishing    1
## 28  Quarter3  finishing    1
## 29  Quarter4  finishing    1
## 30  Quarter5  finishing    1
## 31  Quarter1     sweing   11
## 32  Quarter2     sweing   11
## 33  Quarter3     sweing   11
## 34  Quarter4     sweing   11
## 35  Quarter5     sweing   11
## 36  Quarter1 finishing    11
## 37  Quarter2 finishing    11
## 38  Quarter3 finishing    11
## 39  Quarter4 finishing    11
## 40  Quarter5 finishing    11
## 41  Quarter1  finishing   11
## 42  Quarter2  finishing   11
## 43  Quarter3  finishing   11
## 44  Quarter4  finishing   11
## 45  Quarter5  finishing   11
## 46  Quarter1     sweing   12
## 47  Quarter2     sweing   12
## 48  Quarter3     sweing   12
## 49  Quarter4     sweing   12
## 50  Quarter5     sweing   12
## 51  Quarter1 finishing    12
## 52  Quarter2 finishing    12
## 53  Quarter3 finishing    12
## 54  Quarter4 finishing    12
## 55  Quarter5 finishing    12
## 56  Quarter1  finishing   12
## 57  Quarter2  finishing   12
## 58  Quarter3  finishing   12
## 59  Quarter4  finishing   12
## 60  Quarter5  finishing   12
## 61  Quarter1     sweing    6
## 62  Quarter2     sweing    6
## 63  Quarter3     sweing    6
## 64  Quarter4     sweing    6
## 65  Quarter5     sweing    6
## 66  Quarter1 finishing     6
## 67  Quarter2 finishing     6
## 68  Quarter3 finishing     6
## 69  Quarter4 finishing     6
## 70  Quarter5 finishing     6
## 71  Quarter1  finishing    6
## 72  Quarter2  finishing    6
## 73  Quarter3  finishing    6
## 74  Quarter4  finishing    6
## 75  Quarter5  finishing    6
## 76  Quarter1     sweing    7
## 77  Quarter2     sweing    7
## 78  Quarter3     sweing    7
## 79  Quarter4     sweing    7
## 80  Quarter5     sweing    7
## 81  Quarter1 finishing     7
## 82  Quarter2 finishing     7
## 83  Quarter3 finishing     7
## 84  Quarter4 finishing     7
## 85  Quarter5 finishing     7
## 86  Quarter1  finishing    7
## 87  Quarter2  finishing    7
## 88  Quarter3  finishing    7
## 89  Quarter4  finishing    7
## 90  Quarter5  finishing    7
## 91  Quarter1     sweing    2
## 92  Quarter2     sweing    2
## 93  Quarter3     sweing    2
## 94  Quarter4     sweing    2
## 95  Quarter5     sweing    2
## 96  Quarter1 finishing     2
## 97  Quarter2 finishing     2
## 98  Quarter3 finishing     2
## 99  Quarter4 finishing     2
## 100 Quarter5 finishing     2
## 101 Quarter1  finishing    2
## 102 Quarter2  finishing    2
## 103 Quarter3  finishing    2
## 104 Quarter4  finishing    2
## 105 Quarter5  finishing    2
## 106 Quarter1     sweing    3
## 107 Quarter2     sweing    3
## 108 Quarter3     sweing    3
## 109 Quarter4     sweing    3
## 110 Quarter5     sweing    3
## 111 Quarter1 finishing     3
## 112 Quarter2 finishing     3
## 113 Quarter3 finishing     3
## 114 Quarter4 finishing     3
## 115 Quarter5 finishing     3
## 116 Quarter1  finishing    3
## 117 Quarter2  finishing    3
## 118 Quarter3  finishing    3
## 119 Quarter4  finishing    3
## 120 Quarter5  finishing    3
## 121 Quarter1     sweing    9
## 122 Quarter2     sweing    9
## 123 Quarter3     sweing    9
## 124 Quarter4     sweing    9
## 125 Quarter5     sweing    9
## 126 Quarter1 finishing     9
## 127 Quarter2 finishing     9
## 128 Quarter3 finishing     9
## 129 Quarter4 finishing     9
## 130 Quarter5 finishing     9
## 131 Quarter1  finishing    9
## 132 Quarter2  finishing    9
## 133 Quarter3  finishing    9
## 134 Quarter4  finishing    9
## 135 Quarter5  finishing    9
## 136 Quarter1     sweing   10
## 137 Quarter2     sweing   10
## 138 Quarter3     sweing   10
## 139 Quarter4     sweing   10
## 140 Quarter5     sweing   10
## 141 Quarter1 finishing    10
## 142 Quarter2 finishing    10
## 143 Quarter3 finishing    10
## 144 Quarter4 finishing    10
## 145 Quarter5 finishing    10
## 146 Quarter1  finishing   10
## 147 Quarter2  finishing   10
## 148 Quarter3  finishing   10
## 149 Quarter4  finishing   10
## 150 Quarter5  finishing   10
## 151 Quarter1     sweing    5
## 152 Quarter2     sweing    5
## 153 Quarter3     sweing    5
## 154 Quarter4     sweing    5
## 155 Quarter5     sweing    5
## 156 Quarter1 finishing     5
## 157 Quarter2 finishing     5
## 158 Quarter3 finishing     5
## 159 Quarter4 finishing     5
## 160 Quarter5 finishing     5
## 161 Quarter1  finishing    5
## 162 Quarter2  finishing    5
## 163 Quarter3  finishing    5
## 164 Quarter4  finishing    5
## 165 Quarter5  finishing    5
## 166 Quarter1     sweing    4
## 167 Quarter2     sweing    4
## 168 Quarter3     sweing    4
## 169 Quarter4     sweing    4
## 170 Quarter5     sweing    4
## 171 Quarter1 finishing     4
## 172 Quarter2 finishing     4
## 173 Quarter3 finishing     4
## 174 Quarter4 finishing     4
## 175 Quarter5 finishing     4
## 176 Quarter1  finishing    4
## 177 Quarter2  finishing    4
## 178 Quarter3  finishing    4
## 179 Quarter4  finishing    4
## 180 Quarter5  finishing    4
#Counting combinations
combination_counts <- data %>%
  group_by(quarter,team,department) %>%
  summarize(Count = n())
## `summarise()` has grouped output by 'quarter', 'team'. You can override using
## the `.groups` argument.
View(combination_counts)
#Counting combinations
combination_counts_2 <- data %>%
  group_by(quarter, day, team,department) %>%
  summarize(Count = n())
## `summarise()` has grouped output by 'quarter', 'day', 'team'. You can override
## using the `.groups` argument.
View(combination_counts_2)

Conclusion:

The combination which didn’t work for this dataset is with date column or attribute. For this dataset, the date attribute is not considered as categorical but as non-categorical.

most_common_combinations <- combination_counts %>%
  filter(Count == max(Count))
cat("\nMost Common Combinations:\n")
## 
## Most Common Combinations:
print(most_common_combinations)
## # A tibble: 68 × 4
## # Groups:   quarter, team [60]
##    quarter   team department Count
##    <chr>    <int> <chr>      <int>
##  1 Quarter1     1 sweing        18
##  2 Quarter1     2 sweing        17
##  3 Quarter1     3 sweing        18
##  4 Quarter1     4 sweing        18
##  5 Quarter1     5 sweing        17
##  6 Quarter1     6 sweing        18
##  7 Quarter1     7 sweing        17
##  8 Quarter1     8 sweing        16
##  9 Quarter1     9 sweing        18
## 10 Quarter1    10 sweing        18
## # ℹ 58 more rows
least_common_combinations <- combination_counts %>%
  filter(Count == min(Count))
cat("\nLeast Common Combinations:\n")
## 
## Least Common Combinations:
print(least_common_combinations)
## # A tibble: 76 × 4
## # Groups:   quarter, team [60]
##    quarter   team department   Count
##    <chr>    <int> <chr>        <int>
##  1 Quarter1     1 "finishing"      9
##  2 Quarter1     1 "finishing "     9
##  3 Quarter1     2 "finishing "     8
##  4 Quarter1     3 "finishing"      5
##  5 Quarter1     3 "finishing "     5
##  6 Quarter1     4 "finishing"      7
##  7 Quarter1     5 "finishing "     2
##  8 Quarter1     6 "finishing "     4
##  9 Quarter1     7 "finishing "     7
## 10 Quarter1     8 "finishing"      7
## # ℹ 66 more rows
library(ggplot2)
ggplot(combination_counts, aes(x = combination_counts$quarter, y = combination_counts$Count))+   geom_bar(stat = "identity", position =     position_dodge(width = 0.8)) +
  facet_wrap(~combination_counts$team) +
  labs(
    x = "quarter",
    y = "Count",
    fill = "team",
    title = "Grouped Barplot for Quarter and count with respect to Department"
  ) +
  theme_minimal() + scale_fill_discrete() +  theme(legend.position = "top") 

ggplot(combination_counts, aes(x = combination_counts$quarter, y = combination_counts$Count))+   geom_bar(stat = "identity", position =     position_dodge(width = 0.8)) +
  facet_wrap(~combination_counts$department) +
  labs(
    x = "quarter",
    y = "Count",
    fill = "department",
    title = "Grouped Barplot for Quarter and department with respect to Count"
  ) +
  theme_minimal() + scale_fill_discrete() +  theme(legend.position = "top") 

ggplot(combination_counts, aes(x = combination_counts$quarter, y = combination_counts$team, fill = combination_counts$Count)) +
  geom_tile() +
  scale_fill_gradient(low = "white", high = "blue") +
  labs(x = "quarter", y = "team", fill = "Count") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplot(combination_counts, aes(x = combination_counts$quarter, y = combination_counts$department, fill = combination_counts$Count)) +
  geom_tile() +
  scale_fill_gradient(low = "white", high = "red") +
  labs(x = "quarter", y = "team", fill = "Count") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))