Python programlama dilinde dizi halindeki verilerin düzenlenmesi ve işlenmesi sırasında kullanılan numpy ve pandas kütüphaneleridir. Bu kütüphanedeki bazı özellikleri, iki boyutlu örnek Binance mum verileri ile incelenebilir.
import pandas as pd
import numpy as np
data =[
[1704812400000, '46792.27', '49873.00', '42765.00', '46764.01'],
[1704816000000, '46761.41', '49386.00', '23227.11', '46902.88'],
[1704819600000, '46903.83', '47973.00', '23419.63', '46711.45'],
[1704823200000, '46716.00', '48295.00', '10000.01', '46651.90'],
[1704826800000, '46640.50', '48610.00', '10000.01', '46878.98'],
[1704830400000, '46877.27', '48742.96', '10000.01', '46616.88'],
[1704834000000, '46616.50', '49084.00', '10000.01', '45465.18'],
[1704837600000, '45464.24', '48435.00', '23010.01', '46128.00'],
[1704841200000, '46128.00', '48435.00', '19000.00', '46146.32'],
[1704844800000, '46146.32', '48579.00', '10000.01', '45850.47'],
[1704848400000, '45850.47', '47644.00', '22821.01', '45927.79'],
[1704852000000, '45927.74', '47151.00', '12950.01', '45949.93'],
[1704855600000, '45939.45', '47984.00', '16567.21', '46117.10'],
[1704859200000, '46117.04', '48729.00', '10000.01', '45971.96'],
[1704862800000, '45965.99', '46504.00', '44337.00', '45975.73'],
[1704866400000, '45976.00', '46063.59', '10000.01', '45982.48'],
[1704870000000, '45982.48', '46216.51', '10000.01', '45768.47'],
[1704873600000, '45768.47', '46067.35', '45016.00', '45644.22'],
[1704877200000, '45645.89', '46893.14', '44288.00', '45614.43'],
[1704880800000, '45614.43', '45744.30', '45152.33', '45534.09']
]
pandas.Dataframe
Bu diziyi kolon isimleri ile bir dataframe haline getirmek için aşağıdaki komut kullanılır.
# Dataframe from array
df = pd.DataFrame(data,
columns=['timestamp', 'open', 'high', 'low', 'close'])
print(df)
timestamp open high low close
0 2024-01-09 15:00:00 46792.27 49873.00 42765.00 46764.01
1 2024-01-09 16:00:00 46761.41 49386.00 23227.11 46902.88
2 2024-01-09 17:00:00 46903.83 47973.00 23419.63 46711.45
3 2024-01-09 18:00:00 46716.00 48295.00 10000.01 46651.90
4 2024-01-09 19:00:00 46640.50 48610.00 10000.01 46878.98
5 2024-01-09 20:00:00 46877.27 48742.96 10000.01 46616.88
6 2024-01-09 21:00:00 46616.50 49084.00 10000.01 45465.18
7 2024-01-09 22:00:00 45464.24 48435.00 23010.01 46128.00
8 2024-01-09 23:00:00 46128.00 48435.00 19000.00 46146.32
9 2024-01-10 00:00:00 46146.32 48579.00 10000.01 45850.47
10 2024-01-10 01:00:00 45850.47 47644.00 22821.01 45927.79
11 2024-01-10 02:00:00 45927.74 47151.00 12950.01 45949.93
12 2024-01-10 03:00:00 45939.45 47984.00 16567.21 46117.10
13 2024-01-10 04:00:00 46117.04 48729.00 10000.01 45971.96
14 2024-01-10 05:00:00 45965.99 46504.00 44337.00 45975.73
15 2024-01-10 06:00:00 45976.00 46063.59 10000.01 45982.48
16 2024-01-10 07:00:00 45982.48 46216.51 10000.01 45768.47
17 2024-01-10 08:00:00 45768.47 46067.35 45016.00 45644.22
18 2024-01-10 09:00:00 45645.89 46893.14 44288.00 45614.43
19 2024-01-10 10:00:00 45614.43 45744.30 45152.33 45534.09
Dataframe boyutlarını gösteren shape özelliğidir.
print(df.shape)
(20,5)
Dataframe kolonların tiplerini gösteren dtypes özelliğidir.
print(df.dtypes)
timestamp datetime64[ns]
open object
high object
low object
close object
dtype: object
Bir kolonun tipini dönüştürmek için:
# Convert the 'close', 'high' columns from string to float
df["open"] = df["open"].astype(float)
df["high"] = df["high"].astype(float)
df["low"] = df["low"].astype(float)
df["close"] = df["close"].astype(float)
print(df.dtypes)
timestamp datetime64[ns]
open float64
high float64
low float64
close float64
dtype: object
Sayısal tipteki kolonlar üzerinde matematiksel işlemler yapmak mümkündür. String tipteki kolonlarda matematiksel işlemler yapılmak istenirse hata dönecektir.
# divs adında yeni bir kolon açılarak değerler buraya aktarılır.
df["divs"] = df["close"]/df["high"]
# 3'er satırlık hareketli ortalamalar
df["moving_avg"] = df["close"].rolling(3).mean()
Dataframe de tek bir kolonu, örneğin “close” almak için df[“close”] veya df.close kullanılır.
print(df["close"])
0 46764.01
1 46902.88
2 46711.45
...
Sadece belli kolonlardan yeni bir frame oluşturmak için:
subdf = df[["close", "high"]]
print(subdf)
close high
0 46764.01 49873.00
1 46902.88 49386.00
2 46711.45 47973.00
3 46651.90 48295.00
...
Belli özellikteki verilerin temizlenmesi için:
# 'close' içerisinde değeri sıfır olan satırları temizle.
# örneğin tatil günlerinde borsada hacim kolonu sıfır gelebilir.
df[df['close']!=0]
# Bu işlemden sonra index değerinin sıralı olması için index reset gerekir.
df.reset_index(drop=False, inplace=True)
pandas.Dataframe.copy
dataframe copyalam işlemleri için kullanılır.
copydf = df.copy(deep=False)
# sadece df referansı kopyalanarak yeni bir obje oluşur.
# df içersinde değişiklik olursa, copydf de değişir.
copydf = df.copy(deep=False)
# yeni bir obje oluşturulur.
# dolayısıyla df içersinde değişiklik olursa, copydf değişmez.
pandas.Dataframe.to_datetime
Dataframe’in birinci kolonu integer tipinde timestamp olarak geliyor ve okunabilir değildir. Timestamp verilerini okunabilir hale getirmek için aşağıdaki komut kullanılır.
# Convert Integer timestamp
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
pandas.Dataframe.set_index
Herhangi bir kolon index olarak kullanılmak istenirse, örneğin timestamp kolonu aşağıdaki gibi set_index() fonksiyonu ile düzenlenir.
# set timestamp as index
df.set_index('timestamp', inplace=True)
print(df)
open high low close
timestamp
2024-01-09 15:00:00 46792.27 49873.00 42765.00 46764.01
2024-01-09 16:00:00 46761.41 49386.00 23227.11 46902.88
...
pandas.Dataframe.reset_index
Tekrar sıfırdan başlayan bir index oluşturmak için reset_index() fonksiyonu kullanılır. Şu anda timestamp kolonu index olduğu için bu fonksiyonda drop=True olursa timestamp kolonu reset sırasında silinir.
# new index column: 0,1,2,...
df.reset_index(drop=False, inplace=True)
print(df)
timestamp open high low close
0 2024-01-09 15:00:00 46792.27 49873.00 42765.00 46764.01
1 2024-01-09 16:00:00 46761.41 49386.00 23227.11 46902.88
...
pandas.Dataframe.drop
Dataframe’den bir kolonu silmek için drop fonksiyonu kullanılır. örneğin high kolonu silinsin. Fonksiyonda axis=1 parametresi kolon silmek için, axis=0 ise satır silmek için kullanılır.
# drop high column
# df = df.drop(["high"], axis=1)
print(df)
timestamp open low close
0 2024-01-09 15:00:00 46792.27 42765.00 46764.01
1 2024-01-09 16:00:00 46761.41 23227.11 46902.88
...
Satır silmek için drop fonksiyonuna silinecek satırlar verilir.
# drop row 0
# df = df.drop([0], axis=0)
print(df)
timestamp open low close
1 2024-01-09 16:00:00 46761.41 23227.11 46902.88
...
pandas.Dataframe.dropna
Eğer veri içerisinde her hangi bir hücrede NaN, None gibi kayıp veriler varsa bunları içeren satırları silmek için dropna() fonksiyonu kullanılır.
# drop row if any cell value is None, NaN, or missing
df = df.dropna()
pandas.Dataframe.head
Dataframe içerisinden ilk N elemanı almak için head() fonksiyonu kullanılır. Bu fonksiyona parametre verilmediğinde default değeri 5’tir.
# get first N items default 5
df = df.head()
print(df)
timestamp open high low close
0 2024-01-09 15:00:00 46792.27 49873.00 42765.00 46764.01
1 2024-01-09 16:00:00 46761.41 49386.00 23227.11 46902.88
2 2024-01-09 17:00:00 46903.83 47973.00 23419.63 46711.45
pandas.Dataframe.tail
Dataframe içerisinden son N elemanı almak için tail() fonksiyonu kullanılır. Bu fonksiyona parametre verilmediğinde default değeri 5’tir.
# get last N items default 5
df = df.tail()
print(df)
timestamp open high low close
15 2024-01-10 06:00:00 45976.00 46063.59 10000.01 45982.48
16 2024-01-10 07:00:00 45982.48 46216.51 10000.01 45768.47
17 2024-01-10 08:00:00 45768.47 46067.35 45016.00 45644.22
18 2024-01-10 09:00:00 45645.89 46893.14 44288.00 45614.43
19 2024-01-10 10:00:00 45614.43 45744.30 45152.33 45534.09
pandas.Dataframe.take
Belli index verilerini almak için take() fonksiyonu kullanılır
# take items
df = df.take([1,5,7])
print(df)
timestamp open high low close
1 2024-01-09 16:00:00 46761.41 49386.00 23227.11 46902.88
5 2024-01-09 20:00:00 46877.27 48742.96 10000.01 46616.88
7 2024-01-09 22:00:00 45464.24 48435.00 23010.01 46128.00
Yeni dizi, vektör oluşturmak
Dataframe boyutunda sıfırlar ile dolu bir vektör oluşturmak:
signals = [0]*len(df)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]