You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importrequestsfrombs4importBeautifulSoupimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassns# requests digunakan untuk mengirim permintaan HTTP ke situs web# BeautifulSoup digunakan untuk mem-parsing HTML dari sius web yang di-scrape# pandas untuk memanipulasi data dan pengelolaan data dalam format tabel# matplotlib.pyplot untuk membuat visualisasi data# Library visualisasi data berbasis matplotlib dengan desain yang lebih menarik
url
url="https://stockanalysis.com/list/sp-500-stocks/"# Url sari halaman web yang berisi daftar saham S&P500 yang akan di-scrape
Fungsi untuk melakukan scraping data
defscrape_sp500_data(url):
# Mendefinisikan fungsi scrape_sp500_data untuk mengambil data dari URL yang diberikan.
Session dan Request
try:
withrequests.Session() assession:
response=session.get(url)
response.raise_for_status()
soup=BeautifulSoup(response.text, 'html.parser')
# Membuka sesi HTTP dengan requests.Session.# Mengambil konten halaman dengan session.get(url).# Memastikan permintaan berhasil dengan response.raise_for_status().# Mem-parsing HTML halaman menggunakan BeautifulSoup.
Mencari Tabel
table=soup.select_one('table')
ifnottable:
raiseValueError("Tabel data tidak ditemukan di halaman.")
# Mencari elemen tabel dalam HTML dengan select_one.# Jika tabel tidak ditemukan, muncul pesan error.
Mengambil Header dan Data
headers= [th.text.strip() forthintable.select('thead th')]
rows=table.select('tbody tr')
data= [[col.text.strip() forcolinrow.select('td')] forrowinrows]
# headers Mengambil teks dari elemen thead th (header tabel).# rows Mengambil semua baris data (tr) dari tbody.# data Menyusun setiap kolom dalam baris ke dalam list dua dimensi.
Membuat DataFrame
df=pd.DataFrame(data, columns=headers)
df=df.rename(columns={
'Symbol': 'Tickers',
'Company Name': 'Company',
'Market Cap': 'MCap',
'Stock Price': 'Price',
'% Change': '24h Change %',
})
# Membuat DataFrame menggunakan pandas.# Mengganti nama kolom untuk lebih mudah dipahami dan digunakan.
Filter dan Konversi Data
df=df[['Tickers', 'Company', 'MCap', 'Price', '24h Change %']].copy()
df['Price'] =pd.to_numeric(df['Price'], errors='coerce')
df['24h Change %'] =pd.to_numeric(df['24h Change %'].str.replace('%', ''), errors='coerce')
df['MCap'] =df['MCap'].str.replace('[^\d]', '', regex=True).astype(float)
# Memilih kolom penting untuk analisis.# Mengubah tipe data kolom Price dan 24h Change % menjadi numerik.# Membersihkan kolom MCap dengan menghapus karakter non-numerik dan mengonversi menjadi tipe float.
Menambahkan rentang harga
bins= [0, 50, 100, 200, 500, 1000, float('inf')]
labels= ['<50', '50-100', '100-200', '200-500', '500-1000', '>1000']
df['Price Range'] =pd.cut(df['Price'], bins=bins, labels=labels)
# Menambahkan kategori rentang harga berdasarkan nilai Price.# bins Batas rentang harga.# labels Label untuk setiap rentang.
Visualisasi data menggunakan Bar Plot
defvisualize_data(df):
top_companies=df.nlargest(10, 'MCap')
plt.figure(figsize=(14, 6))
sns.barplot(x='MCap', y='Company', data=top_companies, palette='viridis')
plt.title("Top 10 Companies by Market Cap")
plt.xlabel("Market Cap (in trillions)")
plt.ylabel("Company")
plt.show()
price_range_counts=df['Price Range'].value_counts().sort_index()
plt.figure(figsize=(10, 6))
sns.barplot(x=price_range_counts.index, y=price_range_counts.values, palette='muted')
plt.title("Distribution of Companies by Price Range")
plt.xlabel("Price Range (USD)")
plt.ylabel("Number of Companies")
plt.show()
# Fungsi untuk visualisasi data:# nlargest Memilih 10 perusahaan dengan kapitalisasi pasar terbesar.# Membuat bar plot menggunakan seaborn.barplot.# Menambahkan judul dan memformat sumbu.
Melakukan perintah print untuk scraping & visualisasi data
sp500_data=scrape_sp500_data(url)
ifsp500_dataisnotNone:
print("Scraped Data (Sample):")
print(sp500_data.head())
# Memanggil fungsi scrape_sp500_data dan menampilkan contoh data jika berhasil.
Save ke CSV
csv_file="S&P500.csv"sp500_data.to_csv(csv_file, index=False)
print(f"Data saved to {csv_file}")
#Menyimpan data ke file CSV dengan nama S&P500.csv.
Error handling
else:
print("Gagal mendapatkan data.")
# Menampilkan pesan jika data gagal diambil.