Отчёт об аномалиях

Скачать ANOMALIES.md

Всего найдено 31 инцидент. Методология: автоматизированный ETL-скрипт анализирует JSON и review.csv, проверяет типы полей, диапазоны, пересечения ID, кодировку и сдвиг колонок.

1. review.csv — это не отзывы, а те же компании

Высокая

Колонки совпадают с JSON (id, name, category, city, address, rating, reviews_count, site, phone). Никаких полей «текст отзыва» или «дата» нет.

2. Пустые строки (2 шт.)

Низкая

Строки в конце CSV, где все 9 полей пусты. Отфильтрованы на этапе загрузки.

3. Дубликаты ID (9 шт.)

Средняя

Пересечение JSON ↔ CSV (6 ID): c_000098, c_000246, c_000263, c_000425, c_000769, c_000851. Внутренние дубликаты CSV (3 ID): c_001049, c_001050, c_001075 — встречаются по 2 раза с идентичными данными.

4. Невалидный рейтинг (4 шт.)

Высокая
IDПроблемаДействие
c_001083Текст N/A вместо числа→ NULL
c_001010Запятая 4,5 вместо точки (локаль)→ 4.5
c_001122Отрицательный рейтинг -3→ NULL
c_001186Вне диапазона 1–5: 7.2→ NULL

5. Невалидное число отзывов (3 шт.)

Высокая
IDПроблемаДействие
c_001116Отрицательное (-10)→ NULL
c_001079Не целое (45.5)→ NULL
c_001187Текст «много» вместо числа→ NULL

6. Сдвиг колонок (1 шт.)

Высокая

ID c_001015: поле category содержит «Пермь» (название города), city — адрес. Категория потеряна. Обнаружено по несовпадению с известными категориями.

7. Варианты написания городов (5 шт.)

Низкая

«Москва», «москва», «Moscow», «Москва » (с пробелом) → нормализованы в «Москва». «Санкат-Петербург» (опечатка) → «Санкт-Петербург».

8. Mojibake — битая кодировка UTF-8 → CP1251 (3 поля)

Высокая
IDПолеБылоСтало
c_001008nameРћРћРћ «Заря Тех»ООО «Заря Тех»
c_001128nameРћРћРћ «Темп Медиа»ООО «Темп Медиа»
c_001128cityСанкт-ПетербургСанкт-Петербург

9. Запись с id вне диапазона

Низкая

ID c_900010 («Модуль Строй», Ростов-на-Дону). ID с префиксом c_9xxxxx вместо c_001xxx. Данные валидны — оставлена как есть.

10. Пустая строка вместо NULL

Низкая

В JSON отсутствующие значения используют null, в CSV — пустые строки. Приведены к единому представлению (NULL).

11. Текстовая заглушка в site вместо URL (1 шт.)

Средняя
IDПроблемаДействие
c_001064«нет сайта» вместо URL→ NULL

12. Опечатка в протоколе URL (1 шт.)

Низкая
IDПроблемаДействие
c_001020htp:// вместо http://→ NULL

13. Подозрительный site: одинаковый URL у разных компаний (2 шт.)

Средняя

c_001135 (ООО «Дельта Про», Москва) и c_001088 (ООО «Вертикаль Тех», Краснодар) используют один сайт https://shared-site.ru. Возможно, тестовый домен.

14. Невалидный номер телефона (2 шт.)

Средняя
IDПроблемаДействие
c_001004Буквы в номере: 8 (925) abc-12-34→ NULL
c_001091Слишком короткий: +7→ NULL

Что НЕ нашлось (дополнительные проверки)

  • Prompt injection / SQL injection— проверены текстовые поля на ключевые слова (DROP, ignore, <script>), управляющие символы, аномально длинные строки — ничего не найдено.
  • Двойные кавычки — строка c_001145 содержит ООО «Ромашка» (экранированные кавычки в CSV) — корректно обработано парсером csv-parse.

Методология

Автоматизированный ETL-скрипт (scripts/load_data.ts) анализирует все JSON-файлы и review.csv. Каждая строка CSV проходит валидацию: типы полей, диапазоны значений, пересечение ID с JSON-базой, управляющие символы, паттерны mojibake, сдвиг колонок.