Модуль 2.1 Робота з даними

РОБОТА З JSON

Курс: Python для аналітиків з нуля

0. ВІД СИНТАКСИСУ ДО ДАНИХ

Міст між блоками

Блок 1 закінчився — ти знаєш змінні, списки, словники, цикли, функції, обробку помилок. Це фундамент.

Блок 2 починається — тепер працюємо з реальними даними: JSON експорти, таблиці, API, карти, звіти.

Що змінюється:

Раніше: навчальні приклади (список частот, словник позивних)
Тепер: реальні файли (Telegram експорт на 500 повідомлень)
  • Раніше: писав код з нуля
Тепер: використовуєш бібліотеки (pandas, requests, folium)
Раніше: один скрипт = одна задача
Тепер: пайплайн з кількох кроків (завантажити → обробити → візуалізувати → звіт)

Як використовувати знання з Блоку 1:

# JSON — це словники та списки (модуль 1.5)

Чому JSON першим у блоці 2:

  • Telegram/Signal експорти — JSON
  • Публічні API — JSON
  • Конфігурація програм — JSON
  • Обмін даними між системами — JSON

JSON — це просто словники та списки у файлі. Ти вже знаєш словники (1.5), тепер навчишся читати їх з файлів.

1. ЩО НАВЧИМОСЯ РОБИТИ

Задача: витягнути геомітки з експорту Telegram, побудувати карту активності по районах.

JSON — основний формат обміну даними в OSINT. Telegram, Signal, публічні API — все повертає JSON. Навчимося читати, фільтрувати, витягувати потрібне.

2. ТЕРМІНОЛОГІЯ

JSON (JavaScript Object Notation)

Текстовий формат для структурованих даних. Читається людиною, парситься машиною.

Ключ (key)

Назва поля в словнику. Завжди рядок у лапках: "timestamp", "latitude"

Значення (value)

Дані за ключем. Може бути: число, рядок, список, вкладений словник, True/False, null

json.load(f)

Прочитати JSON з файлу

json.loads(string)

Розпарсити JSON з рядка

json.dump(data, f)

Записати Python-структуру у файл як JSON

3. ТЕОРІЯ

3.1 Структура JSON

JSON — це словники та списки:

{

У Python це стає:

data = {

Відповідності типів:

  • JSON {} → Python dict
  • JSON [] → Python list
  • JSON "text" → Python str
  • JSON 123 → Python int
  • JSON true/false → Python True/False
  • JSON null → Python None

3.2 Читання JSON

Два способи:

import json

Важливо: encoding='utf-8' для кирилиці!

3.3 Доступ до даних

Як зі словником:

data = {

Безпечний доступ (якщо ключа може не бути):

# Якщо "signal" відсутній — поверне None

3.4 Типова структура Telegram export

Telegram повертає JSON такої структури:

{

Нас цікавить: messages → кожне повідомлення → location_information

4. КОД З КОМЕНТАРЯМИ

Повний скрипт: витягти геомітки з Telegram export:

import json

5. РОЗБІР ПО РЯДКАХ

json.load(f)
Читає файл, повертає Python-структуру (словник або список)
for message in data['messages']:

data['messages'] — список повідомлень. Перебираємо кожне.

if 'location_information' in message:

Перевірка: чи є ключ у словнику. Не всі повідомлення мають геомітки.

message.get('from', 'Unknown')

Безпечний доступ: якщо 'from' відсутній — поверне 'Unknown'

json.dump(output, f, ensure_ascii=False, indent=2)

Записує у файл. ensure_ascii=False — зберігає кирилицю. indent=2 — форматує читабельно.

enumerate(locations, 1)

Нумерація з 1 (не з 0). Повертає пари: (1, елемент), (2, елемент)...

6. ЗАВДАННЯ 1: ЗНАЙТИ ПОМИЛКУ

У коді є проблема:

import json

Відповіді:

1. Немає encoding='utf-8' — кирилиця не прочитається

2. Немає перевірки чи існує 'location' — код впаде на першому повідомленні без геомітки

Виправлено:

with open('data.json', 'r', encoding='utf-8') as f:

7. ЗАВДАННЯ 2: ПРОМПТ ДЛЯ AI

Задача: парсити JSON з Signal (інша структура ніж Telegram)

Приклад промпту:

Напиши Python скрипт для парсингу Signal експорту. Структура JSON:

{

Треба:

  • Витягти всі повідомлення з усіх розмов
  • Конвертувати timestamp у читабельну дату
  • Відфільтрувати повідомлення за останні 7 днів
  • Зберегти у CSV: дата, відправник, текст

Використовуй json, datetime, csv. Додай коментарі.

8. ЗАВДАННЯ 3 (ОПЦІОНАЛЬНО)

Реальна задача: групування по координатах

Дано: JSON з 500 геомітками. Знайти найактивніший квадрат 10×10 км.

Підказки:

  • 1° широти ≈ 111 км
Округлити координати до 0.1° (≈11 км)
  • Використати Counter з collections
  • Показати топ-5 квадратів
from collections import Counter

9. РЕФЛЕКСІЯ

Я розумію структуру JSON

Я вмію читати JSON через json.load()
Я знаю різницю load() та loads()

Я використовую encoding='utf-8'

Я перевіряю наявність ключів перед доступом

10. ЩО ДАЛІ

Модуль 2.2: CSV vs JSON vs Excel — коли що використовувати

Модуль 2.3: Pandas — таблиці на стероїдах

Головна думка: JSON — це словники та списки з файлу. Читаєш, фільтруєш, зберігаєш. 80% OSINT-задач починаються з парсингу JSON.

Рефлексія

Прогрес модуля 0%