/
Yach
/
course_project
Обзор
Документация
Войти
/
Yach
/
course_project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/processing.py
149 строк
6 KB
Yaroslav Chernov
refactor: remove unused librosa import and chapter 5 code
09 июн 2026, 01:41
09 июн 2026, 01:41
9dad37c
Код
Авторство
О чём код?
# -*- coding: utf-8 -*- import os import re import string import numpy as np import pandas as pd import cv2 import xml.etree.ElementTree as ET from collections import Counter # ================================================================================ # ГЛАВА 1: ТАБЛИЧНЫЕ ДАННЫЕ (Медицинское страхование) # ================================================================================ def determine_risk(row): """ Вычисляет группу риска застрахованного лица на основе статуса курения и ИМТ. """ if row['smoker'] == 'yes' and row['bmi'] > 30: return 'High Risk (Высокий риск)' elif row['smoker'] == 'yes' or row['bmi'] > 30: return 'Medium Risk (Средний риск)' else: return 'Low Risk (Низкий риск)' def preprocess_tabular_data(df): """ Выполняет очистку, кодирование категориальных признаков и генерацию новых признаков (группы риска) для датасета страхования. """ df_clean = df.copy() # Label Encoding для бинарных признаков if 'sex' in df_clean.columns: df_clean['sex_num'] = df_clean['sex'].map({'male': 1, 'female': 0}) if 'smoker' in df_clean.columns: df_clean['smoker_num'] = df_clean['smoker'].map({'yes': 1, 'no': 0}) # Расчет групп риска if 'smoker' in df_clean.columns and 'bmi' in df_clean.columns: df_clean['risk_group'] = df_clean.apply(determine_risk, axis=1) # One-Hot Encoding для регионов if 'region' in df_clean.columns: df_clean = pd.get_dummies(df_clean, columns=['region'], prefix='reg', drop_first=False) # Приведение булевых столбцов к типу int (1/0) for col in df_clean.columns: if col.startswith('reg_'): df_clean[col] = df_clean[col].astype(int) return df_clean # ================================================================================ # ГЛАВА 2: ВРЕМЕННЫЕ РЯДЫ (Энергопотребление Тетуана) # ================================================================================ def load_and_resample_ts(file_path, target_freq='h'): """ Загружает временной ряд, устанавливает временной индекс и выполняет ресемплинг. """ df = pd.read_csv(file_path) time_col = df.columns[0] df[time_col] = pd.to_datetime(df[time_col]) df.set_index(time_col, inplace=True) # Ресемплинг для сглаживания шумов df_resampled = df.resample(target_freq).mean() return df_resampled def calculate_snr(signal, noise): """ Вычисляет отношение сигнал/шум (Signal-to-Noise Ratio) в децибелах (дБ). """ var_signal = np.var(signal.dropna()) var_noise = np.var(noise.dropna()) if var_noise == 0: return float('inf') return 10 * np.log10(var_signal / var_noise) # ================================================================================ # ГЛАВА 3: КОМПЬЮТЕРНОЕ ЗРЕНИЕ (Детекция СИЗ / Касок) # ================================================================================ def parse_voc_xml(xml_path): """ Парсит XML-файл аннотации формата Pascal VOC. Возвращает размеры изображения и список словарей с описанием объектов. """ try: tree = ET.parse(xml_path) root = tree.getroot() except Exception as e: print(f"Ошибка чтения XML-файла {xml_path}: {e}") return None, [] size = root.find('size') if size is not None: img_w = int(size.find('width').text) img_h = int(size.find('height').text) if img_w <= 0 or img_h <= 0: img_w, img_h = 416, 416 else: img_w, img_h = 416, 416 objects = [] for obj in root.findall('object'): class_name = obj.find('name').text bndbox = obj.find('bndbox') if bndbox is not None: xmin = int(bndbox.find('xmin').text) ymin = int(bndbox.find('ymin').text) xmax = int(bndbox.find('xmax').text) ymax = int(bndbox.find('ymax').text) objects.append({ 'class': class_name, 'bbox': (xmin, ymin, xmax, ymax), 'rel_width': (xmax - xmin) / img_w, 'rel_height': (ymax - ymin) / img_h }) return (img_w, img_h), objects # ================================================================================ # ГЛАВА 4: ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА (NLP) # ================================================================================ def clean_text_nlp(text, stop_words_list=None): """ Очищает входную текстовую строку: переводит в нижний регистр, удаляет пунктуацию и стоп-слова. """ if not isinstance(text, str): text = str(text) # Приведение к нижнему регистру и удаление пунктуации text = text.translate(str.maketrans('', '', string.punctuation)).lower() # Удаление стоп-слов if stop_words_list: words = [word for word in text.split() if word not in stop_words_list] return " ".join(words) return text