# SEMINÁŘ VÝZKUM KONFLIKTU I # Tohle je komentář - R jej nebere jako executible code, slouží pro přehlednost kódu - používejte jej co nejčastěji # ----------------------------------------------------------------------------- # ČÁST 1: PROSTŘEDÍ R STUDIA -------------------------------------------------- # ----------------------------------------------------------------------------- # V tomto okně se nachází R script # Hned pod ním je R console, kde dochází k vykonání instrukcí napsaných ve scriptu # Vpravo nahoře je prostředí R, kde přehledně uvidíte všechny objekty (datasety, proměnné apod.) # Vlevo dole vám R bude vykreslovat grafy, obrázky, zobrazovat nápovědu apod. # Nápověda je skvělá funkce, stačí napsat otazník a název funkce, vyzkoušejte si to. Zmáčněte ctrl a enter: ?getwd ?setwd #Super! Právě jste vyvolali svou první funkci - nápovědu k zobrazení working directory a nastavení working directory. # Kromě komentářů a odsazování funkcí dosti pomáha i správné umístění projektu Rka a R scriptu - doporučuji do složky na plochu. # Čím kratší je cesta k nahrávání datasetů, tím méně prostoru pro chybu Rku dáváte. Opět ctrl+enter: My_wd_old <- getwd() #Tohle je vaše working directory, můžete si ji uložit jako objekt (zobrazí se vpravo nahoře) My_wd_old # Můžete si ji kdykoliv vyvolat # Dobrou praxí je si starou WD uložit, abyste se do ní pak mohli jednoduše vrátit (viz níže) # Dobrá praxe je dobré pojmenovávání objektů!! # Pokud budete nahrávat datasety (nejčastěji xls, csv), pak je nutné, aby R vědělo, kde je najít = musí být ve working directory. # Proto je dobré mít vše v jedné složce - projekt, R script a dataset # Mrkněte se, co máte ve své working directory: list.files() # Potřebujete WD změnit? Není problém: ?setwd setwd("C:/Users/honza/Desktop/VK_R/") My_wd_new <- getwd() # Uložím si i novou WD jako objekt identical(My_wd_new, My_wd_old) # Zkontroluji si, že stará WD a nová WD nejsou identické # Nyní mohu pracovat v nové WD a když se budu potřebovat vrátit do té staré, stačí vyvolat následující funkci: setwd(My_wd_old) getwd() # U složitějších projektů si takto lze vytvořit systém přecházení ze složky do složky. Věnujte ale dostatek času tomu, aby byl kód a celý systém přehledný! # Zbytek základů vás naučí SWIRL, což je package Rka, který vás přímo v jeho prostředí bude učit. # ----------------------------------------------------------------------------- # ČÁST II: SWIRL -------------------------------------------------------------- # ----------------------------------------------------------------------------- # Máte zaprasenou konzoli níže spoustou nepřehledného kódu z předchozích vyvolání funkcí a vadí vám to? # Zmáčkněte ctrl+L # Uklizeno :) # Dobré je si i uklízet prostředí, ale bacha ať nesmažete nějaký důležitý objekt! # Buď použijte smetáček - smaže ale všechno, nebo funkci rm(): žiju_abych_zemřel <- print("Žiju, abych zemřel") # Nejdřív musíme vytvořit něco, co půjde bez následků zničit. rm(žiju_abych_zemřel) # Puf! A je to pryč. :) # Další usnadňovače Rka: # (1) šipka nahoru na klávesnici - vracení se k vyvolaným funkcím # (2) zmáčknutí tabu (ale i bez něj) - automatické doplňování kódu # (3) Průběžná analýza R scriptu - když špatně napíšete kód ve scriptu, ukáže se vám na příslušném řádku křížek: swirl) # Chybí mi první závorka # Pokud ještě nemáte SWIRL, pojďme jej nainstalovat # Stačí podržet ctrl a zmáčknout enter, Rko takto vykoná následující funkci: library(swirl) install_course_github("swirldev", "R_Programming_E") swirl() #Komentář můžete dát i na řádek přímo ke kódu, zde voláme funkci swirl() # ----------------------------------------------------------------------------- # ČÁST III: POJĎME RKO TROCHU PROVĚTRAT --------------------------------------- # ----------------------------------------------------------------------------- # TIP: Pište kód bez jakýchkoliv předpokladů (WD, nainstalovaných packages apod.) --> zajistíte dokonalou replikovatelnost getwd() # Mrkneme, jakou máme WD list.files() # Podíváme se, jestli je v ní dataset, který chceme importovat my_data <- readRDS("GEDEvent_v23_1.rds") # Importujeme dataset a uložíme do objektu my_data # POZOR! Správně se však jedná o dataFRAME (obsahuje více typů proměnných), ne dataSET (obsahuje pouze jeden typ proměnné) # ODBOČKA: IMPORT CSV A XLS SOUBORŮ ---------------------------------- # Dataset je v Rkovém formátu .rds, ale častěji se setkáme s formáty .csv a .xls, proto: # Importing CSV souboru je jednoduchý a stačí na něj base function: my_data_csv <- read.csv("path_to_your_file.csv") # U .xls je to trochu složitější, musíme nainstalovat package: # Install readxl package install.packages("readxl") # Install openxlsx package install.packages("openxlsx") # Load the readxl package library(readxl) # Import an Excel file my_data_excel <- read_excel("path_to_your_file.xlsx") # PROZKOUMÁNÍ DATASETU ------------------------------------------ # Zpět k datasetu: # Jedná se o dataset UCDP, zde je jeho popis: # This dataset is UCDP's most disaggregated dataset, covering individual events of organized violence (phenomena of lethal violence occurring at a given time and place). # These events are sufficiently fine-grained to be geo-coded down to the level of individual villages, with temporal durations disaggregated to single, individual days. # Pojďme dataset prozkoumat, abychom věděli, s čím máme co dočinění. # (1) prvním způsobem je a něj kliknout v prostředí vrpavo nahoře - otevře se záložka a my si jej můžeme prohlédnout jako v Excelu # (2) Prozkoumání pomocí funkcí: str(my_data) # View the structure of the dataset - důležité - ukazuje typy proměnných (zde num/chr) summary(my_data) # Get a summary of the dataset - jednoduché deskriptivní statistiky head(my_data) # View the first few rows of the dataset - dataset je obří, je dobré se podívat na pár prvních řádků tail(my_data) # Nebo na pár posledních names(my_data) # List the names of the variables (columns) in the dataset dim(my_data) # Get the dimensions of the dataset (number of rows and columns) sum(is.na(my_data)) # Check for missing values- všimněte si, že se jedná o funkci ve funkci summary(my_data$VariableName) # View a specific variable (column) summary - zde používán SUBSETTIN za pomocí operátoru $ # DESKRIPTIVNÍ STATISTIKA ---------------------------------- # Časový záběr datasetu summary(my_data$date_start) # Počet mrtvých summary(my_data$deaths_a) sum_deaths_a <- sum(my_data$deaths_a) summary(my_data$deaths_b) sum_deaths_b <- sum(my_data$deaths_b) summary(my_data$deaths_civilians) sum_deaths_c <- sum(my_data$deaths_civilians) total_deaths <- sum_deaths_a + sum_deaths_b + sum_deaths_c total_deaths # Korelace correlation_coefficient <- cor.test(my_data$deaths_a, my_data$deaths_b, method = "pearson") correlation_coefficient correlation_matrix <- cor(my_data, use = "complete.obs", method = "pearson") # Můžu zkorelovat celý data frame -> ale často vede k erroru (kvůli rozdílným typům proměnných) # Proto musím vybrat specifické proměnné: # Selecting specific variables from the dataframe selected_variables <- my_data[c("deaths_a", "deaths_b", "deaths_civilians")] correlation_matrix <- cor(selected_variables, use = "complete.obs", method = "pearson") # Následuje vizualizace - zde by to ale bylo složité kvůli velkému počtu proměnných a pozorování (elementů), proto půjdeme na jiný dataframe: # VIZUALIZACE ---------------------------------- rm(list = ls()) # Buď použijte koště, nebo tuto funkci k vyčištění prostředí # Install readxl package install.packages("readxl") # Load the readxl package library(readxl) # Import an Excel file getwd() list.files() my_data_excel <- read_excel("ProjectMarsV1.1.xls") # Popis datasetu: # Jedná se o dataset Project Mars # PROMĚNNÉ: # id: Numeric, unique identifier for each entry. # warcode: Numeric, code representing a specific war. # campcode: Numeric, code representing a specific campaign within a war. # ccode: Numeric, country code. # warname: Text, name of the war. # state: Text, abbreviation of state names involved in the war. # statename: Text, full name of the states involved. # yrstart: Numeric, year when the war/campaign started. # yrend: Numeric, year when the war/campaign ended. # startdate: Text, exact start date of the war/campaign. # Independent Variables: These include the Military Inequality Coefficient with subcategories like Ethnic Groups, Prewar Regime Treatment, and Ranges. # Dependent Variable: Battlefield Performance, measured through variables like Loss-Exchange Ratio, Mass Desertion, Mass Defection, and Blocking Detachments # Vizualizace - počet válek v jednotlivých letech ---------------------------------- # Load necessary library library(ggplot2) # Count the number of observations per year wars_per_year <- table(my_data_excel$yrstart) # Convert the table to a dataframe for plotting wars_per_year_df <- as.data.frame(wars_per_year) # Rename the columns appropriately names(wars_per_year_df) <- c("Year", "Number_of_Wars") #1 Create the bar graph --> ALE ŠPATNĚ ČITELNÝ GRAF ggplot(wars_per_year_df, aes(x=Year, y=Number_of_Wars)) + geom_bar(stat="identity") + theme_minimal() + labs(title="Number of Wars per Year", x="Year", y="Number of Wars") + theme(axis.text.x = element_text(angle=90, hjust=1)) # Rotate x-axis labels for better readability #2 Create the bar graph with modified x-axis --> ERROR ggplot(wars_per_year_df, aes(x=Year, y=Number_of_Wars)) + geom_bar(stat="identity") + theme_minimal() + labs(title="Number of Wars per Year", x="Year", y="Number of Wars") + scale_x_continuous(breaks=seq(min(wars_per_year_df$Year), max(wars_per_year_df$Year), by=50)) + # Adjust this line for 50th year theme(axis.text.x = element_text(angle=90, hjust=1)) # Rotate x-axis labels for better readability #3 Ensure yrstart is treated as numeric - fixing the no.2 ERROR df$yrstart <- as.numeric(as.character(my_data_excel$yrstart)) # Count the number of observations per year wars_per_year <- table(df$yrstart) # Convert the table to a dataframe for plotting wars_per_year_df <- as.data.frame(wars_per_year) # Rename the columns appropriately names(wars_per_year_df) <- c("Year", "Number_of_Wars") wars_per_year_df$Year <- as.numeric(as.character(wars_per_year_df$Year)) # Create the bar graph with modified x-axis ggplot(wars_per_year_df, aes(x=Year, y=Number_of_Wars)) + geom_bar(stat="identity") + theme_minimal() + labs(title="Number of Wars per Year", x="Year", y="Number of Wars") + scale_x_continuous(breaks=seq(min(wars_per_year_df$Year), max(wars_per_year_df$Year), by=50)) + # Adjust this line for 50th year theme(axis.text.x = element_text(angle=90, hjust=1)) # Rotate x-axis labels for better readability # Měly full volunteer forces méně padlých než ostatní armády? T-test ---------------------------------- # Load necessary libraries library(ggplot2) library(dplyr) # Convert factors to numeric if necessary my_data_excel$fullvolunteer <- as.numeric(as.character(my_data_excel$fullvolunteer)) my_data_excel$kialow <- as.numeric(as.character(my_data_excel$kialow)) # Perform the t-test t_test_result <- t.test(kialow ~ fullvolunteer, data = my_data_excel, na.rm = TRUE) # Print the t-test result print(t_test_result) # Jaká je věcná interpretace? --> PROBLEMATICKÁ!! # Ukázka regrese ---------------------------------------------------------- # Load necessary library for linear modeling library(lmtest) # Ensure kialow and MIC mean variables are numeric my_data_excel$kialow <- as.numeric(as.character(my_data_excel$kialow)) my_data_excel$mic_mean <- as.numeric(as.character(my_data_excel$mic_mean)) # Linear regression of kialow on MIC mean model <- lm(kialow ~ mic_mean, data = my_data_excel) # Summary of the regression model summary(model) # Visualization of the regression library(ggplot2) ggplot(my_data_excel, aes(x = mic_mean, y = kialow)) + geom_point() + geom_smooth(method = "lm", col = "blue") + labs(title = "Relationship between MIC Mean and KIA Low Estimates", x = "MIC Mean", y = "KIA Low Estimates") + theme_minimal() # Pojďme se podívat na replication file (R script přímo k Projektu Mars) # Rko dokáže tvořit i mapy ------------------------------------------------- # install.packages(c("tmap", "sf", "rnaturalearth", "rnaturalearthdata")) library(tmap) library(sf) library(rnaturalearth) # Load world countries data world <- ne_countries(scale = "medium", returnclass = "sf") # Simulating data: Assume we have a list of countries that have experienced civil wars countries_with_civil_war <- c("Colombia", "Syria", "Sudan", "Yemen", "Ukraine", "Australia") # Tohle je samozřejmě blbost, je nutné R kontrolovat! # Creating a dichotomous variable for civil war experience world$civilwar <- ifelse(world$name %in% countries_with_civil_war, "Yes", "No") # Plotting the map with distinct categories tm_shape(world) + tm_polygons("civilwar", palette = c("No" = "#FFCCCC", "Yes" = "#FF6666"), border.col = "black", title = "Civil War Experience") + tm_layout(legend.title.size = 0.8, frame = FALSE, title = "World Map Visualizing States with Civil War Experience", legend.text.size = 0.6, legend.position = c("left", "bottom")) + tm_legend(text.size = 0.7, title.size = 0.8)