This document analyzes military equipment losses data over time. The dataset contains cumulative counts and daily increments of various military equipment categories.
Data Import and Preprocessing
# Read the CSV filedata <-read_csv("russian_casualties.csv",col_types =cols(date =col_date(format ="%Y-%m-%d"),tanks =col_double(),tanks_increment =col_double(),armored_fighting_vehicles =col_double(),afv_increment =col_double(),artillery_systems =col_double(),artillery_increment =col_double(),mlrs =col_double(),mlrs_increment =col_double(),air_defense_systems =col_double(),air_defense_increment =col_double(),aircraft =col_double(),aircraft_increment =col_double(),helicopters =col_double(),helicopters_increment =col_double(),uav =col_double(),uav_increment =col_double(),cruise_missiles =col_double(),cruise_missiles_increment =col_double(),ships =col_double(),ships_increment =col_double(),submarines =col_double(),submarines_increment =col_double(),vehicles_fuel_tanks =col_double(),vehicles_increment =col_double(),special_equipment =col_double(),special_equipment_increment =col_double(),personnel =col_double(),personnel_increment =col_double() ))# Display the first few rows of the datasetDT::datatable(head(data, 10), options =list(scrollX =TRUE, pageLength =5),caption ="First 10 rows of the dataset")
# Create a summary of the most recent data pointlatest_data <- data %>%arrange(desc(date)) %>%slice(1) %>%select(-contains("increment")) %>%pivot_longer(cols =-date, names_to ="Equipment Type", values_to ="Total Losses")kable(latest_data, caption ="Latest Equipment Loss Totals")
Latest Equipment Loss Totals
date
Equipment Type
Total Losses
2026-09-15
tanks
12345
2026-09-15
armored_fighting_vehicles
25334
2026-09-15
artillery_systems
49793
2026-09-15
mlrs
2131
2026-09-15
air_defense_systems
1638
2026-09-15
aircraft
442
2026-09-15
helicopters
356
2026-09-15
uav
518280
2026-09-15
cruise_missiles
5111
2026-09-15
ships
35
2026-09-15
submarines
2
2026-09-15
vehicles_fuel_tanks
149183
2026-09-15
special_equipment
4690
2026-09-15
personnel
1510000
Time Series Analysis of Cumulative Losses
Major Equipment Categories Over Time
# Select major equipment categories for time series plotmajor_equipment <- data %>%select(date, tanks, armored_fighting_vehicles, artillery_systems, aircraft, helicopters)# Convert to long format for plottingmajor_long <- major_equipment %>%pivot_longer(cols =-date, names_to ="equipment", values_to ="count") %>%mutate(equipment =gsub("_", " ", equipment))# Create interactive time series plotfig1 <-plot_ly(major_long, x =~date, y =~count, color =~equipment, type ='scatter', mode ='lines') %>%layout(title ="Cumulative Losses of Major Equipment Categories Over Time",xaxis =list(title ="Date"),yaxis =list(title ="Cumulative Count"),hovermode ="compare")fig1
Air-based Equipment Over Time
# Select air-based equipment for time series plotair_equipment <- data %>%select(date, aircraft, helicopters, uav, cruise_missiles)# Convert to long format for plottingair_long <- air_equipment %>%pivot_longer(cols =-date, names_to ="equipment", values_to ="count") %>%mutate(equipment =gsub("_", " ", equipment))# Create interactive time series plotfig2 <-plot_ly(air_long, x =~date, y =~count, color =~equipment, type ='scatter', mode ='lines') %>%layout(title ="Cumulative Losses of Air-based Equipment Over Time",xaxis =list(title ="Date"),yaxis =list(title ="Cumulative Count"),hovermode ="compare")fig2
Ground-based Equipment Over Time
# Select ground-based equipment for time series plotground_equipment <- data %>%select(date, tanks, armored_fighting_vehicles, artillery_systems, mlrs, vehicles_fuel_tanks)# Convert to long format for plottingground_long <- ground_equipment %>%pivot_longer(cols =-date, names_to ="equipment", values_to ="count") %>%mutate(equipment =gsub("_", " ", equipment))# Create interactive time series plotfig3 <-plot_ly(ground_long, x =~date, y =~count, color =~equipment, type ='scatter', mode ='lines') %>%layout(title ="Cumulative Losses of Ground-based Equipment Over Time",xaxis =list(title ="Date"),yaxis =list(title ="Cumulative Count"),hovermode ="compare")fig3
Daily Increment Analysis
Daily Losses Heatmap
# Create a heatmap of daily losses for selected equipment typesincrement_data <- data %>%select(date, tanks_increment, afv_increment, artillery_increment, aircraft_increment, helicopters_increment, uav_increment) %>%rename(Tanks = tanks_increment,AFVs = afv_increment,Artillery = artillery_increment,Aircraft = aircraft_increment,Helicopters = helicopters_increment,UAVs = uav_increment )# Create a date field for month groupingincrement_data$month <-floor_date(increment_data$date, "month")# Aggregate by month for better visualizationmonthly_increments <- increment_data %>%group_by(month) %>%summarize(Tanks =sum(Tanks, na.rm =TRUE),AFVs =sum(AFVs, na.rm =TRUE),Artillery =sum(Artillery, na.rm =TRUE),Aircraft =sum(Aircraft, na.rm =TRUE),Helicopters =sum(Helicopters, na.rm =TRUE),UAVs =sum(UAVs, na.rm =TRUE) )# Create a heatmap of monthly lossesmonthly_long <- monthly_increments %>%pivot_longer(cols =-month, names_to ="equipment", values_to ="count")fig4 <-plot_ly(monthly_long, x =~month, y =~equipment, z =~count, type ="heatmap",colorscale ="Viridis") %>%layout(title ="Monthly Equipment Losses Heatmap",xaxis =list(title ="Month"),yaxis =list(title ="Equipment Type"))fig4
Personnel Losses Over Time
# Create a dual-axis chart for personnel lossesfig5 <-plot_ly() %>%add_trace(data = data, x =~date, y =~personnel, type ='scatter', mode ='lines', name ='Cumulative Personnel Losses',line =list(color ='blue')) %>%add_trace(data = data, x =~date, y =~personnel_increment, type ='bar', name ='Daily Personnel Losses',marker =list(color ='rgba(255, 0, 0, 0.5)')) %>%layout(title ="Personnel Losses Over Time",xaxis =list(title ="Date"),yaxis =list(title ="Count", side ="left"),legend =list(x =0.1, y =0.9))fig5
Warning: Ignoring 9 observations
Comparative Analysis
Equipment Loss Composition
# Create a pie chart of latest equipment losseslatest_point <-nrow(data)latest_equipment_data <- data[latest_point, ] %>%select(tanks, armored_fighting_vehicles, artillery_systems, mlrs, air_defense_systems, aircraft, helicopters, uav)# Convert to long format for plottinglatest_equipment_long <-data.frame(equipment =names(latest_equipment_data),count =unlist(latest_equipment_data)) %>%mutate(equipment =gsub("_", " ", equipment))fig6 <-plot_ly(latest_equipment_long, labels =~equipment, values =~count, type ='pie',textinfo ='label+percent',marker =list(line =list(color ='#FFFFFF', width =1))) %>%layout(title ="Composition of Total Equipment Losses")fig6
Monthly Loss Rate Comparison
# Calculate monthly loss rates for major equipment typesmonthly_data <- data %>%mutate(month =floor_date(date, "month")) %>%group_by(month) %>%summarize(Tanks =sum(tanks_increment, na.rm =TRUE),AFVs =sum(afv_increment, na.rm =TRUE),Artillery =sum(artillery_increment, na.rm =TRUE),Aircraft =sum(aircraft_increment, na.rm =TRUE),UAVs =sum(uav_increment, na.rm =TRUE) )# Convert to long formatmonthly_long_data <- monthly_data %>%pivot_longer(cols =-month, names_to ="equipment", values_to ="losses")# Create a grouped bar chartfig7 <-plot_ly(monthly_long_data, x =~month, y =~losses, color =~equipment, type ='bar') %>%layout(title ="Monthly Equipment Loss Rates",xaxis =list(title ="Month"),yaxis =list(title ="Count"),barmode ='group')fig7
Intensity Analysis
Loss Intensity Map
# Create a calendar heatmap of total equipment losses per daydaily_total_losses <- data %>%rowwise() %>%mutate(total_increments =sum(c(tanks_increment, afv_increment, artillery_increment, mlrs_increment, air_defense_increment, aircraft_increment, helicopters_increment, uav_increment, cruise_missiles_increment, ships_increment, submarines_increment, vehicles_increment, special_equipment_increment), na.rm =TRUE)) %>%select(date, total_increments)# Extract year, month, and day for calendar heatmapdaily_total_losses <- daily_total_losses %>%mutate(year =year(date),month =month(date),day =day(date) )# Create a calendar heatmapfig8 <-plot_ly(daily_total_losses, x =~day, y =~month, z =~total_increments, type ="heatmap",colorscale ="Reds") %>%layout(title ="Daily Equipment Loss Intensity",xaxis =list(title ="Day of Month", dtick =1),yaxis =list(title ="Month", dtick =1, tickvals =1:12,ticktext = month.abb))fig8
Correlation Analysis
# Calculate correlation between different types of equipment lossesincrement_correlation <- data %>%select(contains("increment")) %>%cor(use ="pairwise.complete.obs")# Convert correlation matrix to long format for heatmapcorr_long <-as.data.frame(as.table(increment_correlation))names(corr_long) <-c("var1", "var2", "correlation")# Create correlation heatmapfig9 <-plot_ly(corr_long, x =~var1, y =~var2, z =~correlation, type ="heatmap",colorscale =list(c(0, "blue"), c(0.5, "white"), c(1, "red")),zmin =-1, zmax =1) %>%layout(title ="Correlation Between Daily Equipment Losses",xaxis =list(title =""),yaxis =list(title =""))fig9
Trend Analysis
Moving Averages of Major Equipment Losses
# Calculate 7-day moving averages for major equipment typesma_data <- data %>%arrange(date) %>%mutate(tanks_ma7 = zoo::rollmean(tanks_increment, k =7, fill =NA, align ="right"),afv_ma7 = zoo::rollmean(afv_increment, k =7, fill =NA, align ="right"),artillery_ma7 = zoo::rollmean(artillery_increment, k =7, fill =NA, align ="right"),uav_ma7 = zoo::rollmean(uav_increment, k =7, fill =NA, align ="right") )# Convert to long format for plottingma_long <- ma_data %>%select(date, tanks_ma7, afv_ma7, artillery_ma7, uav_ma7) %>%pivot_longer(cols =-date, names_to ="equipment", values_to ="ma7") %>%mutate(equipment =gsub("_ma7", "", equipment))# Create interactive line chart with moving averagesfig10 <-plot_ly(ma_long, x =~date, y =~ma7, color =~equipment, type ='scatter', mode ='lines') %>%layout(title ="7-Day Moving Average of Daily Equipment Losses",xaxis =list(title ="Date"),yaxis =list(title ="7-Day Moving Average"),hovermode ="compare")fig10
Periodicity Analysis
Weekday Loss Patterns
# Analyze loss patterns by day of weekweekday_data <- data %>%mutate(weekday =weekdays(date)) %>%mutate(weekday =factor(weekday, levels =c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))) %>%group_by(weekday) %>%summarize(tanks =mean(tanks_increment, na.rm =TRUE),afv =mean(afv_increment, na.rm =TRUE),artillery =mean(artillery_increment, na.rm =TRUE),personnel =mean(personnel_increment, na.rm =TRUE) )# Convert to long formatweekday_long <- weekday_data %>%pivot_longer(cols =-weekday, names_to ="equipment", values_to ="avg_losses")# Create a grouped bar chart by weekdayfig11 <-plot_ly(weekday_long, x =~weekday, y =~avg_losses, color =~equipment, type ='bar') %>%layout(title ="Average Daily Losses by Day of Week",xaxis =list(title ="Day of Week"),yaxis =list(title ="Average Daily Losses"),barmode ='group')fig11
Conclusion
This analysis provides various visualizations of military equipment losses data. The interactive plots help identify trends, patterns, and relationships in the data over time. ```