Skip to content

ETL project analyzing Indonesian stock data from IDN Financials. Features web scraping with BeautifulSoup, data management in PostgreSQL, and insightful visualizations.

Notifications You must be signed in to change notification settings

aninditaws/Indonesian-Stock-Data-ETL

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation


Discover the Titans: Top Companies Dominating Each Sector in Indonesia


Author

Anindita Widya Santoso (18222128)

Deskripsi Singkat

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.

Cara Menggunakan Scraper

  1. Install seluruh library yang dibutuhkan dengan menggunakan perintah pip install. Lakukan instalasi pada library notebook,selenium, webdriver-manager,beautifulsoup4,pandas,sqlalchemy,psycopg2-binary,pipreqs.
    pip install notebook selenium webdriver-manager beautifulsoup4 pandas sqlalchemy psycopg2-binary pipreqs
  2. Clone repository ini untuk menggunakan scraper
    git clone https://github.com/aninditaws/Seleksi-2024-Tugas-1
  3. Buka path Data Scrapping\src
  4. Buat server PostgreSQL pada terminal
    > psql -U postgres
    Password: # Masukkan password PostgreSQL Anda
    CREATE DATABASE titans;
  5. Ubah kredensial PostgreSQL yang ada pada file scraping.ipynb bagian engine SQL File
    'postgresql://<username>:<password>@localhost:<port>/titans'
  6. Jalankan script scraping.ipynb dengan perintah jupyter nbconvert --to notebook --execute scraping.ipynb atau lakukan Run All pada file tersebut
  7. Apabila ingin melakukan dump file SQL. Jalankan perintah berikut.
    > pg_dump -U postgres -d titans > titans.sql

Struktur File JSON

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
}

Struktur ERD dan Diagram Relasional RDBMS

Berikut merupakan perancangan database dalam bentuk ERD dan relasional.

Entity Relationship Diagram

ERD

Berdasarkan ERD di atas, saya mentranslasikan diagram relasional yang menjadi basis dari pembuatan tabel SQL

Diagram Relasional

Relasional

Translasi ERD menjadi Relasional

Berikut merupakan pemetaan entitas berdasarkan tipenya menjadi relasi.

Pemetaan strong entity menjadi relasi

Strong Entity

Pemetaan weak entity menjadi relasi

Weak Entity

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)

Screenshot Program

Berikut merupakan screenshot yang berhubungan dengan scraping website IDN Financials.

Tampilan Website

Tampilan Website

Tampilan Website

Kode untuk Scrape Sectors

Scrape Sectors

Kode untuk Scrape Holdings

Scrape Holdings

Scrape Holdings

Isi SQL

Daftar Tabel SQL

Daftar Tabel

Tabel Companies

Tabel Companies

Isi Tabel Companies

Tabel Sectors

Tabel Sectors

Isi Tabel Sectors

Tabel Profit

Tabel Profit

Isi Tabel Profit

Tabel PriceHistory

Tabel PriceHistory

Isi Tabel PriceHistory

Automated Scraping

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

Data Batch Pertama Batch 1

Data Batch Kedua Batch 2

Data Companies Sebelum Automated Scraping Companies1

Data Companies Setelah Automated Scraping Companies2

Referensi

About

ETL project analyzing Indonesian stock data from IDN Financials. Features web scraping with BeautifulSoup, data management in PostgreSQL, and insightful visualizations.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 91.5%
  • Python 8.5%