Programming Concepts Course
  • Економіка & Великі дані
  • Математика
  • Бізнес Економіка
  1. Базова робота з бібліотеками
  2. Practice Session 16
  • 👋🏻 Вітаємо на курсі!
  • Змінні, типи даних. Математичні операції в Python
    • Practice Session 2
  • Списки
    • Practice Session 6
  • Функції
    • Practice Session 8
  • Основи Git
    • Practice Session 9
  • Словники. List Comprehension
    • Practice Session 10
  • Базова робота з файлами. Обробка помилок
    • Practice Session 12
  • Обробка даних з JSON та CSV
    • Practice Session 13
  • Вступ до ООП
    • Practice Session 14
  • Базова робота з бібліотеками
    • Practice Session 15
    • Practice Session 16

Зміст

  • 🔢 Базова робота з NumPy
    • 📌 План заняття:
    • 📝 Cheat Sheet:
    • Базовий NumPy та векторні операції
    • Numpy як інструмент для роботи з даними
    • 📊 Суперкомбо: Numpy + Pandas
  • Підказка
  1. Базова робота з бібліотеками
  2. Practice Session 16

Practice Session 16

🔢 Базова робота з NumPy

NumPy, або Numerical Python, є фундаментальною бібліотекою для наукових обчислень у Python. Вона забезпечує потужні інструменти для роботи з багатовимірними масивами та матрицями, а також містить велику кількість функцій для виконання різноманітних операцій над цими структурами даних. Сьогодні ми розглянемо основи роботи з NumPy та застосуємо її можливості для аналізу даних.

ПопередженняЗауважте!

Для успішного виконання цієї практичної, вам знадобиться зробити Fork репозиторію, а потім клонувати його на свій пристрій. Для того, аби здати практичну, вам потрібно буде надіслати pull request

📌 План заняття:

  • Базовий NumPy та векторні операції
  • Numpy як інструмент для роботи з даними
  • 📊 Суперкомбо: Numpy + Pandas

📝 Cheat Sheet:

NumPy — це бібліотека для швидких математичних обчислень та роботи з масивами/матрицями. Вона дозволяє робити операції з великими обсягами даних без використання повільних циклів for.

🧮 Базова робота

1. Імпорт та створення масивів

import numpy as np

# Одновимірний масив (вектор)
arr = np.array([10, 20, 30])

# Двовимірний масив (матриця: рядки та стовпці)
matrix = np.array([[1, 2, 3], [4, 5, 6]])

2. Векторна математика Усі базові математичні операції (+, -, *, /) застосовуються одразу до всього масиву або між двома масивами однакового розміру:

prices = np.array([100, 200, 300])

# Додасть 20% податку до КОЖНОГО елемента
prices_with_tax = prices * 1.2  

income = np.array([1000, 1500])
expenses = np.array([800, 900])
# Поелементне віднімання
profit = income - expenses 

3. Базова статистика та агрегація

arr.sum()    # або np.sum(arr)  - Сума всіх елементів
arr.mean()   # або np.mean(arr) - Середнє арифметичне
arr.max()    # або np.max(arr)  - Максимальне значення
arr.min()    # або np.min(arr)  - Мінімальне значення
arr.size     # Кількість елементів (не функція, тому без дужок!)

🧭 Просунуті фічі

4. Робота з осями (Axis) у матрицях Якщо застосувати агрегацію до матриці без axis, вона порахує значення по всіх елементах. axis дозволяє задати напрямок:

# axis=0 — дія виконується ПО ВЕРТИКАЛІ (рахує для кожного стовпця)
np.max(matrix, axis=0)

# axis=1 — дія виконується ПО ГОРИЗОНТАЛІ (рахує для кожного рядка)
np.mean(matrix, axis=1)

5. Фільтрація масивів (Булеві маски) Дозволяє відібрати дані, які відповідають певній умові.

scores = np.array([45, 80, 95, 30, 60])

# 1. Створюємо маску (отримаємо масив з True/False)
mask = scores >= 60

# 2. Відфільтровуємо масив (залишаться тільки ті, де True)
passed_scores = scores[mask]  # Результат: [80, 95, 60]

# Складна маска: & (ТА), | (АБО). Обов'язково брати умови в дужки!
complex_mask = (scores >= 60) & (scores < 90)

6. Корисні функції

# np.where(умова, значення_якщо_True, значення_якщо_False)
# Дозволяє швидко замінити або класифікувати дані
statuses = np.where(scores >= 60, "Здав", "Не здав")

# np.maximum(масив, ліміт)
# Замінить усі числа в масиві, які МЕНШІ за ліміт, на цей ліміт.
# (Наприклад, щоб уникнути від'ємних значень)
np.maximum(arr, 0)

Базовий NumPy та векторні операції

👨‍💻 Live coding 1: Стримінг відео

Контекст: Ми розробляємо платформу для стримінгу відео. Нам потрібно розробити інструменти, який буде ефективно розраховувати кількість взаємодій для кожного відео та рівень залученості користувачів. З даних маємо три масиви: кількість переглядів, кількість лайків та кількість коментарів для кожного відео.

Вхідні дані:

  • views = np.array([15000, 32000, 8500, 45000])
  • likes = np.array([1200, 3000, 800, 4100])
  • comments = np.array([150, 400, 50, 600])

Очікуваний результат: engagement_rate, який розраховується за формулою:

\(\frac{\text{Interactions}}{\text{Views}} \times 100\)

🛠 Guided Practice:

Контекст: Перед вами постала задача автоматизувати розрахунок оплати стрімерів на тій самі платформі. Наша стримінгова платформа платить авторам певну суму за кожні 1000 переглядів - revenue per mille (RPM). Окрім цього, ви маєте врахувати витрати на продакшн для кожного відео. Ваше завдання - розрахувати чистий прибуток для кожного відео та визначити найприбутковіше відео.

Вхідні дані:

  • views = np.array([15000, 32000, 8500, 45000])
  • rpm = np.array([1.5, 2.0, 0.8, 2.5])
  • production_cost = np.array([10, 30, 5, 50])

Маисви rpm та production_cost містять дані в доларах. Чистий прибуток для кожного відео можна розрахувати за формулою:

\(( \frac{\text{Views}}{1000} \times \text{RPM}) - \text{Production Cost}\)

Очікуваний результат: Масив чистого прибутку в доларах та індекс найприбутковішого відео.

Numpy як інструмент для роботи з даними

👨‍💻 Live Coding 2: Навантаження на сервери

Контекст: Ми продовжуємо розробляти нашу платформу і цього разу перед нами було поставлено задачу проаналізувати не зовнішні дані про користувачів, а внутрішні дані про сервери платформи. Нам надали двовимірну матрицю, де кожен рядок — це окремий сервер, а стовпці — пікове навантаження на процесор (у відсотках) за 5 робочих днів.

Нам потрібно: 1. Знайти середнє навантаження для кожного сервера. 2. Визначити абсолютний максимум навантаження серед усіх серверів за весь тиждень. 3. Знайти всі випадки, коли навантаження перевищувало 90%. 4. Порахувати кількість таких критичних інцидентів.

Вхідні дані: cpu_load = np.array([[45, 50, 55, 40, 48], [88, 92, 95, 89, 94], [20, 25, 22, 18, 30]])

Очікуваний результат: Знайдено та виведено середнє навантаження для кожного сервера, абсолютний максимум навантаження, всі випадки перевищення 90% та кількість таких випадків.

🛠 Guided Practice:

Контекст: Після аналізу навантаження на сервери, ви отримали дані про час відгуку (response time) для кожного сервера за той самий тиждень. Вам потрібно проаналізувати ці дані та визначити:

  1. Мінімальний час затримки до кожного серверу, щоб визначити їхню найкращу пропускну здатність.
  2. Загальну середню затримку усієї мережі (там, де вона перевищує 200 мс)
  3. Відфільтрувати всі випадки, коли час відгуку перевищував 200 мс, та порахувати їх кількість.
  4. Порахуйте, який відсоток від усіх замірів складають ці затримки за формулою:

\(\frac{\text{Problematic Requests}}{Total} \times \text{100}\)

Вхідні дані:

pings = np.array([[45, 50, 55, 40, 48], 
                [120, 115, 210, 130, 180], 
                [300, 250, 310, 280, 290], 
                [15, 20, 18, 22, 25]])

Очікуваний результат: Знайдено відповідні показники

📊 Суперкомбо: Numpy + Pandas

Як ми вже побачили, NumPy є потужним інструментом для роботи з числовими даними та матрицями, проте одна з його численних переваг - сумісність з іншими бібліотеками, зокрема з Pandas. Це довзоляє проводити ефективний аналіз даних, використовуючи можливості обох бібліотек.

👨‍💻 Live Coding 3: Ментальне здоров’я світу

Контекст: Ми працюємо з датасетом Global Mental Health Crisis Index 2026, який містить дані про індекс психічного здоров’я для різних країн світу. Перед нами постало завдання оцінити рівень ментального здоров’я середі різних країн, а саме:

  • Знайти країни, де відсоток treatment_gap_pct перевищує 50% (це означає, що більше половини людей, які потребують допомоги, не отримують її).

  • Створити новий стовпець unmet_need, який буде містити текстову позначку “High” для країн з treatment_gap_pct > 50% та “Low” для інших.

  • Створити новий стовпець total_burden, який буде містити суму depression_pct та anxiety_pct для кожної країни, щоб оцінити загальний тягар психічних розладів.

Вхідні дані: Файл Global_Mental_Health_Crisis_Index_2026.csv

Очікуваний результат: Відредагований dataframe, який міститиме нові заповнені стовпчики

🛠 Guided Practice:

Контекст: Ви також зрозуміли, що на рівень ментального здоров’я може впливати час, проведений у соцмережах. Для того щоб перевірити це припущення вам потрібно знайти середній показник social_media_hours_daily по всьому світу, а потім розділити країни на дві групи: ті, де люди проводять у соцмережах більше часу,ніж середнє значення, та ті, де менше.

Вхідні дані: Файл Global_Mental_Health_Crisis_Index_2026.csv

Очікуваний результат: Знайдене середнє значення social_media_hours_daily та створена нова колонка.

Підказка

Скористайтеся методом np.mean() для того, щоб знайти середнє, та методом np.where() для створення нової колонки.

 

© 2025 Vadym Katsel. All rights reserved.