Unauthorised - Vessels with Possibility of Illegal Fishing
Zooming into the 3 ecological preserves, we observed the Transponder Ping records to identify any fishing vessels that have overstayed their visits.
Steps taken:
Summarise the median dwell time of vessels per month at each area.
Identify those vessels that is of the top 90% of the area per month and include a counter Is above 90%. Where vessels are flagged at least once, return these vessels details for investigation.
Code
ping_activity$start_time <-ymd_hms(ping_activity$start_time)ping_activity$month <-floor_date(ping_activity$start_time, "month")# Convert the month column to Date format (first day of each month)ping_activity$month <-as.Date(ping_activity$month)# Calculate median dwell time per vessel_id per month for each areaagg_data <- ping_activity %>%group_by(area, vessel_id, month) %>%summarise(median_dwell =median(dwell, na.rm =TRUE)) %>%ungroup()agg_data2 <- agg_data %>%group_by(area, month) %>%mutate(`90%_dwell_time`=quantile(median_dwell, 0.90, na.rm =TRUE)) %>%mutate(`Is_above_90%`=ifelse(median_dwell >`90%_dwell_time`, "Yes", "No")) %>%ungroup()# count the number of times that vessel stayed >90% dwell timesummary_data <- agg_data2 %>%filter(area %in%c( "Ghoti Preserve", "Nemo Reef", "Don Limpet Preserve"), `Is_above_90%`=="Yes") %>%group_by(vessel_id, area) %>%summarise(count_above_90 =n()) %>%filter(count_above_90 >=2) %>%ungroup()summary_data_DT <- summary_data %>%left_join(N_vessel %>%select("vessel_id", "vessel_name", "vessel_company", "vessel_type", "tonnage", "length_overall", "flag_country"), by =c("vessel_id"="vessel_id"))summary_data_DT <- summary_data_DT %>%select(-vessel_id) %>%select("area", "count_above_90", "vessel_name", "vessel_company", "vessel_type", "tonnage", "length_overall", "flag_country")colnames(summary_data_DT) <-c("Overstayed Area", "Frequency", "Vessel Name", "Vessel Company", "Vessel Type", "Tonnage", "Overall Length", "Country Flag")ghoti_overstay <- summary_data_DT %>%filter(`Overstayed Area`=="Ghoti Preserve")nemo_overstay <- summary_data_DT %>%filter(`Overstayed Area`=="Nemo Reef")don_overstay <- summary_data_DT %>%filter(`Overstayed Area`=="Don Limpet Preserve")datatable(ghoti_overstay, options (pageLength =3)) # 12 vessels
We further observed that there maybe some false positive, when visualising on the Transponder Ping data set. Notably suspicious vessels include: Gunard Grabber, Sockeye Salmon Seeker, Largemouth Bass Looter, Brill Bandit, Sea Bass Bandit
We observed that despite SSEC’s Snapper Snatcher being caught in May 2035, some vessels seek cover for the month of June, while others continued their operations from July 2035 onwards.
Code
selected_vessels <- ghoti_overstay$`Vessel Name`# Filter data for the specified areasubset_data <- ping_activity %>%filter(area =="Ghoti Preserve") %>%mutate(month =floor_date(ymd_hms(start_time), "month"))# Calculate the median dwell time per vessel per monthmedian_dwell_data <- subset_data %>%group_by(month, vessel_name) %>%summarize(median_dwell =median(dwell, na.rm =TRUE)) %>%ungroup() %>%mutate(month =as.Date(month))# Create a new column to categorize vessels into 'Selected' and 'Other'median_dwell_data <- median_dwell_data %>%mutate(vessel_category =ifelse(vessel_name %in% selected_vessels, vessel_name, "Other"))# Create a unique color for each vesselunique_vessels <-unique(median_dwell_data$vessel_name)n_colors <-length(unique_vessels)color_palette <-colorRampPalette(brewer.pal(12, "Paired"))(n_colors)vessel_colors <-setNames(color_palette, unique_vessels)# Add black color for "Other"vessel_colors["Other"] <-"black"# Create the plotp <-ggplot(median_dwell_data, aes(x = month, y = median_dwell, color = vessel_category)) +geom_boxplot(aes(group = month), outlier.shape =NA) +geom_jitter(aes(text =paste("Vessel Name:", vessel_name)), width =1, size =1.5, alpha =0.9) +scale_color_manual(values = vessel_colors) +scale_x_date(date_breaks ="1 month", date_labels ="%b") +# Ensure all months are shownlabs(title ="Median Dwell Time of Vessels by Month in Ghoti Preserve",x ="Month",y ="Median Dwell Time",color ="Vessel Name") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1)) # Rotate labels for better readability# Convert to interactive plotly plotggplotly(p, tooltip ="text")
Ecological Preserve 2 - Nemo Reefs
We further repeated this test for Nemo Reefs, and noted vessels such as “Mr Ray” and “Louie the II” consistently overstayed in Nemo Reefs, and this is much higher than other vessels. As well as “Clown Fish” and “Bluefish Bandit” with fluctuating median dwell time above the 75%.
Note: The vessel of “Heart of Oceanus” was excluded as it has exceptionally long dwell time in February 2035 that distorted the plot. “Costa Smeralda” and “Dolphin Dasher” excluded from April 2035 plot.
Code
selected_vessels <- nemo_overstay$`Vessel Name`# Filter data for the specified areasubset_data <- ping_activity %>%filter(area =="Nemo Reef", vessel_id !="heartofoceanusf11", vessel_name !="Costa Smeralda", vessel_name !="Dolphin Dasher") %>%mutate(month =floor_date(ymd_hms(start_time), "month"))# Calculate the median dwell time per vessel per monthmedian_dwell_data <- subset_data %>%group_by(month, vessel_name) %>%summarize(median_dwell =median(dwell, na.rm =TRUE)) %>%ungroup() %>%mutate(month =as.Date(month))# Create a new column to categorize vessels into 'Selected' and 'Other'median_dwell_data <- median_dwell_data %>%mutate(vessel_category =ifelse(vessel_name %in% selected_vessels, vessel_name, "Other"))# Create a unique color for each vesselunique_vessels <-unique(median_dwell_data$vessel_name)n_colors <-length(unique_vessels)color_palette <-colorRampPalette(brewer.pal(12, "Paired"))(n_colors)vessel_colors <-setNames(color_palette, unique_vessels)# Add black color for "Other"vessel_colors["Other"] <-"black"# Create the plotp2 <-ggplot(median_dwell_data, aes(x = month, y = median_dwell, color = vessel_category)) +geom_boxplot(aes(group = month), outlier.shape =NA) +geom_jitter(aes(text =paste("Vessel Name:", vessel_name)), width =1, size =1.5, alpha =0.9) +scale_color_manual(values = vessel_colors) +scale_x_date(date_breaks ="1 month", date_labels ="%b") +# Ensure all months are shownlabs(title ="Median Dwell Time of Vessels by Month in Nemo Reef",x ="Month",y ="Median Dwell Time",color ="Vessel Name") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1)) # Rotate labels for better readability# Convert to interactive plotly plotggplotly(p2, tooltip ="text")
Ecological Preserve 3 - Don Limpet Preserve
For Don Limpet Preserve, we noted 2 vessels with exceptionally long dwell time - Himark Royal and Mr Ray. However, for Himark Royal, the median time per month is relatively constant, and this may point to the vessel being permanently located there. Instead, Mr Ray is more suspicious with fluctuating activities in September 2035 and November 2035.
Code
selected_vessels <- don_overstay$`Vessel Name`# Filter data for the specified areasubset_data <- ping_activity %>%filter(area =="Don Limpet Preserve") %>%mutate(month =floor_date(ymd_hms(start_time), "month"))# Calculate the median dwell time per vessel per monthmedian_dwell_data <- subset_data %>%group_by(month, vessel_name) %>%summarize(median_dwell =median(dwell, na.rm =TRUE)) %>%ungroup() %>%mutate(month =as.Date(month))# Create a new column to categorize vessels into 'Selected' and 'Other'median_dwell_data <- median_dwell_data %>%mutate(vessel_category =ifelse(vessel_name %in% selected_vessels, vessel_name, "Other"))# Create a unique color for each vesselunique_vessels <-unique(median_dwell_data$vessel_name)n_colors <-length(unique_vessels)color_palette <-colorRampPalette(brewer.pal(12, "Paired"))(n_colors)vessel_colors <-setNames(color_palette, unique_vessels)# Add black color for "Other"vessel_colors["Other"] <-"black"# Create the plotp3 <-ggplot(median_dwell_data, aes(x = month, y = median_dwell, color = vessel_category)) +geom_boxplot(aes(group = month), outlier.shape =NA) +geom_jitter(aes(text =paste("Vessel Name:", vessel_name)), width =1, size =1.5, alpha =0.9) +scale_color_manual(values = vessel_colors) +scale_x_date(date_breaks ="1 month", date_labels ="%b") +# Ensure all months are shownlabs(title ="Median Dwell Time of Vessels by Month in Nemo Reef",x ="Month",y ="Median Dwell Time",color ="Vessel Name") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1)) # Rotate labels for better readability# Convert to interactive plotly plotggplotly(p3, tooltip ="text")
Unregulated - Vessels with possibility of Overfishing
Another sign of suspicious activity is where the vessel or it’s company is able to consistently return high volumes of catch, comparing it with its peers.
Steps taken:
Create a calculated field for the column on Percent_fill to see the relative proportion the cargo associated with the vessel occupies for each cargo-vessel mapping.
For vessels whose Percent_fill contributes to the top 90 percentile per month, highlight these vessel in new column of Percent_fill_above_90
Return the count of suspicious vessel who is able to return Percent_fill_above_90 for 20 or more times.
We observed a total of 19 vessels have consistently returned cargo with high percentage filled of their vessels. This may be due to small vessel size or possibility of over-fishing. Hence, we will further investigate these 19 vessels.
To test out, we will be focusing on the 3 species:
Beauvoir - That can be found in all ecological preserves and fishing grounds.
Harland - Only found in Tuna Shelf
Wrasse - Found in Wrasse Beds, Ghoti Preserve and Nemo Reefs and contributing to the highest quantity, besides Cod that peaks during September and October.
Out of these 19 vessels, we note 2 foreign fishing vessels, namely:
Vessel of “Redfin Pickerel Raider” from the company “Solis PLC” from the nation of “Solterrix”
Vessel of “Bigeye Tuna Buccaneer” from the company “Gomez-Mccormick” from the nation of “Calabrand”.
We observed that there are 19 suspects that may have overfished Beauvoir, and this included the usual suspect of “Gurnard Grabber” and “Largemouth Bass Looter” that has overstayed in Ghoti and also new suspects of “Prawn Predator” and “Barracuda Baiter”.
There is a notable single instance by “Swimming Safely” vessel from Tanamarine Fishing Co, that has contributed to 44% of their vessel filled for that 1 particular cargo. This is unusual as most fishing vessels tend to have a combination of other fishes and do not fill to max capacity.
Code
beauvoir_suspects <- sus_overfish_cargo %>%filter(fish_species =="habeaspisces4eb") # 19fish_species_filtered <-"habeaspisces4eb"# Replace with desired fish speciesfiltered_data <- nearest_tx_date %>%filter(fish_species == fish_species_filtered) %>%mutate(month =floor_date(tx_date, "month"))filtered_data <- filtered_data %>%left_join(N_vessel, by =c("vessel_id"="vessel_id"))filtered_data <- filtered_data %>%mutate(percent_fill = qty_tons / tonnage)# Calculate the median percent_fill per vessel per monthmedian_percent_fill_data <- filtered_data %>%group_by(month, vessel_id, vessel_name, vessel_company) %>%summarize(median_percent_fill =median(percent_fill, na.rm =TRUE)) %>%ungroup()# List of suspect vessel IDssuspect_vessels <- beauvoir_suspects$vessel_id# Create a unique color for each suspect vessel and assign black to othersunique_suspect_vessels <-unique(suspect_vessels)n_colors <-length(unique_suspect_vessels)color_palette <-colorRampPalette(brewer.pal(12, "Paired"))(n_colors)vessel_colors <-setNames(color_palette, unique_suspect_vessels)vessel_name_colors <- median_percent_fill_data %>%filter(vessel_id %in% suspect_vessels) %>%distinct(vessel_id, vessel_name) %>%mutate(color = vessel_colors[vessel_id]) %>%select(vessel_name, color) %>%deframe()# Add black color for "Other" vesselsmedian_percent_fill_data <- median_percent_fill_data %>%mutate(color =ifelse(vessel_id %in% suspect_vessels, vessel_name, "Other"))# Set color for "Other" vessels to blackvessel_name_colors["Other"] <-"black"# Create a new column for the text labelmedian_percent_fill_data <- median_percent_fill_data %>%mutate(text_label =paste("Vessel Name:", vessel_name, "<br>","Vessel Company:", vessel_company, "<br>","Percent Fill:", round(median_percent_fill, 2)))# Create the plotp4 <-ggplot(median_percent_fill_data, aes(x = month, y = median_percent_fill, color = color)) +geom_boxplot(aes(group = month), outlier.shape =NA) +geom_jitter(aes(text = text_label), width =0.5, size =1.5, alpha =0.9) +scale_color_manual(values = vessel_name_colors) +scale_x_date(date_breaks ="1 month", date_labels ="%b") +# Ensure all months are shownlabs(title =paste("Median Percent Fill per Vessel by Month for Beauvoir"),x ="Month",y ="Median Percent Fill",color ="Vessel ID") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1)) # Rotate labels for better readability# Convert to interactive plotly plotggplotly(p4, tooltip ="text")
Legal Fish Species 2 - Harland
We observed that there overlapping 19 suspects that have overfished Harland, similar to Beavoir, thought the quantities and percentile vary. New prominent suspects include “Cutthroat Trout Catcher” in May and September, and “Swimming Safely” in July.
The foreign vessel of “Bigeye Tuna Buccaneer” from Solterrix has also notably high catch fill in September, and this coincides with the catch for Beavoir in September in the earlier plot. This may suggest that foreign vessels have offloaded their cargo in Oceanus during the peak seasons of fishing, but may not have abided to the fishing limits.
Code
harland_suspects <- sus_overfish_cargo %>%filter(fish_species =="piscissapidum9b7")fish_species_filtered <-"piscissapidum9b7"filtered_data <- nearest_tx_date %>%filter(fish_species == fish_species_filtered) %>%mutate(month =floor_date(tx_date, "month"))filtered_data <- filtered_data %>%left_join(N_vessel, by =c("vessel_id"="vessel_id"))# Add percent_fill columnfiltered_data <- filtered_data %>%mutate(percent_fill = qty_tons / tonnage)# Calculate the median percent_fill per vessel per monthmedian_percent_fill_data <- filtered_data %>%group_by(month, vessel_id, vessel_name, vessel_company) %>%summarize(median_percent_fill =median(percent_fill, na.rm =TRUE)) %>%ungroup()# List of suspect vessel IDssuspect_vessels <- harland_suspects$vessel_id# Create a unique color for each suspect vessel and assign black to othersunique_suspect_vessels <-unique(suspect_vessels)n_colors <-length(unique_suspect_vessels)color_palette <-colorRampPalette(brewer.pal(12, "Paired"))(n_colors)vessel_colors <-setNames(color_palette, unique_suspect_vessels)vessel_name_colors <- median_percent_fill_data %>%filter(vessel_id %in% suspect_vessels) %>%distinct(vessel_id, vessel_name) %>%mutate(color = vessel_colors[vessel_id]) %>%select(vessel_name, color) %>%deframe()# Add black color for "Other" vesselsmedian_percent_fill_data <- median_percent_fill_data %>%mutate(color =ifelse(vessel_id %in% suspect_vessels, vessel_name, "Other"))# Set color for "Other" vessels to blackvessel_name_colors["Other"] <-"black"# Create a new column for the text labelmedian_percent_fill_data <- median_percent_fill_data %>%mutate(text_label =paste("Vessel Name:", vessel_name, "<br>","Vessel Company:", vessel_company, "<br>","Percent Fill:", round(median_percent_fill, 2)))# Create the plotp5 <-ggplot(median_percent_fill_data, aes(x = month, y = median_percent_fill, color = color)) +geom_boxplot(aes(group = month), outlier.shape =NA) +geom_jitter(aes(text = text_label), width =0.5, size =1.5, alpha =0.9) +scale_color_manual(values = vessel_name_colors) +scale_x_date(date_breaks ="1 month", date_labels ="%b") +# Ensure all months are shownlabs(title =paste("Median Percent Fill per Vessel by Month for Harland"),x ="Month",y ="Median Percent Fill",color ="Vessel Name") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1)) # Rotate labels for better readability# Convert to interactive plotly plotggplotly(p5, tooltip ="text")
Legal Fish Species 3 - Wrasse (Only in Wrasse Beds)
Similar to Harland and Beavoir, the 19 suspected vessels are also likely suspects for overfishing for Wrasse. The usual suspect of “Prawn Predator”, “Cutthroat Trout Catcher”, “Swimming Safely” has high percent fill relative to other fishing vessels.
Interestingly, while SSEC’s vessels were previously not identified as overfishing suspects with 20 counts of cargo greater than monthly 90 percentile, the plot has illustrated possibility of Snapper Snatcher overfishing in May, with a fill of 26% of Wrasse out of it’s vessels tonnage. This suggest that the filter of 20 counts could be narrowed or proportion based on the total cargoes returned by the same vessel to catch more overfishing suspects.
Code
wrasse_suspects <- sus_overfish_cargo %>%filter(fish_species =="labridaenrefert9be")fish_species_filtered <-"labridaenrefert9be"filtered_data <- nearest_tx_date %>%filter(fish_species == fish_species_filtered) %>%mutate(month =floor_date(tx_date, "month"))filtered_data <- filtered_data %>%left_join(N_vessel, by =c("vessel_id"="vessel_id"))# Add percent_fill columnfiltered_data <- filtered_data %>%mutate(percent_fill = qty_tons / tonnage)# Calculate the median percent_fill per vessel per monthmedian_percent_fill_data <- filtered_data %>%group_by(month, vessel_id, vessel_name, vessel_company) %>%summarize(median_percent_fill =median(percent_fill, na.rm =TRUE), .groups ='drop')# List of suspect vessel IDssuspect_vessels <- wrasse_suspects$vessel_id# Create a unique color for each suspect vessel and assign black to othersunique_suspect_vessels <-unique(suspect_vessels)n_colors <-length(unique_suspect_vessels)color_palette <-colorRampPalette(brewer.pal(12, "Paired"))(n_colors)vessel_colors <-setNames(color_palette, unique_suspect_vessels)vessel_name_colors <- median_percent_fill_data %>%filter(vessel_id %in% suspect_vessels) %>%distinct(vessel_id, vessel_name) %>%mutate(color = vessel_colors[vessel_id]) %>%select(vessel_name, color) %>%deframe()# Add black color for "Other" vesselsmedian_percent_fill_data <- median_percent_fill_data %>%mutate(color =ifelse(vessel_id %in% suspect_vessels, vessel_name, "Other"))# Set color for "Other" vessels to blackvessel_name_colors["Other"] <-"black"# Create a new column for the text labelmedian_percent_fill_data <- median_percent_fill_data %>%mutate(text_label =paste("Vessel Name:", vessel_name, "<br>","Vessel Company:", vessel_company, "<br>","Percent Fill:", round(median_percent_fill, 2)))# Create the plotp6 <-ggplot(median_percent_fill_data, aes(x = month, y = median_percent_fill, color = color, group = month)) +geom_boxplot(outlier.shape =NA) +geom_jitter(aes(text = text_label), width =0.5, size =1.5, alpha =0.9) +scale_color_manual(values = vessel_name_colors) +scale_x_date(date_breaks ="1 month", date_labels ="%b") +# Ensure all months are shownlabs(title =paste("Median Percent Fill per Vessel by Month for Wrasse"),x ="Month",y ="Median Percent Fill",color ="Vessel Name") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1)) # Rotate labels for better readability# Convert to interactive plotly plotggplotly(p6, tooltip ="text")
Disrupted - Diversion from Ghoti Preserve after SSEC was caught
Lastly, we considered any drastic shift in vessel routes, especially away from Ghoti Reserve, where SSEC’s Snapper Snatcher has trespass.
Steps taken:
Subset the trips taken per vessel into 3 time periods. (1) Before SSEC was caught (before 14 May 2035), (2) Immediately after SSEC was caught, for the month of June, and (3) July onwards.
Listed down the unique areas visited by the vessel and did a comparison on the changes in areas that the vessel has Avoided in June , Avoided_after May and Newly visited after May.
We observed that there are 29 vessels that have previously visited “Ghoti Preserve” in May and before, but has purposefully avoided it in June 2035 and returned again in July onwards. While the change in travel route may be due to coincidence, there’s also a high possibility these vessels were intentionally avoiding scrutiny from the authorities for their dubious activities in June, and resumed from July onwards.
Out of this 29 vessels, we observed the usual suspects of Oceanus fishing vessels “Bigeye Tuna Buccaneer”, “Barracuda Bandit” and “Fish Finder”. And 3 foreign vessels, 2 of which were suspects of overfishing as mentioned earlier.
(New) Vessel of “Sockeye Salmon Seeker”, from company of “Mcpherson-Wright” from nation of “Kethilim”
(Overfishing Suspect) Vessel of “Redfin Pickerel Raider” from the company “Solis PLC” from the nation of “Solterrix”
(Overfishing Suspect) Vessel of “Bigeye Tuna Buccaneer” from the company “Gomez-Mccormick” from the nation of “Calabrand”.
Code
vessel_trips <- time_summary_df %>%mutate(start_date =as.Date(start_date))# Define the cutoff date for 14 May 2035cutoff_date <-as.Date("2035-05-14")trips_before_cutoff <- vessel_trips %>%filter(start_date <= cutoff_date)# Filter trips that started in June 2035trips_in_june <- vessel_trips %>%filter(start_date >=as.Date("2035-06-01") & start_date <as.Date("2035-07-01"))# Filter trips that started after 14 May 2035trips_after_cutoff <- vessel_trips %>%filter(start_date > cutoff_date)# Function to get unique areasget_unique_areas <-function(data) { data %>%pull(unique_areas) %>%strsplit(", ") %>%unlist() %>%unique()}# Get unique areas per vessel before the cutoff dateareas_before_cutoff <- trips_before_cutoff %>%group_by(vessel_id) %>%summarize(areas_before =list(get_unique_areas(cur_data())))# Get unique areas per vessel after the cutoff dateareas_after_cutoff <- trips_after_cutoff %>%group_by(vessel_id) %>%summarize(areas_after =list(get_unique_areas(cur_data())))# Get unique areas per vessel in June 2035areas_in_june <- trips_in_june %>%group_by(vessel_id) %>%summarize(areas_june =list(get_unique_areas(cur_data())))# Combine the datacombined_areas <-full_join(areas_before_cutoff, areas_after_cutoff, by ="vessel_id") %>%full_join(areas_in_june, by ="vessel_id")# Determine new areas visited, old areas avoided, and old areas avoided in June for each vesselresults <- combined_areas %>%rowwise() %>%mutate(new_areas =if(length(setdiff(areas_after, areas_before)) >0) paste(setdiff(areas_after, areas_before), collapse =", ") elseNA,old_areas_avoided =if(length(setdiff(areas_before, areas_after)) >0) paste(setdiff(areas_before, areas_after), collapse =", ") elseNA,old_areas_avoided_june =if(length(setdiff(areas_before, areas_june)) >0) paste(setdiff(areas_before, areas_june), collapse =", ") elseNA,new_areas_count =ifelse(is.na(new_areas), 0, length(unlist(strsplit(new_areas, ", ")))),old_areas_avoided_count =ifelse(is.na(old_areas_avoided), 0, length(unlist(strsplit(old_areas_avoided, ", ")))),old_areas_avoided_june_count =ifelse(is.na(old_areas_avoided_june), 0, length(unlist(strsplit(old_areas_avoided_june, ", ")))) ) %>%ungroup()# Add new columns to identify vessels that avoided "Ghoti Preserve" in June but returned after the cutoff periodresults <- results %>%mutate(avoided_ghoti_june =ifelse(grepl("Ghoti Preserve", old_areas_avoided_june), TRUE, FALSE),returned_to_ghoti_after_cutoff =ifelse(avoided_ghoti_june &grepl("Ghoti Preserve", areas_after), TRUE, FALSE))# Select relevant columns for the final outputfinal_results <- results %>%select(vessel_id, new_areas, old_areas_avoided, old_areas_avoided_june, new_areas_count, old_areas_avoided_count, old_areas_avoided_june_count, avoided_ghoti_june, returned_to_ghoti_after_cutoff)# Print the resultsdatatable(results, options =list(pagelength =10), filter ="top")