Cara mengubah data harian menjadi data bulanan dengan python

Baca setiap cerita dari Youssef Hosni (dan ribuan penulis lain di Medium). Biaya keanggotaan Anda secara langsung mendukung…

youssefraafat57. medium. com

1. Bekerja dengan Time Series di Pandas

Bagian ini meletakkan dasar untuk memanfaatkan fungsionalitas deret waktu yang kuat yang disediakan oleh cara Panda merepresentasikan tanggal, khususnya oleh DateTimeIndex. Anda akan mempelajari cara membuat dan memanipulasi informasi tanggal dan deret waktu, dan cara melakukan perhitungan dengan DataFrames yang sadar waktu untuk menggeser data Anda dalam waktu atau membuat pengembalian periode tertentu

1. 1. Cara menggunakan data dan waktu dengan panda

Blok bangunan dasar untuk membuat data deret waktu dengan python menggunakan stempel waktu Pandas (pd. Timestamp) ditunjukkan pada contoh di bawah ini

Objek timestamp memiliki banyak atribut yang dapat digunakan untuk mengambil informasi waktu tertentu dari data Anda seperti tahun, dan hari kerja. Pada contoh di bawah tahun data diambil

Blok bangunan kedua adalah objek periode. Objek periode memiliki atribut freq untuk menyimpan informasi frekuensi. Standarnya adalah frekuensi bulanan dan Anda dapat mengonversi dari frekuensi ke frekuensi lainnya seperti yang ditunjukkan pada contoh di bawah ini

Output menunjukkan bahwa frekuensi default adalah frekuensi bulanan. Anda dapat mengubahnya menjadi frekuensi harian menggunakan kode di bawah ini

Anda juga dapat mengubah periode menjadi stempel waktu dan sebaliknya. Ini ditunjukkan pada contoh di bawah ini

Anda dapat melakukan operasi aritmatika data dasar, misalnya dimulai dengan objek periode Januari 2017 dengan frekuensi bulanan, tambahkan saja angka 2 untuk mendapatkan periode bulanan Maret 2017. Ini ditunjukkan pada contoh di bawah ini

Outputnya ditunjukkan pada gambar di bawah ini

Untuk membuat deret waktu, Anda harus membuat urutan tanggal. Untuk membuat urutan Stempel Waktu, gunakan fungsi date_range panda. Anda perlu menentukan tanggal mulai, dan/atau tanggal akhir, atau sejumlah periode. Standarnya adalah frekuensi harian. Fungsi mengembalikan urutan tanggal sebagai DateTimeindex dengan informasi frekuensi. Anda akan mengenali elemen pertama sebagai cap waktu panda

Ini ditunjukkan pada contoh di bawah ini dan hasilnya ditunjukkan pada gambar di bawah ini

1. 2. Pengindeksan & resampling deret waktu

Transformasi dasar termasuk penguraian tanggal yang disediakan sebagai string dan mengubah hasilnya menjadi tipe data Panda yang cocok disebut datetime64. Mereka juga termasuk memilih subperiode dari deret waktu Anda, dan menyetel atau mengubah frekuensi DateTimeIndex. Anda dapat mengubah frekuensi ke nilai yang lebih tinggi atau lebih rendah. upsampling melibatkan peningkatan frekuensi waktu, yang membutuhkan pembuatan data baru. Downsampling berarti mengurangi frekuensi waktu, yang membutuhkan data agregasi

Untuk memahami lebih lanjut tentang transformasi, kami akan menerapkannya pada data harga saham google. Pertama, jika Anda memeriksa jenis kolom tanggal itu adalah objek, jadi kami ingin mengubahnya menjadi tipe tanggal dengan kode berikut

Informasi tanggal diubah dari string (objek) menjadi datetime64 dan juga kami akan mengatur kolom Tanggal sebagai indeks untuk bingkai data karena memudahkan untuk menangani data dengan menggunakan kode berikut

Untuk memiliki intuisi yang lebih baik tentang tampilan data, mari plot harga dengan waktu menggunakan kode di bawah ini

Perubahan harga saham google dengan waktu

Anda juga dapat mengindeks sebagian data menggunakan indeks tanggal seperti contoh berikut

Anda mungkin memperhatikan bahwa DateTimeIndex kami tidak memiliki informasi frekuensi. Anda dapat mengatur informasi frekuensi menggunakan dot-asfreq. Alias ​​'D' adalah singkatan dari frekuensi hari kalender. Akibatnya, DateTimeIndex sekarang berisi banyak tanggal di mana stok tidak dibeli atau dijual

Contoh di bawah menunjukkan konversi DateTimeIndex dari data saham google menjadi frekuensi hari kalender

Jumlah instance telah meningkat menjadi 756 karena pengambilan sampel harian ini. Kode di bawah mencetak lima baris pertama dari data sampel ulang harian

Kita dapat melihat bahwa ada beberapa nilai NaN yang kehilangan data baru karena resampling harian ini

Kami juga dapat mengatur DateTimeIndex ke frekuensi hari kerja menggunakan metode yang sama tetapi mengubah 'D' menjadi 'B' di. metode asfreq(). Ini ditunjukkan pada contoh di bawah ini

Jika kita mencetak lima baris pertama maka akan terlihat seperti pada gambar di bawah ini

Sekarang data yang tersedia hanya data hari kerja

1. 3. Keterlambatan, perubahan, dan pengembalian untuk seri harga saham

Pergeseran atau jeda nilai mundur atau maju mundur dalam waktu. menggeser(). Memindahkan data antara masa lalu & masa depan. Standarnya adalah satu periode ke depan, tetapi Anda dapat mengubahnya, dengan memberikan variabel periode nilai pergeseran yang diinginkan

Contoh metode shift ditunjukkan di bawah ini

Outputnya ditunjukkan pada gambar di bawah ini

Untuk memindahkan data ke masa lalu Anda dapat menggunakan periode = -1 seperti yang ditunjukkan pada gambar di bawah ini

Salah satu sifat penting dari data harga saham dan pada umumnya dalam data time series adalah persentase perubahannya. Rumusnya adalah. ((X(t)/X(t-1))-1)*100

Ada dua cara untuk menghitungnya, kita bisa menggunakan fungsi bawaan df. pct_change() atau gunakan fungsi df. div. sub(). mul() dan keduanya akan memberikan hasil yang sama seperti yang ditunjukkan pada contoh di bawah ini

Kita juga bisa mendapatkan pengembalian multiperiod dengan menggunakan variabel periode di df. pct_change() metode seperti yang ditunjukkan pada contoh berikut

2. Metrik & Pengambilan Sampel Deret Waktu Dasar

Di bagian ini, kita akan menyelami lebih dalam fungsionalitas deret waktu penting yang tersedia melalui DataTimeIndex panda. kami akan memperkenalkan resampling dan cara membandingkan deret waktu yang berbeda dengan menormalkan titik awalnya

2. 1. Pengambilan sampel ulang

Kita akan mulai dengan resampling yang mengubah frekuensi data time series. Ini adalah operasi yang sangat umum karena Anda sering perlu mengonversi deret dua kali ke frekuensi umum untuk menganalisisnya bersama. Saat Anda melakukan upsample dengan mengonversi data ke frekuensi yang lebih tinggi, Anda membuat baris baru dan perlu memberi tahu panda cara mengisi atau menginterpolasi nilai yang hilang di baris ini. Saat Anda menurunkan sampel, Anda mengurangi jumlah baris dan perlu memberi tahu panda cara menggabungkan data yang ada

Untuk mengilustrasikan apa yang terjadi saat Anda mengambil sampel data, mari buat Seri dengan frekuensi triwulanan yang relatif rendah untuk tahun 2016 dengan nilai bilangan bulat 1–4. Saat Anda memilih frekuensi kuartalan, panda default ke Desember untuk akhir kuartal keempat, yang dapat Anda ubah dengan menggunakan bulan yang berbeda dengan alias kuartal

Selanjutnya, mari kita lihat apa yang terjadi saat Anda mengambil sampel deret waktu dengan mengonversi frekuensi dari triwulanan menjadi bulanan menggunakan dot-asfreq(). Panda menambahkan tanggal akhir bulan baru ke DateTimeIndex di antara tanggal yang ada. Akibatnya, sekarang ada beberapa bulan dengan data yang hilang antara bulan Maret dan Desember

Outputnya ditunjukkan di bawah ini

Mari bandingkan tiga cara yang ditawarkan panda untuk mengisi nilai yang hilang saat upsampling. Dua opsi pertama melibatkan pemilihan metode pengisian, baik pengisian maju atau pengisian ulang. Opsi ketiga adalah memberikan nilai penuh

Jika Anda membandingkan hasilnya, Anda melihat bahwa isian maju menyebarkan nilai apa pun ke masa depan jika masa depan berisi nilai yang hilang. Isi ulang melakukan hal yang sama untuk masa lalu, dan fill_value hanya mengganti nilai yang hilang

Jika Anda menginginkan DateTimeIndex bulanan yang mencakup setahun penuh, Anda dapat menggunakan dot-reindex. Panda menyelaraskan data yang ada dengan nilai bulanan yang baru dan menghasilkan nilai yang hilang di tempat lain. Anda dapat menggunakan opsi isian yang sama persis untuk dot-reindex seperti yang baru saja Anda lakukan untuk dot-asfreq

2. 2. Upsampling dan interpolasi

Metode resample mengikuti logika yang mirip dengan dot-groupby. Ini mengelompokkan data dalam periode resampling dan menerapkan metode ke grup ini. Dibutuhkan nilai yang dihasilkan dari metode ini dan menetapkan tanggal baru dalam periode resampling. Tanggal baru ditentukan oleh apa yang disebut offset, dan misalnya, bisa di awal atau akhir periode atau lokasi khusus. Anda akan menggunakan sampel ulang untuk menerapkan metode yang mengisi atau menginterpolasi tanggal yang hilang saat pengambilan sampel naik, atau agregat tersebut saat pengambilan sampel turun

Kami akan menerapkan metode sampel ulang ke tingkat pengangguran bulanan. Pertama, kita akan mengunggahnya dan menyimpannya menggunakan kolom DATE dan menjadikannya indeks

85 titik data yang diimpor menggunakan read_csv sejak 2010 tidak memiliki informasi frekuensi. Pemeriksaan baris pertama menunjukkan bahwa data dilaporkan untuk yang pertama dari setiap bulan kalender. Jadi mari kita sampel ulang pada awal setiap bulan kalender menggunakan metode dot-resample dan dot-asfreq

Kedua metode itu sama. Saat melihat resampling berdasarkan bulan, sejauh ini kami berfokus pada frekuensi akhir bulan. Dengan kata lain, setelah resampling, data baru akan diberikan pada hari kalender terakhir untuk setiap bulan. Namun, ada beberapa alternatif seperti yang ditunjukkan pada tabel di bawah ini

Offset Periode & Frekuensi Pengambilan Sampel Ulang

Bergantung pada konteks Anda, Anda dapat membuat sampel ulang ke awal atau akhir kalender atau bulan bisnis

Resampling mengimplementasikan logika berikut. Saat up-sampling, akan ada lebih banyak periode resampling daripada titik data. Setiap periode pengambilan sampel ulang akan memiliki offset tanggal tertentu, misalnya, frekuensi akhir bulan. Anda kemudian perlu memutuskan cara membuat data untuk periode resampling baru. Poin data baru akan ditetapkan ke offset tanggal. Sebaliknya, saat pengambilan sampel turun, ada lebih banyak titik data daripada periode pengambilan sampel ulang. Oleh karena itu, Anda perlu memutuskan cara menggabungkan data Anda untuk mendapatkan satu nilai untuk setiap offset tanggal

Sekarang mari kita gunakan seri triwulanan, pertumbuhan PDB riil. Anda melihat bahwa sekali lagi tidak ada info frekuensi, tetapi beberapa baris pertama mengonfirmasi bahwa data dilaporkan untuk hari pertama setiap kuartal

Kita dapat menggunakan dot-resample untuk mengonversi seri ini ke frekuensi awal bulan, lalu meneruskan logika pengisian untuk mengisi kekosongan. Kami menggunakan dot-add_suffix untuk membedakan label kolom dari variasi yang akan kami hasilkan selanjutnya

Resample juga memungkinkan Anda menginterpolasi nilai yang hilang, yaitu mengisi nilai yang terletak pada garis lurus antara tingkat pertumbuhan triwulanan yang ada. Pandangan pada beberapa baris pertama menunjukkan cara menginterpolasi nilai rata-rata yang ada

Kami sekarang akan menggabungkan dua seri menggunakan fungsi pandas dot-concat untuk menggabungkan dua bingkai data. Menggunakan axis=1 membuat panda menyatukan DataFrames secara horizontal, menyelaraskan indeks baris. Plot data selama dua tahun terakhir memvisualisasikan bagaimana titik data baru terletak di garis antara titik yang ada, sedangkan pengisian ke depan menciptakan pola seperti langkah

Plot untuk gdp_growth yang disampel ulang

Setelah mengambil sampel ulang pertumbuhan PDB, Anda dapat memplot seri pengangguran dan PDB berdasarkan frekuensi umumnya

2. 3. Downsampling & agregasi

Sejauh ini, kami telah berfokus pada up-sampling, yaitu meningkatkan frekuensi deret waktu, dan cara mengisi atau menginterpolasi nilai yang hilang. Downsampling adalah kebalikannya, yaitu bagaimana mengurangi frekuensi dari data time series. Ini termasuk, misalnya, mengubah data per jam menjadi data harian, atau data harian menjadi data bulanan. Dalam hal ini, Anda perlu memutuskan bagaimana meringkas data yang ada karena 24 jam menjadi satu hari. Pilihan Anda adalah metrik agregasi yang sudah dikenal seperti rata-rata atau median, atau hanya nilai terakhir dan pilihan Anda akan bergantung pada konteksnya

Mari gunakan read_csv terlebih dahulu untuk mengimpor data kualitas udara dari Badan Perlindungan Lingkungan. Ini mengandung konsentrasi ozon harian rata-rata untuk New York City mulai tahun 2000. Karena DateTimeIndex yang diimpor tidak memiliki frekuensi, pertama-tama mari kita tetapkan frekuensi hari kalender menggunakan dot-resample. DateTimeIndex yang dihasilkan memiliki entri tambahan, serta informasi frekuensi yang diharapkan

Untuk mengonversi data ozon harian menjadi frekuensi bulanan, cukup terapkan metode sampel ulang dengan periode pengambilan sampel baru dan offset. Kami memilih frekuensi bulanan dengan offset akhir bulan default. Selanjutnya, terapkan metode rata-rata untuk mengagregasi data harian ke satu nilai bulanan. Anda dapat melihat bahwa rata-rata bulanan telah ditetapkan ke hari terakhir bulan kalender

Data ozon setelah sampel ulang bulanan

Anda dapat menerapkan median dengan cara yang sama persis

Mirip dengan metode groupby, Anda juga dapat menerapkan beberapa agregasi sekaligus

Mari memvisualisasikan Seri yang diagregasi dan disampel ulang relatif terhadap data asli pada frekuensi kalender-harian. Kami akan memplot data mulai dari 2016 sehingga Anda dapat melihat lebih detail. Matplotlib memungkinkan Anda untuk memplot beberapa kali pada objek yang sama dengan mereferensikan objek axes yang berisi plot

Seri yang diagregasi dan disampel ulang relatif terhadap data asli

Plot pertama adalah seri asli, dan plot kedua berisi seri yang disampling ulang dengan akhiran sehingga legenda mencerminkan perbedaannya. Anda melihat bahwa data yang diambil sampelnya jauh lebih mulus karena volatilitas bulanan telah dirata-ratakan. Mari kita lihat juga cara membuat sampel ulang beberapa seri

3. Fungsi Jendela. Metrik Bergulir dan Meluas

Di bagian ini, kami akan menunjukkan cara menggunakan fungsi jendela untuk menghitung metrik deret waktu untuk jendela bergulir dan meluas

3. 1. Fungsi jendela dengan panda

Fungsi jendela berguna karena memungkinkan Anda untuk beroperasi pada sub-periode deret waktu Anda. Secara khusus, fungsi jendela menghitung metrik untuk data di dalam jendela. Kemudian, hasil perhitungan ini membentuk time series baru, dimana setiap titik data merepresentasikan rangkuman dari beberapa titik data dari time series aslinya. Kami akan membahas dua jenis utama jendela. Jendela putar mempertahankan ukuran yang sama saat meluncur sepanjang deret waktu, sehingga setiap titik data baru adalah hasil dari sejumlah pengamatan tertentu. Memperluas jendela tumbuh dengan deret waktu sehingga perhitungan yang menghasilkan titik data baru adalah hasil dari semua titik data sebelumnya

Mari hitung rata-rata pergerakan sederhana untuk melihat cara kerjanya dalam praktik. Kami akan kembali menggunakan data harga saham google selama beberapa tahun terakhir. Kita akan melihat dua cara untuk menentukan rolling window

Pertama, kami menerapkan rolling dengan ukuran jendela integer 30. Ini berarti jendela tersebut akan berisi 30 pengamatan atau hari perdagangan sebelumnya. Saat Anda memilih ukuran jendela berbasis bilangan bulat, panda hanya akan menghitung rata-rata jika jendela tidak memiliki nilai yang hilang. Anda dapat mengubah default ini dengan menyetel parameter min_periods ke nilai yang lebih kecil dari ukuran jendela 30

Anda juga dapat membuat jendela berdasarkan offset tanggal. Jika Anda memilih 30D, misalnya, jendela akan berisi hari-hari ketika saham diperdagangkan selama 30 hari kalender terakhir. Sementara jendela tetap dalam hal panjang periode, jumlah pengamatan akan bervariasi. Mari kita lihat seperti apa rata-rata rolling itu

Anda juga dapat menghitung rata-rata bergulir 90 hari kalender, dan menggabungkannya dengan harga saham. Metode bergabung memungkinkan Anda untuk menggabungkan Seri atau DataFrame sepanjang sumbu 1, yaitu secara horizontal. Itu hanya cara berbeda menggunakan fungsi dot-concat yang pernah Anda lihat sebelumnya. Anda dapat melihat bagaimana deret waktu yang baru jauh lebih mulus karena setiap titik data kini menjadi rata-rata dari 90 hari kalender sebelumnya

Harga vs harga rata-rata selama 90 hari

Untuk melihat bagaimana perpanjangan cakrawala waktu memengaruhi rata-rata pergerakan, mari tambahkan rata-rata pergerakan 360 hari kalender

90 dan 360 berarti rata-rata bergulir

Rangkaian ini sekarang tampak lebih mulus, dan Anda dapat melihat dengan lebih jelas saat tren jangka pendek menyimpang dari tren jangka panjang, misalnya saat rata-rata 90 hari turun di bawah rata-rata 360 hari pada tahun 2015

Mirip dengan dot-groupby, Anda juga dapat menghitung beberapa metrik sekaligus, menggunakan metode dot-agg. Dengan rata-rata pergerakan 90 hari dan standar deviasi, Anda dapat dengan mudah membedakan periode volatilitas tinggi

Rata-rata pergerakan 90 hari dan standar deviasi

Terakhir, mari tampilkan median bergulir 360 hari kalender, atau kuantil 50 persen, di samping kuantil 10 dan 90 persen. Sekali lagi Anda dapat melihat bagaimana rentang harga saham telah berevolusi dari waktu ke waktu, dengan beberapa periode lebih tidak stabil daripada yang lain

Median bergulir 90 hari kalender, kuantil 10 dan 90 persen

3. 2. Memperluas fungsi jendela dengan panda

Kami akan beralih dari jendela bergulir ke jendela yang diperluas. Anda sekarang akan menghitung metrik untuk grup yang bertambah besar untuk mengecualikan semua data hingga tanggal saat ini. Setiap titik data dari deret waktu yang dihasilkan mencerminkan semua nilai historis hingga saat itu. Memperluas jendela berguna untuk menghitung misalnya tingkat pengembalian kumulatif, atau maksimum atau minimum yang berjalan. Di panda, Anda dapat menggunakan salah satu metode memperluas, yang berfungsi seperti menggulung, atau dalam beberapa kasus, metode singkatan untuk jumlah kumulatif, produk, min, dan maks

Kami akan menggunakan data S&P500 selama sepuluh tahun terakhir dalam contoh praktis di bagian ini. Pertama-tama mari kita lihat cara menghitung pengembalian. Pengembalian periode sederhana hanyalah harga saat ini dibagi dengan harga terakhir dikurangi 1. Pengembalian selama beberapa periode adalah produk dari semua pengembalian periode setelah menambahkan 1 dan kemudian mengurangkan 1 dari produk

Jadi untuk lebih jelasnya, periode kembali adalah. r(t) = (p(t)/p(t-1)) -1 dan pengembalian multi-periode adalah. R(T) = (1+r(1))(1+r(2))……. (1+r(T)) — 1

Panda membuat perhitungan ini mudah ‘ Anda telah melihat metode untuk perubahan persen(. pct_change) dan matematika dasar (. beda(),. div(),. mul()), dan sekarang Anda akan belajar tentang produk kumulatif

Untuk mendapatkan tingkat pengembalian kumulatif atau berjalan pada SP500, cukup ikuti langkah-langkah yang dijelaskan di atas. Hitung pengembalian periode dengan perubahan persen, dan tambahkan 1 Hitung produk kumulatif, dan kurangi satu. Anda dapat mengalikan hasilnya dengan 100, dan memplot hasilnya dalam bentuk persentase. Kode untuk ini ditunjukkan di bawah ini

Dari plot terlihat bahwa SP500 naik 60% sejak 2007, meski sempat turun 60% di tahun 2009. Anda juga dapat dengan mudah menghitung min dan maks berjalan dari deret waktu. Terapkan saja metode perluasan dan metode agregasi masing-masing

Garis oranye dan hijau menguraikan min dan maks hingga tanggal saat ini untuk setiap hari. Anda juga bisa menggabungkan konsep rolling window dengan perhitungan kumulatif. Mari kita hitung tingkat pengembalian tahunan bergulir, yaitu pengembalian kumulatif untuk semua periode 360 ​​hari kalender selama periode sepuluh tahun yang dicakup oleh data. Perhitungan kumulatif ini tidak tersedia sebagai metode bawaan. Tapi tidak masalah cukup tentukan fungsi multiperiod Anda sendiri, dan gunakan terapkan untuk menjalankannya pada data di jendela bergulir. Data di jendela bergulir tersedia untuk fungsi multi_period_return Anda sebagai larik numpy. Tambahkan 1 untuk menambah semua pengembalian, terapkan fungsi produk numpy, dan kurangi satu untuk menerapkan rumus dari atas. Lewati saja fungsi ini untuk diterapkan setelah membuat jendela 360 hari kalender untuk pengembalian harian. Lipat gandakan pengembalian 1 tahun bergulir dengan 100 untuk menunjukkannya dalam persentase, dan plot di samping indeks menggunakan subplot sama dengan Benar

Hasilnya menunjukkan ayunan pengembalian tahunan yang besar setelah krisis 2008

3. 4. Jalan acak dan simulasi

Pengembalian saham harian terkenal sulit diprediksi, dan model sering menganggap mereka mengikuti jalan acak. Kami akan menggunakan NumPy untuk menghasilkan angka acak, dalam konteks deret waktu. Anda juga akan menggunakan produk kumulatif lagi untuk membuat serangkaian harga dari serangkaian pengembalian

Pada contoh pertama, kita akan menghasilkan bilangan acak dari distribusi normal berbentuk lonceng. Ini berarti bahwa nilai di sekitar rata-rata lebih mungkin terjadi daripada yang ekstrem, seperti yang cenderung terjadi pada return saham. Dalam contoh kedua, Anda akan secara acak memilih pengembalian S&P 500 aktual untuk kemudian mensimulasikan harga S&P 500

Untuk menghasilkan angka acak, pertama-tama impor distribusi normal dan fungsi seed dari modul acak numpy. Juga, impor paket norm dari scipy untuk membandingkan distribusi normal dengan sampel acak Anda. Hasilkan 1000 pengembalian acak dari fungsi normal numpy, dan bagi dengan 100 untuk menskalakan nilai dengan tepat. Mari plot distribusi 1.000 pengembalian acak, dan paskan distribusi normal dengan sampel Anda. Anda dapat melihat bahwa sampel sangat cocok dengan bentuk distribusi normal

Distribusi normal dan 1000 pengembalian acak

Untuk membuat jalur harga acak dari pengembalian acak Anda, kami akan mengikuti prosedur dari subbagian, setelah mengubah array numpy menjadi Seri panda. Tambahkan 1 ke pengembalian periode, hitung produk kumulatif, dan kurangi 1. Plot pengembalian kumulatif, dikalikan dengan 100, dan Anda akan melihat harga yang dihasilkan

Pengembalian acak

Sekarang mari simulasikan SP500 menggunakan jalan yang mengembang secara acak. Impor indeks 10 tahun terakhir, hilangkan nilai yang hilang, dan tambahkan pengembalian harian sebagai kolom baru ke DataFrame. Plot seri indeks dan pengembalian menunjukkan kisaran pengembalian harian tipikal antara +/2–3 persen, serta beberapa outlier selama krisis 2008

Perbandingan distribusi pengembalian S&P 500 dengan distribusi normal menunjukkan bahwa bentuknya tidak cocok dengan baik. Ini adalah temuan tipikal ‘ pengembalian saham harian cenderung memiliki outlier lebih sering daripada yang disarankan oleh distribusi normal

Sekarang mari kita pilih secara acak dari pengembalian S&P 500 yang sebenarnya. Anda akan menggunakan fungsi pilihan dari modul acak Numpy. Ini mengembalikan larik NumPy dengan sampel acak dari daftar angka ‘ dalam kasus kami, S&P 500 mengembalikan. Berikan saja sampel yang dikembalikan dan jumlah pengamatan yang Anda inginkan ke fungsi pilihan. Selanjutnya, ubah larik NumPy menjadi seri panda, dan tetapkan indeks ke tanggal pengembalian S&P 500. Jalan acak Anda akan dimulai dengan harga S&P 500 pertama

Gunakan metode 'pertama' dengan offset hari kalender untuk memilih harga S&P 500 pertama. Kemudian tambahkan 1 ke pengembalian acak, dan tambahkan seri pengembalian ke nilai awal. Sekarang Anda siap untuk menghitung pengembalian kumulatif berdasarkan nilai awal S&P 500 yang sebenarnya. Tambahkan 1, hitung produk kumulatif, dan kurangi satu. Hasilnya adalah jalan acak untuk SP500 berdasarkan sampel acak dari pengembalian sebenarnya

3. 4. Korelasi antara deret waktu

Korelasi adalah ukuran kunci dari hubungan linier antara dua variabel. Di pasar keuangan, korelasi antara pengembalian aset penting untuk model prediktif dan manajemen risiko, misalnya. Panda dan seaborn memiliki berbagai alat untuk membantu Anda menghitung dan memvisualisasikan hubungan ini

Koefisien korelasi melihat hubungan berpasangan antara variabel dan mengukur kesamaan pergerakan berpasangan dari dua variabel di sekitar rata-rata masing-masing. Pergerakan bersama berpasangan ini disebut kovarians. Koefisien korelasi membagi ukuran ini dengan produk dari standar deviasi untuk setiap variabel. Akibatnya, koefisien bervariasi antara -1 dan +1. Semakin dekat koefisien korelasi dengan plus atau 1 atau minus 1, maka plot pasangan kedua deret tersebut akan semakin menyerupai garis lurus. Tanda koefisien menyiratkan hubungan positif atau negatif. Hubungan positif berarti bahwa ketika satu variabel berada di atas rata-ratanya, yang lain mungkin juga berada di atas rata-ratanya, dan sebaliknya untuk hubungan negatif. Namun, ada banyak jenis hubungan non-linier yang tidak ditangkap oleh koefisien korelasi

kami akan menggunakan seri harga ini untuk lima aset untuk menganalisis hubungan mereka di bagian ini. Anda sekarang memiliki data 10 tahun untuk dua indeks saham, indeks obligasi, minyak, dan emas

Seaborn memiliki joint plot yang sangat memudahkan untuk menampilkan distribusi setiap variabel bersamaan dengan scatter plot yang menunjukkan joint distribution. Kami akan menggunakan pengembalian harian untuk analisis kami. Plot bersama mengambil DataFrame, lalu dua label kolom untuk setiap sumbu. S&P 500 dan indeks obligasi misalnya memiliki korelasi rendah mengingat point cloud yang lebih menyebar dan korelasi negatif seperti yang ditunjukkan oleh tren penurunan poin data.

Panda memungkinkan Anda menghitung semua koefisien korelasi berpasangan dengan metode tunggal yang disebut dot-corr. Terapkan ke pengembalian DataFrame, dan Anda mendapatkan DataFrame baru dengan koefisien berpasangan. Data secara alami simetris di sekitar diagonal, yang hanya berisi nilai 1 karena korelasi suatu variabel dengan dirinya sendiri tentu saja 1

Seaborn lagi menawarkan alat yang rapi untuk memvisualisasikan koefisien korelasi berpasangan. Peta panas mengambil DataFrame dengan koefisien korelasi sebagai input dan memvisualisasikan setiap nilai pada skala warna yang mencerminkan rentang nilai yang relevan. Parameter annot sama dengan True memastikan bahwa nilai koefisien korelasi juga ditampilkan. Anda dapat melihat bahwa korelasi pengembalian harian di antara berbagai kelas aset sedikit berbeda

4. Menyatukan semuanya. Membangun indeks nilai tertimbang

Bab ini menggabungkan konsep-konsep sebelumnya dengan mengajari Anda cara membuat indeks nilai tertimbang. Indeks ini menggunakan data kapitalisasi pasar yang terdapat pada daftar bursa untuk menghitung bobot dan informasi harga saham tahun 2016. Performa indeks kemudian dibandingkan dengan tolok ukur untuk mengevaluasi performa indeks yang Anda buat

Untuk membangun indeks berbasis nilai, Anda akan melakukan beberapa langkah. Anda akan memilih perusahaan terbesar dari setiap sektor dengan menggunakan data bursa aktual sebagai komponen indeks. Kemudian, Anda akan menghitung jumlah saham untuk setiap perusahaan, dan memilih rangkaian harga saham yang cocok dari sebuah file. Selanjutnya, Anda akan menghitung bobot untuk setiap perusahaan, dan berdasarkan ini indeks untuk setiap periode. Anda juga akan mengevaluasi dan membandingkan kinerja indeks

4. 1 Pilih komponen indeks & impor data

Pertama, mari impor data perusahaan menggunakan fungsi read_excel panda. Anda akan mengimpor lembar kerja ini dengan info daftar dari bursa tertentu sambil memastikan nilai yang hilang dikenali dengan benar

Selanjutnya, pindahkan ticker saham ke dalam indeks. Karena Anda akan memilih perusahaan terbesar dari setiap sektor, hapus perusahaan tanpa informasi sektor. Anda dapat menggunakan kata kunci 'subset' untuk mengidentifikasi satu atau beberapa kolom untuk memfilter nilai yang hilang. Anda telah melihat kata kunci 'inplace' untuk menghindari pembuatan salinan DataFrame. Terakhir, bagi kapitalisasi pasar dengan 1 juta untuk menyatakan nilai dalam juta USD. Hasilnya adalah 2177 perusahaan dari bursa saham NYSE

Untuk memilih perusahaan terbesar di setiap sektor, kelompokkan perusahaan tersebut berdasarkan sektor, pilih kolom kapitalisasi pasar dan terapkan metode terbesar dengan parameter 1. Hasilnya adalah Seri dengan kapitalisasi pasar jutaan dengan MultiIndex

Tingkat indeks pertama berisi sektor, dan yang kedua adalah ticker saham. Untuk memilih ticker dari level indeks kedua, pilih indeks seri, dan terapkan metode 'get_level_values' dengan nama indeks 'Simbol Saham'. Anda juga dapat menggunakan nilai 1 untuk memilih level indeks kedua. Cetak ticker, dan Anda melihat bahwa hasilnya adalah indeks DataFrame tunggal. Gunakan metode dot-tolist untuk mendapatkan hasil berupa daftar

Terakhir, gunakan daftar ticker untuk memilih saham Anda dari serangkaian rangkaian waktu harga terkini yang diimpor menggunakan read_csv

4. 2 Bangun indeks tertimbang kapitalisasi pasar

Untuk menyusun indeks tertimbang kapitalisasi pasar, Anda perlu menghitung jumlah saham menggunakan kapitalisasi pasar dan harga saham terbaru, karena kapitalisasi pasar hanyalah produk dari jumlah saham dan harga setiap saham. Selanjutnya, Anda akan menggunakan harga saham historis untuk mengonversinya menjadi serangkaian nilai pasar. Kemudian ubah menjadi indeks dengan menormalkan seri untuk memulai dari 100. Anda juga akan melihat pengembalian indeks dan kontribusi setiap komponen terhadap hasilnya

Untuk menghitung jumlah saham, tinggal membagi kapitalisasi pasar dengan harga terakhir. Karena kami mengukur kapitalisasi pasar dalam jutaan USD, Anda juga mendapatkan saham dalam jutaan. Sekarang Anda dapat melipatgandakan seri harga saham historis Anda dengan jumlah saham

Hasilnya adalah rangkaian waktu kapitalisasi pasar, yaitu nilai pasar saham masing-masing perusahaan. Dengan memilih hari pertama dan hari terakhir dari seri ini, Anda dapat membandingkan bagaimana nilai pasar setiap perusahaan berkembang sepanjang tahun

Sekarang Anda hampir memiliki index. hanya mendapatkan nilai pasar untuk semua perusahaan per periode menggunakan metode penjumlahan dengan sumbu parameter sama dengan 1 untuk menjumlahkan setiap baris

Sekarang Anda hanya perlu menormalkan seri ini untuk memulai dari 1 dengan membagi seri dengan nilai pertamanya, yang Anda dapatkan menggunakan dot-iloc. Lipat gandakan hasilnya dengan 100 dan Anda mendapatkan nilai awal yang mudah yaitu 100 di mana perbedaan dari nilai awal adalah perubahan dalam persentase

4. 3. Mengevaluasi kinerja indeks

Sekarang setelah Anda membuat indeks berbobot, Anda dapat menganalisis kinerjanya. Elemen penting dari analisis Anda akan. Pertama, lihat pengembalian indeks, dan kontribusi setiap komponen terhadap hasilnya. Selanjutnya, bandingkan kinerja indeks Anda dengan tolok ukur seperti S&P 500, yang mencakup pasar yang lebih luas, dan juga berbobot nilai. Anda dapat membandingkan kinerja keseluruhan atau rolling return untuk sub-periode

Pertama, mari kita lihat kontribusi masing-masing saham terhadap total nilai tambah sepanjang tahun. Kurangi nilai terakhir kapitalisasi pasar agregat dari yang pertama untuk melihat bahwa perusahaan dalam indeks menambahkan kapitalisasi pasar sebesar 315 miliar dolar. Untuk melihat seberapa besar kontribusi masing-masing perusahaan terhadap perubahan total, terapkan metode diff ke nilai terakhir dan pertama dari rangkaian kapitalisasi pasar per perusahaan dan periode. Baris terakhir sekarang berisi total perubahan kapitalisasi pasar sejak hari pertama. Anda dapat memilih baris terakhir menggunakan dot-loc dan tanggal yang berkaitan dengan baris terakhir, atau iloc dengan parameter -1

Untuk menghitung kontribusi setiap komponen terhadap pengembalian indeks, pertama-tama mari kita hitung bobot komponen. Pilih kapitalisasi pasar untuk komponen indeks. Hitung bobot komponen dengan membagi kapitalisasi pasarnya dengan jumlah kapitalisasi pasar semua komponen. Seperti yang Anda lihat, bobotnya bervariasi antara 2 dan 13%. Sekarang hitung total pengembalian indeks dengan membagi nilai indeks terakhir dengan nilai pertama, dikurangi 1, dan dikalikan dengan 100

Sekarang mari kita lanjutkan dan bandingkan kinerja indeks gabungan dengan S&P 500 untuk periode yang sama. Ubah seri indeks menjadi DataFrame sehingga Anda dapat menyisipkan kolom baru. Impor data dari Federal Reserve seperti sebelumnya. Kemudian normalkan S&P 500 untuk memulai dari 100 seperti indeks Anda, dan masukkan sebagai kolom baru, lalu plot kedua deret waktu. Anda dapat melihat bahwa indeks Anda melakukan beberapa poin persentase lebih baik untuk periode tersebut

Terakhir, untuk membandingkan kinerja selama berbagai subperiode, buat fungsi multi-periode-return yang menggabungkan larik NumPy dari periode kembali ke multi-periode return seperti yang Anda lakukan di bab 3. Buat pengembalian harian indeks Anda dan S&P 500, jendela bergulir 30 hari kalender, dan terapkan fungsi baru Anda. Plot menunjukkan semua pengembalian 30 hari untuk salah satu seri dan menggambarkan kapan sebaiknya diinvestasikan dalam indeks Anda atau S&P 500 untuk periode 30 hari

Bergabunglah dengan Medium dengan tautan referensi saya - Youssef Hosni

Baca setiap cerita dari Youssef Hosni (dan ribuan penulis lain di Medium). Biaya keanggotaan Anda secara langsung mendukung…

youssefraafat57. medium. com

Terima kasih sudah membaca. Jika Anda menyukai artikelnya, pastikan untuk bertepuk tangan (hingga 50. ) dan terhubung dengan saya di LinkedIn dan ikuti saya di Medium untuk terus mengikuti artikel baru saya

Bagaimana cara mengubah data harian menjadi data bulanan di panda?

Seperti yang Anda lihat, data harian kami diubah menjadi mingguan tanpa kehilangan nama kolom dan tanggal lain sebagai indeks. Anda juga dapat mengonversi ke bulan hanya dengan menggunakan “m” daripada “w” . Untuk Misalnya. df. contoh ulang(“m”).

Bagaimana cara mengonversi data harian menjadi mingguan dengan Python?

Metode 1. menggunakan for-loop Python . Fungsi new_case_count() mengambil objek DataFrame, mengulanginya dan mengonversi indeks, yang merupakan tanggal dalam format string, ke format Pandas Datetime. Berdasarkan tanggal hari dalam seminggu, jumlah kasus baru setiap minggu dihitung dan disimpan dalam daftar.

Bagaimana Anda mengonversi laba harian menjadi laba bulanan?

Cukup ganti 365 dengan jumlah periode pengembalian yang sesuai dalam setahun. Jadi, untuk pengembalian mingguan, Anda akan menaikkan bagian pengembalian harian dari persamaan ke pangkat 52. Untuk pengembalian bulanan, Anda akan menggunakan 12 . Dan, untuk pengembalian triwulanan, Anda akan menggunakan kekuatan keempat.

Bagaimana cara mengonversi data harian menjadi bulanan di tabel pivot?

Klik kanan pada sel mana pun dalam kolom Tanggal dan pilih Grup dari daftar keluar. Kemudian pilih Bulan di kotak dialog .