when doing this:
```
# src/data_loader.py

import yfinance as yf
import pandas as pd
import os


def download_data(ticker, start_date, end_date, save_path):
    """
    Download historical stock data and save to a CSV file.
    """
    data = yf.download(ticker, start=start_date, end=end_date)
    data.reset_index(inplace=True)  # Make 'Date' a column

    # Print column names for verification
    print("Downloaded Data Columns:", data.columns.tolist())

    data = data.drop(data.index[1])

    # Save data to CSV
    data.to_csv(save_path, index=False)
    return data


def load_data(file_path):
    """
    Load data from a CSV file.
    """
    data = pd.read_csv(file_path, parse_dates=['Date'], index_col='Date')

    # Print column names for verification
    print("Loaded Data Columns:", data.columns.tolist())

    return data
```
and running this
```
import sys
sys.path.append('../src')
from data_loader import load_data, download_data
from feature_engineering import create_features
from config import RAW_DATA_DIR, PROCESSED_DATA_DIR, TICKER, START_DATE, END_DATE
import matplotlib.pyplot as plt
import seaborn as sns
import os

# Define the save path using the RAW_DATA_DIR from config
SAVE_PATH = os.path.join(RAW_DATA_DIR, f"{TICKER}.csv")

# Download the data
download_data(TICKER, START_DATE, END_DATE, SAVE_PATH)

# Check if the file exists
print("File exists:", os.path.exists(SAVE_PATH))

# Load the data
data = load_data(SAVE_PATH)

# project_dir = os.path.abspath(f"{TICKER}.csv")
# print(project_dir)

# # Загрузка данных
# data = load_data(project_dir)

# Просмотр первых строк данных
data.head()

# Информация о данных
data.info()

# Статистические характеристики
data.describe()

# Проверка на пропущенные значения
data.isnull().sum()

# Ensure there are no NaT values in the 'Close' series
data = data.dropna(subset=['Close'])

# График цены закрытия
plt.figure(figsize=(12,6))
plt.plot(data['Close'])
plt.title(f'Closing Price of {TICKER}')
plt.xlabel('Date')
plt.ylabel('Close Price (USD)')
plt.show()

# Гистограмма распределения цены закрытия
plt.figure(figsize=(10,6))
sns.histplot(data['Close'], bins=50)
plt.title('Distribution of Closing Price')
plt.xlabel('Close Price (USD)')
plt.show()

# Вычисление корреляционной матрицы
corr_matrix = data.corr()

# Визуализация корреляционной матрицы
plt.figure(figsize=(12,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()

# Создание признаков
data_features = create_features(data)

# Просмотр первых строк с новыми признаками
data_features.head()

# График скользящих средних
plt.figure(figsize=(12,6))
plt.plot(data_features['Close'], label='Closing Price')
plt.plot(data_features['MA10'], label='MA10')
plt.plot(data_features['MA50'], label='MA50')
plt.legend()
plt.title('Moving averages')
plt.show()

# Корреляция новых признаков с целевой переменной
corr_with_target = data_features.corr()['Target'].sort_values()
print(corr_with_target)

# Сохранение данных с признаками
data_features.to_csv(f'{PROCESSED_DATA_DIR}{TICKER}_processed.csv')
```
i get 
```
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\axis.py:1813, in Axis.convert_units(self, x)
   1812 try:
-> 1813     ret = self.converter.convert(x, self.units, self)
   1814 except Exception as e:

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\dates.py:1829, in _SwitchableDateConverter.convert(self, *args, **kwargs)
   1828 def convert(self, *args, **kwargs):
-> 1829     return self._get_converter().convert(*args, **kwargs)

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\dates.py:1757, in DateConverter.convert(value, unit, axis)
   1751 """
   1752 If *value* is not already a number or sequence of numbers, convert it
   1753 with `date2num`.
   1754 
   1755 The *unit* and *axis* arguments are not used.
   1756 """
-> 1757 return date2num(value)

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\dates.py:449, in date2num(d)
    448         d = np.asarray(d)
--> 449     d = d.astype('datetime64[us]')
    451 d = np.ma.masked_array(d, mask=mask) if masked else d

TypeError: 'float' object cannot be interpreted as an integer

The above exception was the direct cause of the following exception:

ConversionError                           Traceback (most recent call last)
Cell In[1], line 45
     43 # График цены закрытия
     44 plt.figure(figsize=(12,6))
---> 45 plt.plot(data['Close'])
     46 plt.title(f'Closing Price of {TICKER}')
     47 plt.xlabel('Date')

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\pyplot.py:3794, in plot(scalex, scaley, data, *args, **kwargs)
   3786 @_copy_docstring_and_deprecators(Axes.plot)
   3787 def plot(
   3788     *args: float | ArrayLike | str,
   (...)
   3792     **kwargs,
   3793 ) -> list[Line2D]:
-> 3794     return gca().plot(
   3795         *args,
   3796         scalex=scalex,
   3797         scaley=scaley,
   3798         **({"data": data} if data is not None else {}),
   3799         **kwargs,
   3800     )

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\axes\_axes.py:1781, in Axes.plot(self, scalex, scaley, data, *args, **kwargs)
   1779 lines = [*self._get_lines(self, *args, data=data, **kwargs)]
   1780 for line in lines:
-> 1781     self.add_line(line)
   1782 if scalex:
   1783     self._request_autoscale_view("x")

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\axes\_base.py:2339, in _AxesBase.add_line(self, line)
   2336 if line.get_clip_path() is None:
   2337     line.set_clip_path(self.patch)
-> 2339 self._update_line_limits(line)
   2340 if not line.get_label():
   2341     line.set_label(f'_child{len(self._children)}')

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\axes\_base.py:2362, in _AxesBase._update_line_limits(self, line)
   2358 def _update_line_limits(self, line):
   2359     """
   2360     Figures out the data limit of the given line, updating self.dataLim.
   2361     """
-> 2362     path = line.get_path()
   2363     if path.vertices.size == 0:
   2364         return

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\lines.py:1037, in Line2D.get_path(self)
   1035 """Return the `~matplotlib.path.Path` associated with this line."""
   1036 if self._invalidy or self._invalidx:
-> 1037     self.recache()
   1038 return self._path

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\lines.py:673, in Line2D.recache(self, always)
    671 def recache(self, always=False):
    672     if always or self._invalidx:
--> 673         xconv = self.convert_xunits(self._xorig)
    674         x = _to_unmasked_float_array(xconv).ravel()
    675     else:

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\artist.py:279, in Artist.convert_xunits(self, x)
    277 if ax is None or ax.xaxis is None:
    278     return x
--> 279 return ax.xaxis.convert_units(x)

File ~\PycharmProjects_Python_3_12_0\pythonProject2\stock_prediction_project\venv\lib\site-packages\matplotlib\axis.py:1815, in Axis.convert_units(self, x)
   1813     ret = self.converter.convert(x, self.units, self)
   1814 except Exception as e:
-> 1815     raise munits.ConversionError('Failed to convert value(s) to axis '
   1816                                  f'units: {x!r}') from e
   1817 return ret

ConversionError: Failed to convert value(s) to axis units: array([NaT, Timestamp('2015-01-02 00:00:00+0000', tz='UTC'),
       Timestamp('2015-01-06 00:00:00+0000', tz='UTC'), ...,
       Timestamp('2024-10-30 00:00:00+0000', tz='UTC'),
       Timestamp('2024-10-31 00:00:00+0000', tz='UTC'),
       Timestamp('2024-11-01 00:00:00+0000', tz='UTC')], dtype=object)
```