Какие технологии использовал в последних проектах?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Tech Stack в последних проектах
Проект 1: Аналитический слой для SaaS платформы (2024-2025)
Контекст
Средняя SaaS компания с ~50K активных пользователей. Задача: создать централизованное хранилище данных и аналитические витрины.
Использованные технологии
Database & Data Warehouse:
- PostgreSQL — основная БД приложения
- BigQuery — хранилище данных (выбрали за простоту и масштабируемость)
- Reason: бюджет ограничен, но нужна масштабируемость
ETL & Pipelines:
# Используем dbt (Data Build Tool) для трансформаций
# Структура проекта dbt:
# models/
# staging/ — очистка сырых данных
# marts/ — бизнес-витрины
# intermediate/ — промежуточные таблицы
# Пример модели dbt (models/marts/fct_orders.sql)
SELECT
o.order_id,
o.user_id,
o.created_at,
o.total_amount,
COUNT(oi.item_id) as items_count,
u.country,
u.signup_date
FROM {{ ref('stg_orders') }} o
JOIN {{ ref('stg_order_items') }} oi ON o.order_id = oi.order_id
JOIN {{ ref('dim_users') }} u ON o.user_id = u.user_id
Data Pipeline Orchestration:
- Apache Airflow — планирование DAG'ов (ежедневные и еженедельные синхронизации)
- GCP Cloud Functions для event-driven pipeline'ов
Пример DAG:
from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'analytics',
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
with DAG('dbt_daily_refresh', default_args=default_args, schedule_interval='0 4 * * *') as dag:
dbt_run = BashOperator(
task_id='dbt_run',
bash_command='dbt run --select tag:daily --project-dir /opt/dbt'
)
dbt_test = BashOperator(
task_id='dbt_test',
bash_command='dbt test --project-dir /opt/dbt'
)
dbt_run >> dbt_test
BI & Visualization:
- Looker — основной инструмент для дашбордов и отчётов
- SQL Derived Tables для расчётов в Looker
- Tableau для ad-hoc анализов и экспорта
Пример Looker dashboard:
LookFile → Connected to BigQuery views
Dimensions: time, user_segment, product_category
Measures: revenue, order_count, average_order_value
Filters: date_range, region, user_cohort
Data Quality & Validation:
- Great Expectations — для проверки качества данных
import great_expectations as ge
# Валидация данных перед загрузкой в витрины
df = ge.dataset.PandasDataset(orders_data)
df.expect_column_values_to_not_be_null('order_id')
df.expect_column_values_to_be_of_type('created_at', 'datetime64')
df.expect_column_values_to_be_between('total_amount', 0, 100000)
results = df.validate()
if not results['success']:
send_slack_alert(f"Data quality issue: {results}")
Version Control & Collaboration:
- Git (GitHub) — все SQL, dbt, Python в репозитории
- Code review перед деплоем
- dbt docs для документации моделей
Проект 2: A/B Testing Platform (2023-2024)
Контекст
Мобильное приложение с 500K DAU. Нужно было создать инфраструктуру для экспериментов и анализа.
Используемые технологии
Event Tracking & Collection:
- Amplitude (третий инструмент) — сбор событий из приложения
- Kafka (в backend) — streaming для real-time событий
- Custom Python SDK для трекирования
Analysis & Statistics:
- Python — основной язык анализа
import pandas as pd
import numpy as np
from scipy import stats
# Загрузка данных из Amplitude API
df_test = pd.read_csv('s3://bucket/amplitude_export.csv')
df_control = df_test[df_test['experiment_group'] == 'control']
df_variant = df_test[df_test['experiment_group'] == 'variant']
# t-тест для проверки разницы конверсии
conversion_control = df_control['converted'].sum() / len(df_control)
conversion_variant = df_variant['converted'].sum() / len(df_variant)
t_stat, p_value = stats.ttest_ind(
df_control['converted'],
df_variant['converted']
)
print(f"Control: {conversion_control:.2%}")
print(f"Variant: {conversion_variant:.2%}")
print(f"P-value: {p_value:.4f}")
print(f"Statistically significant: {p_value < 0.05}")
# Confidence interval
from scipy.stats import binom
ci_control = binom.interval(0.95, len(df_control), conversion_control)
ci_variant = binom.interval(0.95, len(df_variant), conversion_variant)
print(f"CI Control: {ci_control}")
print(f"CI Variant: {ci_variant}")
Jupyter Notebooks для анализа и визуализации
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style='whitegrid')
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
# Plot конверсии по дням
df.groupby(['day', 'experiment_group'])['converted'].mean().unstack().plot(ax=axes[0, 0])
axes[0, 0].set_title('Conversion Rate Over Time')
# Plot когорт по retention
retention_data = df.groupby('cohort')['day_retained'].sum()
retention_data.plot(kind='bar', ax=axes[0, 1])
axes[0, 1].set_title('Retention by Cohort')
plt.tight_layout()
plt.savefig('experiment_analysis.png', dpi=300)
Metabase — для внутренних отчётов
-- Native SQL query в Metabase
SELECT
DATE(event_time) as event_date,
experiment_group,
COUNT(*) as event_count,
COUNT(DISTINCT user_id) as unique_users,
SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) as conversions,
ROUND(100.0 * SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) / COUNT(*), 2) as conversion_rate
FROM events
WHERE experiment_id = {{experiment_id}}
GROUP BY 1, 2
ORDER BY 1 DESC;
Проект 3: Cohort & Retention Analysis (2023)
Контекст
Улучшение retention в приложении для обучения. Нужна была детальная когортная аналитика.
Используемые технологии
Data Preparation:
- Pandas — очистка и подготовка данных
- NumPy — вычисления
import pandas as pd
# Построение когортной таблицы
df['cohort'] = df.groupby('user_id')['first_session_date'].transform('min')
df['cohort'] = pd.to_datetime(df['cohort']).dt.to_period('W') # По неделям
df['activity_date'] = pd.to_datetime(df['activity_date']).dt.to_period('W')
df['period_number'] = (df['activity_date'] - df['cohort']).apply(lambda x: x.n)
# Создание матрицы когорт
cohort_data = df.groupby(['cohort', 'period_number'])['user_id'].nunique()
cohort_pivot = cohort_data.unstack(fill_value=0)
# Нормализация (процент от начальной когорты)
cohort_percent = cohort_pivot.divide(cohort_pivot.iloc[:, 0], axis=0) * 100
print(cohort_percent)
Visualization:
- Matplotlib + Seaborn для static графиков
- Plotly для interactive charts
import plotly.graph_objects as go
fig = go.Figure(data=
go.Heatmap(z=cohort_percent.values,
x=cohort_percent.columns,
y=cohort_percent.index.astype(str),
colorscale='Viridis'))
fig.update_layout(
title='Weekly Cohort Retention (%)',
xaxis_title='Week Since Signup',
yaxis_title='Cohort'
)
fig.show()
Проект 4: SQL-Heavy Analytics (текущий)
Контекст
Маркетплейс с жёсткими требованиями по производительности. Нужна была оптимизированная аналитика.
Технологии
Advanced SQL:
-- Window functions для расчёта running totals
SELECT
user_id,
order_date,
order_amount,
SUM(order_amount) OVER (PARTITION BY user_id ORDER BY order_date) as cumulative_amount,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date) as order_number,
RANK() OVER (ORDER BY order_amount DESC) as amount_rank
FROM orders;
-- Recursive CTE для иерархии категорий
WITH RECURSIVE categories_tree AS (
SELECT id, name, parent_id, 0 as level
FROM categories
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, c.parent_id, ct.level + 1
FROM categories c
JOIN categories_tree ct ON c.parent_id = ct.id
)
SELECT * FROM categories_tree;
-- LATERAL join для top-N per group
SELECT u.user_id, u.username, o.*
FROM users u
CROSS JOIN LATERAL (
SELECT order_id, order_date, amount
FROM orders
WHERE user_id = u.user_id
ORDER BY order_date DESC
LIMIT 5
) o;
Query Optimization:
- EXPLAIN ANALYZE для профилирования
- Индексы (B-tree, HASH, GiST)
- Partitioning по дате для больших таблиц
-- Создание партиционированной таблицы
CREATE TABLE orders_partitioned (
order_id BIGINT,
user_id INT,
created_at TIMESTAMP,
amount DECIMAL
) PARTITION BY RANGE (DATE(created_at));
CREATE TABLE orders_2024_q1 PARTITION OF orders_partitioned
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
Мой Tech Stack Summary
| Категория | Основной | Альтернатива |
|---|---|---|
| Database | PostgreSQL | BigQuery, Snowflake |
| Warehouse | BigQuery | Redshift, Snowflake |
| ETL | dbt | Airflow, Prefect |
| BI Tool | Looker | Tableau, Metabase |
| Python | Pandas, NumPy, Scipy | Polars, DuckDB |
| Visualization | Matplotlib, Seaborn, Plotly | Altair, Bokeh |
| Notebooks | Jupyter | Google Colab |
| Version Control | Git | - |
| Documentation | Markdown, dbt docs | Notion, Confluence |
Новое, что изучаю
- DuckDB — embedded analytics database (очень перспективно)
- Polars — быстрая альтернатива Pandas
- DBT Cloud — managed dbt окружение
- Syntax для streaming analytics
Этот стек позволяет мне работать от сбора данных до insights, и я готов быстро адаптироваться к новым инструментам.