Procházet zdrojové kódy

Merge branch 'master' of http://213.155.192.79:3001/ypv/ISRPO

ypv před 2 měsíci
rodič
revize
38097a8614

+ 6 - 4
2024-25/45_гр.md

@@ -85,12 +85,14 @@ https://onlinetestpad.com/scjyxltzvtg2u
 [Вопросы](../Лекции/Unreal_Engine/Unreal_Engine_вопросы.md); 
 
 
-Рофеенко Надежда [3/3]:  
-[Язык программирования Go. Рофеенко Н.](../Лекции/Go/Go(golang).md),  +
+Рофеенко Надежда [3/3] + [1]:  
+[Язык программирования Go. Рофеенко Н.](../Лекции/Go/Go(golang).md),  +  
 [Рофеенко Н.](../Лекции/Unreal_Engine/UE.md), +
-[Вопросы](../Лекции/Unreal_Engine/UE_вопросы.md); 
+[Вопросы](../Лекции/Unreal_Engine/UE_вопросы.md);  
 [Применение ИИ в создании персонализированных рекомендаций. Рофеенко Н.](../Лекции/Рекомендательные_технологии/AI.md), 
-[Вопросы](../Лекции/Рекомендательные_технологии/AI_вопросы.md);  
+[Вопросы](../Лекции/Рекомендательные_технологии/AI_вопросы.md);   
+[Рофеенко Н.](../Лекции/ETL/ETL.md),   
+
 
 
 Дерюго Захар [3-/3]:  

binární
Лекции/AirflowLogo.png


+ 152 - 0
Лекции/ETL.md

@@ -0,0 +1,152 @@
+# ETL-системы  
+
+## Что такое ETL?  
+ETL (Extract, Transform, Load) – это технология обработки данных, которая включает три ключевых этапа:  
+1. **Extract (извлечение)** – получение данных из различных источников: баз данных, файлов, облачных сервисов и т. д.  
+2. **Transform (трансформация)** – очистка, нормализация, агрегация, изменение формата данных для дальнейшего анализа.  
+3. **Load (загрузка)** – перенос обработанных данных в целевую систему: хранилище данных (Data Warehouse), BI-инструменты.  
+
+![](HowETLworks.jpg)
+ETL-процессы автоматизируют обработку больших объемов данных, обеспечивая их целостность.  
+
+
+## Зачем были созданы ETL?  
+ETL критически важны для аналитики и бизнеса. Ранее компании сталкивались с проблемами из-за хранения данных в разрозненных системах (базы данных, файлы и т. д.), и их обработку требовалось производить вручную. Разные форматы данных (JSON, CSV, XML, SQL) усложняли анализ. Все это приводило к тому, что подготовка бизнес-аналитики занимала недели.  
+
+### При использовании ETL-системы:  
+- Автоматизируется обработка данных, что исключает ручной труд и ошибки;  
+- Объединяются данные из разных источников в едином хранилище;  
+- Они приводятся к единому формату, что упрощает анализ и позволяет оптимизировать бизнес-решения на основе свежих данных.  
+
+При настройке ETL-процессов задаются правила трансформации, а дальше система выполняет их автоматически при каждом запуске по расписанию или при появлении новых данных.  
+
+## Пример ETL-системы – Apache Airflow  
+Apache Airflow – инструмент для создания и управления ETL-пайплайнами. Он написан на Python и имеет открытый исходный код. Позволяет писать процессы обработки данных с помощью Python-скриптов, используя концепцию DAG (направленные ациклические графы), где каждая задача связана с другими и выполняется в нужном порядке.  
+
+![](AirflowLogo.png)
+
+### Плюсы:  
+- Хорошая поддержка распределенных вычислений и обработки больших данных.
+- Глубокая интеграция с облачными сервисами (AWS, GCP, Azure).  
+- Графический интерфейс для мониторинга выполнения задач.  
+- Открытый исходный код и большое сообщество.  
+
+### Минусы:  
+- Может требовать значительных ресурсов для крупных процессов.  
+- Требует понимания DevOps и работы с контейнерами (Docker, Kubernetes).  
+
+## Базовый пример ETL-пайплайна в Apache Airflow  
+Допустим, у нас есть сырые данные о продажах, хранящиеся в CSV-файле. Нам нужно:  
+1. Очистить данные (убрать дубликаты, заполнить пропущенные значения).  
+2. Добавить новый столбец с налогом 20%.  
+3. Загрузить обработанные данные в базу PostgreSQL.  
+
+```python
+from airflow import DAG
+from airflow.operators.python import PythonOperator
+from datetime import datetime
+import pandas as pd
+import psycopg2
+
+# Функция Extract – загружаем данные из CSV
+def extract():
+    df = pd.read_csv('/opt/airflow/data/sales_raw.csv')
+    df.to_csv('/opt/airflow/data/sales_extracted.csv', index=False)
+
+# Функция Transform – очищаем и обрабатываем данные
+def transform():
+    df = pd.read_csv('/opt/airflow/data/sales_extracted.csv')
+    
+    # Удаляем дубликаты
+    df = df.drop_duplicates()
+
+    # Заполняем пропущенные значения
+    df.fillna({'price': df['price'].mean()}, inplace=True)
+
+    # Добавляем столбец с налогом (20%)
+    df['price_with_tax'] = df['price'] * 1.2
+
+    df.to_csv('/opt/airflow/data/sales_transformed.csv', index=False)
+
+# Функция Load – загружаем данные в PostgreSQL
+def load():
+    df = pd.read_csv('/opt/airflow/data/sales_transformed.csv')
+
+    conn = psycopg2.connect(
+        host="db",
+        database="airflow",
+        user="airflow",
+        password="airflow"
+    )
+    cur = conn.cursor()
+
+    for _, row in df.iterrows():
+        cur.execute("""
+            INSERT INTO sales (product, price, price_with_tax) 
+            VALUES (%s, %s, %s)
+        """, (row['product'], row['price'], row['price_with_tax']))
+
+    conn.commit()
+    cur.close()
+    conn.close()
+
+# Создаём DAG в Airflow
+default_args = {
+    'start_date': datetime(2024, 2, 20), # Указывает, с какого момента DAG начинает своё исполнение
+    'catchup': False # Eсли DAG запускается позже этой даты, пропущенные задачи не будут выполняться задним числом
+}
+
+dag = DAG(
+    'etl_sales_pipeline', # Имя DAG
+    schedule_interval='@daily', # Указывает, что DAG будет запускаться раз в день
+    default_args=default_args,
+    catchup=False
+)
+
+extract_task = PythonOperator(
+    task_id='extract', # Уникальный идентификатор задачи
+    python_callable=extract, # Вызов функции extract()
+    dag=dag # Задача привязывается к нашему DAG
+)
+
+transform_task = PythonOperator(
+    task_id='transform',
+    python_callable=transform,
+    dag=dag
+)
+
+load_task = PythonOperator(
+    task_id='load',
+    python_callable=load,
+    dag=dag
+)
+
+extract_task >> transform_task >> load_task  # Определяем порядок выполнения
+
+```
+
+## Другие ETL-инструменты  
+
+## Luigi (Python, open-source)  
+Luigi похож на Airflow, но с ориентацией на простоту и поддержание чистоты кода. Создан для обработки сложных процессов в виде цепочек задач и поддерживает параллельную обработку.  Он использует Python-классы для создания задач, каждая из которых может быть связана с другими через зависимости. Он обрабатывает задачи последовательно или параллельно в зависимости от их зависимостей. Luigi подходит для построения процессов, где задачи могут быть разделены на более мелкие части, что позволяет эффективно работать с большими объемами данных.  
+
+### Плюсы:  
+- Простота в освоении и использовании.  
+- Возможность мониторинга и отладки с помощью встроенных инструментов.  
+- Хорошо подходит для сложных, многоступенчатых рабочих процессов.  
+
+### Минусы:  
+- Меньше возможностей для интеграции с BI-инструментами.  
+- Не такая мощная система планирования задач, как у Airflow.  
+
+## Pentaho Data Integration (PDI, aka Kettle) (Java, open-source)  
+PDI подходит для бизнеса и BI-аналитиков, так как позволяет собирать процессы без программирования. Визуальный редактор позволяет создавать ETL-процессы. Может работать как самостоятельное приложение или интегрироваться с BI-инструментами.  
+
+### Плюсы:  
+- Предоставляет возможности для работы с потоками данных в реальном времени.  
+- Поддерживает множество плагинов и позволяет создавать свои собственные для расширения функционала.  
+
+### Минусы:  
+- Сложность освоения для новичков.  
+- Требует мощных серверов при обработке больших данных.
+

binární
Лекции/ETL/AirflowLogo.png


+ 152 - 0
Лекции/ETL/ETL.md

@@ -0,0 +1,152 @@
+# ETL-системы  
+
+## Что такое ETL?  
+ETL (Extract, Transform, Load) – это технология обработки данных, которая включает три ключевых этапа:  
+1. **Extract (извлечение)** – получение данных из различных источников: баз данных, файлов, облачных сервисов и т. д.  
+2. **Transform (трансформация)** – очистка, нормализация, агрегация, изменение формата данных для дальнейшего анализа.  
+3. **Load (загрузка)** – перенос обработанных данных в целевую систему: хранилище данных (Data Warehouse), BI-инструменты.  
+
+![](HowETLworks.jpg)
+ETL-процессы автоматизируют обработку больших объемов данных, обеспечивая их целостность.  
+
+
+## Зачем были созданы ETL?  
+ETL критически важны для аналитики и бизнеса. Ранее компании сталкивались с проблемами из-за хранения данных в разрозненных системах (базы данных, файлы и т. д.), и их обработку требовалось производить вручную. Разные форматы данных (JSON, CSV, XML, SQL) усложняли анализ. Все это приводило к тому, что подготовка бизнес-аналитики занимала недели.  
+
+### При использовании ETL-системы:  
+- Автоматизируется обработка данных, что исключает ручной труд и ошибки;  
+- Объединяются данные из разных источников в едином хранилище;  
+- Они приводятся к единому формату, что упрощает анализ и позволяет оптимизировать бизнес-решения на основе свежих данных.  
+
+При настройке ETL-процессов задаются правила трансформации, а дальше система выполняет их автоматически при каждом запуске по расписанию или при появлении новых данных.  
+
+## Пример ETL-системы – Apache Airflow  
+Apache Airflow – инструмент для создания и управления ETL-пайплайнами. Он написан на Python и имеет открытый исходный код. Позволяет писать процессы обработки данных с помощью Python-скриптов, используя концепцию DAG (направленные ациклические графы), где каждая задача связана с другими и выполняется в нужном порядке.  
+
+![](AirflowLogo.png)
+
+### Плюсы:  
+- Хорошая поддержка распределенных вычислений и обработки больших данных.
+- Глубокая интеграция с облачными сервисами (AWS, GCP, Azure).  
+- Графический интерфейс для мониторинга выполнения задач.  
+- Открытый исходный код и большое сообщество.  
+
+### Минусы:  
+- Может требовать значительных ресурсов для крупных процессов.  
+- Требует понимания DevOps и работы с контейнерами (Docker, Kubernetes).  
+
+## Базовый пример ETL-пайплайна в Apache Airflow  
+Допустим, у нас есть сырые данные о продажах, хранящиеся в CSV-файле. Нам нужно:  
+1. Очистить данные (убрать дубликаты, заполнить пропущенные значения).  
+2. Добавить новый столбец с налогом 20%.  
+3. Загрузить обработанные данные в базу PostgreSQL.  
+
+```python
+from airflow import DAG
+from airflow.operators.python import PythonOperator
+from datetime import datetime
+import pandas as pd
+import psycopg2
+
+# Функция Extract – загружаем данные из CSV
+def extract():
+    df = pd.read_csv('/opt/airflow/data/sales_raw.csv')
+    df.to_csv('/opt/airflow/data/sales_extracted.csv', index=False)
+
+# Функция Transform – очищаем и обрабатываем данные
+def transform():
+    df = pd.read_csv('/opt/airflow/data/sales_extracted.csv')
+    
+    # Удаляем дубликаты
+    df = df.drop_duplicates()
+
+    # Заполняем пропущенные значения
+    df.fillna({'price': df['price'].mean()}, inplace=True)
+
+    # Добавляем столбец с налогом (20%)
+    df['price_with_tax'] = df['price'] * 1.2
+
+    df.to_csv('/opt/airflow/data/sales_transformed.csv', index=False)
+
+# Функция Load – загружаем данные в PostgreSQL
+def load():
+    df = pd.read_csv('/opt/airflow/data/sales_transformed.csv')
+
+    conn = psycopg2.connect(
+        host="db",
+        database="airflow",
+        user="airflow",
+        password="airflow"
+    )
+    cur = conn.cursor()
+
+    for _, row in df.iterrows():
+        cur.execute("""
+            INSERT INTO sales (product, price, price_with_tax) 
+            VALUES (%s, %s, %s)
+        """, (row['product'], row['price'], row['price_with_tax']))
+
+    conn.commit()
+    cur.close()
+    conn.close()
+
+# Создаём DAG в Airflow
+default_args = {
+    'start_date': datetime(2024, 2, 20), # Указывает, с какого момента DAG начинает своё исполнение
+    'catchup': False # Eсли DAG запускается позже этой даты, пропущенные задачи не будут выполняться задним числом
+}
+
+dag = DAG(
+    'etl_sales_pipeline', # Имя DAG
+    schedule_interval='@daily', # Указывает, что DAG будет запускаться раз в день
+    default_args=default_args,
+    catchup=False
+)
+
+extract_task = PythonOperator(
+    task_id='extract', # Уникальный идентификатор задачи
+    python_callable=extract, # Вызов функции extract()
+    dag=dag # Задача привязывается к нашему DAG
+)
+
+transform_task = PythonOperator(
+    task_id='transform',
+    python_callable=transform,
+    dag=dag
+)
+
+load_task = PythonOperator(
+    task_id='load',
+    python_callable=load,
+    dag=dag
+)
+
+extract_task >> transform_task >> load_task  # Определяем порядок выполнения
+
+```
+
+## Другие ETL-инструменты  
+
+## Luigi (Python, open-source)  
+Luigi похож на Airflow, но с ориентацией на простоту и поддержание чистоты кода. Создан для обработки сложных процессов в виде цепочек задач и поддерживает параллельную обработку.  Он использует Python-классы для создания задач, каждая из которых может быть связана с другими через зависимости. Он обрабатывает задачи последовательно или параллельно в зависимости от их зависимостей. Luigi подходит для построения процессов, где задачи могут быть разделены на более мелкие части, что позволяет эффективно работать с большими объемами данных.  
+
+### Плюсы:  
+- Простота в освоении и использовании.  
+- Возможность мониторинга и отладки с помощью встроенных инструментов.  
+- Хорошо подходит для сложных, многоступенчатых рабочих процессов.  
+
+### Минусы:  
+- Меньше возможностей для интеграции с BI-инструментами.  
+- Не такая мощная система планирования задач, как у Airflow.  
+
+## Pentaho Data Integration (PDI, aka Kettle) (Java, open-source)  
+PDI подходит для бизнеса и BI-аналитиков, так как позволяет собирать процессы без программирования. Визуальный редактор позволяет создавать ETL-процессы. Может работать как самостоятельное приложение или интегрироваться с BI-инструментами.  
+
+### Плюсы:  
+- Предоставляет возможности для работы с потоками данных в реальном времени.  
+- Поддерживает множество плагинов и позволяет создавать свои собственные для расширения функционала.  
+
+### Минусы:  
+- Сложность освоения для новичков.  
+- Требует мощных серверов при обработке больших данных.
+

binární
Лекции/ETL/HowETLworks.png


binární
Лекции/HowETLworks.png


+ 8 - 0
Лекции/README.md

@@ -28,6 +28,7 @@
 0. Проектирование ИС
     - Модели жизненного цикла
     - Управление проектами
+        - ETL
     - Case-средства
     - API
 
@@ -166,6 +167,13 @@
 
 
 
+#### ETL
+[Рофеенко Н.](ETL/ETL.md), 
+
+
+
+
+
 ## 1. Управление версиями, совместная разработка (Git)
 ### CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка)