Bagaimana cara mengubah array data bernama OHLCV menjadi kerangka data numpy?
Dec 09 2020
Data saya terdiri dari objek OHLCV tertentu yang agak aneh karena hanya dapat diakses dengan namanya, seperti ini:
# rA = [<MtApi.MqlRates object at 0x000000A37A32B308>,...]
type(rA)
# <class 'list'>
ccnt = len(rA) # 100
for i in range(ccnt):
print('{} {} {} {} {} {} {}'.format(i, rA[i].MtTime, rA[i].Open, rA[i].High, rA[i].Low, rA[i].Close, rA[i].TickVolume))
#0 1607507400 0.90654 0.90656 0.90654 0.90656 7
#1 1607507340 0.90654 0.9066 0.90653 0.90653 20
#2 1607507280 0.90665 0.90665 0.90643 0.90653 37
#3 1607507220 0.90679 0.90679 0.90666 0.90666 22
#4 1607507160 0.90699 0.90699 0.90678 0.90678 29
dengan beberapa pemformatan tambahan yang saya miliki:
Time Open High Low Close Volume
-----------------------------------------------------------------
1607507400 0.90654 0.90656 0.90654 0.90656 7
1607507340 0.90654 0.90660 0.90653 0.90653 20
1607507280 0.90665 0.90665 0.90643 0.90653 37
1607507220 0.90679 0.90679 0.90666 0.90666 22
Saya telah mencoba hal-hal seperti ini:
df = pd.DataFrame(data = rA, index = range(100), columns = ['MtTime', 'Open', 'High','Low', 'Close', 'TickVolume'])
# Resulting in:
# TypeError: iteration over non-sequence
Bagaimana saya bisa mengonversi benda ini menjadi Panda DataFrame, sehingga saya bisa memplot ini menggunakan nama aslinya?
Membuat plot menggunakan matplotlib seharusnya dapat dilakukan dengan sesuatu seperti ini:
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
...
df = pd.DataFrame(rA) # not working
df['time'] = pd.to_datetime(df['MtTime'], unit='s')
plt.plot(df['MtTime'], df['Open'], 'r-', label='Open')
plt.plot(df['MtTime'], df['Close'], 'b-', label='Close')
plt.legend(loc='upper left')
plt.title('EURAUD candles')
plt.show()
Pertanyaan yang mungkin terkait (tapi tidak membantu saya):
- Numpy / Matplotlib - Mengubah data tick menjadi OHLCV
- Agregator OHLC tidak berfungsi dengan kerangka data pada panda?
- Cara mengonversi bingkai data panda menjadi larik numpy dengan nama kolom
- Mengonversi Larik Terstruktur Numpy ke Bingkai Data Pandas
- Agregasi panda OHLC pada data OHLC
- Buka, Tinggi, Rendah, Tutup selama 5 menit data stok python
- Mengonversi data stok OHLC ke dalam kerangka waktu yang berbeda dengan python dan panda
Jawaban
1 jezrael Dec 09 2020 at 16:02
Salah satu idenya adalah menggunakan pemahaman daftar untuk mengekstrak nilai ke daftar tupel:
L = [(rA[i].MtTime, rA[i].Open, rA[i].High, rA[i].Low, rA[i].Close, rA[i].TickVolume)
for i in range(len(rA))]
df = pd.DataFrame(L, columns = ['MtTime', 'Open', 'High','Low', 'Close', 'TickVolume']))
Atau jika memungkinkan:
df = pd.DataFrame({'MtTime':list(rA.MtTime), 'Open':list(rA.Open),
'High':list(rA.High),'Low':list(rA.Low),
'Close':list(rA.Close), 'TickVolume':list(rA.TickVolume)})
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'