DescriptiveStats in OpenBudgets

Kleanthis Koupidis, Aikaterini Chatzopoulou, Charalampos Bratsas

DescriptiveStats.OBeu is used on OpenBudgets.eu data mininig tool platform with OpenCPU integration of R and JavaScript to estimate central tendency and dispersion of numeric variables along with their distributions and correlations and the frequencies of categorical dimensions for budget or expenditure datasets of Municipality across Europe.

The vignette shows the way DescriptiveStats.OBeu (in R and OpenCPU environment) is fitted with datasets of OpenBudgets.eu according to the OpenBudgets.eu data model. Detailed documentation about OpenBudgets.eu data model can be found here

The input and the resulted object are in json format.

First you have to load the library

# load DescriptiveStats.OBeu
library(DescriptiveStats.OBeu)

Descriptive Statistics on OpenBudgets.eu platform

open_spending.ds is designed to estimate and return the basic descriptive measures, correlation, histogram and boxplot parameters of all the numerical variables and the frequencies of all the nominal variables of OpenBudgets.eu datasets.

The input data must be a JSON link that are described with the OpenBudgets.eu data model. There are different parameters that a user could specify, e.g. dimensions, measured.dimensions and amounts should be defined by the user, to form the dimensions of the dataset. The basic descriptive measures of tendency and spread, boxplot and histogram parameters are estimated, in order to describe and visualize the distribution characteristics of the desired dataset.

open_spending.ds input
Input Description

json_data

The json string, URL or file from Open Spending API

dimensions

The dimensions of the input data

amounts

The measures of the input data

measured.dimensions

The dimensions to which correspond amount/numeric variables

coef.outl

Determines the length of the “whiskers” plot. Default is 1.5.

box.outliers

If TRUE the outliers will be computed at the selected “coef.outl” level

box.width

The width level is determined 0.15 times the square root of the size of the input data.

cor.method

The correlation coefficient method to compute: “pearson” (default),“kendall” or “spearman”.

freq.select

One or more nominal variables to calculate their corresponding frequencies.

Pre-processing of input

DescriptiveStats.OBeu includes functions that automatically calculates the central tendency and spread measures, the boxplot, histogram and barplot visualization parameters and the correlation matrix of the input fiscal dataset.

The final returns are the parameters needed for forming summary tables of central tendency and dispersion measures and visualizing boxplot, histogram, barplot and correlation matrix of the input data.

Central Tendency Measures

Central Tendency Measures describe the central position of a distribution for a group of data. The basic measures are the mean and the median.

Dispersion Measures (Measures of Spread)

Dispersion measures describe how similar or varied the data are. The range, quartiles and the interquartile range, variance and standard deviation are measures of spread.

Output

The output of this process is a list in json format divided into four components of parameters and results with the first subcomponents.

Here is a sort description of the outputs in each function:

open_spending.ds return
Function Output Description

statistics

  • Min
  • Max
  • Range
  • Mean
  • Median
  • Quantiles
  • Variance
  • StandardDeviation
  • Skewness
  • Kurtosis
  • The minimum observed value of the input data
  • The maximum observed value of the input data
  • The difference between maximum and minimum
  • The average value of the input data
  • The median value of the input data
  • The 25%, 75% percentiles
  • The variance of the input data
  • The standard deviation of the input data
  • The Skewness of the input data
  • The Kurtosis of the input data

boxplot

  • lo.whisker
  • lo.hinge
  • median
  • up.hinge
  • up.whisker
  • box.width
  • lo.out
  • up.out
  • n
  • Lower horizontal line out of the box
  • Lower horizontal line of the box
  • Horizontal line in the box
  • Upper horizontal line of the box
  • Upper horizontal line out of the box
  • The box width of each variable
  • Lower outliers
  • Upper outliers
  • The number of non-NA observations

histogram

  • cuts
  • counts
  • mean
  • median
  • The boundaries of the histogram classes
  • The frequency of each histogram class
  • The average value of the input vector
  • The median value of the input data

frequencies

  • Variable name
  • frequencies
  • “_row"
  • relative.frequencies
  • The name of the calculated variable
  • The frequency value
  • Name of the categories of the variable
  • Relative frequency values

correlation

  • Variable name
  • Correlation value
  • “_row"
  • The name of the calculated variable
  • The correlation value
  • The corresponding correlation variable

Examples

The dataset that is being used is available as json link in DescriptiveStats.OBeu package and represents the budget for Wuppertal for 2009 to 2020.

In R environment

open_spending.ds function’s input are data as json link and described with OpenBudgets.eu data model.

Wuppertal_openspending
## [1] "http://next.openspending.org/api/3/cubes/4b6d969e07ef7a86aa54e539fc127a14:wuppertalhaushalt/facts"
descript = open_spending.ds(
  json_data =  Wuppertal_openspending, 
  dimensions ="functional_classification_3.Produktgruppe|date_2.Year",
  amounts = "Amount"
  )
# Pretty output using prettify of jsonlite library
jsonlite::prettify(descript)
## {
##     "descriptives": {
##         "Min": {
##             "Amount": [
##                 533.21
##             ]
##         },
##         "Max": {
##             "Amount": [
##                 2997043.49
##             ]
##         },
##         "Range": {
##             "Amount": [
##                 2996510.28
##             ]
##         },
##         "Mean": {
##             "Amount": [
##                 659132.4457
##             ]
##         },
##         "Median": {
##             "Amount": [
##                 476400.565
##             ]
##         },
##         "Quantiles": {
##             "Amount": [
##                 313924.26,
##                 656962.815
##             ]
##         },
##         "Variance": {
##             "Amount": [
##                 469375540712.697
##             ]
##         },
##         "StandardDeviation": {
##             "Amount": [
##                 685109.8749
##             ]
##         },
##         "Kurtosis": [
##             5.7675
##         ],
##         "Skewness": [
##             2.5221
##         ]
##     },
##     "boxplot": {
##         "Amount": {
##             "lo.whisker": [
##                 533.21
##             ],
##             "lo.hinge": [
##                 306296.49
##             ],
##             "median": [
##                 476400.565
##             ],
##             "up.hinge": [
##                 658308.4
##             ],
##             "up.whisker": [
##                 1185907.2
##             ],
##             "box.width": [
##                 1.5
##             ],
##             "lo.out": [
## 
##             ],
##             "up.out": [
##                 2954238.51,
##                 2979998.49,
##                 2992244.95,
##                 2916160.36,
##                 2885816.5,
##                 2997043.49,
##                 2875275.56,
##                 1252420.49,
##                 1248584.45
##             ],
##             "n": [
##                 100
##             ]
##         }
##     },
##     "histogram": {
##         "Amount": {
##             "cuts": [
##                 0,
##                 500000,
##                 1000000,
##                 1500000,
##                 2000000,
##                 2500000,
##                 3000000
##             ],
##             "counts": [
##                 54,
##                 32,
##                 7,
##                 0,
##                 0,
##                 7
##             ],
##             "mean": [
##                 659132.4457
##             ],
##             "median": [
##                 476400.565
##             ]
##         }
##     },
##     "frequencies": {
##         "frequencies": {
##             "functional_classification_3.Produktgruppe": [
##                 {
##                     "Var1": "",
##                     "Freq": 2
##                 },
##                 {
##                     "Var1": "(entfallen in 2013) Geschäftsbereichsleitung GB 1.1 ",
##                     "Freq": 5
##                 },
##                 {
##                     "Var1": "Beschäftigtenvertretung",
##                     "Freq": 1
##                 },
##                 {
##                     "Var1": "Bezirksvertretungen",
##                     "Freq": 7
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 1",
##                     "Freq": 15
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 2.1",
##                     "Freq": 7
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 2.2",
##                     "Freq": 7
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 4",
##                     "Freq": 28
##                 },
##                 {
##                     "Var1": "Gleichstellung von Frau und Mann",
##                     "Freq": 7
##                 },
##                 {
##                     "Var1": "Politische Gremien",
##                     "Freq": 7
##                 },
##                 {
##                     "Var1": "Verwaltungsführung",
##                     "Freq": 14
##                 }
##             ],
##             "date_2.Year": [
##                 {
##                     "Var1": "2009",
##                     "Freq": 16
##                 },
##                 {
##                     "Var1": "2010",
##                     "Freq": 15
##                 },
##                 {
##                     "Var1": "2011",
##                     "Freq": 14
##                 },
##                 {
##                     "Var1": "2012",
##                     "Freq": 14
##                 },
##                 {
##                     "Var1": "2013",
##                     "Freq": 15
##                 },
##                 {
##                     "Var1": "2014",
##                     "Freq": 13
##                 },
##                 {
##                     "Var1": "2015",
##                     "Freq": 13
##                 }
##             ]
##         },
##         "relative.frequencies": {
##             "functional_classification_3.Produktgruppe": [
##                 {
##                     "Var1": "",
##                     "Freq": 0.02
##                 },
##                 {
##                     "Var1": "(entfallen in 2013) Geschäftsbereichsleitung GB 1.1 ",
##                     "Freq": 0.05
##                 },
##                 {
##                     "Var1": "Beschäftigtenvertretung",
##                     "Freq": 0.01
##                 },
##                 {
##                     "Var1": "Bezirksvertretungen",
##                     "Freq": 0.07
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 1",
##                     "Freq": 0.15
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 2.1",
##                     "Freq": 0.07
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 2.2",
##                     "Freq": 0.07
##                 },
##                 {
##                     "Var1": "Geschäftsbereichsleitung GB 4",
##                     "Freq": 0.28
##                 },
##                 {
##                     "Var1": "Gleichstellung von Frau und Mann",
##                     "Freq": 0.07
##                 },
##                 {
##                     "Var1": "Politische Gremien",
##                     "Freq": 0.07
##                 },
##                 {
##                     "Var1": "Verwaltungsführung",
##                     "Freq": 0.14
##                 }
##             ],
##             "date_2.Year": [
##                 {
##                     "Var1": "2009",
##                     "Freq": 0.16
##                 },
##                 {
##                     "Var1": "2010",
##                     "Freq": 0.15
##                 },
##                 {
##                     "Var1": "2011",
##                     "Freq": 0.14
##                 },
##                 {
##                     "Var1": "2012",
##                     "Freq": 0.14
##                 },
##                 {
##                     "Var1": "2013",
##                     "Freq": 0.15
##                 },
##                 {
##                     "Var1": "2014",
##                     "Freq": 0.13
##                 },
##                 {
##                     "Var1": "2015",
##                     "Freq": 0.13
##                 }
##             ]
##         }
##     },
##     "correlation": {
## 
##     }
## }
## 

In OpenCPU environment

Select library and function

  1. Go to: yourserver/ocpu/test

  2. Copy and paste the following function to the endpoint

../library/DescriptiveStats.OBeu/R/open_spending.ds
# library/ {name of the library} /R/ {function}
  1. Select Method: Post

Add parameters

Click add parameters every time you want to add a new parameters and values.

  1. Define the input data:

    • Param Name: json_data
    • Param Value (URL of json data): "http://next.openspending.org/api/3/cubes/21260d070eb5d63a121ea4c400dafbbb:apbn_fungsi_2016/facts?pagesize=20" (or any other json URL with the data)
  2. Define the dimensions parameter:

    • Param Name: dimensions
    • Param Value: "functional_classification_2.Function|functional_classification_2.Code"
  3. Define the amount parameter:

    • Param Name: amounts
    • Param Value: "Revised"

You add likewise further parameters and change the default parameters of coef.outl, box.outliers, box.wdth, cor.method, see DesciptiveStats.OBeu reference manual for further details.

  1. Ready! Click on Ajax request!

Results

  1. copy the /ocpu/tmp/{this_id_number}/R/.val (second on the right panel)

  2. finally, paste yourserver/ocpu/tmp/{this_id_number}/R/.val on a new tab.

Further Details

Github