Saat bekerja dengan data pasar saham, terkadang kami ingin mengubah jendela referensi waktu kami. Umumnya harga harian tersedia di bursa saham. Mari kita lihat bagaimana mengubah harga harian menjadi harga mingguan dan bulanan. Anda dapat mengunduh harga harian dari NSE dari [tautan ini](https. // www. nseindia. com/produk/konten/ekuitas/ekuitas/eq_security. htm). Kami akan mengunduh harga harian selama 24 bulan terakhir. Berikut adalah contoh file yang akan kami gunakan Silakan merujuk ke program di bawah ini untuk mengubah harga harian menjadi mingguan. Komentar dalam program akan membantu Anda memahami logika di balik setiap baris. ```python ############################################## . convert_daily_to_weekly. py # desc. mengambil inout sebagai harga harian dan mengubahnya menjadi data mingguan # tanggal. 15-06-2018 # Penulis. conquistadorjd ################################################### . read_csv('15-06-2016-TO-14-06-2018HDFCBANKALLN. csv') # memastikan hanya seri ekuitas yang dianggap df = df. loc[df['Series'] == 'EQ'] # Konversi tanggal ke format datetime panda df['Date'] = pd. to_datetime(df['Date']) # Mendapatkan nomor minggu df['Week_Number'] = df['Date']. dt. minggu # Mendapatkan tahun. Weeknum adalah umum sepanjang tahun sehingga kita perlu membuat indeks unik dengan menggunakan year dan weeknum df['Year'] = df['Date']. dt. tahun # Pengelompokan berdasarkan nilai yang dibutuhkan df2 = df. groupby(['Tahun','Nomor_Minggu']). agg({'Harga Terbuka'. 'pertama', 'Harga Tinggi'. 'maks', 'Harga Murah'. 'min', 'Harga Tutup'. 'terakhir','Total Kuantitas yang Diperdagangkan'. 'jumlah'}) # df3 = df. groupby(['Tahun','Nomor_Minggu']). agg({'Harga Terbuka'. 'pertama', 'Harga Tinggi'. 'maks', 'Harga Murah'. 'min', 'Harga Tutup'. 'terakhir','Total Kuantitas yang Diperdagangkan'. 'jumlah','Harga Rata-Rata'. 'rata-rata'}) df2. to_csv('Mingguan_OHLC. csv') print('*** Program telah berakhir ***') ``` Setelah Anda memahami harian hingga mingguan, hanya diperlukan modifikasi kecil untuk mengubahnya menjadi data OHLC bulanan. Ini skrip ```python ########################################## . convert_daily_to_monthly. py # desc. ambil inout sebagai harga harian dan ubah menjadi data bulanan # tanggal. 15-06-2018 # Penulis. conquistadorjd ################################################### . read_csv('15-06-2016-TO-14-06-2018HDFCBANKALLN. csv') # memastikan hanya seri ekuitas yang dianggap df = df. loc[df['Series'] == 'EQ'] # Konversi tanggal ke format datetime panda df['Date'] = pd. to_datetime(df['Date']) # Mendapatkan nomor bulan df['Month_Number'] = df['Date']. dt. bulan # Mendapatkan tahun. bulan biasa terjadi selama bertahun-tahun (seolah-olah Anda tidak tahu. ) )untuk kita perlu membuat indeks unik dengan menggunakan tahun dan bulan df['Year'] = df['Date']. dt. tahun # Pengelompokan berdasarkan nilai yang dibutuhkan df2 = df. groupby(['Tahun','Bulan_Nomor']). agg({'Harga Terbuka'. 'pertama', 'Harga Tinggi'. 'maks', 'Harga Murah'. 'min', 'Harga Tutup'. 'terakhir','Total Kuantitas yang Diperdagangkan'. 'jumlah'}) # df3 = df. groupby(['Tahun','Nomor_Minggu']). agg({'Harga Terbuka'. 'pertama', 'Harga Tinggi'. 'maks', 'Harga Murah'. 'min', 'Harga Tutup'. 'terakhir','Total Kuantitas yang Diperdagangkan'. 'jumlah','Harga Rata-Rata'. 'rata-rata'}) df2. to_csv('Bulanan_OHLC. csv') print('*** Program berakhir ***') ``` Saya membuang waktu untuk menemukan 'Harga Terbuka' untuk data mingguan dan bulanan. Saya mencoba beberapa pertanyaan panda yang rumit dan kemudian menyadari hal yang sama dapat dicapai hanya dengan menggunakan fungsi agregat. Tolong beri tahu saya tanggapan Anda
Posting ini ditulis oleh Pravin
Tag
Tinggalkan komentar
KirimUntuk menghitung tingkat pengembalian bulanan, kita dapat menggunakan sedikit keajaiban panda dan mencontoh kembali pengembalian harian asli. Selama proses ini, kita juga perlu membuang hari-hari yang bukan merupakan akhir bulan serta meneruskan mengisi nilai yang hilang. Ini dapat dilakukan dengan menggunakan. ffill() pada hasil resampling
Perhatikan tanggal entri dan sekarang semuanya adalah tanggal akhir bulan. Nilai tidak berubah, karena sampel ulang hanya memilih tanggal di akhir bulan, atau mengisi dengan nilai sebelum tanggal tersebut jika tidak ada di sumber
Sekarang kita dapat menggunakan ini untuk menghitung bulanan
Resampling digunakan dalam data deret waktu. Ini adalah metode praktis untuk konversi frekuensi dan resampling data deret waktu. Meskipun bekerja dengan syarat bahwa objek harus memiliki indeks seperti datetime misalnya, DatetimeIndex, PeriodIndex, atau TimedeltaIndex. Dengan kata sederhana, jika seseorang ingin mengatur data deret waktu dalam pola seperti bulanan, mingguan, harian, dll. , fungsi ini sangat berguna. Fungsi ini tersedia di perpustakaan Pandas. Untuk tujuan demonstrasi, dataset UCI digunakan, i. e. , https. //arsip. ics. uci. edu/ml/set data/Parkir+Birmingham
Membaca Data
Dalam data deret waktu, tipe data variabel tanggal adalah objek ketika kita membaca data dari a. file csv. Oleh karena itu untuk membaca kolom tanggal dalam format datetime, kami menggunakan argumen parse_dates. Dalam data studi, LastUpdated adalah variabel tanggal dan argumen parse_dates=["LastUpdated"] membaca format tanggal dengan benar, sedangkan ketika argumen parse_dates tidak menggunakan tipe variabel "LastUpdated" adalah objek
Gambar oleh Penulis
DateTimeIndex
Karena fungsi resample menggunakan DatetimeIndex, PeriodIndex, atau TimedeltaIndex, maka sekarang kita perlu mengubah variabel “LastUpdated” menjadi datetimeindex sebagai berikut
Gambar oleh Penulis
Pengambilan sampel ulang
Resampling adalah untuk konversi frekuensi dan resampling deret waktu. Jadi, jika seseorang perlu mengubah data, bukan harian menjadi bulanan atau mingguan, dll. atau sebaliknya. Untuk ini, kami memiliki opsi resample di pandas library[2]. Pada fungsi resampling, jika kita perlu mengubah tanggal menjadi datetimeindex ada juga opsi parameter "on" tetapi kolomnya harus seperti datetime
Gambar oleh Penulis
Di bawah resampling dengan opsi “D”, data diubah menjadi data harian, mis. e. , semua tanggal akan diperhitungkan. 375717 rekaman diturunkan sampelnya menjadi 77 rekaman
Gambar oleh Penulis
Opsi Aturan Lainnya
Opsi yang paling banyak digunakan untuk aturan (mewakili target konversi) adalah seperti di bawah ini dan opsi lain juga dapat ditemukan di referensi [1]
Gambar oleh Penulis
Opsi sampel ulang digunakan untuk dua opsi, yaitu. e. , upsampling dan downsampling
Upsampling. Dalam hal ini, kami mengubah sampel ke kerangka waktu yang lebih singkat, misalnya data bulanan menjadi mingguan/dua mingguan/harian, dll. Karena itu, banyak tempat sampah dibuat dengan nilai NaN dan untuk mengisinya ada metode berbeda yang dapat digunakan sebagai metode pad dan metode bfill. Misalnya mengubah data mingguan menjadi data harian dan menggunakan metode bfill hasil berikut diperoleh, jadi bfill mengisi mundur nilai baru yang hilang pada data yang disampling ulang
Gambar oleh Penulis
Metode lainnya adalah metode pad, itu meneruskan mengisi nilai-nilai seperti di bawah ini
Gambar oleh Penulis
Kita juga bisa menggunakan metode asfreq() atau fillna() dalam upsamling
Pengurangan sampel. Dalam hal ini kami mengubah sampel ke kerangka waktu yang lebih luas, misalnya mengubah sampel data harian menjadi mingguan/dua mingguan/bulanan, dll. Untuk ini kami memiliki opsi seperti sum(), mean(), max() dll. Misalnya, data harian diambil sampelnya kembali ke data awal bulan dan fungsi rata-rata digunakan seperti di bawah ini
Gambar oleh Penulis
Representasi grafis dari Resampling
Setelah melakukan resampling data dengan empat aturan berbeda, yaitu. e. , per jam, harian, mingguan, dan bulanan, grafik berikut diperoleh. Kami dapat dengan jelas melihat perbedaan dalam kerangka waktu yang lebih pendek dan lebih luas. Dalam plot per jam, lebih banyak noise dan berkurang dari harian ke mingguan ke bulanan. Sesuai tujuan studi, kita dapat memutuskan opsi mana untuk aturan yang terbaik