Analisis dan Visualisasi Data Saham Menggunakan Python — Part 1
Pendahuluan
Salah satu hal mendasar yang perlu diketahui oleh seorang investor adalah bagaimana cara menganalisis data-data saham untuk mendapatkan suatu informasi yang berguna seperti misalnya return. Pada artikel ini, saya ingin berbagi bagaimana cara untuk melakukan analisis dan visualisasi data saham terutama untuk menghitung return yang dihasilkan oleh beberapa saham dalam periode waktu tertentu.
Informasi yang ada pada artikel ini hanya untuk pendidikan, bukan saran investasi. Semua keputusan investasi menjadi tanggung jawab masing-masing pembaca.
Kode Program
Bagi pembaca yang ingin langsung mempelajari kode program yang digunakan di artikel ini, maka bisa men-download-nya dari repository ini.
Tools yang Digunakan
Pada artikel ini saya menggunakan bahasa pemrograman Python untuk melakukan analisis dan visualisasi data. Saya menggunakan Jupyter Lab sebagai IDE-nya.
Daftar tools yang saya gunakan yaitu sebagai berikut:
- Bahasa pemrograman: Python
- IDE: Jupyter Lab
- Library: Pandas, NumPy, Plotly, Seaborn
Tools tersebut merupakan tools yang banyak digunakan dalam data science dan artificial intelligence.
Di Mana Mendapatkan Dataset Saham?
Untuk melakukan analisis dan visialusasi, kita perlu mendapatkan dataset dari saham yang akan kita analisis. Salah satu website yang menyediakan dataset tersebut adalah Yahoo Finance.
Gambar berikut ini mengilustrasikan bagaimana cara men-download dataset saham dari Yahoo Finance.
- Langkah pertama, kita bisa memasukan kode saham yang akan kita download. Di contoh ini saya menggunakan saham bank BCA yang memiliki kode BBCA. Kemudian pilih tab Historical Data.
- Langkah kedua, kita bisa memilih periode dataset yang akan kita download. Di contoh ini saya memilih data historical selama 5 tahun terakhir. Kemudian pilih Apply.
- Langkah ketiga, kita pilih Download untuk men-download dataset tersebut.
Dataset yang di-download berupa file CSV. Kita bisa membukanya dengan program notepad atau Microsoft Excel.
Membaca Dataset Menggunakan Pandas
Pada repository ini, saya sudah menyediakan beberapa dataset saham yang akan digunakan.
Kode berikut ini berfungsi untuk membaca dataset dari file CSV. Dataset yang dibaca yaitu berisi data IHSG (Jakarta Composite Index (^JKSE)) selama 5 tahun terakhir.
# load IHSG dataset
stock_ihsg = pd.read_csv('../dataset/^JKSE.csv')
stock_ihsg = stock_ihsg[['Date', 'Close']]
stock_ihsg = stock_ihsg.sort_values(by = ['Date'])
stock_ihsg
- Pada baris pertama, yang perlu kita lakukan adalah membaca dataset. Kita dapat menggunakan fungsi yang disediakan oleh Pandas yaitu read_csv().
- Pada baris kedua, yang perlu kita lakukan adalah mengambil kolom Date dan Close. Close merupakan harga penutupan yaitu harga yang terakhir muncul pada sebuah saham sebelum bursa tutup.
- Pada baris ketiga, yang perlu kita lakukan adalah mengurutkan data berdasarkan date.
Hasil run dari kode tersebut yaitu pada gambar berikut ini. DataFrame ini memiliki dua kolom yaitu date dan close.
Visualisasi Dataset Menggunakan Plotly
Pada bagian ini kita akan memvisualisasikan DataFrame yang berisi data IHSG dengan melakukan plotting menggunakan Plotly. Kita perlu membuat sebuah fungsi untuk melakukan plotting sebagai berikut:
def interactive_plot(df, title):
fig = px.line(title=title)
for i in df.columns[1:]:
fig.add_scatter(x=df['Date'], y=df[i], name=i)
fig.show()
- Pada baris pertama, fungsi tersebut memiliki dua input argument yaitu DataFrame yang akan kita plot (df) dan judul plot yang akan digunakan (title).
- Pada baris ketiga, kita menggunakan for loop. For loop ini akan melakukan iterasi terhadap semua kolom setelah kolom date. Jadi, jika kita memiliki lebih dari satu saham pada DataFrame df maka semuanya akan di-plot.
- Pada baris keempat, fungsi tersebut akan men-set sumbu x sebagai date dan sumbu y sebagai harga penutupan dari setiap saham tersebut.
Kita dapat melakukan plotting dengan memanggil fungsi tersebut seperti pada kode berikut ini:
interactive_plot(stock_ihsg, 'Prices')
Gambar berikut ini merupakan hasil plot harga penutupan IHSG 5 tahun terakhir. Jika kita perhatikan lebih detail, pada grafik tersebut terdapat missing values. Missing values ini perlu kita tindak lanjuti pada saat melakukan data preprocessing.
Data Preprocessing: Missing Values
Salah satu langkah yang ada di data preprocessing yaitu meng-handle missing values. Selain dengan visualisasi, kita juga dapat melakukan pengecekan missing values dengan kode berikut ini:
# check missing values
stock_ihsg.isnull().sum()
Kode tersebut akan mencari missing values kemudian menjumlahkannya, sehingga kita mendapatkan total missing values.
Ada beberapa cara untuk men-handle missing values, seperti membuang data tersebut, mengisi missing values tersebut dengan mean, median, atau interpolasi. Di sini saya akan mencontohkan dua cara untuk men-handle missing values yaitu dengan mengisinya dengan mean dan interpolasi.
Pada contoh pertama, kita coba mengisi missing values dengan mean seperti di kode program berikut ini:
# fill missing value with mean
stock_ihsg_fillna_mean = stock_ihsg.copy()
stock_ihsg_fillna_mean['Close'] = stock_ihsg_fillna_mean['Close'].fillna(stock_ihsg_fillna_mean['Close'].mean())
interactive_plot(stock_ihsg_fillna_mean, 'Prices')
Di kode tersebut, kita menggunakan fungsi fillna() untuk mengisi missing values dengan mean yang dihitung oleh fungsi mean(). Kemudian kita melakukan plotting dengan memanggil fungsi interactive_plot(). Hasil plotting-nya ditampilkan pada gambar berikut ini:
Pada contoh kedua, kita coba mengisi missing values dengan interpolasi seperti di kode program berikut ini:
# fill missing value with interpolation
stock_ihsg_fillna_interp = stock_ihsg.copy()
stock_ihsg_fillna_interp['Close'] = stock_ihsg_fillna_interp['Close'].interpolate(method='linear')
interactive_plot(stock_ihsg_fillna_interp, 'Prices')
Di kode tersebut, kita menggunakan fungsi fillna() untuk mengisi missing values dengan interpolasi yang dihitung oleh fungsi interpolate(). Hasil plotting-nya ditampilkan pada gambar berikut ini:
Dari kedua plot tersebut, kita dapat membandingkan hasilnya. Dengan menggunakan metode mean, maka terdapat beberapa spike (perubahan harga yang signifikan secara tiba-tiba) pada missing values. Sedangkan pada kenyataannya hal seperti ini sangat tidak mungkin terjadi di pasar saham. Spike ini terjadi karena kita menghitung mean dari seluruh data yang ada yaitu selama 5 tahun.
Pada metode interpolasi, spike pada missing values tidak terjadi. Hal ini karena missing values tersebut diisi dengan nilai mean dari data sebelum dan sesudah missing values tersebut, sehingga nilainya tidak terlalu jauh menyimpang. Dari kedua metode tersebut, dapat disimpulkan bahwa metode interpolasi lebih baik karena lebih mendekati kondisi real yang terjadi di pasar saham.
Reference
- Python & Machine Learning for Financial Analysis, Udemy Course.
Next: Analisis dan Visualisasi Data Saham Menggunakan Python — Part 2