80 KiB
Лабораторная 2
ДАТАСЕТ СПИСОК ФОРБС Объектами наблюдения в данном наборе данных являются миллиардеры, чье состояние оценивается и документируется в ежегодном рейтинге Forbes. Каждая запись в наборе данных представляет собой отдельного миллиардера с его оцененным состоянием. Атрибуты объектов
Атрибутами объектов (миллиардеров) являются: Имя: имя миллиардера. Страна: страна, в которой проживает миллиардер. Состояние: оцененное состояние миллиардера в долларах США. Источник богатства: источник, из которого миллиардер получил свое состояние (например, технологии, финансы, недвижимость и т.д.). Возраст: возраст миллиардера на момент публикации списка. Ранг: позиция миллиардера в рейтинге по сравнению с другими миллиардерами.
Связи между объектами могут быть определены через общие источники богатства или страны проживания. Например, миллиардеры из одной страны могут иметь схожие источники дохода, а также могут быть связаны через бизнес-партнерства или семейные связи.
Примеры бизнес-целей Привлечение инвестиций: Компании могут использовать данные о миллиардерах для целенаправленного маркетинга и привлечения инвестиций от состоятельных индивидуумов. Анализ рынка: Понимание источников богатства и распределения состояния может помочь в анализе рыночных трендов и потребительских предпочтений.
Эффект для бизнеса Эти бизнес-цели могут привести к увеличению инвестиций, улучшению репутации компании, расширению клиентской базы и повышению финансовой устойчивости организаций, работающих в различных секторах.
Примеры целей технического проекта Для привлечения инвестиций: Разработка платформы для анализа данных о миллиардерах, которая поможет компаниям находить потенциальных инвесторов на основе их интересов и источников богатства. Для анализа рынка: Создание аналитической панели, которая визуализирует данные о миллиардерах и их источниках богатства, позволяя компаниям лучше понимать рыночные тренды.
Входные данные: Данные о миллиардерах, включая имя, страну, состояние, источник богатства, возраст и ранг.
Целевой признак: Целевым признаком может быть состояние миллиардера, что позволит строить модели для прогнозирования изменений в состоянии или ранге в будущем.
import pandas as pd
df = pd.read_csv("data/forbes.csv", index_col="RankID")
df.info()
display(df.shape)
df.head()
Получение сведений о пропущенных данных
Типы пропущенных данных:
- None - представление пустых данных в Python
- NaN - представление пустых данных в Pandas
- '' - пустая строка
# Количество пустых значений признаков
display(df.isnull().sum())
display()
# Есть ли пустые значения признаков
display(df.isnull().any())
display()
# Процент пустых значений признаков
for i in df.columns:
null_rate = df[i].isnull().sum() / len(df) * 100
if null_rate > 0:
display(f"{i} процент пустых значений: %{null_rate:.2f}")
Для данного датасета количество пустых значений для каждого из признаков = 0 т.е. не пропущено одно значение -> заполнение и корректировка не нужны.
fillna_df = df.fillna(0)
display(fillna_df.shape)
display(fillna_df.isnull().any())
# Замена пустых данных на 0
df["AgeFillNA"] = df["Age"].fillna(0)
# Замена пустых данных на медиану
df["AgeFillMedian"] = df["Age"].fillna(df["Age"].median())
df.tail()
df["AgeCopy"] = df["Age"]
# Замена данных сразу в DataFrame без копирования
df.fillna({"AgeCopy": 0}, inplace=True)
df.tail()
Удаление наблюдений с пропусками
dropna_df = df.dropna()
display(dropna_df.shape)
display(fillna_df.isnull().any())
# Вывод распределения количества наблюдений по Индустрии
from src.utils import split_stratified_into_train_val_test
display(df.Industry.value_counts())
display()
data = df[["Networth", "Age", "Industry"]].copy()
df_train, df_val, df_test, y_train, y_val, y_test = split_stratified_into_train_val_test(
data, stratify_colname="Industry", frac_train=0.60, frac_val=0.20, frac_test=0.20
)
display("Обучающая выборка: ", df_train.shape)
display(df_train.Industry.value_counts())
display("Контрольная выборка: ", df_val.shape)
display(df_val.Industry.value_counts())
display("Тестовая выборка: ", df_test.shape)
display(df_test.Industry.value_counts())
from imblearn.over_sampling import ADASYN
ada = ADASYN()
display("Обучающая выборка: ", df_train.shape)
display(df_train.Industry.value_counts())
X_resampled, y_resampled = ada.fit_resample(df_train, df_train["Industry"]) # type: ignore
df_train_adasyn = pd.DataFrame(X_resampled)
display("Обучающая выборка после oversampling: ", df_train_adasyn.shape)
display(df_train_adasyn.Industry.value_counts())
df_train_adasyn
ДАТАСЕТ ЦЕНЫ НА ЗОЛОТО
Объектами наблюдения в данном наборе данных являются цены на золото, представленные через Gold ETF (Exchange-Traded Fund). Каждая запись в наборе данных соответствует отдельному дню торговли золотыми активами. Атрибуты объектов
Атрибутами объектов (цен на золото) являются: Дата: дата, когда происходила торговля. Цена открытия (Open): цена, по которой золото открывалось в начале торгового дня. Максимальная цена (High): наивысшая цена золота в течение дня. Минимальная цена (Low): наименьшая цена золота в течение дня. Цена закрытия (Close): цена, по которой золото закрылось в конце торгового дня. Скорректированная цена закрытия (Adjusted Close): цена закрытия, скорректированная с учетом факторов, таких как дивиденды и сплиты акций. Объем (Volume): количество золота, которое было куплено и продано в течение дня.
Связи между объектами могут быть определены через временные последовательности. Например, изменение цен на золото в один день может зависеть от цен в предыдущие дни, а также от внешних факторов, таких как цены на другие драгоценные металлы, цены на нефть, экономические условия и рыночные тренды.
Примеры бизнес-целей Оптимизация инвестиционных решений: Анализ исторических данных о ценах на золото может помочь инвесторам принимать более обоснованные решения о покупке или продаже золота. Управление рисками: Понимание факторов, влияющих на цены на золото, может помочь компаниям и инвесторам минимизировать риски, связанные с колебаниями цен.
Эффект для бизнеса Эти бизнес-цели могут привести к увеличению доходов, привлечению новых инвесторов и повышению общей финансовой устойчивости компаний, работающих с золотом.
Примеры целей технического проекта Для управления рисками: Создание системы мониторинга, которая будет отслеживать изменения цен на золото и другие факторы, влияющие на рынок, и предоставлять рекомендации по управлению рисками.
Входные данные: Данные о ценах на золото, включая дату, цену открытия, максимальную и минимальную цены, цену закрытия, скорректированную цену закрытия и объем торгов.
Целевой признак: Целевым признаком может быть скорректированная цена закрытия золота на следующий день, что позволит строить модели для прогнозирования будущих цен.
dfGold = pd.read_csv("data/gold.csv", index_col="Date")
dfGold.info()
display(dfGold.shape)
dfGold.head()
Пустые значения
# Количество пустых значений признаков
display(dfGold.isnull().sum())
display()
# Есть ли пустые значения признаков
display(dfGold.isnull().any())
display()
# Процент пустых значений признаков
for i in dfGold.columns:
null_rate = dfGold[i].isnull().sum() / len(dfGold) * 100
if null_rate > 0:
display(f"{i} процент пустых значений: %{null_rate:.2f}")
Заполение пустых значений для данного набора так же не требуется.
Создание выборок данных
# Вывод распределения количества наблюдений по меркам
from src.utils import split_stratified_into_train_val_test
display((dfGold.USB_Trend).value_counts())
display()
selected_columns = ["Open", "High", "Low", "USB_Trend"]
dfGold["USB_Trend"] = round(dfGold["USB_Trend"])
data = dfGold[selected_columns].copy()
# Создание выборок
dfGold_train, dfGold_val, dfGold_test, y_train, y_val, y_test = (
split_stratified_into_train_val_test(
data,
stratify_colname="USB_Trend",
frac_train=0.60,
frac_val=0.20,
frac_test=0.20,
)
)
# Используем display для вывода информации о выборках
display("Обучающая выборка: ", dfGold_train.shape)
display(round(dfGold_train.USB_Trend).value_counts())
display("Контрольная выборка: ", dfGold_val.shape)
display(round(dfGold_val.USB_Trend).value_counts())
display("Тестовая выборка: ", dfGold_test.shape)
display(round(dfGold_test.USB_Trend).value_counts())
from imblearn.under_sampling import RandomUnderSampler
# Создание экземпляра RandomUnderSampler
rus = RandomUnderSampler(
sampling_strategy="auto"
) # 'auto' будет пытаться сбалансировать классы
display("Обучающая выборка: ", dfGold_train.shape)
display(dfGold_train.USB_Trend.value_counts())
# Разделение признаков и целевой переменной
X = dfGold_train.drop(columns=["USB_Trend"])
y = dfGold_train["USB_Trend"]
# Применение undersampling
X_resampled, y_resampled = rus.fit_resample(X, y)
# Создание нового DataFrame
dfGold_train_undersampled = pd.DataFrame(X_resampled)
dfGold_train_undersampled["USB_Trend"] = y_resampled
display("Обучающая выборка после undersampling: ", dfGold_train_undersampled.shape)
display(dfGold_train_undersampled.USB_Trend.value_counts())
dfGold_train_undersampled
ДАТАСЕТ МАРКЕТИНГОВАЯ КОМПАНИЯ