Programming Concepts Course
  • Економіка & Великі дані
  • Математика
  • Бізнес Економіка
  1. Обробка даних з JSON та CSV
  2. Practice Session 13
  • 👋🏻 Вітаємо на курсі!
  • Змінні, типи даних. Математичні операції в 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

Зміст

  • Основи роботи з JSON та CSV файлами
  • 📌 План заняття:
  • 📊 JSON та CSV - стандарт для роботи з даними
    • 📝 Cheat Sheet
    • 👨‍💻 Live coding 1: Клітинки, коми та значення
    • 👨‍💻 Live Coding 2: JSON
    • 👨‍💻 Live Coding 3: Залишити свій слід в JSON
  1. Обробка даних з JSON та CSV
  2. Practice Session 13

Practice Session 13

Основи роботи з JSON та CSV файлами

В реальному світі інформація рідко зберігається суцільним текстом - зазвичай вона має чітку структуру. Сьогодні ми розберемо два найпопулярніші формати зберігання та обміну даних: CSV (який ви часто зустрінете при роботі з таблицями та датасетами) та JSON (головний стандарт для передачі даних у вебі та роботи з API). Вміння читати, парсити та зберігати дані у цих форматах - це необхідна база для створення повноцінних програм.

ПриміткаЗауважте!

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

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

  • 📊 JSON та CSV - стандарт для роботи з даними
  • 👨‍💻 Live coding 1: Клітинки, коми та значення
  • 👨‍💻 Live Coding 2: JSON
  • 👨‍💻 Live Coding 3: Залишити свій слід в JSON

📊 JSON та CSV - стандарт для роботи з даними

При обробці великих даних за допомогою роботи з файлами ми зазвичай виділяємо два найпоширеніші формати - .json та .csv. Ці формати використовуються для різних сценаріїв передачі та зберігання даних

  • .csv
  • .json

Як і при роботі з будь яким файлом, наш сценарій залишається не змінним:

  1. Відкрити файл
  2. Зчитати та опрацювати дані
  3. Закрити файл (якщо є така потреба)

Нижче ви можете побачити чіт шіт для роботи з цими розширеннями файлів.

📝 Cheat Sheet

Робота з JSON (import json)

JSON ідеально підходить для збереження списків та словників. Метод load() автоматично перетворює текст на об’єкти Python, а dump() — навпаки.

Читання:
import json
with open("data.json", "r", encoding="utf-8") as f:
    # Отримуємо готовий список або словник
    data = json.load(f) 
Запис:
import json
my_data = [{"name": "John", "age": 30}]

with open("export.json", "w", encoding="utf-8") as f:
    # indent=4 робить файл читабельним (з відступами)
    json.dump(my_data, f, indent=4) 

Робота з CSV

Читання:
import csv
with open("table.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    next(reader) # Пропускаємо перший рядок (заголовки)
    for row in reader:
        print(row[0]) # Звертаємося до колонок за індексом
Запис:
  • Спосіб 1: Звичайний Використовуємо, коли наші дані — це списки: [“Apple”, 15].
import csv
data = [["Name", "Price"], ["Apple", 15], ["Banana", 20]]

with open("output.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(data) # Записує список списків
    # writer.writerow(["Тільки", "один", "рядок"]) 
  • Спосіб 2: DictWriter Найкращий спосіб, якщо ми отримали дані у вигляді списку словників (наприклад, розпарсили JSON).
import csv
data = [{"name": "Apple", "price": 15}, {"name": "Banana", "price": 20}]
columns = ["name", "price"] # Задаємо ключі

with open("output_dict.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=columns)
    writer.writeheader()   # Автоматично пише рядок із заголовками
    writer.writerows(data) # Пише всі словники
ВажливоВажливо

При записі у CSV завжди додавайте newline="" у функцію open(), щоб уникнути порожніх рядків на Windows.

👨‍💻 Live coding 1: Клітинки, коми та значення

Контекст: В контексті цього завдання нам з вами доведеться стати справжніми аналітиками та проаналізувати дані про товари, що збергіються на складі магазину “Very Cool Store”. У нас є датасет формату .csv, розміром в 1000 рядків, в якому зберігаються різні дані. Нас цікавить, зокрема ціна та кількість товарів (Price and Stock). Наша задача - порахувати загальну суму вартості товарів, які зберігаються на складі. Поле "Availability" таких товарів - in_stock

Вхідні дані:

Таблиця 1: Датасет products-1000.csv
Index Name Description Brand Category Price Currency Stock EAN Color Size Availability Internal ID
1 Thermostat Drone Heater Consumer approach woman us those star. Bradford-Yu Kitchen Appliances 74 USD 139 8619793560985 Orchid Medium backorder 38
2 Ultra Speaker Iron Grill Advanced One Point suggest easy money operation could white. Douglas Group Fitness Equipment 510 USD 351 3057216124300 MediumSeaGreen Small backorder 27
3 Watch Headphones Kettle Reach husband education. Landry-Austin Beauty & Personal Care 254 USD 409 9825254410556 Lavender XXL pre_order 2
4 Portable Toaster Clock Monitor Silent Always choose school poor table main. Odom, Norton and Foster Makeup 69 USD 119 9490814777808 Pink XL in_stock 94
5 Pro Toaster Oven Worry put discuss easy back too career. Fowler, Mendoza and Mcdaniel Automotive 525 USD 727 4726650403799 LightCoral XL in_stock 95
6 Mini Speakerphone Mixer Tell figure discussion chair red keep tough. Burton-Gould Team Sports 413 USD 566 9016454988741 OliveDrab Medium out_of_stock 44
7 Eco Cooler Printer Speaker Prime Prime Cover close myself camera red evening. Soto, Raymond and Doyle Health & Wellness 621 USD 245 4116090222997 Moccasin Extra Large limited_stock 1
8 Webcam Trimmer Projector Fear fight until market court worry security trouble. Padilla, Dunn and Pruitt Laptops & Computers 414 USD 559 4970509402222 HoneyDew XL limited_stock 27
9 Silent Headphones Stove Wireless Air Clean Truth gun Democrat commercial. Hughes and Sons Home & Kitchen 858 USD 525 4349285091157 Chocolate 5x7 in discontinued 16
10 Wireless Charger Air Premium Ultra Public security home. Mcbride-Wyatt Health & Wellness 153 USD 550 1301175488525 MediumPurple S in_stock 4

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

🛠 Guided Practice:

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

Вхідні дані: Датасет products-1000.csv

Очікуваний результат: Вивід середньої вартості одного товару, найдорожчий товар та його вартість.

ПорадаПорада щодо виконання

При обробці великої кількості даних, важливо вміти визначати конкретні кроки для знаходження потрібних результатів. Для цієї задачі можете скористатися наступним порядком дій:

  • Порахувати середнє значення ціни товару
  • Додати пошук найдорожчого товару

👨‍💻 Live Coding 2: JSON

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

Вхідні дані: Датасет формату JSON. Частина структури подана нижче

[
   {
      "id":1,
      "name":"Emily Johnson",
      "company":"ABC Corporation",
      "username":"emily_johnson",
      "email":"emily.johnson@abccorporation.com",
      "address":"123 Main St",
      "zip":"12345",
      "state":"California",
      "country":"USA",
      "phone":"+1-555-123-4567",
      "photo":"https://loremflickr.com/1076/2263?lock=1311373814763876"
   },
   {
      "id":2,
      "name":"Michael Williams",
      "company":"XYZ Corp",
      "username":"michael_williams",
      "email":"michael.williams@xyzcorp.com",
      "address":"456 Elm Ave",
      "zip":"67890",
      "state":"New York",
      "country":"USA",
      "phone":"+1-555-987-6543"
   }
]

Очікуваний результат: Загальна кількість користувачів, та кількість користувачів з Каліфорнії

🛠 Guided Practice:

Контекст: Поки ми шукали кількість користувачів з каліфорнії, маркетологи згенерували нову геніальну ідею: запустити email-розсилку. Аби розуміти аудиторію краще, їм потрібно дізнатися, який відсоток користувачів використовує комерційні поштові скриньки (ті, що закінчуються на .com)

Використовуючи той самий файл data.json, вам потрібно порахувати загальну кількість людей і знайти тих, у кого значення по ключу email закінчується на .com. Після цього вирахувати відсоток таких користувачів від загальної кількості.

Вхідні дані: Файл data.json

Очікуваний результат: Відсоток людей, що використовують комерційні поштові скриньки

ПорадаПідказка

Ви можете скористатися методом .endswith("") аби перевірити яке саме закінчення має рядок

👨‍💻 Live Coding 3: Залишити свій слід в JSON

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

Вхідні дані: файл data.json з Live Coding 2

Очікуваний результат: Новий файл californians.json

 

© 2025 Vadym Katsel. All rights reserved.