otrdiena, 2014. gada 26. augusts

Diagrammu veidošana par 2. pensiju līmeni ar gnuplot palīdzību

Maza paspēlēšanās ar to, kā novilkt un apstrādāta datus par 2. pensijas līmeņa fondiem no manapensija.lv un ģenerēt diagrammas ar gnuplot

Lejuplādējam un konvertējam datus

wget http://www.manapensija.lv/lv/wp-content/uploads/hist_lv.csv -O  hist_lv.csv 
dos2unix hist_lv.csv 
tail -n +2 hist_lv.csv | \
awk -f cross.awk | \
awk 'NR == 1; NR > 1 {print $0 | "sort -n"}' > fin.csv 

Un zīmējam diagrammu

gnuplot fin.gp 

Faila  cross.awk saturs 

( pēc http://compgroups.net/comp.unix.shell/pivot-table-style-analysis-in-awk-or/243639)

BEGIN {
  FS=OFS="\t"
}

{   dat=$4; fonds=$2; score=$5
     datumi[dat]; types[fonds]
     scores[dat,fonds] = score
}
END {
    
     printf "datums"
     for (fonds in types) {
         printf "\t%s",fonds
     }
     for (dat in datumi) {
         printf "\n%s",dat
         for (fonds in types) {
             printf "\t%s",scores[dat,fonds]
         } 
     }  
}

Gnuplot skripta fin.gp saturs:


#!/usr/bin/gnuplot
set datafile separator "\t"
set timefmt "%Y-%m-%d"
set xdata time
set key autotitle columnhead
plot "fin.csv" using 1:2 title columnheader(2), for [i=3:24] '' u 1:i
pause -1 

Faila finDiff.gp saturs 

Šo gnuplot failu var lietot, lai zīmētu izmaiņas. Nav atrisināta tukšo vērtību problēma. Skriptā var lietot gan absolūto vērtību, gan % izmaiņas

#!/usr/bin/gnuplot
set datafile separator "\t"
set timefmt "%Y-%m-%d"
set xdata time
set key autotitle columnhead
delta_v(x) = ( vD = x - old_v, old_v = x, vD)
old_v = NaN
delta_p(x) = ( vD = (x / old_p) - 1 , old_p = x, vD)
old_p = NaN
plot "fin.csv" using 1:(delta_v($2)) w l , for [i=3:24] '' u 1:(delta_v(column(i))) w l
# plot "fin.csv" using 1:(delta_p($2)) w l , for [i=3:24] '' u 1:(delta_p(column(i))) w l
pause -1