Python Array ve Dataframe İşlemleri

21 Oca

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]