import json
with open("data.json", "r", encoding="utf-8") as f:
# Отримуємо готовий список або словник
data = json.load(f) 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
Як і при роботі з будь яким файлом, наш сценарій залишається не змінним:
- Відкрити файл
- Зчитати та опрацювати дані
- Закрити файл (якщо є така потреба)
Нижче ви можете побачити чіт шіт для роботи з цими розширеннями файлів.
📝 Cheat Sheet
Робота з JSON (import json)
JSON ідеально підходить для збереження списків та словників. Метод load() автоматично перетворює текст на об’єкти Python, а dump() — навпаки.
Читання:
Запис:
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
Вхідні дані:
| 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