Импорт библиотек и данных
</></></></></></></></></></></></></>
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, StandardScaler
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка данных
from google.colab import files
uploaded = files.upload()
# Предполагаем, что файлы train.csv и test.csv были загружены
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
</></></></></></></></></></></></></>
Модуль A: Парсинг и предобработка данных
Шаг 1: Загрузка данных
</></></></></></></></></></></></></>
# Просмотр первых строк данных
train_data.head()
</></></></></></></></></></></></></>
Шаг 2: Очистка данных. Обработка пропущенных значений и другие задачи очистки данных
</></></></></></></></></></></></></>
# Проверка на наличие пропущенных значений
train_data.isnull().sum()
# Заполнение пропущенных значений
train_data['Age'].fillna(train_data['Age'].median(), inplace=True)
train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)
train_data.drop(columns=['Cabin'], inplace=True)
# Для тестового набора данных
test_data['Age'].fillna(test_data['Age'].median(), inplace=True)
test_data['Fare'].fillna(test_data['Fare'].median(), inplace=True)
test_data.drop(columns=['Cabin'], inplace=True)
# Проверка изменений
train_data.isnull().sum()
test_data.isnull().sum()
</></></></></></></></></></></></></>
Шаг 3: Кодирование категориальных признаков Преобразование текстовых данных в числовые
</></></></></></></></></></></></></>
# Кодирование столбца 'Sex'
label_encoder = LabelEncoder()
train_data['Sex'] = label_encoder.fit_transform(train_data['Sex'])
test_data['Sex'] = label_encoder.transform(test_data['Sex'])
# Кодирование столбца 'Embarked'
train_data['Embarked'] = label_encoder.fit_transform(train_data['Embarked'])
test_data['Embarked'] = label_encoder.transform(test_data['Embarked'])
</></></></></></></></></></></></></>
Шаг 4: Нормализация числовых признаков Масштабирование данных для улучшения работы модели
</></></></></></></></></></></></></>
scaler = StandardScaler()
# Нормализация числовых признаков
train_data[['Age', 'Fare']] = scaler.fit_transform(train_data[['Age', 'Fare']])
test_data[['Age', 'Fare']] = scaler.transform(test_data[['Age', 'Fare']])
# Проверка изменений
train_data.head()
test_data.head()
# Удаление нечисловых столбцов
numeric_train_data = train_data.select_dtypes(include=[np.number])
# Проверка изменений
print(numeric_train_data.head())
</></></></></></></></></></></></></>
Шаг 5: Сохранение обработанных данных
</></></></></></></></></></></></></>
def save_processed_data(train_data: pd.DataFrame, test_data: pd.DataFrame, train_filename: str = 'processed_train.csv', test_filename: str = 'processed_test.csv'):
"""
Сохраняет обработанные данные в CSV файлы и предлагает скачать их.
Parameters:
train_data (pd.DataFrame): Обработанный тренировочный набор данных.
test_data (pd.DataFrame): Обработанный тестовый набор данных.
train_filename (str): Имя файла для сохранения тренировочного набора данных.
test_filename (str): Имя файла для сохранения тестового набора данных.
"""
# Сохранение данных в CSV файлы
train_data.to_csv(train_filename, index=False)
test_data.to_csv(test_filename, index=False)
# Загрузка файлов на локальный компьютер
files.download(train_filename)
files.download(test_filename)
# Пример использования функции
save_processed_data(train_data, test_data)
</></></></></></></></></></></></></>
Модуль B: Разведочный анализ данных
Шаг 1: Визуализация данных: Создадим несколько графиков для визуализации распределения данных и выявления зависимостей
</></></></></></></></></></></></></>
# Гистограмма возрастов
sns.histplot(train_data['Age'], kde=True, bins=30)
plt.title('Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()
# Гистограмма тарифов
sns.histplot(train_data['Fare'], kde=True, bins=30)
plt.title('Fare Distribution')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()
# Визуализация выживаемости по полу
sns.countplot(data=train_data, x='Sex', hue='Survived')
plt.title('Survival by Sex')
plt.xlabel('Sex')
plt.ylabel('Count')
plt.show()
# Визуализация выживаемости по классу
sns.countplot(data=train_data, x='Pclass', hue='Survived')
plt.title('Survival by Class')
plt.xlabel('Pclass')
plt.ylabel('Count')
plt.show()
</></></></></></></></></></></></></>
Шаг 2: Корреляционный анализ: Построим корреляционную матрицу и визуализируем ее с помощью тепловой карты.
</></></></></></></></></></></></></>
# Удаление нечисловых столбцов
numeric_train_data = train_data.select_dtypes(include=[np.number])
# Корреляционная матрица
correlation_matrix = numeric_train_data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
</></></></></></></></></></></></></>
Шаг 3: Описание основных статистик: Посмотрим на основные статистики данных, такие как среднее, медиана, минимальное и максимальное значения
</></></></></></></></></></></></></>
# Основные статистики
train_data.describe()
</></></></></></></></></></></></></>
Модуль C: Построение, обучение и оптимизация модели
Шаг 1: Загрузка и подготовка данных Загрузим наши обработанные данные
</></></></></></></></></></></></></>
# Удаление нечисловых столбцов
train_data = train_data.select_dtypes(include=[np.number])
test_data = test_data.select_dtypes(include=[np.number])
# Выделение целевой переменной и признаков
X = train_data.drop(columns=['Survived'])
y = train_data['Survived']
</></></></></></></></></></></></></>
Шаг 2: Разделение данных на тренировочную и тестовую выборки
</></></></></></></></></></></></></>
# Разделение данных на обучающий и валидационный наборы
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
</></></></></></></></></></></></></>
Шаг 3: Выбор и обучение модели Для начала используем логистическую регрессию
</></></></></></></></></></></></></>
# Создание модели
model = LogisticRegression(max_iter=1000) # Установка большего значения max_iter
# Обучение модели
model.fit(X_train, y_train)
</></></></></></></></></></></></></>
Шаг 4: Оценка модели После обучения модели оценим ее производительность на валидационном наборе данных:
</></></></></></></></></></></></></>
# Предсказания на валидационном наборе
y_pred = model.predict(X_val)
# Оценка точности
accuracy = accuracy_score(y_val, y_pred)
print(f'Accuracy: {accuracy}')
# Матрица ошибок
conf_matrix = confusion_matrix(y_val, y_pred)
print('Confusion Matrix:')
print(conf_matrix)
# Отчет о классификации
class_report = classification_report(y_val, y_pred)
print('Classification Report:')
print(class_report)
</></></></></></></></></></></></></>
Шаг 5: Оптимизация модели Для оптимизации модели используем GridSearchCV, чтобы найти лучшие гиперпараметры для логистической регрессии:
</></></></></></></></></></></></></>
# Подбор гиперпараметров для логистической регрессии с помощью GridSearchCV
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100]}
grid_search = GridSearchCV(LogisticRegression(max_iter=1000), param_grid, cv=5)
grid_search.fit(X_train, y_train)
# Оценка лучших параметров
best_params = grid_search.best_params_
print("Best Parameters:", best_params)
# Оценка точности модели с лучшими параметрами
best_model = grid_search.best_estimator_
y_pred_best = best_model.predict(X_val)
accuracy_best = accuracy_score(y_val, y_pred_best)
print("Accuracy with best parameters:", accuracy_best)
</></></></></></></></></></></></></>
Шаг 6: Предсказание переменной
</></></></></></></></></></></></></>
# Загрузка тестовых данных без столбца 'Survived'
test_data = pd.read_csv('processed_test.csv')
X_test = test_data.select_dtypes(include=[np.number])
# Предсказания на тестовом наборе данных
y_test_pred = best_model.predict(X_test)
# Создание DataFrame для сохранения предсказаний
output = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': y_test_pred})
# Сохранение предсказаний в фа
output.to_csv('submission.csv', index=False)
files.download('submission.csv')
</></></></></></></></></></></></></>
ПАРСИНГ ДАННЫХ
import pandas as pd
import re
# Шаг 1: Чтение данных из файла
with open('text.txt', 'r') as file:
text_data = file.read()
# Шаг 2: Разделение данных на отдельные блоки по пустым строкам
data_blocks = text_data.strip().split("\n\n")
# Шаг 3: Создание пустого списка для хранения результатов парсинга
parsed_data = []
# Регулярные выражения для извлечения данных
name_pattern = re.compile(r"Name:\s*(.*)")
age_pattern = re.compile(r"Age:\s*(\d+)")
occupation_pattern = re.compile(r"Occupation:\s*(.*)")
# Парсинг каждого блока данных
for block in data_blocks:
name = name_pattern.search(block).group(1)
age = age_pattern.search(block).group(1)
occupation = occupation_pattern.search(block).group(1)
# Добавление извлеченных данных в список
parsed_data.append({
'Name': name,
'Age': int(age),
'Occupation': occupation
})
# Шаг 4: Создание DataFrame из списка словарей
df = pd.DataFrame(parsed_data)
# Сохранение DataFrame в Excel файл
df.to_excel('parsed_data.xlsx', index=False)
# Для Google Colab: Загрузка файла на локальный компьютер
from google.colab import files
files.download('parsed_data.xlsx')