In [9]:
from pandas import read_csv

# Kako pomoću naredbe read_csv učitati podatak tipa vremenske serije?

# da bismo učitali fajl u tip Series potrebno je preurediti kod na sledeći način:
# index_col = 0 znači da su indeksi u prvoj koloni, i da ne želimo da se indeksi generišu automatski
# squeeze = True znači da će se fajl učitati u Series, a ne u DataFrame
# parse_data=[0] omogućava da prva kolona fajla bude prepoznata kao datumi
    
series = read_csv('daily-total-female-births.csv', header = 0, index_col=0, parse_dates = [0], squeeze = True)
print(series.head())
print(type(series))
Date
1959-01-01    35
1959-01-02    32
1959-01-03    30
1959-01-04    31
1959-01-05    44
Name: Births, dtype: int64
<class 'pandas.core.series.Series'>
In [13]:
# uvek je dobro dodatno proveriti da li su datumi pravilno učitani
print(type(series.index[0]))
# treba da dobijete Timestamp
# ukoliko dobijete string, to znači da treba da konvertujete index u Timestamp
<class 'pandas._libs.tslib.Timestamp'>
In [23]:
# još jedan interesantan primer graficke vizuelizacije predstavlja i grafik boxplot()
# zbog konciznosti, ponovicemo ovde celokupan kod koji je potreban da bi se ovo izvrsilo
from pandas import Series
from pandas import DataFrame
from pandas import TimeGrouper
from pandas import Grouper
from pandas import read_csv
from pandas import concat
from matplotlib import pyplot
%matplotlib inline

# funkciji groupby u ovom slučaju prosledićemo način grupisanja preko opcije Grouper koja će imati parametar freq='M' što
# znači da grupisanje želimo da izvršimo po mesecima
serija = read_csv('daily-total-female-births.csv', header = 0, index_col = 0, parse_dates = [0], squeeze = True)
grupe = serija.groupby(Grouper(freq='M'))
grupe.groups

# Grupisanje je izvršeno na sledeći način:
Out[23]:
{Timestamp('1959-01-31 00:00:00', freq='M'): 31,
 Timestamp('1959-02-28 00:00:00', freq='M'): 59,
 Timestamp('1959-03-31 00:00:00', freq='M'): 90,
 Timestamp('1959-04-30 00:00:00', freq='M'): 120,
 Timestamp('1959-05-31 00:00:00', freq='M'): 151,
 Timestamp('1959-06-30 00:00:00', freq='M'): 181,
 Timestamp('1959-07-31 00:00:00', freq='M'): 212,
 Timestamp('1959-08-31 00:00:00', freq='M'): 243,
 Timestamp('1959-09-30 00:00:00', freq='M'): 273,
 Timestamp('1959-10-31 00:00:00', freq='M'): 304,
 Timestamp('1959-11-30 00:00:00', freq='M'): 334,
 Timestamp('1959-12-31 00:00:00', freq='M'): 365}
In [24]:
# svaka grupa iz varijable grupe ima svoje:
# ime - to je poslednji datum u mesecu
# sadržaj grupe - broj rođene dece u svakom danu tog meseca
# dakle varijabla grupe ima dva elementa grupe[0] gde je smešteno ime te grupe i grupe[1] gde se nalazi svaka grupa 
i=0
for name, grupa in grupe:
    print('Ime grupe:',name)
    print('Sadrzaj grupe:\n',grupa)
    if i<4: 
        print('*** Sada slede vrednosti iz ove grupe')
        print(grupa.values)
        print('***')
    print('-------------------------------')
    i=i+1
    if i == 3: break # samo do 4. meseca vršimo ispis, a potom prekidamo petlju
Ime grupe: 1959-01-31 00:00:00
Sadrzaj grupe:
 Date
1959-01-01    35
1959-01-02    32
1959-01-03    30
1959-01-04    31
1959-01-05    44
1959-01-06    29
1959-01-07    45
1959-01-08    43
1959-01-09    38
1959-01-10    27
1959-01-11    38
1959-01-12    33
1959-01-13    55
1959-01-14    47
1959-01-15    45
1959-01-16    37
1959-01-17    50
1959-01-18    43
1959-01-19    41
1959-01-20    52
1959-01-21    34
1959-01-22    53
1959-01-23    39
1959-01-24    32
1959-01-25    37
1959-01-26    43
1959-01-27    39
1959-01-28    35
1959-01-29    44
1959-01-30    38
1959-01-31    24
Name: Births, dtype: int64
*** Sada slede vrednosti iz ove grupe
[35 32 30 31 44 29 45 43 38 27 38 33 55 47 45 37 50 43 41 52 34 53 39 32 37
 43 39 35 44 38 24]
***
-------------------------------
Ime grupe: 1959-02-28 00:00:00
Sadrzaj grupe:
 Date
1959-02-01    23
1959-02-02    31
1959-02-03    44
1959-02-04    38
1959-02-05    50
1959-02-06    38
1959-02-07    51
1959-02-08    31
1959-02-09    31
1959-02-10    51
1959-02-11    36
1959-02-12    45
1959-02-13    51
1959-02-14    34
1959-02-15    52
1959-02-16    47
1959-02-17    45
1959-02-18    46
1959-02-19    39
1959-02-20    48
1959-02-21    37
1959-02-22    35
1959-02-23    52
1959-02-24    42
1959-02-25    45
1959-02-26    39
1959-02-27    37
1959-02-28    30
Name: Births, dtype: int64
*** Sada slede vrednosti iz ove grupe
[23 31 44 38 50 38 51 31 31 51 36 45 51 34 52 47 45 46 39 48 37 35 52 42 45
 39 37 30]
***
-------------------------------
Ime grupe: 1959-03-31 00:00:00
Sadrzaj grupe:
 Date
1959-03-01    35
1959-03-02    28
1959-03-03    45
1959-03-04    34
1959-03-05    36
1959-03-06    50
1959-03-07    44
1959-03-08    39
1959-03-09    32
1959-03-10    39
1959-03-11    45
1959-03-12    43
1959-03-13    39
1959-03-14    31
1959-03-15    27
1959-03-16    30
1959-03-17    42
1959-03-18    46
1959-03-19    41
1959-03-20    36
1959-03-21    45
1959-03-22    46
1959-03-23    43
1959-03-24    38
1959-03-25    34
1959-03-26    35
1959-03-27    56
1959-03-28    36
1959-03-29    32
1959-03-30    50
1959-03-31    41
Name: Births, dtype: int64
*** Sada slede vrednosti iz ove grupe
[35 28 45 34 36 50 44 39 32 39 45 43 39 31 27 30 42 46 41 36 45 46 43 38 34
 35 56 36 32 50 41]
***
-------------------------------
In [25]:
# pre nego što nastavimo sa kodom zgodno je da objasnimo još jedan pojam vezan za logiku - način programiranja u Python-u
# list comprehension je vrlo brz i efikasan način da se napravi lista
# pogledajmo sledeći primer

l1 = [1,2,3,4,5]
l2 = [ element**2 for element in l1] 
print('l1: ', l1)
print('l2: ', l2)
l1:  [1, 2, 3, 4, 5]
l2:  [1, 4, 9, 16, 25]
In [26]:
meseci = DataFrame() # meseci je DataFrame koji će imati 31 red i 12 kolona 

meseci = concat([DataFrame(g[1].values) for g in grupe], axis = 1)

meseci.columns = [g[0] for g in grupe] 
# može se učiniti logicnim da kolonama DataFrame-a meseci dodelimo imena koje svaka grupa ima
# g[0] sadrzi ime svake grupe, a to je ustvari poslednji dan u tom mesecu
print(meseci)
# primetimo da kada mesec ima manje od 31 dan onda su vrednosti koje nedostaju popunjene sa NaN

meseci.boxplot()
    1959-01-31  1959-02-28  1959-03-31  1959-04-30  1959-05-31  1959-06-30  \
0           35        23.0          35        39.0          32        45.0   
1           32        31.0          28        41.0          35        46.0   
2           30        44.0          45        47.0          38        34.0   
3           31        38.0          34        34.0          33        35.0   
4           44        50.0          36        36.0          39        48.0   
5           29        38.0          50        33.0          47        51.0   
6           45        51.0          44        35.0          38        36.0   
7           43        31.0          39        38.0          52        33.0   
8           38        31.0          32        38.0          30        46.0   
9           27        51.0          39        34.0          34        42.0   
10          38        36.0          45        53.0          40        48.0   
11          33        45.0          43        34.0          35        34.0   
12          55        51.0          39        34.0          42        41.0   
13          47        34.0          31        38.0          41        35.0   
14          45        52.0          27        35.0          42        40.0   
15          37        47.0          30        32.0          38        34.0   
16          50        45.0          42        42.0          24        30.0   
17          43        46.0          46        34.0          34        36.0   
18          41        39.0          41        46.0          43        40.0   
19          52        48.0          36        30.0          36        39.0   
20          34        37.0          45        46.0          55        45.0   
21          53        35.0          46        45.0          41        38.0   
22          39        52.0          43        54.0          45        47.0   
23          32        42.0          38        34.0          41        33.0   
24          37        45.0          34        37.0          37        30.0   
25          43        39.0          35        35.0          43        42.0   
26          39        37.0          56        40.0          39        43.0   
27          35        30.0          36        42.0          33        41.0   
28          44         NaN          32        58.0          43        41.0   
29          38         NaN          50        51.0          40        59.0   
30          24         NaN          41         NaN          38         NaN   

    1959-07-31  1959-08-31  1959-09-30  1959-10-31  1959-11-30  1959-12-31  
0           43          50        38.0          49        48.0          45  
1           45          39        68.0          54        49.0          32  
2           38          41        40.0          56        43.0          46  
3           37          46        42.0          47        42.0          41  
4           45          64        51.0          44        59.0          34  
5           42          45        44.0          43        45.0          33  
6           57          34        45.0          42        52.0          36  
7           46          38        36.0          45        46.0          49  
8           51          44        57.0          50        42.0          43  
9           41          48        44.0          48        40.0          43  
10          47          46        42.0          43        40.0          34  
11          26          44        53.0          40        45.0          39  
12          35          37        42.0          59        35.0          35  
13          44          39        34.0          41        35.0          52  
14          41          44        40.0          42        40.0          47  
15          42          45        56.0          51        39.0          52  
16          36          33        44.0          49        33.0          39  
17          45          44        53.0          45        42.0          40  
18          45          38        55.0          43        47.0          42  
19          45          46        39.0          42        51.0          42  
20          47          46        59.0          38        44.0          53  
21          38          40        55.0          47        40.0          39  
22          42          39        73.0          38        57.0          40  
23          35          44        55.0          36        49.0          38  
24          36          48        44.0          42        45.0          44  
25          39          50        43.0          35        49.0          34  
26          45          41        40.0          28        51.0          37  
27          43          42        47.0          44        46.0          52  
28          47          51        51.0          36        44.0          48  
29          36          41        56.0          45        52.0          55  
30          41          44         NaN          46         NaN          50  
Out[26]:
<matplotlib.axes._subplots.AxesSubplot at 0xbee15f8>
In [31]:
# na prethodnom grafiku vidimo da se ne vide jasno nazivi meseca. 
# uradimo sledeće
import numpy as np
meseci.columns = np.arange(1,13)
In [32]:
# sada su i ose podešene sa brojevima 1- januar, 2-februar itd.
meseci.boxplot()
Out[32]:
<matplotlib.axes._subplots.AxesSubplot at 0xc433cf8>