Topik yang saya pilih untuk proyek ETL ini berhubungan dengan pasar saham. Saya memilih topik ini karena investasi adalah aktivitas yang penting untuk dilakukan. Namun, sebagai orang awam yang tidak mengenal pasar saham secara mendalam, seringkali saya merasa ragu ketika ingin terjun ke dunia saham. Saya khawatir tidak dapat melakukan analisis yang menyeluruh, sehingga saham yang saya pilih mungkin ternyata kurang menguntungkan. Untuk itu, saya melakukan web scraping terhadap data saham terkemuka di Indonesia dengan riwayat lima tahun terakhir. Tujuan saya adalah membantu para pemuda yang ingin mempelajari investasi untuk mencoba saham yang lebih low risk sebelum akhirnya mereka memiliki kepercayaan diri yang cukup untuk memasuki pasar saham yang lebih high risk.
Data yang dikumpulkan berasal dari situs web IDN Financials, yang menyediakan informasi mengenai kode perusahaan, nama perusahaan, kapitalisasi pasar (market cap), dan profitabilitasnya selama beberapa tahun terakhir. Sistem Basis Data Manajemen (DBMS) yang digunakan dalam proyek ini adalah PostgreSQL. Saya memilih PostgreSQL karena kemampuannya dalam menangani data dalam skala besar dengan efisien dan kemampuan untuk menjalankan query yang kompleks secara cepat.
- Install seluruh library yang dibutuhkan dengan menggunakan perintah
pip install
. Lakukan instalasi pada librarynotebook
,selenium
,webdriver-manager
,beautifulsoup4
,pandas
,sqlalchemy
,psycopg2-binary
,pipreqs
.pip install notebook selenium webdriver-manager beautifulsoup4 pandas sqlalchemy psycopg2-binary pipreqs
- Clone repository ini untuk menggunakan scraper
git clone https://github.com/aninditaws/Seleksi-2024-Tugas-1
- Buka path
Data Scrapping\src
- Buat server PostgreSQL pada terminal
> psql -U postgres Password: # Masukkan password PostgreSQL Anda
CREATE DATABASE titans;
- Ubah kredensial PostgreSQL yang ada pada file
scraping.ipynb
bagianengine
SQL File'postgresql://<username>:<password>@localhost:<port>/titans'
- Jalankan script
scraping.ipynb
dengan perintahjupyter nbconvert --to notebook --execute scraping.ipynb
atau lakukan Run All pada file tersebut - Apabila ingin melakukan dump file SQL. Jalankan perintah berikut.
> pg_dump -U postgres -d titans > titans.sql
Terdapat 3 file JSON yang dihasilkan dengan strukturnya yang berbeda-beda.
sectors_name.json
{
"sectors-name": [
"Energy",
"Basic Materials",
"Industrials",
"Consumer Non-Cyclicals",
"Consumer Cyclicals",
"Healthcare",
"Financials",
"Properties and Real Estate",
"Technology",
"Infrastructure",
"Transportation and Logistics",
"Listed Investment Products"
]
}
sectors_data.json
{
"Code":"VKTR",
"Company Name":"PT. VKTR Teknologi Mobilitas Tbk",
"Sector":"Consumer Cyclicals",
"Market Cap":"5.687.500,00",
"Price":"130",
"Change":"-5 (-4,00%)",
"Profit 2019":"n\/a",
"Profit 2020":"n\/a",
"Profit 2021":"n\/a",
"Profit 2022":"n\/a",
"Profit 2023":"5.428(0.51%)"
}
all_data.json
{
"Code":"VKTR",
"Company Name":"PT. VKTR Teknologi Mobilitas Tbk",
"Sector":"Consumer Cyclicals",
"Market Cap":5687500.0,
"Price":129.0,
"Change":-1.0,
"Profit 2019":0.0,
"Profit 2020":0.0,
"Profit 2021":0.0,
"Profit 2022":0.0,
"Profit 2023":5428.0,
"Profit 2019 %":0.0,
"Profit 2020 %":0.0,
"Profit 2021 %":0.0,
"Profit 2022 %":0.0,
"Profit 2023 %":0.51,
"Change %":-1.0
}
Berikut merupakan perancangan database dalam bentuk ERD dan relasional.
Entity Relationship Diagram
Berdasarkan ERD di atas, saya mentranslasikan diagram relasional yang menjadi basis dari pembuatan tabel SQL
Diagram Relasional
Berikut merupakan pemetaan entitas berdasarkan tipenya menjadi relasi.
Pemetaan strong entity menjadi relasi
Pemetaan weak entity menjadi relasi
Foreign Keys
- companies(sector_id) → sectors(sector_id)
- pricehistory(company_code) → companies(company_code)
- profit(company_code) → companies(company_code)
Relasi
- companies(company_code, sector_id, company_name, market_cap)
- sectors(sector_id, sector_name)
- profit(year, company_code, profit_value, profit_percentage)
- pricehistory(date, company_code, price, change, change_percentage)
Trigger
- trigger_pricehistory_insert (tabel pricehistory)
Berikut merupakan screenshot yang berhubungan dengan scraping website IDN Financials.
Tampilan Website
Kode untuk Scrape Sectors
Kode untuk Scrape Holdings
Isi SQL
Daftar Tabel SQLTabel Companies
Tabel Sectors
Tabel Profit
Tabel PriceHistory
Saat ini, fitur automated scraping yang saya rancang baru bisa bekerja di lokal . Sehingga, harus terdapat terminal yang selalu terbuka untuk merealisasikan fitur ini.
Fitur ini dirancang untuk melakukan scraping setiap 24 jam guna mengambil data perubahan harga harian. Kode yang digunakan pada fitur ini dapat ditemukan pada Data Scraping/src/app