Oštro

Pregled podatkov

Najprej iz Excelove datoteke shranimo v obliki CSV obe tabeli na karierne_poti_ostro.csv in karierne_poti_ostro_osebe.csv

> wdir <- "C:/Users/vlado/docs/papers/2023/ostro"
> setwd(wdir)
> datum <- function(d,m,y) as.integer(as.Date(
+   ifelse(d!="",d,ifelse(is.na(m),paste("1/1/",y,sep=""),
+   paste("1/",m,"/",y,sep=""))),format="%d/%m/%Y"))

> D <- read.csv("karierne_poti_ostro.csv",sep=",",head=TRUE)
> P <- read.csv("karierne_poti_ostro_osebe.csv",sep=",",head=TRUE)
> head(D)
> head(P)

> sort(union(NULL,D$part_of_cv))
 [1] "delovne izkušnje"                     "Delovne izkušnje"                    
 [3] "izobraževanje"                        "Izobraževanje"                       
 [5] "lastništvo podjetja"                  "Lastništvo podjetja"                 
 [7] "prostočasne aktivnosti"               "Prostočasne aktivnosti"              
 [9] "strankarska pozicija"                 "Strankarska pozicija"                
[11] "svetovalne in nadzorne funkcije etc."
> (S <- sort(union(NULL,tolower(D$part_of_cv))))
[1] "delovne izkušnje"                     "izobraževanje"                       
[3] "lastništvo podjetja"                  "prostočasne aktivnosti"              
[5] "strankarska pozicija"                 "svetovalne in nadzorne funkcije etc." 
> sort(union(NULL,D$position_si))
  [1] "častnik"                                                                        
  [2] "član"                                                                           
  [3] "član vodstva"                                                                   
  [4] "član vodstva stranke"                                                           
  [5] "članica"                                                                        
 ...
[119] "zaposlen"                                                                       
[120] "zaposlen kot slušatelj"                                                         
[121] "zaposlena"                                                                      
[122] "zastopnik društva"                                                              

Modelu programov za analizo tirov kolikor toliko ustreza spremenljivka part_of_cv. Še pri tej se izkaže, da vrednosti niso vnešene enovito - včasih oznake začnejo z veliko, drugič z malo začetnico (v R-ju je to preprosto poenotiti). Večje težave bi bile, če bi se naslonili na spremenljivko position_si, kjer stvari zaplete “enakopravnost spolov” (član - članica, zaposlen - zaposlena, itd.); spol je sicer podan v spremenljivki gender v drugi tabeli.

V prvem poskusu analize se je pokazalo, da je neznano končno leto zakodirano z 2100 - razlog za zelo velik razpon vrednosti in debele črne črte na sliki.

> which(D$end_year>2023)
 [1]  21  36  42  46  49  59  63  64  65  66  69  70  84  85  86  89  90 119 120 122 123 141 145 165 171
[26] 175 200 218 219 225 226 227 252
> D$end_year[which(D$end_year>2023)]
 [1] 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100
[21] 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100 2100

Za te analize smo ga prestavili na 2024.

> max(D$end_year,na.rm = TRUE)
[1] 2100
> I <- which(D$end_year==2100)
> D$end_year[I] <- 2024

Izgradnja datoteke CSV

Prebrane podatke predelamo v obliko zaporedja dogodkov oblike (ID,s,f,S), kjer je ID ime osebe, s začetek dogodka, f konec dogodka in S stanje (vrenost spremenljivke part_of_cv). Zapišemo jih na datoteko ostro.csv. Datumi so predelani v število dni od 1/1/1970.

> CSV <- "ostro.csv"; csv <- file(CSV,"w",encoding="UTF-8")
> cat("ID  s  f  S\n",file=csv)
> n <- nrow(D) 
> for(i in 1:n){
+   ds <- datum(D$start_day[i],D$start_month[i],D$start_year[i])
+   de <- datum(D$end_day[i],D$end_month[i],D$end_year[i])
+   ID <- D$person_name[i]; rel <- tolower(D$part_of_cv[i])
+   if(!is.na(de)) {cat('"',ID,'" ',ds,' ',de,' "',rel,'"\n',sep='',file=csv)
+   } else {cat(i,":",ID,D$start_year[i],rel,'*** missing end date\n');
+     flush.console()}
+ }
13 : Vojko Volk 2009 svetovalne in nadzorne funkcije etc. *** missing end date
16 : Vojko Volk 2017 strankarska pozicija *** missing end date
17 : Vojko Volk 1991 strankarska pozicija *** missing end date
> close(csv)

V nekaj zapisih mankajo končni datumi.

Pretvorba v Pajkovo omrežje

Za pretvorbo uporabimo shemo iz mvad

 
> source("https://raw.githubusercontent.com/bavla/Rnet/master/R/Pajek.R")
> source("https://raw.githubusercontent.com/bavla/TQ/master/trajectories/trajectoR.R")
> E <- read.csv("ostro.csv",sep="")
> traj2Pajek(E,500000,"ostro.net")
% traj2Pajek Tue Nov 28 21:51:58 2023 
events 252 
..................................................50 299 Tue Nov 28 21:52:02 2023 
..................................................100 819 Tue Nov 28 21:52:11 2023 
..................................................150 1478 Tue Nov 28 21:52:21 2023 
..................................................200 1858 Tue Nov 28 21:52:27 2023 
..................................................250 2164 Tue Nov 28 21:52:32 2023 
.
 Tue Nov 28 21:52:32 2023 
density R = 0.1663821   tests = 5262 
density E = 0.06851957   edges = 2167 
% finished Tue Nov 28 21:52:32 2023 

Omrežje je shranjeno na datoteki ostro.net. Ročno sem v znakovnem urejevalniku dodal datoteki BOM - Pajek razpozna UTF-8.

Prikaz omrežja

Za prikaz omrežja ga najprej preberemo v Pajka. Ker so uteži povezav precej velike [1, 33237], večkratne in imajo velik razpon, jih transformiramo w´ = sqrt(sum(w)/1000).

Create New Network/Transform/Remove/Multiple lines/Sum values
Create New Network/Transform/Line values/Divide by [1000]
Create New Network/Transform/Line values/Abs + Sqrt
Draw/Network

Za prikaz različnih relacij moramo najprej spremeniti nekaj slikovnih nastavitev in končno shraniti sliko v obliki SVG:

Options/Lines/Different widths
Options/Size/of Lines [0.5]
Options/Colors/Edges/Relation number
Export/Options/Edge width [0.5]
Export/2D/SVG/Multiple Relations Network

Podrobnejša določitev povezav

> names(D)
 [1] "ID"                          "person_name"                 "part_of_cv"                 
 [4] "show_in_network"             "start_day"                   "start_month"                
 [7] "start_year"                  "institution_si"              "institution_en"             
[10] "institution_standardized_si" "institution_standardized_en" "institution_department_si"  
[13] "institution_department_en"   "affiliation_type_si"         "affiliation_type_en"        
[16] "position_si"                 "position_en"                 "end_day"                    
[19] "end_month"                   "end_year"                    "notes_institution_si"       
[22] "notes_institution_en"        "notes_position_si"           "notes_position_en"          
> names(P)
 [1] "ID"                      "id.projekt"              "wikidata_id"            
 [4] "name"                    "position"                "institution_si"         
 [7] "institution_en"          "is_visible"              "birth_date"             
[10] "party_si"                "party_en"                "first_time_in_office"   
[13] "is_first_time_in_office" "gender"                 

V prvem poskusu smo uporabili grobo določitev povezav večrelacijskega omrežja:

  • osebi A in B sta povezani s povezavo relacije C (part_of_cv), če obstaja neprazen presek časovnih intervalov pripadajočih dogodkov. Utež povezave je enaka velikosti preseka - dolžina presečnega časovnega intervala (merjeno v dnevih).

Tako določeno omrežje ne daje odgovorov na zastavljena vprašanja saj opisuje časovno ujemanje glede na posamezne dele CV. Za želene odgovore moramo najprej ustvariti ustrezna omrežja. Določiti moramo kdaj sta osebi povezani in na kakšen način. Pri tem naj število možnih načinov ne bo (veliko) večje od 10.

Morda bi se valjalo nasloniti na relacije iz part_of_cv in zaostriti pogoje povezanosti. Npr. uporabljenemu pogoju dodamo še:

  • se ujemata vrednosti spremenljivke institution_si

Poskusite iz zbranih podatkov sami ročno določiti nekaj parov povezanih oseb in zapišite, kako ste jih določili.

Dodatni zanimivi relaciji bi lahko bili “sokrajan” (morda izpeljiva iz naslova) in “sorodstvo”.

Vprašanja Oštro

Maja Cakaric maja@ostro.si Wed 13-Dec-23 7:31 PM

PODATKI IZ ZAVIHKA CV_LIVE, razen kjer je označeno drugače

  1. kdo [person name] je s kom povezan [person name]? Daljše, kot je skupno časovno obdobje [start_day/start_month_strat_year - end_day/end_month_end_year] v skupni instituciji [institution_si], močnejša je povezava
  2. koliko različnih institucij [institution_si] povezuje dva posameznika [name]
  3. koliko časa [start_day/start_month_strat_year - end_day/end_month_end_year] so posamezniki [name] preživeli na političnih pozicijah [affiliation type = politik] []
  4. število vodstvenih pozicij pred politično funkcijo in po njej [affiliation type = vodilni v javnem podjetju], [affiliation type = vodilni v podjetju], [position = državni sekretar/državna sekretarka], [position = minister/ministrica], [position = predsednik vlade/predsednica vlade]
  5. število svetovalnih pozicij [part of CV = svetovalne in nadzorne funkcije etc.] pred politično funkcijo [affiliation type = politik] in po njej
  6. kaj je zadnja pozicija [position_si] pred nastopom politične funkcije [affiliation type = politik] in kaj je prva pozicija [position_si] po zaključku politične funkcije
  7. strankarska moč - kako “profitabilna” je posamezna stranka [zavihek PERSONS_LIVE: party_si], glede na to, na kakšne pozicije [position_si] po zaključku politične funkcije [affiliation type = politik] preidejo funkcionarji
  8. najvišja dosežena izobrazba [part of CV = izobraževanje] - ali je razlika med poslanci, sekretarji in ministri [zavihek PERSONS LIVE: position]
  9. spol [zavihek PERSONS LIVE: gender]
  10. novinci [zavihek PERSONS LIVE: IS_FIRST_TIME_IN_OFFICE]

Opomba

  • Ne zanimajo nas trenutne povezave, ampak pretekle. V zvezi s tem velja, da pri [zavihek show_in_network] ne upoštevamo [false] trenutnih povezav s stranko in državnim zborom ali pozicijo na ministrstvu
vlado/work/tra/ostro.txt · Last modified: 2024/02/05 02:36 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