Python'a Giriş 1: Basit Bir Petrol Petrol Arz-Talep Modeli¶Python öğrenmek isteyenler için ardı arkası bitmeyen dilin özellikleri, kavramlar kafaları karıştırabilmektedir. Enerji sektöründe çalışanlar için bence dilin tüm özelliklerini baştan vererek can sıkmaya gerek yok. Bu derste sırası ile
komutlarını inceleyeceğiz. Sanırım basit bir dünya modeli için bu yeterli... Python 3 kullanacağız. Daha sonra ise modelimizi grafik ve veri çerçeveleri ile bir üst seviyeye taşımaya çalışacağız. Python'un kıllıkları¶Python'da kod yazarken form/estetik önemlidir. Yani kodun görünüşünün de güzel olması zorlanır. Eğer uymazsanız indentation hataları verir. Bazen oldukça sorun olabilir. Bu indentation yani girintiler, aynı zamanda döngülerin ne kadar devam ettiğini de belirler. Mesela bir for döngüsünden hemen sonra girinti verilir. Vermezseniz kod çalışmaz, hata verir. Girintiyi sonlandırdığınız satıra kadar for döngüsü çalışır. Örneğin for, if vs gibi işlemleren sonra boşluk vermeyerek bir KASITLI HATA oluşturalım. In [1]:
for i in range(1,3):
print(i)
Doğrusu In [ ]:
for i in range(1,10):
print(i,end=",") # burada 1,2,3....., yazılacak. range'in son elemanı kullanılmaz
print("Son") # döngü girintinin bitirildiği satıra kadar çalışır. Bu satır döngü tamamlandıktan sonra çalışacak
Değişkenler ve Fonksiyonlar¶Python'da (diğer programlama dillerinde olduğu gibi) tüm kurgu değişkenler ve fonksiyonlar üzerine kuruludur. (Nesne temelli programlama konusuna hiç değinmiyoruz)
Konumuz enerji olduğundan değişken olarak bir petrol fiyatı tanımlayarak ekrana çıktı üretelim. Petrol fiyatını 60 olarak brent adlı değişkene yükleyeceğiz, daha sonra ise print komutu ile ekrana çıktı vereceğiz In [2]:
brent=60
In [3]:
print(brent)
print komutunda istersek ,(virgül) ile değişik karakter katarlarını arka arkaya ekleyebilir, hatta değişkenlerle de karıştırabiliriz. In [4]:
print("Brent fiyatı=",brent)
if yani eğer işlemleri¶Programlamanın en basit iki bileşeninden biri karar argümanlarıdır. Yani eğer Bir petrol modeli yapacak isek, en önemli komutumuz eğer yani if olacaktır. Çünkü petrol dinamikleri fiyat seviyelerine bağımlıdır.
Peki neye göre pahalı veya ucuz? Model kabulü olarak
alıyoruz. İlk eğer komutumuz, bir tüketici davranışı.
In [5]:
brent=60
In [6]:
if brent>60:
print("Fiyat yüksek")
Ekrana hiç birşey yazılmadı, çünkü brent fiyatı 60 dolar olarak tanımladığımızdan, eğer döngüsü çalışmaz. brent'i 61$/v 'e eşitleyerek tekrar deneyelim In [7]:
brent=61
if brent>60:
print("Fiyat yüksek")
Modelin Teknik Detayları¶OPEC raporuna yayınlanan son verilerden modelimizin diğer detaylarını da ekleyelim
Modelin Programlanması¶En son OPEC raporundan verileri alalım..
In [8]:
opec_uretim=32
nopec_uretim=68
In [9]:
oecd_tuketim=30
noecd_tuketim=70
Tüm modelin ana bileşeni olan petrol_fiyati değişkenini tanımlayalım In [10]:
petrol_fiyati=60
İlk eğer(if) komutumuzda, petrol 60$/v'in altında ise:
İstatistiki bilgi olması açısından dünya petrol talebi tahminlerinde talep uzun dönemde yıldan yıla 1.2 mv/g bir artış gösterir. In [11]:
if petrol_fiyati<60:
opec_uretim=opec_uretim-0.3 # eğer 60 $'ın altında petrol fiyatı var ise OPEC üretimi 0.3 mv/g düşer
nopec_uretim=nopec_uretim-0.5
oecd_tuketim=oecd_tuketim+0.01
noecd_tuketim=noecd_tuketim+0.4
Şimdi ise petrol 60$/v'in üzerinde ise üretim ve tüketimin nasıl değişeceğini yazalım
In [12]:
if petrol_fiyati>60:
opec_uretim=opec_uretim+0.3
nopec_uretim=nopec_uretim+0.5
oecd_tuketim=oecd_tuketim-0.01
noecd_tuketim=noecd_tuketim-0.4
Şimdi ise tüm üretimi toplayarak, toplam_uretim; tüm tüketimi de toplayarak toplam_tuketim değişkenlerine atayalım.
In [13]:
toplam_uretim= opec_uretim+ nopec_uretim
toplam_tuketim= oecd_tuketim + noecd_tuketim
print("Petrol üretimi:", toplam_uretim)
print("Petrol tüketimi:", toplam_tuketim)
Gördüğümüz gibi 60 $/v'de petrol fiyatları dengede, talep de 100 mv/g'de Modelin kilit noktası¶Modelimizin kilit noktası petrol fiyatının değiştiği, fiyat hareketini belirleyen formül olacak.
Yani ters yönlü bir hareket var. In [14]:
# fiyat hareketi
hassasiyet=5
petrol_fiyati=petrol_fiyati-(toplam_uretim- toplam_tuketim)*hassasiyet
UYARI Kafayı karıştıran nokta eşitliğin iki tarafında da petrol_fiyati olması. (Değişkenlerde Avrupa latin karakter kullanın fiyatı yazarsanız sorun olabilir). Oysa, petrol fiyatını al, çarp-çıkar ve güncelle demek.
Simulasyon Döngüsü için for¶Petrol fiyatı bir değerin altında veya üstünde ise üretim ve tüketim artacak-azalacak. Ama bunu ardışık yıllar halinde bir simulasyon ile çalıştırmazsak tek tek shift+enter(çalıştır) ile saatlerce satır çalıştırmamız gerekir. Her programlama dilinin olmazsa olmazı for burada yardımımıza yetişiyor.
Örneğin bir dizi içerisindeki tüm elemanları tek tek yazdırmak için In [15]:
for veri in [8,9,10]:
print(veri)
Aynı şekilde 1'den 3'e kadar sayıları yazdırmak için In [16]:
for veri in range(1,4):
print(veri)
Bu verileri yan yana yazdırmak için ise print'e son bir değişken olarak end= " " atıyoruz. In [17]:
for veri in range(1,4):
print(veri,end=" ")
Kısaca range komutu, range(başla, bitir, adım) şeklinde tanımlanabilir. Hiçbir zaman bitir de tanımlı son sayı üretilmez. O limittir Modelimizi 2030'a kadar 1'er yıl ara ile çalıştıracak isek
In [18]:
for i in range(2019, 2031, 1): #range(basla, bitis, adım)
print(i, end=" ")
Tüm Modeli bir araya getirmek¶Kısaca modelimizde yukarıda yazdığımız kod dizinlerini bir araya getirip tek bir girişte çalıştıracağız. Modelin bölümleri şu şekilde:
In [19]:
# 1. Başlangıç değerlerini ve değişkenlerini yükle
petrol_fiyati=70
opec_uretim=32
nopec_uretim=68
oecd_tuketim=30
noecd_tuketim=70
# 2. Simulasyon için **for** döngüsünü kur
for yil in range(2019,2031,1):
# A. Petrol fiyatları 60 dolar/varilin altı için değişim formülleri
# petrol fiyatları 60 doların altında ise
if petrol_fiyati<60:
opec_uretim=opec_uretim-0.3 # eğer 60 $'ın altında petrol fiyatı var ise OPEC üretimi 0.3 mv/g düşer
nopec_uretim=nopec_uretim-0.5
oecd_tuketim=oecd_tuketim+0.01
noecd_tuketim=noecd_tuketim+0.4
# B. Petrol fiyatları 60 dolar/varilin üstü için değişim formülleri
# Petrol fiyatları 60 doların üzerinde ise
if petrol_fiyati>60:
opec_uretim=opec_uretim+0.3
nopec_uretim=nopec_uretim+0.5
oecd_tuketim=oecd_tuketim-0.01
noecd_tuketim=noecd_tuketim-0.4
# C. Toplam üretim ve tüketimi hesapla
toplam_uretim= opec_uretim+ nopec_uretim
toplam_tuketim= oecd_tuketim + noecd_tuketim
# D. Fiyat formülünü çalıştır
hassasiyet=5
petrol_fiyati=petrol_fiyati-(toplam_uretim- toplam_tuketim)*hassasiyet
# E. Ekrana yaz
print("Yıl=",yil, " Petrol fiyatı",petrol_fiyati, end=" ")
print("Toplam uretim=",toplam_uretim," Toplam tuketim=",toplam_tuketim)
Sonuç¶Python ile enerji analizine giriş dersi olarak, artık gına gelmiş "hello world" örnekleri yerine, az komutlu, azcık aritmetik bir örneğin daha faydalı olacağını düşünerek, 22 satırda basit bir petrol arz-talep modeli hesapladık. Sonuçları doğru olmasa da, programlama veya modelleme açısından değişkenler, fonksiyonlar ve aritmetik kullanımı adına faydalı olabilir. Python'u daha güçlü yapan veri analiz uygulamalarına ise diğer derslerde değineceğiz. Barış Sanlı, 23 Mart 2019 [barissanli2@gmail.com] |