До списку уроків
10 клас · Урок 5 з 16

Датасет без слідів: PII, анонімізація, EXIF

виконано0%
Крок 1

Що робимо сьогодні

Модуль I · IT Skills (Cloud Services & Cyber Security) · тема 3, урок 1 з 2 · 120 хвилин · класи 10A, 10B, 10C

Мета. Зібрати таблицю з відповідями однокласників і прибрати з неї людей. Наступного уроку з цієї таблиці ти зробиш діаграми. «Прибрати людей» — це не «стерти прізвища». Це зробити так, щоб за жодним рядком не можна було показати пальцем на конкретного однокласника.

Найпоширеніша помилка звучить так: «ми ж прибрали прізвища, отже дані анонімні». Сьогодні ти побачиш на екрані, що це не так. У таблиці на 24 людини прізвище видалено, а 12 рядків усе одно вказують рівно на одну особу.

Після уроку ти вмієш

Слова квазіідентифікатор, k-анонімність і EXIF поки нічого не означають. Розберемо їх по черзі. Кожне — після прикладу, а не до нього.

Головне правило модуля: важке робиться локально Сирий датасет (raw.csv) і всі фото залишаються на твоєму комп'ютері, у теці data/lesson-03/. exiftool ти запускаєш у своєму терміналі, не по SSH. По FTP на сервер їдуть три текстові файли: data.csv (очищений), credits.md і anonymize-log.md. Вихідні фото на сервер не заливаються ніколи — учитель дивиться їх очно, з твого екрана.
Чому тека зветься infographic, а урок — п'ятий Робота складається за темою, а не за номером уроку. Тема 3 — це уроки 5 і 6, і обидва наповнюють одну теку ~/www/infographic/. Сьогодні ти кладеш туди дані, наступного уроку — діаграми. Теки lesson-05 немає.

Хід уроку

ЕтапХвЩо робимо
Вхід10Учитель за дві хвилини знаходить конкретну людину в «анонімному» датасеті
Теорія: PII і квазіідентифікатори20Інспектор датасету: скільки рядків лишаються унікальними
Практика: збір датасету20≥10 рядків × ≥3 колонки: опитування класу або відкриті дані
Практика: анонімізація25Видалення, псевдоніми, узагальнення, агрегація до k ≥ 5
Теорія: метадані15EXIF-детектив: фото → координати на мапі
Практика: очищення метаданих15exiftool -all= локально, запис у credits.md
Автоперевірка10Доводимо до зеленого дві перевірки: «у файлах немає персональних даних» (🔒 no_pii) і «на сервері немає фото» (🔒 no_media)
Підсумок5Правило «публікуй мінімум, достатній для висновку»
Разом120
Що поїде на сервер data.csv — очищений датасет, ≥10 рядків даних і ≥3 колонки; credits.md — джерело, ліцензія, AI-інструменти й промпти, що саме анонімізовано; anonymize-log.md — щонайменше три перетворення у форматі «колонка → що зробив → чому». Усі три файли — у ~/www/infographic/.
Крок 2

Персональні дані: пряме означення

Не «те, що соромно показати», а точний юридичний і технічний критерій

Уяви рядок: «10A, 15 років, вулиця Лісова». Імені тут немає, а людина є — однокласники впізнають її за секунду. Такі відомості закон називає персональними даними.

Точне формулювання — зі статті 2 Закону «Про захист персональних даних». Це відомості про фізичну особу, яка ідентифікована або може бути конкретно ідентифікована. Європейський GDPR каже те саме довше. Він додає, що особу можна визначити й непрямо. Наприклад, за місцем чи за онлайн-ідентифікатором. Або за однією з ознак її життя — від здоров'я до статків і занять.

Ключове слово тут — «може бути». Не «названа на ім'я», а «можна вирахувати». Тому дивитися на одну колонку марно. Питання завжди одне: чи можу я, дивлячись на цей рядок, показати пальцем на людину?

Три види ідентифікаторів

ТипПрикладиЩо робить із рядком
Прямі ідентифікатори прізвище та ім'я, номер телефону, email, нік у соцмережі, номер паспорта, податковий номер (РНОКПП), логін на сервері вказують на людину самі по собі, без жодних додаткових даних
Квазіідентифікатори клас, вік або дата народження, вулиця, стать, дата й час події, професія батьків, зріст поодинці нешкідливі, а в комбінації звужують коло до однієї людини
Чутливі атрибути оцінки, стан здоров'я, релігія, політичні погляди, орієнтація, доходи родини саме заради них зазвичай і роблять деанонімізацію

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

Псевдонім — це ще не анонімність Уяви: ти замінив «Коваленко» на «учень_03». А табличка «учень_03 = Коваленко» лежить у тебе на диску. Це схоже на замок, ключ від якого висить поруч: двері зачинені, але відчинити їх — секундна справа. Заміну імені на позначку, поки десь живий ключ до неї, GDPR зве псевдонімізацією і прямо каже: такі дані — усе ще персональні. А анонімізація — це коли ключа немає ні в кого, включно з тобою. Тоді відновити зв'язок із людиною нічим.
Питання

Ти публікуєш опитування класу. Прізвищ немає, телефонів немає — але є колонка «нік в Instagram», бо «за ним же не видно справжнього імені». Чи анонімний такий датасет?

Крок 3

Чому «ми ж прибрали прізвища» не працює

Три нешкідливі колонки перетинаються рівно в одній людині

Уяви таблицю опитування 10A. Прізвище видалено — колонка просто зникла. Лишилися клас, вік, вулиця й улюблений предмет. Виглядає анонімно. Аж поки хтось із класу не подивиться на рядок «10A, 15 років, Математика» і не скаже: «це ж Коваленко, він у нас єдиний, хто пішов до школи з шести років».

прізвище клас вік вулиця предмет колонку видалено 10A16СоборнаМатематика 10A16ШевченкаМатематика 10A16КаштановаІсторія 10A16КаштановаІсторія 10A15ЛісоваМатематика у 10A лише один п’ятнадцятирічний — прізвище вже не потрібне решта рядків поки ховається у групах по двоє
Прізвище прибрано чесно, колонки немає взагалі. Ідентифікація лишилася в даних, а не в назві колонки.

Повторна ідентифікація

До твоєї таблиці хтось додає те, що знає сам, — і дістає ім’я. Це називають повторною ідентифікацією, або деанонімізацією.

Таким зовнішнім знанням може бути що завгодно. Однокласники пам’ятають, хто де живе. На сайті школи висить список олімпіадників. У соцмережі відкрита дата народження. Вистачає будь-якого з цих трьох джерел.

твій датасет зовнішнє знання конкретна людина клас · вік · вулиця без прізвищ однокласники, сайт школи, соцмережі, чат класу ім’я, адреса і чутлива колонка на додачу + = атакувальник не ламає сервер — він зіставляє дві відкриті таблиці і саме тому «у нас же немає прізвищ» захистом не є
Це не теорія. У 1997 році дослідниця Латаня Свіні зіставила «знеособлену» базу медичних страхових виплат штату Массачусетс із публічним списком виборців і знайшла в ній медичну картку губернатора штату — за поштовим індексом, статтю й датою народження.

Її ж підрахунок за переписом США 1990 року: комбінація «поштовий індекс + стать + повна дата народження» унікальна для 87 % населення. Пізніша перевірка Філіпа Ґолле на переписі 2000 року дала 63 %. Цифра менша, а висновок той самий: три «нешкідливі» поля ідентифікують більшість людей.

Питання

Ти прибрав із таблиці імена, лишив клас, вік і улюблений предмет. Твій однокласник упізнав себе за три секунди. Як таке можливо?

Крок 4

Інспектор датасету

Вимикай колонки й дивись, скільки людей лишаються впізнаваними

Ось опитування трьох десятих класів: 24 рядки, п’ять колонок. Кожен прапорець — це колонка, яку ти публікуєш. Знятий прапорець означає, що колонки у файлі немає взагалі.

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

унікальних із 24
найменша група, k
різних комбінацій

Дані вигадані спеціально для цієї сторінки — це не реальний клас. Числа над таблицею рахуються з неї просто зараз, у твоєму браузері.

Що показує ця послідовність

Що опублікованоУнікальнихkВисновок
усі п’ять колонок241кожен рядок — це людина на ім’я
без прізвища121половина класу впізнається без імені
без прізвища і вулиці31краще, але троє все ще самі у своїй групі
+ вік діапазоном 15–16 / 17–1802унікальних немає — і все одно не досить
лише клас (агрегація)08у кожній групі 8 людей: публікувати можна
Нуль унікальних — ще не безпечно Коли ти узагальнив вік, унікальних рядків не лишилося, але найменша група — двоє. Знаючи клас, діапазон віку й предмет, стороння людина звужує коло до двох людей і має 50 % шансів угадати. Саме тому далі буде правило k ≥ 5, а не k ≥ 1.
Питання

В інспекторі ти зняв прапорець «прізвище» і бачиш 12 унікальних із 24. Однокласник каже: «це просто датасет замалий, на 200 рядках такого б не було». Що з цим твердженням не так?

Крок 5

П’ять способів знеособлення

Від «видалити колонку» до «показувати лише групи» — і що втрачається на кожному кроці

Знеособлення — це не одна кнопка, а сходинки. Кожна наступна сходинка робить датасет безпечнішим і водночас біднішим. Твоє завдання — зупинитися там, де висновок для інфографіки ще можливий, а людина вже ні.

СпосібЩо робишЩо втрачаєш
1. Видалення колонки просто немає у файлі: прізвище, телефон, email, нік нічого корисного — прямі ідентифікатори в інфографіці не потрібні ніколи
2. Псевдонім Коваленко → учень_03; той самий псевдонім щоразу для тієї самої людини нічого, але дані лишаються персональними, поки жива таблиця відповідності
3. Узагальнення вік → діапазон 15–16; точна адреса → район; місто → область точність: більше не побудуєш графік «по роках», лише «по групах»
4. Округлення дата 2011-03-172011; час 16:42після 16:00; дохід → до тисячі деталь у часі: сезонність ще видно, конкретний день — уже ні
5. Агрегація окремих рядків немає взагалі — публікуєш лише підсумки по групах від N осіб рядок як одиницю: більше не подивишся на окрему відповідь
ризик: людину видно ризик: людини не видно сирі дані видалення псевдонім узагальнення агрегація Коваленко, 15,вул. Лісова 4 —, 15,вул. Лісова 4 учень_03, 15,вул. Лісова 4 учень_03, 15–16,Північний район 10A, 15–16:8 осіб що втрачається на цьому кроці: нічого нічого корисного нічого, алелишається ключ точний вікі точна адреса окремий рядокяк одиниця псевдонім не є анонімністю: доки існує таблиця «учень_03 = Коваленко», вона сама є персональними даними і зберігається окремо, поза ~/www
Сходинки не обов’язково проходити всі. Для шкільної інфографіки зазвичай досить кроків 1, 3 і 5: видалити прямі ідентифікатори, узагальнити квазіідентифікатори й показувати групи.

Таблиця відповідності — теж персональні дані

Іноді зв’язок між записами однієї людини потрібен. Наприклад, щоб порівняти її відповідь у вересні й у травні. Тоді й беруть псевдонім.

Але файл keys.csv із рядками учень_03,Коваленко — це повноцінна база персональних даних. Тримай його поза ~/www/: у теці ~/data/ з правами 600. На сервер він зазвичай не їде взагалі.

Псевдонім, який сам себе видає учень_kovalenko, k_15_lisova чи ініціали К.О. — це не псевдоніми, а те саме прізвище іншим шрифтом. Псевдонім має бути беззмістовним: порядковий номер або випадковий рядок.
Питання

Ти замінив прізвища на учень_01…учень_24. Файл із відповідністю поклав у ~/www/infographic/keys.csv — «щоб не загубився поруч із даними». Що ти щойно опублікував?

Питання

У датасеті є колонка «дата народження» у форматі 2009-04-02. Тобі для інфографіки треба показати розподіл за віком. Який мінімальний крок дає і графік, і безпеку?

Крок 6

k-анонімність: правило п’яти

Одне правило, яке замінює всю інтуїцію: не показуй групу, у якій менш ніж п’ять людей

Уяви шкільне фото. Одна людина стоїть окремо — на неї легко показати. П’ятеро в однакових куртках стоять поруч — вибрати з них конкретну важко. Розмір такої групи й позначають буквою k.

У таблиці група — це рядки з однаковими значеннями. Знайди найменшу таку групу: скільки в ній людей, таке в тебе й k. Формально це звучить так: датасет k-анонімний, якщо в кожного рядка є ще k − 1 таких самих сусідів. Ідею запропонувала Латаня Свіні у 2002 році.

k = 1 означає, що хтось у таблиці сам-один: його видно. k = 5 означає інше. Найточніше, що можна сказати про людину, — «вона одна з п’ятьох». Поріг п’ять беруть і статистичні служби, коли публікують дані по малих районах.

k = 1 k = 2 k = 5 «10B, 15 років, Англійська» «10C, 17 років, Математика» «10A, 15–16 років» публікувати не можна це рядок про одну людину публікувати не можна вгадати — 50 на 50 публікувати можна найточніше твердження — «одна з п’ятьох» k — це розмір найменшої групи в датасеті, а не середній розмір групи
Правило уроку: якщо після узагальнення лишилася група менша за 5, узагальнюй далі або злий цю групу в категорію «інше».

Як довести k ≥ 5 до зеленого

  1. випиши, які колонки в твоєму data.csv є квазіідентифікаторами;
  2. порахуй, скільки рядків має кожну комбінацію їхніх значень;
  3. знайди найменше з цих чисел — це твоє k;
  4. якщо k < 5: узагальнюй далі (вік → ширший діапазон, вулиця → район) або прибирай зайву колонку;
  5. якщо після цього залишається дрібна група — злий її в інше і напиши про це в anonymize-log.md.
Порахувати k командою Квазіідентифікатори тут — колонки 2 (клас) і 3 (діапазон віку). Найменше число у виводі і є твоє k. Нижче — реальний вивід для датасету з інспектора вище: 24 рядки, вік уже зведено до діапазонів.
macOS / Linux / Git Bash
$ tail -n +2 data.csv | cut -d, -f2,3 | sort | uniq -c | sort -n 2 10C,17-18 3 10A,17-18 3 10B,17-18 5 10A,15-16 5 10B,15-16 6 10C,15-16

Найменша група — двоє (сімнадцятирічні в 10C), отже k = 2, і публікувати такий зріз ще зарано. Прибери колонку віку зовсім — лишиться три групи по вісім осіб, k = 8, і правило виконано.

Windows PowerShell — той самий підрахунок
$ Import-Csv data.csv | Group-Object class,age_band | Sort-Object Count | Select-Object Count,Name
Датасет із шести рядків анонімізувати неможливо Це не лінощі, а математика: щоб мати k ≥ 5 і при цьому ≥ 2 групи, потрібно щонайменше 10 рядків. Саме тому автоперевірка вимагає ≥ 10 рядків даних. Якщо опитування дало шість відповідей — збери ще або візьми відкриті дані.
Питання

Твоя інфографіка «улюблений предмет по класах» показує стовпчик висотою 1: «10B, Астрономія — 1 людина». Прізвищ на діаграмі немає. Чому цей стовпчик усе одно не можна публікувати?

Питання

Ти узагальнив вік до діапазонів і бачиш: унікальних рядків 0, найменша група — двоє. Учитель каже «недостатньо». Що зробити, щоб не викидати колонку «предмет» повністю?

Крок 7

EXIF: усе, що фотоапарат дописав за тебе

Ти публікуєш зображення. Разом із ним публікуються модель телефона, час і координати

На звороті паперового знімка колись підписували дату й місце. Телефон робить це сам, тільки підпис лежить усередині файлу. Цей прихований підпис зветься EXIF — Exchangeable image file format.

Придумали його для фотографів: камера сама записувала витримку й діафрагму. Стандарт веде організація CIPA, актуальна версія — Exif 2.32. Смартфон дописує в той самий блок секцію GPSInfo — координати місця зйомки.

Найважливіше: EXIF — це частина файлу, а не властивість програми. Він їде разом із фото у месенджер, на сайт, на флешку. Одні сервіси зрізають його при завантаженні, інші — ні. Вгадувати, який саме перед тобою, не варто.

IMG_4821.jpg 2,4 МБ що всередині файлу, крім пікселів Make / Model DateTimeOriginal ExposureTime / ISO Software Apple · iPhone 13 2026:05:17 16:42:08 +03:00 1/120 с · ISO 64 iOS 17.4.1 GPSLatitude 50 deg 27' 0.36" N GPSLongitude 30 deg 31' 24.24" E три поля з червоної зони дають адресу з точністю до під’їзду і разом із часом кажуть, коли саме ти там буваєш приклад: значення
Поля й формат — справжні, такі їх друкує exiftool. Значення підставлені для демонстрації: це не чиєсь реальне фото.

Куди це врешті потрапляє

телефон EXIF у файлі публікація чужа мапа геолокація camera увімкнена за умовчанням координати їдуть разом із пікселями сайт, месенджер, хмара, флешка точка на карті: де ти живеш exiftool -all= розірвати ланцюжок можна лише тут — до публікації після публікації файл уже скопійований, і прибирати метадані пізно
У 2018 році теплова карта застосунку Strava, зібрана з тренувань користувачів, показала розташування й розпорядок військових баз у кількох країнах — ніхто не публікував жодної адреси, вистачило самих координат.

Редактор EXIF: натисни й подивись, що дізнається сторонній

Ліворуч — картка знімка з полями метаданих. Кнопки внизу роблять із файлом рівно те саме, що зробив би exiftool. «Опублікувати як є» показує, який висновок зробить стороння людина з того, що лишилося.

exiftool IMG_4821.jpg
що бачить сторонній
50.4501, 30.5234 17 травня, 16:42 місце зйомки невідоме

Ті самі дії в терміналі

Усе це ти робиш у себе на комп’ютері, у теці data/lesson-03/. На сервері фотографій немає, тому й чистити там нічого.

подивитися, що всередині
$ exiftool -G1 -a -s IMG_4821.jpg # лише секція GPS — коротко і по суті $ exiftool -gps:all IMG_4821.jpg [GPS] GPSLatitude : 50 deg 27' 0.36" N [GPS] GPSLongitude : 30 deg 31' 24.24" E [GPS] GPSAltitude : 179 m Above Sea Level
прибрати метадані
# лише координати, решта полів лишається $ exiftool -gps:all= -overwrite_original IMG_4821.jpg # усе, що можна прибрати з файлу $ exiftool -all= -overwrite_original IMG_4821.jpg # уся тека одним заходом, лише jpg $ exiftool -all= -overwrite_original -ext jpg .
перевірити, що справді порожньо
$ exiftool -gps:all IMG_4821.jpg # порожній вивід означає, що GPS у файлі більше немає
Дві пастки exiftool Без ключа -overwrite_original програма створює поруч копію IMG_4821.jpg_original — і в ній усі координати лишаються. Якщо потім залити на сервер «усю теку», витік поїде разом із нею. На Windows завантажений архів містить файл exiftool(-k).exe: його треба перейменувати на exiftool.exe, інакше він працює лише подвійним кліком і закривається одразу після виводу.

Скриншот теж не порожній

У PNG-скриншоті EXIF зазвичай немає. Зате зайве в ньому видно очима. Ім’я користувача в шляху до файлу. Вкладки браузера. Сповіщення месенджера. Прізвища у списку чату. Відкрита мапа з твоїм домом.

Саме так дані витікають найчастіше — зі скриншота, надісланого в чат класу.

Ще одна пастка. Ти обрізав фото в редакторі, а в EXIF лишилася мініатюра, зроблена до обрізання. Тобто те, що ти щойно відрізав. exiftool -all= знімає й її. Видалення окремих полів — ні.

Питання

Ти сфотографував робоче місце вдома, щоб показати проєкт. Обличчя в кадрі немає, адреси на фото не видно. Чому таке фото все одно не варто публікувати без обробки?

Питання

Ти запустив exiftool -all= IMG_4821.jpg без ключа -overwrite_original, перевірив файл — метаданих немає — і скинув однокласнику всю теку архівом. Що ти йому надіслав?

Крок 8

Право на приватність: що каже закон

Без юридичної казуїстики — лише те, що змінює твої дії в цьому проєкті

Приватність в Україні захищена не «правилами школи», а Цивільним кодексом і окремим законом. Тобі досить трьох норм.

НормаПро що вонаЩо це означає для твого проєкту
ЦК України, ст. 302
Право на інформацію
збирати, зберігати, використовувати й поширювати інформацію про особисте життя людини без її згоди не дозволено опитування починається з речення «ці відповіді підуть у відкриту інфографіку», а не закінчується ним
ЦК України, ст. 307
Фото-, теле- та відеозйомка
знімати людину можна лише за її згодою; згода припускається, якщо зйомка відкрита на публічному заході; людина може вимагати припинити показ у частині, що стосується її особистого життя однокласник у кадрі — це його рішення, а не твоє; «я вже виклав» не є аргументом, він має право вимагати прибрати
Закон «Про захист персональних даних»
№ 2297-VI, 2010
дає означення персональних даних, вимагає конкретної мети обробки, забороняє збирати надмірні дані й зберігати їх довше, ніж потрібно; людина має право знати, які її дані в тебе є, і вимагати їх видалення колонка «телефон» в опитуванні про улюблений предмет — надмірна за означенням; сирий файл після очищення видаляється, а не лежить «про всяк випадок»

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

Європейський GDPR влаштований за тією ж логікою, але додає одну деталь. Уяви, що ти замінив прізвища на учень_03, а таблиця відповідності лежить у тебе на диску. Це псевдонімізація, і закон такі дані досі захищає. А ось до по-справжньому анонімних даних закон уже не застосовується: людини за ними немає, захищати нічого. Тому мета уроку — довести файл до другого стану, а не до першого.

Чотири правила, які з цього випливають

  1. Мета — перша, дані — другі. Спочатку напиши, який висновок має показати інфографіка. Потім збери рівно ті колонки, без яких цього висновку не буде. Усе інше не збирай узагалі.
  2. Згода до збору, а не після публікації. Учасник опитування має знати, що результат буде публічним, і мати змогу не відповідати.
  3. Мінімум, достатній для висновку. Якщо графік працює на діапазонах віку — точний вік не потрібен нікому.
  4. Сире видаляється. Після того як data.csv зібрано, сирий файл із прізвищами не має жити ані на сервері, ані «в завантаженнях» назавжди.
Питання

Ти сфотографував клас під час відкритого шкільного заходу й поставив фото на сторінку проєкту. Через тиждень однокласниця просить прибрати знімок — їй не подобається, як вона вийшла. Твоя правильна дія?

Крок 9

Три файли, які їдуть на сервер

data.csv, credits.md, anonymize-log.md — і нічого більше

Що по FTP не піде Вихідні фотографії, сирий raw.csv із прізвищами й таблиця відповідності keys.csv залишаються на твоєму комп’ютері. У теку ~/www/infographic/ не потрапляє жодного растрового зображення — це окремий блокуючий критерій. Учитель дивиться сирий датасет і вивід exiftool до та після очищення очно, з твого екрана.

1. data.csv — очищений датасет

Щонайменше 10 рядків даних і 3 колонки. Кома як роздільник, перший рядок — заголовки латиницею без пробілів. Приклад оформлення (числа умовні, свої візьмеш зі свого опитування):

data.csv — приклад оформлення
district,transport,minutes_band,students Центр,пішки,до 15,12 Центр,громадський,15-30,9 Центр,авто,до 15,6 Північ,пішки,до 15,7 Північ,громадський,15-30,14 Північ,велосипед,15-30,5 Північ,авто,15-30,5 Захід,пішки,15-30,8 Захід,громадський,30-45,11 Захід,авто,15-30,6 Схід,громадський,30-45,10 Схід,пішки,15-30,5

Зверни увагу на останню колонку: у жодній групі не менше п’яти осіб. Це і є k = 5 у готовому вигляді. Прізвищ, телефонів, точних адрес і точного віку у файлі немає взагалі — не «замінено на зірочки», а немає.

PowerShell пише UTF-16 Якщо збираєш CSV командою в Windows PowerShell 5.1, звичайне … > data.csv дасть файл у UTF-16, і чекер на сервері прочитає з нього кракозябри. Зберігай явно.
збереження CSV у правильному кодуванні
# Windows PowerShell $ Import-Csv raw.csv | Select-Object district,transport | Export-Csv -Encoding utf8 -NoTypeInformation data.csv # Git Bash, macOS, Linux $ cut -d, -f2,4,5 raw.csv > data.csv

2. anonymize-log.md — що саме прибрано і чому

Головний документ уроку. Щонайменше три перетворення, кожне — рядком «колонка → що зроблено → чому». Запис без «чому» чекер поки не зарахує. Допиши причину й залий файл ще раз — спроби не обмежені. Саме «чому» показує, що ти розумієш ризик, а не копіюєш шаблон.

anonymize-log.md — заготовка
# Журнал анонімізації Джерело: опитування 10A/10B/10C, Google Forms, 98 відповідей. Мінімальний розмір групи в опублікованому файлі: k = 5. | # | Колонка | Що зроблено | Чому | |---|---------|-------------|------| | 1 | ПІБ | видалено колонку | прямий ідентифікатор, для висновку не потрібен | | 2 | Телефон | видалено колонку | надмірні дані: мета опитування їх не вимагає | | 3 | Вік | 15, 16, 17 замінено на діапазони 15-16 і 17-18 | точний вік у парі з класом давав унікальні рядки | | 4 | Вулиця | замінено на район міста | по вулиці з класом упізнавали конкретних людей | | 5 | Час відповіді | 16:42 округлено до "після 16:00" | точна мітка часу відрізняла учасників між собою | | 6 | Групи менші за 5 | злиті в категорію "інше" | правило k >= 5 для публікації | Що НЕ потрапило на сервер: raw.csv (сирі відповіді), keys.csv (таблиця псевдонімів), папка photos/ з вихідними знімками.

3. credits.md — походження і ліцензія

Чекер шукає в цьому файлі слова «джерело» і «ліценз». Але пишеш ти його не для чекера: наступного уроку саме з цього файлу братимуться підписи під діаграмами.

credits.md — заготовка
# Походження даних Джерело: власне опитування учнів 10A, 10B, 10C (Google Forms). Дата збору: 17.05.2026. Зібрано 98 відповідей, опубліковано 12 агрегованих рядків. Ліцензія: CC BY 4.0 — дані можна використовувати з посиланням на цю сторінку. Згода: перед першим питанням форма попереджала, що результати будуть опубліковані у знеособленому вигляді. Анонімізація: прибрано ПІБ і телефон, вік зведено до діапазонів, вулиця - до району, групи менші за 5 осіб злиті. Деталі - у anonymize-log.md. AI-інструменти: Antigravity - генерація каркаса таблиці й перевірка регулярок. Промпт: "склади регулярний вираз для пошуку українських номерів телефону у CSV". Ілюстрації до сторінки на сервер не завантажуються, зберігаються локально.

Перевір себе тими самими регулярками, що й чекер

Одна з перевірок на сервері блокуюча. Вона читає всі три опублікованих файли. Шукає чотири речі: телефон, +380, адресу електронної пошти та запис виду «Прізвище І.П.». У списку критеріїв ця перевірка зветься no_pii. Прожени ті самі пошуки в себе до заливання.

Git Bash, macOS, Linux
$ grep -nE '\+?380[0-9]{9}|0[0-9]{9}|[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' data.csv credits.md anonymize-log.md # порожній вивід — критерій пройдено
Windows PowerShell
$ Select-String -Path data.csv,credits.md,anonymize-log.md -Pattern '\+?380\d{9}|0\d{9}|[\w.%+-]+@[\w.-]+\.\w{2,}'
Регулярка не замінює голову no_pii ловить формати, а не сенс. Колонка «нік у Telegram», «номер кабінету, де сидить лише один учень» чи «прізвище класного керівника» пройдуть усі регулярки світу. Тому останній крок перед FTP — прочитати заголовок свого CSV уголос і на кожній колонці спитати: чи можу я за нею показати пальцем на людину?
Крок 10

Практика: від сирих відповідей до чистого датасету

Кроки 1—11 — у твоєму терміналі й редакторі, крок 12 — заливання по FTP. Галочки зберігаються, сторінку можна закрити.

Межа проходить тут Усе, що з’являється в локальній теці data/lesson-03/, — твоє й лишається в тебе: raw.csv, keys.csv, тека photos/. На сервер піднімаються рівно три текстові файли: data.csv, credits.md, anonymize-log.md.
Крок 11

Автоперевірка

Чекер не знає твого класу. Він читає опубліковані файли й шукає в них те, чого там бути не повинно. Спроби не обмежені.

Демонстраційний режим: результат згенеровано для показу. На сервері ця кнопка викликає POST /api/check, який запускає /opt/lessons/05/check.sh від імені учня.

Що вчитель дивиться на твоєму екрані

Крок 12

Шкала виконання

Це те, що бачить учитель, коли виставляє оцінку.

СкладникВагаРезультат
Виконано
0%
Рекомендований бал за 12-бальною

Чотири речення, які варто запам’ятати

Де найчастіше помиляються

Домашнє завдання

Знайди приклад реального витоку через «анонімізовані» дані. Підійде Netflix Prize, пошукові логи AOL, теплова карта Strava або будь-який інший. Опиши його в credits.md п’ятьма реченнями.

Перше — які дані опублікували. Друге — що до них додали ззовні. Третє — кого й як упізнали. Четверте — чим це закінчилося. П’яте — який висновок ти зробив для власного датасету.

Джерела

Звідки взяті означення й числа

Усе, що на цій сторінці подано як факт, має посилання. Перевіряти дозволено й корисно.

Повний список із поясненнями, що звідки взято, — у файлі urok-05-джерела.md поруч із цією сторінкою.