Anda di halaman 1dari 8

Kode program ini adalah sebuah fungsi Python yang disusun untuk memeriksa apakah simbol saham

yang dimasukkan oleh pengguna terdapat dalam file CSV yang disediakan (`companylist.csv`).
Program menggunakan library pandas (`pd`) untuk membaca file CSV dan kemudian melakukan
iterasi melalui simbol-simbol saham yang ada.

Penjelasan komponen-komponen utama dalam kode program tersebut:

1. `pd.read_csv(companies_file, usecols=[0])`: Membaca file CSV (`companylist.csv`) dan memilih


hanya kolom pertama ('Symbol').

2. `while flag is False:`: Membuat loop while yang akan terus berjalan selama nilai `flag` adalah False.

3. `symbol = input('Enter a stock symbol to retrieve data from: ').upper()`: Meminta pengguna untuk
memasukkan simbol saham dan mengonversi input menjadi huruf kapital menggunakan metode
`.upper()`.

4. `for index in range(len(df)):`: Melakukan iterasi melalui indeks DataFrame untuk memeriksa setiap
simbol saham.

5. `if df['Symbol'][index] == symbol:`: Memeriksa apakah simbol saham yang dimasukkan oleh
pengguna ada dalam DataFrame.

6. `flag = True`: Jika simbol ditemukan, mengubah nilai `flag` menjadi True untuk menghentikan loop.

7. `return flag, symbol`: Mengembalikan nilai `flag` dan `symbol` setelah loop selesai.

8. Contoh penggunaan fungsi: Memanggil fungsi `check_stock_symbol()` dan mencetak hasilnya.

Kode program ini terlihat seperti dua fungsi Python yang berhubungan dengan pengambilan dan
pemrosesan data saham menggunakan library `yfinance` dan `pandas`. Berikut adalah penjelasan
dari kedua fungsi tersebut:

### Fungsi `get_stock_data`

```python
def get_stock_data(symbol, from_date, to_date):

data = yf.download(symbol, start=from_date, end=to_date)

df = pd.DataFrame(data=data)

df = df[['Open', 'High', 'Low', 'Close', 'Volume']]

df['HighLoad'] = (df['High'] - df['Close']) / df['Close'] * 100.0

df['Change'] = (df['Close'] - df['Open']) / df['Open'] * 100.0

df = df[['Close', 'HighLoad', 'Change', 'Volume']]

return df

```

1. `yf.download(symbol, start=from_date, end=to_date)`: Menggunakan library `yfinance` untuk


mengunduh data saham dengan simbol tertentu (`symbol`) dari tanggal `from_date` hingga tanggal
`to_date`.

2. `df = pd.DataFrame(data=data)`: Membuat DataFrame pandas dari data saham yang diunduh.

3. `df[['Open', 'High', 'Low', 'Close', 'Volume']]`: Memilih kolom-kolom tertentu dari DataFrame, yaitu
'Open', 'High', 'Low', 'Close', dan 'Volume'.

4. `(df['High'] - df['Close']) / df['Close'] * 100.0`: Menghitung persentase perubahan antara harga


tertinggi ('High') dan harga penutup ('Close').

5. `(df['Close'] - df['Open']) / df['Open'] * 100.0`: Menghitung persentase perubahan antara harga


penutup ('Close') dan harga pembukaan ('Open').

6. `df[['Close', 'HighLoad', 'Change', 'Volume']]`: Memilih kolom-kolom yang relevan dari DataFrame.

7. Mengembalikan DataFrame yang berisi data yang telah diproses.

### Fungsi `stock_forecasting`

```python

def stock_forecasting(df):
forecast_col = 'Close'

forecast_out = int(math.ceil(0.1 * len(df)))

df['Label'] = df[[forecast_col]].shift(-forecast_out)

```

1. `forecast_col = 'Close'`: Menetapkan nama kolom yang akan dijadikan sebagai target prediksi,
dalam hal ini 'Close' (harga penutup).

2. `forecast_out = int(math.ceil(0.1 * len(df)))`: Menghitung jumlah baris data yang akan digeser ke
atas untuk membuat label prediksi. Dalam hal ini, menggunakan 10% dari total panjang DataFrame.

3. `df[[forecast_col]].shift(-forecast_out)`: Membuat kolom 'Label' yang berisi nilai 'Close' yang


digeser ke atas sejumlah `forecast_out`. Ini akan digunakan sebagai target prediksi.

Fungsi-fungsi ini tampaknya bertujuan untuk mengumpulkan data saham dari Yahoo Finance
menggunakan `yfinance` dan memprosesnya untuk digunakan dalam prediksi harga saham. Perlu
dicatat bahwa kode tersebut membutuhkan import untuk library `yfinance`, `pandas`, dan `math`
untuk berfungsi dengan benar.

1. `X = np.array(df.drop(['Label'], axis=1))`: Membuat matriks `X` dari DataFrame `df` dengan


menghapus kolom 'Label'. Ini berarti bahwa `X` akan berisi fitur-fitur yang akan digunakan untuk
melatih model.

2. `X = preprocessing.scale(X)`: Standarisasi skala fitur-fitur dalam `X` menggunakan modul


`preprocessing` dari scikit-learn. Standarisasi skala berguna untuk menormalisasi fitur-fitur sehingga
mereka memiliki rata-rata nol dan variansi satu.

3. `X_forecast = X[-forecast_out:]`: Membuat subset dari `X` yang akan digunakan untuk prediksi atau
"forecast". Subset ini mencakup `forecast_out` baris terakhir dari `X`.

4. `X = X[:-forecast_out]`: Menghilangkan baris-baris terakhir dari `X` yang akan digunakan untuk
"training". Dengan kata lain, baris-baris ini akan diabaikan saat melatih model.
5. `df.dropna(inplace=True)`: Menghapus baris yang mengandung nilai-nilai NaN dari DataFrame `df`.
Ini diperlukan karena proses standarisasi dapat menyebabkan beberapa nilai menjadi NaN, dan
untuk melatih model, kita perlu memastikan bahwa data yang hilang telah dihapus.

6. `y = np.array(df['Label'])`: Membuat array `y` yang berisi label atau target yang ingin diprediksi,
yaitu 'Label' dari DataFrame `df`.

7. `X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)`: Memisahkan data menjadi


set pelatihan (`X_train` dan `y_train`) dan set pengujian (`X_test` dan `y_test`). Pengujian dilakukan
pada 50% dari data, yang ditentukan oleh parameter `test_size=0.5`.

Ringkasnya, kode ini melakukan langkah-langkah pra-pemrosesan yang umum diperlukan dalam
persiapan data untuk melatih model machine learning. Ini mencakup pemilihan fitur, standarisasi
skala fitur, pembuatan subset untuk prediksi, dan pembagian data menjadi set pelatihan dan
pengujian. Pada konteks ini, diasumsikan bahwa kita memiliki dataset berlabel yang digunakan untuk
melatih dan menguji model untuk prediksi harga saham.

Kode program ini terlihat melibatkan pemodelan regresi linier dengan menggunakan
`LinearRegression` dari scikit-learn untuk memprediksi harga saham. Selanjutnya, hasil prediksi
digunakan untuk membuat plot bersama dengan harga penutup aktual dari DataFrame. Berikut
adalah penjelasan dari kedua fungsi ini:

### Fungsi `clf.fit(X_train, y_train)`

```python

clf = LinearRegression(n_jobs=-1)

clf.fit(X_train, y_train)

```

1. `clf = LinearRegression(n_jobs=-1)`: Membuat objek model regresi linier menggunakan kelas


`LinearRegression` dari scikit-learn. Parameter `n_jobs=-1` mengindikasikan bahwa model dapat
menggunakan semua inti CPU yang tersedia untuk melatih model dengan lebih cepat.

2. `clf.fit(X_train, y_train)`: Melatih model regresi linier menggunakan data pelatihan `X_train` dan
label `y_train`.
### Fungsi `forecast`

```python

forecast = clf.predict(X_forecast)

df['Prediction'] = np.nan

last_date = df.iloc[-1].name

last_date = dt.datetime.strptime(str(last_date), "%Y-%m-%d %H:%M:%S")

for pred in forecast:

last_date += dt.timedelta(days=1)

df.loc[last_date.strftime("%Y-%m-%d")] = [np.nan for _ in range(len(df.columns) - 1)] + [pred]

return df, forecast_out

```

1. `forecast = clf.predict(X_forecast)`: Menggunakan model regresi linier yang telah dilatih untuk
memprediksi harga saham pada dataset `X_forecast`.

2. `df['Prediction'] = np.nan`: Membuat kolom 'Prediction' dalam DataFrame `df` yang diisi dengan
nilai NaN.

3. `last_date = df.iloc[-1].name`: Mendapatkan tanggal terakhir dari DataFrame `df`.

4. `last_date = dt.datetime.strptime(str(last_date), "%Y-%m-%d %H:%M:%S")`: Mengubah format


tanggal terakhir ke objek `datetime` menggunakan `strptime`.

5. Loop `for pred in forecast:`: Iterasi melalui setiap nilai prediksi dalam array `forecast`.

6. `last_date += dt.timedelta(days=1)`: Menambahkan satu hari ke tanggal terakhir untuk


mendapatkan tanggal berikutnya.

7. `df.loc[last_date.strftime("%Y-%m-%d")] = [np.nan for _ in range(len(df.columns) - 1)] + [pred]`:


Menambahkan baris baru ke DataFrame `df` dengan tanggal baru dan nilai prediksi, sedangkan
kolom lain diisi dengan nilai NaN.
8. Mengembalikan DataFrame yang sudah diperbarui dan nilai `forecast_out`.

### Fungsi `forecast_plot`

```python

def forecast_plot(df):

df['Close'].plot(color='black')

df['Prediction'].plot(color='green')

plt.legend(loc=4)

plt.xlabel('Date')

plt.ylabel('Price')

```

Fungsi ini menghasilkan plot dari harga penutup aktual (`'Close'`) dan prediksi (`'Prediction'`). Plot ini
menggunakan warna hitam untuk harga penutup dan warna hijau untuk prediksi. Legenda
ditempatkan di sudut kanan bawah, dan sumbu x dan y dinamai sebagai 'Date' dan 'Price' secara
berturut-turut.

**Catatan:** Beberapa bagian kode tersebut terlihat kurang akurat dan dapat menyebabkan
masalah. Jika ada error atau ketidakcocokan, pertimbangkan untuk memeriksa dan mengoreksi kode
tersebut. Misalnya, ada beberapa baris dengan indentasi yang tidak benar.

Kode program tersebut merupakan bagian dari skrip Python dan menggunakan fungsi-fungsi yang
mungkin sudah didefinisikan di tempat lain (seperti `check_stock_symbol`, `get_stock_data`,
`stock_forecasting`, dan `forecast_plot`). Kode tersebut berfungsi untuk mengambil simbol saham
dari pengguna, memeriksanya, dan jika ditemukan, melakukan beberapa tindakan terkait
pemrosesan data saham dan visualisasi.

1. `if __name__ == "__main__":`: Ini adalah idiom umum dalam Python untuk menentukan apakah
skrip dijalankan sebagai program utama atau diimpor sebagai modul ke dalam skrip lain. Pada bagian
ini, semua kode di dalamnya hanya akan dijalankan jika skrip dijalankan langsung (bukan diimpor
sebagai modul).
2. `(flag, symbol) = check_stock_symbol(False, 'companylist.csv')`: Memanggil fungsi
`check_stock_symbol` dengan memberikan nilai awal `flag` sebagai `False` dan file CSV
`'companylist.csv'`. Menyimpan hasilnya dalam variabel `flag` dan `symbol`.

3. `if flag:`: Mengecek apakah `flag` adalah True, yang menunjukkan bahwa simbol saham ditemukan.

4. `actual_date = dt.date.today()`: Mendapatkan tanggal hari ini menggunakan library datetime (`dt`).

5. `past_date = actual_date - dt.timedelta(days=365 * 3)`: Menghitung tanggal tiga tahun yang lalu.

6. `actual_date = actual_date.strftime("%Y-%m-%d")`: Mengonversi tanggal ke format string "YYYY-


MM-DD".

7. `past_date = past_date.strftime("%Y-%m-%d")`: Mengonversi tanggal tiga tahun yang lalu ke


format string "YYYY-MM-DD".

8. `print("Retrieving Stock Data from introduced symbol...")`: Menampilkan pesan untuk


memberitahu bahwa data saham sedang diambil.

9. `dataframe = get_stock_data(symbol, past_date, actual_date)`: Memanggil fungsi `get_stock_data`


untuk mendapatkan data saham berdasarkan simbol dan rentang tanggal.

10. `print("Forecasting stock DataFrame...")`: Menampilkan pesan untuk memberitahu bahwa


prediksi saham sedang dilakukan.

11. `(dataframe, forecast_out) = stock_forecasting(dataframe)`: Memanggil fungsi `stock_forecasting`


untuk melakukan prediksi saham.

12. `print("Plotting existing and forecasted values...")`: Menampilkan pesan untuk memberitahu
bahwa nilai yang sudah ada dan nilai yang diprediksi sedang diplot.

13. `forecast_plot(dataframe)`: Memanggil fungsi `forecast_plot` untuk membuat plot dari nilai yang
sudah ada dan nilai yang diprediksi.
Catatan: Kode ini asumsi bahwa library `dt` telah diimpor sebelumnya dan fungsi-fungsi seperti
`get_stock_data`, `stock_forecasting`, dan `forecast_plot` sudah didefinisikan di tempat lain dalam
skrip atau modul yang relevan.

Anda mungkin juga menyukai