AIM-PIbd-31-Kryukov-A-I/Lab_3/lab3.ipynb
2024-11-15 23:39:44 +04:00

47 KiB
Raw Blame History

In [29]:
import pandas as pd

data  = pd.read_csv("..//static//csv//Yamana_Gold_Inc._AUY.csv", sep=",", nrows=10000)
data .columns
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
Cell In[29], line 3
      1 import pandas as pd
----> 3 data  = pd.read_csv("..//static//csv//Yamana_Gold_Inc._AUY.csv", sep=",", nrows=10000)
      4 data .columns

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py:1026, in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)
   1013 kwds_defaults = _refine_defaults_read(
   1014     dialect,
   1015     delimiter,
   (...)
   1022     dtype_backend=dtype_backend,
   1023 )
   1024 kwds.update(kwds_defaults)
-> 1026 return _read(filepath_or_buffer, kwds)

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py:620, in _read(filepath_or_buffer, kwds)
    617 _validate_names(kwds.get("names", None))
    619 # Create the parser.
--> 620 parser = TextFileReader(filepath_or_buffer, **kwds)
    622 if chunksize or iterator:
    623     return parser

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py:1620, in TextFileReader.__init__(self, f, engine, **kwds)
   1617     self.options["has_index_names"] = kwds["has_index_names"]
   1619 self.handles: IOHandles | None = None
-> 1620 self._engine = self._make_engine(f, self.engine)

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py:1898, in TextFileReader._make_engine(self, f, engine)
   1895     raise ValueError(msg)
   1897 try:
-> 1898     return mapping[engine](f, **self.options)
   1899 except Exception:
   1900     if self.handles is not None:

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\c_parser_wrapper.py:93, in CParserWrapper.__init__(self, src, **kwds)
     90 if kwds["dtype_backend"] == "pyarrow":
     91     # Fail here loudly instead of in cython after reading
     92     import_optional_dependency("pyarrow")
---> 93 self._reader = parsers.TextReader(src, **kwds)
     95 self.unnamed_cols = self._reader.unnamed_cols
     97 # error: Cannot determine type of 'names'

File parsers.pyx:574, in pandas._libs.parsers.TextReader.__cinit__()

File parsers.pyx:663, in pandas._libs.parsers.TextReader._get_header()

File parsers.pyx:874, in pandas._libs.parsers.TextReader._tokenize_rows()

File parsers.pyx:891, in pandas._libs.parsers.TextReader._check_tokenize_status()

File parsers.pyx:2053, in pandas._libs.parsers.raise_parser_error()

File <frozen codecs>:322, in decode(self, input, final)

UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 15-16: invalid continuation byte

1. Бизнес-цели для набора данных по акции компании Yamana Gold Inc.

Цель 1: Прогнозирование изменения цены акции компании. Прогнозирование цен на акции является одной из ключевых задач в области финансов и инвестирования. Задача состоит в предсказании будущих изменений стоимости акции на основе исторических данных, таких как открытие и закрытие торгов, объемы торгов и другие показатели.

Цель 2: Оценка волатильности акций компании. Измерение волатильности позволяет инвесторам оценить риск и принять решения по управлению капиталом. Задача заключается в прогнозировании уровня волатильности на основе исторической динамики цен, объемов торгов и других рыночных факторов.

2. Цели технического проекта для каждой бизнес-цели

Цель 1: Прогнозирование изменения цены акции компании

Разработать модель машинного обучения для прогнозирования будущих цен акций на основе исторических данных. Использовать регрессионные модели, такие как линейная регрессия или более сложные модели, например, LSTM (долгосрочная краткосрочная память) для временных рядов. Цель 2: Оценка волатильности акций компании

Создать модель, которая будет прогнозировать волатильность на основе исторических данных о ценах. Использовать методы статистического анализа, такие как вычисление стандартного отклонения, или методы машинного обучения для более точной оценки волатильности.

3 Проверим датасет на пропуски и удалим при необходимости строки с недостающими данными

In [27]:
# Проверим на пропущенные значения
data.isnull().sum()

# Заполним пропуски или удалим строки с пропусками
data = data.dropna()

# Проверим, что данные очищены
data.isnull().sum()
Out[27]:
Id                   0
Name                 0
Short description    0
Gender               0
Country              0
Occupation           0
Birth year           0
Death year           0
Manner of death      0
Age of death         0
dtype: int64

Конструирование признаков

In [28]:
from sklearn.model_selection import train_test_split

# Отделяем целевую переменную (например, Price_Change) и признаки
X = data[['Close', 'SMA_5', 'SMA_20', 'STD_5', 'STD_20']]
y = data['Price_Change']

# Разделение на обучающую, контрольную и тестовую выборки (60%, 20%, 20%)
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, shuffle=False)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, shuffle=False)

# Проверка размеров выборок
(X_train.shape, X_val.shape, X_test.shape)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[28], line 4
      1 from sklearn.model_selection import train_test_split
      3 # Отделяем целевую переменную (например, Price_Change) и признаки
----> 4 X = data[['Close', 'SMA_5', 'SMA_20', 'STD_5', 'STD_20']]
      5 y = data['Price_Change']
      7 # Разделение на обучающую, контрольную и тестовую выборки (60%, 20%, 20%)

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\frame.py:4108, in DataFrame.__getitem__(self, key)
   4106     if is_iterator(key):
   4107         key = list(key)
-> 4108     indexer = self.columns._get_indexer_strict(key, "columns")[1]
   4110 # take() does not accept boolean indexers
   4111 if getattr(indexer, "dtype", None) == bool:

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\indexes\base.py:6200, in Index._get_indexer_strict(self, key, axis_name)
   6197 else:
   6198     keyarr, indexer, new_indexer = self._reindex_non_unique(keyarr)
-> 6200 self._raise_if_missing(keyarr, indexer, axis_name)
   6202 keyarr = self.take(indexer)
   6203 if isinstance(key, Index):
   6204     # GH 42790 - Preserve name from an Index

File c:\Users\alexk\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\indexes\base.py:6249, in Index._raise_if_missing(self, key, indexer, axis_name)
   6247 if nmissing:
   6248     if nmissing == len(indexer):
-> 6249         raise KeyError(f"None of [{key}] are in the [{axis_name}]")
   6251     not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique())
   6252     raise KeyError(f"{not_found} not in index")

KeyError: "None of [Index(['Close', 'SMA_5', 'SMA_20', 'STD_5', 'STD_20'], dtype='object')] are in the [columns]"
In [ ]:

Разобьем данные на выборки и сбалансируем их

In [4]:
from sklearn.model_selection import train_test_split

# Разделение данных на признаки и целевую переменную
X = df.drop(columns=['Age of death', 'Name', 'Short description', 'Id'])
y = df['Age of death']

# Разбиение на обучающую, контрольную и тестовую выборки
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

# Проверка размеров выборок
print(f"Train: {X_train.shape}, Validation: {X_val.shape}, Test: {X_test.shape}")
Train: (6000, 5), Validation: (2000, 5), Test: (2000, 5)

Оценка сбалансированности и аугментация данных

In [5]:
import matplotlib.pyplot as plt

# Проверка распределения целевой переменной
plt.figure(figsize=(8, 6))
plt.hist(y_train, bins=30, alpha=0.7, label='Train')
plt.hist(y_val, bins=30, alpha=0.7, label='Validation')
plt.hist(y_test, bins=30, alpha=0.7, label='Test')
plt.legend()
plt.title('Распределение целевой переменной')
plt.show()
No description has been provided for this image