Import bibliotek.

In [1]:
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import seaborn; seaborn.set()
import sys
Po wcześniejszym zapoznaniu się z plikiem wczytanie danych i przypisanie tabeli do zmiennej gp. Oznaczenie występujących w danych wartości "#N/D!" jako puste pole oraz ustwienie kolumny "Data" jako indeks tabeli po wcześniejszej zmianie typu danych tej kolumny z tekstowego na typ czasowy.

In [2]:
gp = pd.read_csv("Gaspool.csv", sep=";", na_values='#N/D!', parse_dates=["Data"], index_col=['Data'])
gp.head()


Out[2]:
Cena
Data
2014-01-01 26,85
2014-01-02 26,85
2014-01-03 26,3
2014-01-04 26,3
2014-01-05 26,5
Odczytanie infromacji o utworzonej tabeli.

In [3]:
gp.info()


<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1384 entries, 2014-01-01 to 2017-10-15
Data columns (total 1 columns):
Cena    1376 non-null object
dtypes: object(1)
memory usage: 21.6+ KB
Zamiana "," na ".", by ułatwić zmianę typu danych w kolumnie "Ceny" z tekstowego na liczbowy, by umożliwić dalsze obliczenia.

In [4]:
gp = gp.replace(',', '.', regex=True)
gp['Cena'] = pd.to_numeric(gp['Cena'])
gp.head()


Out[4]:
Cena
Data
2014-01-01 26.85
2014-01-02 26.85
2014-01-03 26.30
2014-01-04 26.30
2014-01-05 26.50
Uzupłenienie brakujących cen metodą zastąpienia brakującej wartości ostatnią, znaną wartością.

In [5]:
gasclean = gp.fillna(method='ffill')
gasclean.info()


<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1384 entries, 2014-01-01 to 2017-10-15
Data columns (total 1 columns):
Cena    1384 non-null float64
dtypes: float64(1)
memory usage: 21.6 KB
Odczytanie podstawowaych statystyk z uzupełnionej i odpowiednio sformatowanej tabeli.

In [6]:
gasclean.describe()


Out[6]:
Cena
count 1384.000000
mean 17.966688
std 3.570067
min 10.280000
25% 15.240000
50% 17.770000
75% 20.717750
max 26.955000

In [7]:
gasclean.groupby(gasclean.index.year)['Cena'].describe()


Out[7]:
count mean std min 25% 50% 75% max
Data
2014 365.0 20.946060 3.028143 15.00 18.5000 21.149 23.0430 26.955
2015 365.0 19.855482 1.966539 13.30 18.7100 20.428 21.0460 24.097
2016 366.0 14.089399 2.041196 10.28 12.6000 13.675 15.2300 19.030
2017 288.0 16.724351 1.742881 14.76 15.4475 16.190 17.5135 22.680
Budowa wykresu zmian ceny na dla całego okresu dostępnego w danych. Dodanie lini oznaczająca średnia wartośc ceny dla danego okresu. Stworzenie funcji pozwalającej na narysowanie wykresu zmian ceny w wybranym roku.

In [8]:
gasclean.plot(figsize=(20,7), x_compat=True, title="Cena w latach 2014-2017")
plt.gca().xaxis.set_major_locator(mdate.MonthLocator())
plt.axhline(gasclean['Cena'].mean(), color='red', alpha=0.2)

def by_rok(data, rok=None):
     
    by_year = data[data.index.year == rok]
    
    return (by_year.plot(figsize=(20,7), style='.-', title="Cena w roku {0}".format(rok)), 
            plt.ylabel('Cena'), 
            plt.axhline(by_year['Cena'].mean(), color='red', alpha=0.2, label='AVG'))


by_rok(gasclean, 2016)
by_rok(gasclean, 2017);


Analiza: Jak widać na wykresie rok 2014 rozpoczął spory spadek ceny gazu ziemnego który trwał do lipca owego roku. Mimo wzrostu ceny w kolejnych miesiącach rok 2015 zapoczątkował trend spadkowy trwający do sierpnia 2016 roku w którym, to cena gazu stała na rekordowo niskim poziomie. Głównym powodem spadków ceny mimo rosnącego zapotrzebowania na gaz była nadwyżka podaży nad popyt, spowodowana zwiększeniem dostaw gazu ziemnego najpierw w 2015, a potem w 2016 roku przez Rosję oraz Norwegię. Kolejne miesiące roku 2016 to wzrost cen trwający do początku lutego bieżącego roku. Jak wiemy gas ziemny jest “efektem uboczny” wydobycia ropy naftowej dlatego wzrost jej ceny przyczynił się do podwyżki cen indeksowanych kontraktów importowych gazu ziemnego w Europie. Po okresie wzrostów obserwujemy mocny spadek ceny spowodowany obniżką cen na dostawę gazu do Niemiec przez rosyjski Gazprom. Na cenę gazu ma wpływ także pogoda. Możemy zauważyć wzrosty cen w okresach sezonu grzewczego. Im niższe temperatury tym większy popyt na gaz co skutkuje wzrostem ceny. Innym czynnikiem mającym wpływ na wzrost cen są regulacje odnośnie ograniczenia wydobycia i zużycia paliw kopalnych takich jak węgiel i ropa oraz regulacje ograniczenia emisji CO2. Moim zdaniem potencjalne wydarzenia mogące mieć wpływ na poziom wyceny gazu Niemczech, to kolejne ograniczenia na wydobycie paliw kopalnych takich jak węgiel i ropa, czego skutkiem, będzie wzrost ceny, jednocześnie będa one ogarniczone konkurencją cenową miedzy Rosją oraz Norwegią, a wchodzącymi na rynek europejski dostawcami gazu ziemnego takimi jak USA gdzie “rewolucja łupkowa” spowodowała nadwyżkę podaży nad popytem co umożliwia eksport gazu do Europy. Jeśli chodzi najbliższe kilka miesięcy myśle, że po lekkim wzrostcie ceny w okresie zimowym związanym ze zwiększonym popytem na energie, w okolicach lutego nastąpi powrót ceny do poprzedniego poziomu i powolny wzrost przez kolejne miesiące.