Slovenija 2024 - Četrti poskus

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.

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/slo4.txt · Last modified: 2024/02/08 00:22 by vlado
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki