====== Slovenija 2024 - Četrti poskus ====== * [[..:ostro|Oštro]]; [[vlado:work:tra:ostro:slo1|Prvi poskus]]; [[vlado:work:tra:ostro:slo2|Drugi poskus]]; [[vlado:work:tra:ostro:slo3|Tretji poskus]] [[https://www.dvk-rs.si/volitve-in-referendumi/drzavni-zbor-rs/volitve-drzavnega-zbora-rs/volitve-v-dz-2022/|Volitve v Državni zbor Republike Slovenije]] so bile v nedeljo, 24. aprila 2022. Po podatkih okrajnih volilnih komisij (OVK) je na voliščih v Sloveniji glasovalo 1.203.522 volivk in volivcev oziroma 70,97% vseh volilnih upravičencev. ===== Izpopolnitve knjižnic trajector in Pajek ===== Programje iz tretjega poskusa sem dopolnil z upoštevanjem le datumov, ki ne presegajo datum **''Tday''** - npr. **''Tday="24/4/2022"''**. Če postavimo **''Tday=""''**, se **''Tday''** postavi na tekoči datum. V knjižnici **Pajek.R** sem dodal izpis **BOM** na začetku datotek **net**. * [[vlado:work:tra:ostro:tr4|trajector4.R]] ===== Izgradnja datotek ===== ==== Omrežji ==== Najprej ustvarimo dogodkovni datoteki **''Slo4all.csv''** (vsi podatki) in **''Slo4apr22.csv''** (do zadnjih volitev 24/4/2022) in ju predelamo v ustrezni Pajkovi omrežni datoteki **''Slo4all.net''** in **''Slo4apr22.net''** > source("https://raw.githubusercontent.com/bavla/TQ/master/trajectories/trajector4.R") > source("https://raw.githubusercontent.com/bavla/Rnet/master/R/Pajek.R") > wdir <- "C:/Users/vlado/docs/papers/2024/Trajectories/Ostro/Februar24" > setwd(wdir) > D <- read.csv("./ostro_podatki.csv",sep=",",head=TRUE) > dim(D) [1] 3157 18 > raw2events(D,Tday="",CSV="Slo4all.csv") > raw2events(D,Tday="24/4/2022",CSV="Slo4apr22.csv") 347 events skipped > Ea <- read.csv("Slo4all.csv",sep="") > traj2Pajek(Ea,500000,"./Slo4all.net") % traj2Pajek Tue Feb 6 18:02:27 2024 events 3157 ..................................................50 8 Tue Feb 6 18:02:28 2024 ... ..................................................3150 16950 Tue Feb 6 18:08:01 2024 ...... Tue Feb 6 18:08:01 2024 density R = 0.2432677 tests = 1211898 density E = 0.003403024 edges = 16953 density E' = 0.001834899 edges' = 9141 % finished Tue Feb 6 18:08:08 2024 > Ee <- read.csv("Slo4apr22.csv",sep="") > traj2Pajek(Ee,500000,"./Slo4apr22.net") % traj2Pajek Tue Feb 6 19:42:06 2024 events 2810 ..................................................50 8 Tue Feb 6 19:42:06 2024 ... ..................................................2800 7343 Tue Feb 6 19:44:25 2024 ......... Tue Feb 6 19:44:25 2024 density R = 0.2587998 tests = 1021391 density E = 0.001861835 edges = 7348 density E' = 0.0008490756 edges' = 3351 % finished Tue Feb 6 19:44:27 2024 > ==== Osebe ==== Pripravimo še datoteke s podatki o osebah > P <- read.csv("./ostro_osebe.csv",sep=",",head=TRUE) > head(P) > P$party_si[P$party_si=="poslanska skupina italijanske in madžarske narodne skupnosti"] <- "Ps i+m ns" > P <- P[P$position!="",] > dim(P) [1] 168 14 > table(P$party_si) Gibanje Svoboda Levica NSi Ps i+m ns SD SDS 53 54 9 8 2 15 27 > table(P$gender) F M 69 99 > table(P$position) minister mp pm secretary 23 89 1 55 Spomnimo se, kako deluje funkcija **''match''** > A <- c("a","c","e","b","d","f") > B <- c("b","h","f","d","a") > match(A,B) [1] 5 NA NA 1 4 3 > match(B,A) [1] 4 NA 6 5 1 Pri prvem poskusu z zadnjo različico podatkov sem dobil > Names <- levels(factor(Ea$ID)) > p <- match(Names,P$name) > Names[is.na(p)] [1] "Janja Zupančič" "Valerija Jelen Kosi" Izkazalo se je, da ima v datoteki **''ostro_osebe.csv''** več polj za vrednosti nize, ki se končujejo s presledkom. Med njimi tudi ''"Janja Zupančič "''. Ime Valerije Jelen Kosi pa je bilo izbrisano, ker je januarja 2024 odstopila. Odvečne presledke sem odstranil programsko s > P$name <- trimws(P$name); P$institution_si <- trimws(P$institution_si) Ime Valerije Jelen Kosi sem vrnil na njegovo mesto v datoteki **''ostro_osebe.csv''**. Postopek ponovimo > P <- read.csv("./ostro_osebe.csv",sep=",",head=TRUE) > P$party_si[P$party_si=="poslanska skupina italijanske in madžarske narodne skupnosti"] <- "Ps i+m ns" > P <- P[P$position!="",] > P$name <- trimws(P$name); P$institution_si <- trimws(P$institution_si) > Names <- levels(factor(Ea$ID)) > p <- match(Names,P$name) > Names[is.na(p)] character(0) > PS <- P[p,] > dim(PS) [1] 161 14 > vector2clu(as.integer(factor(PS$gender)),Clu="gender.clu") > vector2clu(as.integer(factor(PS$party_si)),Clu="party.clu") > vector2clu(as.integer(factor(PS$position)),Clu="position.clu") > levels(factor(PS$gender)) [1] "F" "M" > levels(factor(PS$party_si)) [1] "" "Gibanje Svoboda" "Levica" "NSi" "Ps i+m ns" [6] "SD" "SDS" > levels(factor(PS$position)) [1] "minister" "mp" "pm" "secretary" Za preglednejše izpise in prikaze ustvarimo še datoteko okrajšanih imen **''ostro_short.nam''** (Ime Priimek -> I Priimek) in njeno različico **''ostro_csz.nam''** brez strešic in podobnih dodatkov (izvoz dreves razrvrstitev v EPS pozna le kodo ASCII). > library(scraEP) > nam <- file("ostro_short.nam","w",encoding="UTF-8") > lab <- file("ostro_csz.nam","w",encoding="UTF-8") > cat('\xEF\xBB\xBF',file=nam); cat('\xEF\xBB\xBF',file=lab) > n <- length(Names) > cat("% Short names",date(),"\n*vertices",n,"\n",file=nam) > cat("% Short csz names",date(),"\n*vertices",n,"\n",file=lab) > for(i in 1:n){S <- strsplit(Names[i]," ")[[1]] + Ns <- paste(substring(S[1],1,1),substr(Names[i],nchar(S[1])+2,nchar(Names[i]))) + cat(i,' "',Ns,'"\n',sep='',file=nam) + cat(i,' "',unaccent(Ns),'"\n',sep='',file=lab)} > close(nam); close(lab) Nekatera imena so še vedno precej dolga - dvojni priimki. Nekaj oseb ima ista okrajšana imena: J Žnidaršič in T Novak. Potreben bo ročni poseg. ==== Končna različica datotek ==== Odločili smo se, da Valerijo Jelen Kosi izločimo iz podatkov in za dvojne priimke uporabimo krajšanje (Ime Priimek1 Priimek2 -> IP1 Priimek2). Dvoumna imena bomo razrešili ročno. V knjižnico **''Pajek.R''** sem dodal funkcijo ''**vecnom2clu**(nom,Clu=file.clu)'', ki imensko spremenljivko nom izpiše kot Pajkovo razbitje z legendo. vecnom2clu <- function(N,Clu="Pajek.clu",encoding="UTF-8"){ n <- length(N); clu <- file(Clu,"w",encoding=encoding) if(encoding=="UTF-8") cat('\xEF\xBB\xBF',file=clu) C <- factor(N); L <- levels(C) cat("% nom2Pajek",date(),"\n%", paste(1:length(L),": ",L,collapse="; ",sep=""), "\n*vertices",n,"\n",file=clu) cat(C,sep="\n",file=clu) close(clu) } Nadaljujemo obdelavo po branju tabel **''Ea''** in **''Ee''** > Ea <- read.csv("Slo4all.csv",sep="") > Ee <- read.csv("Slo4apr22.csv",sep="") > dim(Ea) [1] 3157 6 > Ea <- Ea[Ea$ID!="Valerija Jelen Kosi",] > dim(Ea) [1] 3139 6 > Ee <- Ee[Ee$ID!="Valerija Jelen Kosi",] > dim(Ee) [1] 2793 6 > traj2Pajek(Ea,500000,"./Slo4all.net") % traj2Pajek Wed Feb 7 16:45:46 2024 events 3139 ..................................................50 8 Wed Feb 7 16:45:47 2024 ... ..................................................3100 16901 Wed Feb 7 16:49:10 2024 ...................................... Wed Feb 7 16:49:10 2024 density R = 0.2423805 tests = 1193746 density E = 0.003438312 edges = 16934 density E' = 0.001853164 edges' = 9127 % finished Wed Feb 7 16:49:17 2024 > traj2Pajek(Ee,500000,"./Slo4apr22.net") % traj2Pajek Wed Feb 7 16:59:17 2024 events 2793 ..................................................50 8 Wed Feb 7 16:59:18 2024 ... ..................................................2750 7279 Wed Feb 7 17:01:55 2024 .......................................... Wed Feb 7 17:01:56 2024 density R = 0.2578694 tests = 1005440 density E = 0.001880212 edges = 7331 density E' = 0.0008563673 edges' = 3339 % finished Wed Feb 7 17:01:58 2024 > P <- read.csv("./ostro_osebe.csv",sep=",",head=TRUE) > P$party_si[P$party_si=="poslanska skupina italijanske in madžarske narodne skupnosti"] <- "Ps i+m ns" > P <- P[P$position!="",] > P$name <- trimws(P$name); P$institution_si <- trimws(P$institution_si) > Names <- levels(factor(Ea$ID)) > p <- match(Names,P$name) > Names[is.na(p)] character(0) > PS <- P[p,] > dim(PS) [1] 160 14 > vecnom2clu(PS$gender,Clu="gender.clu") > vecnom2clu(PS$party_si,Clu="party.clu") > vecnom2clu(PS$position,Clu="position.clu") > library(scraEP) > nam <- file("ostro_short.nam","w",encoding="UTF-8") > lab <- file("ostro_csz.nam","w",encoding="UTF-8") > cat('\xEF\xBB\xBF',file=nam); cat('\xEF\xBB\xBF',file=lab) > n <- length(Names) > cat("% Short names",date(),"\n*vertices",n,"\n",file=nam) > cat("% Short csz names",date(),"\n*vertices",n,"\n",file=lab) > for(i in 1:n){S <- strsplit(Names[i]," ")[[1]]; Ns <- substring(S[1],1,1) + Ns <- ifelse(length(S)==2,paste(Ns,S[2]),paste(Ns,substring(S[2],1,1)," ",S[3],sep="")) + cat(i,' "',Ns,'"\n',sep='',file=nam) + cat(i,' "',unaccent(Ns),'"\n',sep='',file=lab)} > close(nam); close(lab) Potreben je še manjši ročni poseg v obe datoteki. Problematična imena 62 "Janez (Ivan) Janša", 71 "Jernej Žnidaršič", 72 "Jonas Žnidaršič", 145 "Tereza Novak", 148 "Tine Novak" okrajšamo kot "J Janša", "Je Žnidaršič", "Jo Žnidaršič", "Te Novak", "Ti Novak". Del s pripravo razbitij in imen ponovimo še za dogodke do zadnjih volitev Ee > Names <- read.table("Slo4apr22.net",skip=2,head=FALSE,nrows=154,stringsAsFactors = FALSE)$V2 > p <- match(Names,P$name) > Names[is.na(p)] character(0) > PS <- P[p,] > dim(PS) [1] 154 14 > vecnom2clu(PS$gender,Clu="gender22.clu") > vecnom2clu(PS$party_si,Clu="party22.clu") > vecnom2clu(PS$position,Clu="position22.clu") > nam <- file("ostro22_short.nam","w",encoding="UTF-8") > lab <- file("ostro22_csz.nam","w",encoding="UTF-8") > cat('\xEF\xBB\xBF',file=nam); cat('\xEF\xBB\xBF',file=lab) > n <- length(Names) > cat("% Short names",date(),"\n*vertices",n,"\n",file=nam) > cat("% Short csz names",date(),"\n*vertices",n,"\n",file=lab) > for(i in 1:n){S <- strsplit(Names[i]," ")[[1]]; Ns <- substring(S[1],1,1) + Ns <- ifelse(length(S)==2,paste(Ns,S[2]),paste(Ns,substring(S[2],1,1)," ",S[3],sep="")) + cat(i,' "',Ns,'"\n',sep='',file=nam) + cat(i,' "',unaccent(Ns),'"\n',sep='',file=lab)} > close(nam); close(lab) ====== ====== * [[vlado:work:tra:ostro:ana4|Analize]]