Тема: Опрацювання та аналіз даних у хмарі (Big Data).
Завантаження набору даних у хмарне сховище; налаштування та запуск завдань обробки даних; виконання аналітичних запитів у BigQuery або Amazon Athena; побудова базового дашборду.
Мета: Ознайомитись з підходами до аналітики великих даних у хмарі: навчитись завантажувати та аналізувати датасети за допомогою serverless SQL-сервісів без попереднього налаштування сервера БД.
Технологічний стек:
Створіть та наповніть датасет продажів:
# generate_data.py
import csv
import random
from datetime import datetime, timedelta
products = ['Ноутбук', 'Смартфон', 'Планшет', 'Навушники', 'Клавіатура']
regions = ['Київ', 'Харків', 'Львів', 'Одеса', 'Дніпро']
with open('sales_data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['order_id', 'date', 'product', 'region', 'quantity', 'price', 'total'])
for i in range(1, 501):
date = datetime(2024, 1, 1) + timedelta(days=random.randint(0, 364))
product = random.choice(products)
price = {'Ноутбук': 30000, 'Смартфон': 15000, 'Планшет': 10000,
'Навушники': 2000, 'Клавіатура': 800}[product]
qty = random.randint(1, 5)
writer.writerow([i, date.strftime('%Y-%m-%d'), product,
random.choice(regions), qty, price, qty * price])
print("Датасет sales_data.csv створено (500 записів)")
python generate_data.py
head -5 sales_data.csv
Реєстрація в Google Cloud (якщо ще немає):
gcloud CLI: https://cloud.google.com/sdk/docs/install# Авторизація
gcloud auth login
gcloud config set project <YOUR_PROJECT_ID>
# Створення Cloud Storage bucket
gsutil mb -l EU gs://lab16-analytics-$(whoami)
# Завантаження CSV
gsutil cp sales_data.csv gs://lab16-analytics-$(whoami)/sales/sales_data.csv
# Верифікація
gsutil ls -l gs://lab16-analytics-$(whoami)/sales/
Створення BigQuery Dataset та таблиці:
# Створення dataset
bq mk --dataset --location=EU lab16_analytics
# Завантаження CSV у BigQuery таблицю
bq load \
--source_format=CSV \
--skip_leading_rows=1 \
lab16_analytics.sales \
gs://lab16-analytics-$(whoami)/sales/sales_data.csv \
order_id:INTEGER,date:DATE,product:STRING,region:STRING,quantity:INTEGER,price:INTEGER,total:INTEGER
# Перевірка схеми
bq show lab16_analytics.sales
Відкрийте BigQuery Console та виконайте:
-- 1. Загальна статистика
SELECT
COUNT(*) AS total_orders,
SUM(total) AS total_revenue,
AVG(total) AS avg_order_value,
MIN(date) AS first_sale,
MAX(date) AS last_sale
FROM `<PROJECT_ID>.lab16_analytics.sales`;
-- 2. Продажі за продуктом (спадання)
SELECT
product,
COUNT(*) AS orders_count,
SUM(quantity) AS units_sold,
SUM(total) AS revenue,
ROUND(SUM(total) * 100.0 / (SELECT SUM(total) FROM `<PROJECT_ID>.lab16_analytics.sales`), 2) AS revenue_pct
FROM `<PROJECT_ID>.lab16_analytics.sales`
GROUP BY product
ORDER BY revenue DESC;
-- 3. Продажі по регіонам та місяцях
SELECT
region,
FORMAT_DATE('%Y-%m', date) AS month,
SUM(total) AS monthly_revenue
FROM `<PROJECT_ID>.lab16_analytics.sales`
GROUP BY region, month
ORDER BY region, month;
-- 4. Топ-10 найбільших замовлень
SELECT order_id, date, product, region, quantity, total
FROM `<PROJECT_ID>.lab16_analytics.sales`
ORDER BY total DESC
LIMIT 10;
-- 5. Ковзне середнє (7-денний тренд)
SELECT
date,
SUM(total) AS daily_revenue,
AVG(SUM(total)) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg_7d
FROM `<PROJECT_ID>.lab16_analytics.sales`
GROUP BY date
ORDER BY date;
BigQuery має сотні безкоштовних публічних датасетів:
-- Публічний датасет COVID-19 (ВООЗ)
SELECT country_region, SUM(confirmed) AS total_confirmed
FROM `bigquery-public-data.covid19_who.who_covid_19_sit_rep_weekly`
GROUP BY country_region
ORDER BY total_confirmed DESC
LIMIT 10;
-- Публічний датасет Вікіпедії (дані про переглядання)
SELECT title, SUM(views) AS total_views
FROM `bigquery-public-data.wikipedia.pageviews_2024`
WHERE wiki = 'uk' -- Україномовна Вікіпедія
AND DATE(datehour) = '2024-01-01'
GROUP BY title
ORDER BY total_views DESC
LIMIT 20;
lab16_analytics → salesLab 16 — Sales Analytics Dashboardhead -5 sales_data.csv — перші рядки датасетуlab16.md