Loading Supervizor transactions data dump into Pandas

This Notebook was used as an introduction to Python Pandas, so it's a bit more verbose than necessary.

Jure Čuhalev - [email protected]

To run this Notebook, you'll need:

  • Pandas
  • xlrd, xlwt (to read and write Excel files)
In [1]:
import pandas as pd
import numpy as np
In [2]:
%matplotlib inline

Load data

Source: http://www.ujp.gov.si/dokumenti/dokument.asp?id=127 - SEZNAMI REGISTRA PRORAČUNSKIH UPORABNIKOV (RPU)

In [3]:
gov_df = pd.read_excel('data/RPUSeznam_03.06.2015.xls', 
                       sheetname='SEZNAM RPU',
                       header=3)
gov_df.head()
Out[3]:
Tip Skupina Podskupina Šifra PU Matična Davčna Ustanovitelj Naziv Kraj Občina ... F G H I J Naslov Poštna številka Pošta EZR Šifra proračuna
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 A I 1.1. 11118 5065402000 45181276 1 URAD PREDSEDNIKA REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA ... NaN NaN NaN NaN J Erjavčeva cesta 017 1000 LJUBLJANA 1100 10995
2 A I 1.1. 12114 5022924000 21881677 1 DRŽAVNI ZBOR REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA ... NaN NaN NaN NaN J Šubičeva ulica 004 1000 LJUBLJANA 1100 10995
3 A I 1.1. 12122 5648122000 30558255 1 DRŽAVNI SVET REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA ... NaN NaN NaN NaN J Šubičeva ulica 004 1000 LJUBLJANA 1100 10995
4 A I 1.1. 12130 5525098000 79826989 1 DRŽAVNA VOLILNA KOMISIJA Ljubljana LJUBLJANA ... NaN NaN NaN NaN J Slovenska cesta 054 1000 LJUBLJANA 1100 10995

5 rows × 26 columns

Grab only relevant columns

In [4]:
gov_df = gov_df[['Šifra PU', 'Matična', 'Davčna',
       'Naziv', 'Kraj', 'Občina', 'Naslov', 'Poštna številka', 'Pošta']]
gov_df.columns
Out[4]:
Index(['Šifra PU', 'Matična', 'Davčna', 'Naziv', 'Kraj', 'Občina', 'Naslov',
       'Poštna številka', 'Pošta'],
      dtype='object')
In [5]:
gov_df.columns = ['sifra_pu', 'maticna', 'davcna', 'naziv', 'kraj', 'obcina', 'naslov', 'postna_stevilka', 'posta']
gov_df.head()
Out[5]:
sifra_pu maticna davcna naziv kraj obcina naslov postna_stevilka posta
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 11118 5065402000 45181276 URAD PREDSEDNIKA REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA Erjavčeva cesta 017 1000 LJUBLJANA
2 12114 5022924000 21881677 DRŽAVNI ZBOR REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA Šubičeva ulica 004 1000 LJUBLJANA
3 12122 5648122000 30558255 DRŽAVNI SVET REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA Šubičeva ulica 004 1000 LJUBLJANA
4 12130 5525098000 79826989 DRŽAVNA VOLILNA KOMISIJA Ljubljana LJUBLJANA Slovenska cesta 054 1000 LJUBLJANA
In [6]:
gov_df = gov_df.dropna(subset=['sifra_pu'])

Basic slicing / Boolean indexing

In [7]:
gov_df.count()
Out[7]:
sifra_pu           2823
maticna            2823
davcna             2816
naziv              2823
kraj               2823
obcina             2823
naslov             2823
postna_stevilka    2823
posta              2823
dtype: int64
In [8]:
gov_df[(gov_df.postna_stevilka > 1000) & (gov_df.postna_stevilka < 2000)].count()
Out[8]:
sifra_pu           438
maticna            438
davcna             438
naziv              438
kraj               438
obcina             438
naslov             438
postna_stevilka    438
posta              438
dtype: int64
In [9]:
gov_df[(gov_df.postna_stevilka > 1000) & (gov_df.postna_stevilka < 2000)].count()
Out[9]:
sifra_pu           438
maticna            438
davcna             438
naziv              438
kraj               438
obcina             438
naslov             438
postna_stevilka    438
posta              438
dtype: int64
In [10]:
gov_df[gov_df.posta == 'LJUBLJANA'].count()
Out[10]:
sifra_pu           344
maticna            344
davcna             344
naziv              344
kraj               344
obcina             344
naslov             344
postna_stevilka    344
posta              344
dtype: int64
In [11]:
gov_df[gov_df.naziv.str.contains('SODIŠČE')].count()
Out[11]:
sifra_pu           25
maticna            25
davcna             25
naziv              25
kraj               25
obcina             25
naslov             25
postna_stevilka    25
posta              25
dtype: int64

Load transaction data from Supervizor

Source: http://supervizor.kpk-rs.si/podatki/

In [12]:
transactions_df = pd.read_csv('data/trans201503.csv.gz', low_memory=False)
In [13]:
transactions_df.describe()
Out[13]:
znesek_transakcije maticna_stevilka davcna_stevilka sifra_pu
count 8.699280e+05 8.694600e+05 869928.000000 614526.000000
mean 5.544251e+03 4.581396e+09 56121233.025058 9301964.318834
std 1.243984e+06 1.585990e+09 25775555.507830 21430099.234039
min 1.000000e-02 1.000055e+06 10009981.000000 10995.000000
25% 3.085000e+01 5.025796e+09 35103086.000000 27812.000000
50% 8.174000e+01 5.086035e+09 56086539.000000 67830.000000
75% 2.448800e+02 5.426189e+09 78337496.000000 92118.000000
max 9.970580e+08 6.800840e+09 99999862.000000 99666189.000000
In [14]:
transactions_df.head()
Out[14]:
podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu zr_sns_oe namen
0 010000009000034 2015-03-02 35.00 EUR 013026030717688 LJUDSKA UNIVERZA RADOVLJICA 5052858000 10017399 24009725 NaN NaN
1 024564303377389 2015-03-02 12.50 EUR 011006030705082 ŠOLSKI CENTER SLOVENJ GRADEC 5089417000 73346276 NaN NaN NaN
2 012516030657428 2015-03-02 41.17 EUR SI56031211061120871 KOPIJA-NOVA družba za trgovino in storitve d.o.o. 1491482000 10031332 65749 NaN NaN
3 051007017104133 2015-03-02 27.10 EUR 012526030657670 OSNOVNA ŠOLA FRANCETA PREŠERNA KRANJ 5086035000 94256454 NaN NaN NaN
4 010000000500021 2015-03-02 206.08 EUR 012486030635653 VRTEC KOČEVJE Cesta na stadion 3, Kočevje 5055717000 10033823 68297530 NaN NaN
In [15]:
transactions_df.count()
Out[15]:
podracun_v_breme             869928
datum_transakcije            869928
znesek_transakcije           869928
oznaka_valute_transakcije    869928
racun_v_dobro                869928
naziv_prejemnika             869443
maticna_stevilka             869460
davcna_stevilka              869928
sifra_pu                     614526
zr_sns_oe                     18160
namen                         43919
dtype: int64
In [16]:
transactions_df = transactions_df.dropna(subset=['sifra_pu'])

Merge data

In [17]:
gov_df.head()
Out[17]:
sifra_pu maticna davcna naziv kraj obcina naslov postna_stevilka posta
1 11118 5065402000 45181276 URAD PREDSEDNIKA REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA Erjavčeva cesta 017 1000 LJUBLJANA
2 12114 5022924000 21881677 DRŽAVNI ZBOR REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA Šubičeva ulica 004 1000 LJUBLJANA
3 12122 5648122000 30558255 DRŽAVNI SVET REPUBLIKE SLOVENIJE Ljubljana LJUBLJANA Šubičeva ulica 004 1000 LJUBLJANA
4 12130 5525098000 79826989 DRŽAVNA VOLILNA KOMISIJA Ljubljana LJUBLJANA Slovenska cesta 054 1000 LJUBLJANA
5 12149 5855012000 57006229 VARUH ČLOVEKOVIH PRAVIC Ljubljana LJUBLJANA Dunajska cesta 056 1000 LJUBLJANA
In [18]:
transactions_df.head()
Out[18]:
podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu zr_sns_oe namen
0 010000009000034 2015-03-02 35.00 EUR 013026030717688 LJUDSKA UNIVERZA RADOVLJICA 5052858000 10017399 24009725 NaN NaN
2 012516030657428 2015-03-02 41.17 EUR SI56031211061120871 KOPIJA-NOVA družba za trgovino in storitve d.o.o. 1491482000 10031332 65749 NaN NaN
4 010000000500021 2015-03-02 206.08 EUR 012486030635653 VRTEC KOČEVJE Cesta na stadion 3, Kočevje 5055717000 10033823 68297530 NaN NaN
6 011006030630683 2015-03-02 638.80 EUR SI56031001001147867 ELEKTROINŠTALACIJE MAKSIMOVIĆ MILAN S.P. 1858505 10140182 63061 NaN NaN
7 010000009000034 2015-03-02 40.00 EUR 013196030681935 OSNOVNA ŠOLA ŠENTJERNEJ 5086299000 77005821 24009725 NaN NaN
In [19]:
df = transactions_df.merge(gov_df, 
                           how='inner', 
                           left_on='sifra_pu',
                           right_on='sifra_pu')
In [20]:
df.head()
Out[20]:
podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu zr_sns_oe namen maticna davcna naziv kraj obcina naslov postna_stevilka posta
0 012516030657428 2015-03-02 41.17 EUR SI56031211061120871 KOPIJA-NOVA družba za trgovino in storitve d.o.o. 1491482000 10031332 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
1 012516030657428 2015-03-02 988.04 EUR SI56051008010777371 SAOP Računalništvo d.o.o. 5383129000 79407340 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
2 012516030657428 2015-03-02 91.10 EUR SI56029230020267126 PETROL, Slovenska energetska družba, d.d., Lju... 5025796000 80267432 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
3 012516030657428 2015-03-02 463.47 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
4 012516030657428 2015-03-02 1262.06 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
In [21]:
df.describe()
Out[21]:
znesek_transakcije maticna_stevilka davcna_stevilka sifra_pu maticna davcna postna_stevilka
count 4.811670e+05 4.807010e+05 481167.000000 481167.000000 4.811670e+05 481167.000000 481167.000000
mean 5.687705e+03 4.378225e+09 57760929.007596 51652.407530 4.750236e+09 54069492.342440 2952.334059
std 1.466922e+06 1.801313e+09 25945982.169756 23683.805385 1.377092e+09 25269347.696819 2520.100998
min 1.000000e-02 1.000055e+06 10009981.000000 11118.000000 1.121561e+09 10017399.000000 1000.000000
25% 4.736000e+01 3.542343e+09 37102656.000000 27430.000000 5.050537e+09 34697390.000000 1000.000000
50% 1.504400e+02 5.089832e+09 58196013.000000 63444.000000 5.086752e+09 52111776.000000 2000.000000
75% 4.579700e+02 5.504279e+09 80267432.000000 72150.000000 5.554195e+09 76953475.000000 4208.000000
max 9.970580e+08 6.800840e+09 99999862.000000 97519.000000 6.669115e+09 99965941.000000 9265.000000
In [22]:
df.columns
Out[22]:
Index(['podracun_v_breme', 'datum_transakcije', 'znesek_transakcije',
       'oznaka_valute_transakcije', 'racun_v_dobro', 'naziv_prejemnika',
       'maticna_stevilka', 'davcna_stevilka', 'sifra_pu', 'zr_sns_oe', 'namen',
       'maticna', 'davcna', 'naziv', 'kraj', 'obcina', 'naslov',
       'postna_stevilka', 'posta'],
      dtype='object')

Sodišča

We want to figure out how much spending was done by entities that contain string 'SODIŠČE', then calculate sum of spending for each entity and finally create new column with percentage of spending from that entity of each transaction.

In [23]:
sodisce_df = df[df.naziv.str.contains('SODIŠČE')]
In [24]:
sodisce_df.groupby('naziv').sum().znesek_transakcije.plot(kind='bar', figsize=(30, 10))
Out[24]:
<matplotlib.axes._subplots.AxesSubplot at 0x116482668>

Group by two columns, just to show how it works

In [25]:
sodisce_df.groupby(['posta', 'naziv']).describe()
Out[25]:
davcna davcna_stevilka maticna maticna_stevilka postna_stevilka sifra_pu znesek_transakcije
posta naziv
CELJE DELOVNO SODIŠČE CELJE count 98.000000 98.000000 9.800000e+01 9.800000e+01 98 98 98.000000
mean 19290870.000000 41503211.418367 5.858135e+09 5.118137e+09 3000 50121 571.724490
std 0.287183 26206381.064385 1.039714e+02 1.369577e+09 0 0 3095.984086
min 19290870.000000 10104135.000000 5.858135e+09 1.319175e+09 3000 50121 1.970000
25% 19290870.000000 19290870.000000 5.858135e+09 5.096049e+09 3000 50121 32.840000
50% 19290870.000000 30160595.500000 5.858135e+09 5.854814e+09 3000 50121 122.750000
75% 19290870.000000 55375407.500000 5.858135e+09 5.858135e+09 3000 50121 293.000000
max 19290870.000000 98511734.000000 5.858135e+09 6.217664e+09 3000 50121 30696.250000
OKROŽNO SODIŠČE V CELJU count 1180.000000 1180.000000 1.180000e+03 1.147000e+03 1180 1180 1180.000000
mean 44824106.000000 48658358.582203 5.024161e+09 3.965158e+09 3000 42153 1966.492983
std 0.658989 27977565.636861 5.964486e+01 1.894787e+09 0 0 25377.843691
min 44824106.000000 10364609.000000 5.024161e+09 1.421239e+06 3000 42153 1.760000
25% 44824106.000000 23561637.000000 5.024161e+09 1.821806e+09 3000 42153 55.065000
50% 44824106.000000 44543921.000000 5.024161e+09 5.024161e+09 3000 42153 128.570000
75% 44824106.000000 71345442.000000 5.024161e+09 5.565855e+09 3000 42153 615.462500
max 44824106.000000 99886600.000000 5.024161e+09 6.689442e+09 3000 42153 848923.100000
VIŠJE SODIŠČE V CELJU count 45.000000 45.000000 4.500000e+01 4.300000e+01 45 45 45.000000
mean 82308853.000000 68724817.911111 5.111773e+09 4.746788e+09 3000 42110 3478.218222
std 0.000000 25375137.083177 5.457938e+01 1.454515e+09 0 0 21041.100863
min 82308853.000000 17659957.000000 5.111773e+09 1.196332e+09 3000 42110 1.980000
25% 82308853.000000 56215657.000000 5.111773e+09 5.026121e+09 3000 42110 37.790000
50% 82308853.000000 82308853.000000 5.111773e+09 5.111773e+09 3000 42110 182.830000
75% 82308853.000000 82505136.000000 5.111773e+09 5.302181e+09 3000 42110 351.720000
max 82308853.000000 98511734.000000 5.111773e+09 6.031226e+09 3000 42110 141390.090000
KOPER-CAPODISTRIA DELOVNO SODIŠČE V KOPRU count 67.000000 67.000000 6.700000e+01 6.700000e+01 67 67 67.000000
mean 58934294.000000 59458258.850746 5.022584e+09 4.731855e+09 6000 50130 789.995224
std 0.000000 25000440.075977 6.302284e+01 1.551383e+09 0 0 4606.494478
min 58934294.000000 17659957.000000 5.022584e+09 1.117360e+06 6000 50130 1.050000
25% 58934294.000000 40951926.000000 5.022584e+09 5.022584e+09 6000 50130 38.710000
50% 58934294.000000 58934294.000000 5.022584e+09 5.048885e+09 6000 50130 69.000000
... ... ... ... ... ... ... ... ... ...
NOVA GORICA OKROŽNO SODIŠČE V NOVI GORICI std 0.683486 27221768.238961 1.010204e+02 1.920725e+09 0 0 21678.699035
min 33069239.000000 10239707.000000 5.023211e+09 1.117360e+06 5000 42218 1.000000
25% 33069239.000000 33069239.000000 5.023211e+09 1.627066e+09 5000 42218 72.630000
50% 33069239.000000 50040548.000000 5.023211e+09 5.015812e+09 5000 42218 200.000000
75% 33069239.000000 83659646.750000 5.023211e+09 5.434653e+09 5000 42218 660.325000
max 33069239.000000 98511734.000000 5.023211e+09 6.723128e+09 5000 42218 371768.430000
NOVO MESTO OKROŽNO SODIŠČE V NOVEM MESTU count 345.000000 345.000000 3.450000e+02 3.390000e+02 345 345 345.000000
mean 27842398.000000 45666491.255072 5.023319e+09 3.790418e+09 8000 42226 1881.446377
std 0.304997 26019094.110675 0.000000e+00 2.132632e+09 0 0 17803.754486
min 27842398.000000 10609512.000000 5.023319e+09 1.284444e+06 8000 42226 1.820000
25% 27842398.000000 25028022.000000 5.023319e+09 1.583130e+09 8000 42226 54.400000
50% 27842398.000000 30556180.000000 5.023319e+09 5.023319e+09 8000 42226 139.330000
75% 27842398.000000 69210209.000000 5.023319e+09 5.438543e+09 8000 42226 638.690000
max 27842398.000000 99444771.000000 5.023319e+09 6.536425e+09 8000 42226 326226.070000
PTUJ OKROŽNO SODIŠČE NA PTUJU count 521.000000 521.000000 5.210000e+02 5.120000e+02 521 521 521.000000
mean 91674824.000000 50285112.251440 5.881528e+09 3.834183e+09 2250 42242 1420.798618
std 0.000000 25744065.773372 1.099952e+02 2.008167e+09 0 0 13638.633097
min 91674824.000000 10758330.000000 5.881528e+09 1.284720e+06 2250 42242 0.400000
25% 91674824.000000 24066761.000000 5.881528e+09 1.617661e+09 2250 42242 50.000000
50% 91674824.000000 46343938.000000 5.881528e+09 5.050920e+09 2250 42242 115.530000
75% 91674824.000000 71345442.000000 5.881528e+09 5.565855e+09 2250 42242 391.520000
max 91674824.000000 99864851.000000 5.881528e+09 6.723128e+09 2250 42242 301309.460000
SLOVENJ GRADEC OKROŽNO SODIŠČE V SLOVENJ GRADCU count 209.000000 209.000000 2.090000e+02 2.060000e+02 209 209 209.000000
mean 55955495.000000 55209982.416268 5.881536e+09 4.379984e+09 2380 42250 2372.313206
std 0.784465 21966400.144182 7.100163e+01 1.935823e+09 0 0 15024.682358
min 55955495.000000 10771247.000000 5.881536e+09 1.476688e+06 2380 42250 2.690000
25% 55955495.000000 40178897.000000 5.881536e+09 2.409151e+09 2380 42250 63.750000
50% 55955495.000000 55955495.000000 5.881536e+09 5.159583e+09 2380 42250 218.380000
75% 55955495.000000 68151217.000000 5.881536e+09 5.881536e+09 2380 42250 724.620000
max 55955495.000000 99864851.000000 5.881536e+09 6.609635e+09 2380 42250 205830.200000

200 rows × 7 columns

In [26]:
sodisce_df.groupby(['posta', 'naziv']).znesek_transakcije.sum().head()
Out[26]:
posta              naziv                  
CELJE              DELOVNO SODIŠČE CELJE        56029.00
                   OKROŽNO SODIŠČE V CELJU    2320461.72
                   VIŠJE SODIŠČE V CELJU       156519.82
KOPER-CAPODISTRIA  DELOVNO SODIŠČE V KOPRU      52929.68
                   OKROŽNO SODIŠČE V KOPRU    2682388.61
Name: znesek_transakcije, dtype: float64
In [27]:
sodisca_sum = sodisce_df.groupby(['posta', 'naziv']).znesek_transakcije.sum()

Flatten groupby into DataFrame, so we can merge on it

In [28]:
sodisca_sum = sodisca_sum.reset_index()
In [29]:
sodisca_sum.columns = ['posta', 'naziv', 'znesek_transakcije_sum']
In [30]:
sodisca_sum.head()
Out[30]:
posta naziv znesek_transakcije_sum
0 CELJE DELOVNO SODIŠČE CELJE 56029.00
1 CELJE OKROŽNO SODIŠČE V CELJU 2320461.72
2 CELJE VIŠJE SODIŠČE V CELJU 156519.82
3 KOPER-CAPODISTRIA DELOVNO SODIŠČE V KOPRU 52929.68
4 KOPER-CAPODISTRIA OKROŽNO SODIŠČE V KOPRU 2682388.61
In [31]:
sodisce_sum_df = sodisce_df.merge(sodisca_sum, 
                 how='inner', 
                 left_on='naziv', 
                 right_on='naziv')
In [32]:
sodisce_sum_df[['naziv', 'znesek_transakcije', 'znesek_transakcije_sum']].head()
Out[32]:
naziv znesek_transakcije znesek_transakcije_sum
0 OKROŽNO SODIŠČE V CELJU 2206.51 2320461.72
1 OKROŽNO SODIŠČE V CELJU 19.46 2320461.72
2 OKROŽNO SODIŠČE V CELJU 64.20 2320461.72
3 OKROŽNO SODIŠČE V CELJU 488.00 2320461.72
4 OKROŽNO SODIŠČE V CELJU 184.00 2320461.72

Simple transformation on a row, to calculate percentage

It can be probably written even nicer with other Pandas functions

In [33]:
sodisce_sum_df['znesek_transakcije_proc'] = \
    sodisce_sum_df.apply(lambda row: row.loc['znesek_transakcije'] / row.loc['znesek_transakcije_sum'], axis=1).head()
In [34]:
sodisce_sum_df[['naziv', 'znesek_transakcije', 'znesek_transakcije_sum', 'znesek_transakcije_proc']].head()
Out[34]:
naziv znesek_transakcije znesek_transakcije_sum znesek_transakcije_proc
0 OKROŽNO SODIŠČE V CELJU 2206.51 2320461.72 0.000951
1 OKROŽNO SODIŠČE V CELJU 19.46 2320461.72 0.000008
2 OKROŽNO SODIŠČE V CELJU 64.20 2320461.72 0.000028
3 OKROŽNO SODIŠČE V CELJU 488.00 2320461.72 0.000210
4 OKROŽNO SODIŠČE V CELJU 184.00 2320461.72 0.000079

Example of writing out new data into Excel Spreadsheet

In [35]:
sodisce_sum_df.to_excel('output.xlsx')

Sort by highest transaction

In [36]:
df.sort(['znesek_transakcije'], ascending=False).head()
Out[36]:
podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu zr_sns_oe namen maticna davcna naziv kraj obcina naslov postna_stevilka posta
155421 011006300109972 2015-03-17 997058000 EUR SI56011006000007298 UPRAVA REPUBLIKE SLOVENIJE ZA JAVNA PLAČILA 1572814000 10641424 16110 NaN 3238853 GLAVNICA OBVEZNIC RS 5028256000 23348887 MINISTRSTVO ZA FINANCE Ljubljana LJUBLJANA Župančičeva ulica 003 1000 LJUBLJANA
155422 011006300109972 2015-03-17 100000000 EUR SI56011006000007298 UPRAVA REPUBLIKE SLOVENIJE ZA JAVNA PLAČILA 1572814000 10641424 16110 NaN 3238854 GLAVNICA OBVEZNIC RS 5028256000 23348887 MINISTRSTVO ZA FINANCE Ljubljana LJUBLJANA Župančičeva ulica 003 1000 LJUBLJANA
156049 011006300109972 2015-03-30 91000000 EUR SI56011006030264023 ZAVOD ZA POKOJNINSKO IN INVALIDSKO ZAVAROVANJE... 5156700000 85876500 16110 NaN 3277721 OBVEZNOSTI DRŽAVE- DOTACIJ 5028256000 23348887 MINISTRSTVO ZA FINANCE Ljubljana LJUBLJANA Župančičeva ulica 003 1000 LJUBLJANA
155085 011006300109972 2015-03-02 80000000 EUR SI56010000001000153 BANKA KOPER d.d. 5092221000 98026305 16110 1611-15-00989 3207091 GLAVNICA OBVEZNIC RS 5028256000 23348887 MINISTRSTVO ZA FINANCE Ljubljana LJUBLJANA Župančičeva ulica 003 1000 LJUBLJANA
156050 011006300109972 2015-03-30 76875000 EUR SI56011006000007298 UPRAVA REPUBLIKE SLOVENIJE ZA JAVNA PLAČILA 1572814000 10641424 16110 NaN 3276697 OBRESTI OBVEZNIC RS 5028256000 23348887 MINISTRSTVO ZA FINANCE Ljubljana LJUBLJANA Župančičeva ulica 003 1000 LJUBLJANA

Time Series

In [37]:
df.head()
Out[37]:
podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu zr_sns_oe namen maticna davcna naziv kraj obcina naslov postna_stevilka posta
0 012516030657428 2015-03-02 41.17 EUR SI56031211061120871 KOPIJA-NOVA družba za trgovino in storitve d.o.o. 1491482000 10031332 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
1 012516030657428 2015-03-02 988.04 EUR SI56051008010777371 SAOP Računalništvo d.o.o. 5383129000 79407340 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
2 012516030657428 2015-03-02 91.10 EUR SI56029230020267126 PETROL, Slovenska energetska družba, d.d., Lju... 5025796000 80267432 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
3 012516030657428 2015-03-02 463.47 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
4 012516030657428 2015-03-02 1262.06 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
In [38]:
df['date'] = pd.to_datetime(df['datum_transakcije'])
In [39]:
df.date.describe()
Out[39]:
count                  481167
unique                     22
top       2015-03-05 00:00:00
freq                    51435
first     2015-03-02 00:00:00
last      2015-03-31 00:00:00
Name: date, dtype: object
In [40]:
df_dates = df.set_index('date')
df_dates.head()
Out[40]:
podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu zr_sns_oe namen maticna davcna naziv kraj obcina naslov postna_stevilka posta
date
2015-03-02 012516030657428 2015-03-02 41.17 EUR SI56031211061120871 KOPIJA-NOVA družba za trgovino in storitve d.o.o. 1491482000 10031332 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
2015-03-02 012516030657428 2015-03-02 988.04 EUR SI56051008010777371 SAOP Računalništvo d.o.o. 5383129000 79407340 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
2015-03-02 012516030657428 2015-03-02 91.10 EUR SI56029230020267126 PETROL, Slovenska energetska družba, d.d., Lju... 5025796000 80267432 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
2015-03-02 012516030657428 2015-03-02 463.47 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
2015-03-02 012516030657428 2015-03-02 1262.06 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 NaN NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE
In [41]:
df_date = df.reset_index().set_index('date', drop=False)
df_date.head()
Out[41]:
index podracun_v_breme datum_transakcije znesek_transakcije oznaka_valute_transakcije racun_v_dobro naziv_prejemnika maticna_stevilka davcna_stevilka sifra_pu ... namen maticna davcna naziv kraj obcina naslov postna_stevilka posta date
date
2015-03-02 0 012516030657428 2015-03-02 41.17 EUR SI56031211061120871 KOPIJA-NOVA družba za trgovino in storitve d.o.o. 1491482000 10031332 65749 ... NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE 2015-03-02
2015-03-02 1 012516030657428 2015-03-02 988.04 EUR SI56051008010777371 SAOP Računalništvo d.o.o. 5383129000 79407340 65749 ... NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE 2015-03-02
2015-03-02 2 012516030657428 2015-03-02 91.10 EUR SI56029230020267126 PETROL, Slovenska energetska družba, d.d., Lju... 5025796000 80267432 65749 ... NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE 2015-03-02
2015-03-02 3 012516030657428 2015-03-02 463.47 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 ... NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE 2015-03-02
2015-03-02 4 012516030657428 2015-03-02 1262.06 EUR SI56042020000490563 ERA GOOD trgovina, storitve d.o.o. 1695347000 90056418 65749 ... NaN 5087929000 56311761 OSNOVNA ŠOLA KOZJE Kozje KOZJE Kozje 131 3260 KOZJE 2015-03-02

5 rows × 21 columns

Examples of different periods

In [42]:
df_date['date'].resample('W-SUN', how='count', kind='period')
Out[42]:
date
2015-03-02/2015-03-08    134954
2015-03-09/2015-03-15    113789
2015-03-16/2015-03-22     97609
2015-03-23/2015-03-29     67902
2015-03-30/2015-04-05     66913
Freq: W-SUN, Name: date, dtype: int64

For each week, we count and calculate sum and mean of all the transactions

In [43]:
df_date['znesek_transakcije'].resample('W-MON', how=['count', np.sum, np.mean], kind='period')
Out[43]:
count sum mean
date
2015-02-24/2015-03-02 26406 1.237405e+08 4686.075282
2015-03-03/2015-03-09 131639 4.017159e+08 3051.648265
2015-03-10/2015-03-16 116030 3.679257e+08 3170.953343
2015-03-17/2015-03-23 85703 1.371316e+09 16000.788211
2015-03-24/2015-03-30 82313 3.187845e+08 3872.833412
2015-03-31/2015-04-06 39076 1.532536e+08 3921.935548
In [44]:
df_date['znesek_transakcije'] \
    .resample('W-MON', how=[np.sum], kind='period') \
    .plot(kind='bar',
          figsize=(30,10))
Out[44]:
<matplotlib.axes._subplots.AxesSubplot at 0x11645e518>
In [ ]: