Числа выглядят правдоподобно, но таблица выросла
Для учебного исследования вы соединили результаты практикумов с журналом выдачи оборудования по коду участника. В исходных таблицах всё читается правильно, названия совпадают, программа не показывает ошибки. Однако вместо пяти строк с результатами получилось девять, а сумма баллов стала больше. Это не обязательно случайные дубли. Одному участнику могут соответствовать несколько практикумов и несколько выдач. При соединении только по участнику возникают все подходящие сочетания, и одно наблюдение начинает повторяться в расчёте несколько раз.
Задача этой статьи — проверить уже выполненное объединение корректно прочитанных таблиц. Мы не будем заново настраивать импорт CSV или восстанавливать написание кодов. Результат аудита состоит в другом: понятно, что обозначает одна строка каждого источника, какие соответствия разрешены и почему полученное количество записей обоснованно. Ниже используется маленький вымышленный набор, который можно разобрать вручную. Порядок применим и к обычной табличной программе, и к программному анализу; важно не название инструмента, а проверяемая связь между данными.
Остановите расчёты и обозначьте подозрительную версию
Сохраните текущий результат отдельно и пометьте, что он ещё не принят. Не удаляйте лишние на вид строки прямо в объединённой таблице: по ним удобно установить причину размножения. Оставьте оба исходника в доступном виде и запишите, какие поля использовались для соединения. Если работу выполнял напарник, попросите показать операцию, а не только итоговый лист. Названия файлов и параметры связи важнее общего объяснения «подтянули оборудование». Иначе повторная сборка может дать другой результат, который снова никто не сможет объяснить.
Найдите, куда уже попала подозрительная таблица. Возможно, по ней построены диаграмма, средний балл и абзац вывода. Эти материалы пока считаются зависимыми от непроверенной версии. Не исправляйте в тексте одно число по ощущению: сначала пересоберите связь, затем обновите все затронутые результаты. Для небольшого проекта достаточно заметки с тремя строками: таблица, рисунок, вывод. Это удерживает границу проверки и не позволяет случайно оставить в презентации красивую диаграмму с прежним удвоением после исправления основного файла.
Завершите фразу «одна строка означает» для обоих источников
В таблице результатов одна строка означает участие конкретного человека в конкретном практикуме. В журнале выдачи одна строка означает отдельную передачу единицы оборудования. Эти определения различаются. Код участника не обязан быть уникальным ни там, ни там. Повторение человека здесь нормально: он посещал несколько занятий и получал несколько предметов. Ошибка возникает, когда обычные повторы соединяют как будто каждому человеку соответствует ровно одна запись. До выбора команды объединения нужно понять, на каком уровне вы хотите получить итог.
Сформулируйте нужную итоговую строку. Если исследование сравнивает результаты практикумов, одна строка по-прежнему должна означать участие человека в одном занятии. Если нужен отчёт о выдачах, строка должна означать передачу оборудования. Если требуется сводка по участнику за весь период, оба источника сначала нужно привести к этому уровню по согласованным правилам. Нельзя получить одновременно все эти смыслы одной операцией, а потом выбрать удобный знаменатель. Определение результата заранее помогает увидеть, какое размножение допустимо, а какое меняет предмет подсчёта.
Разберите девять строк на трёх участниках
В результатах участник А имеет два практикума: первый с баллом восемь и второй с баллом шесть. Участник Б имеет один практикум с баллом семь. Участник В имеет два практикума с баллами девять и пять. Всего пять наблюдений, сумма баллов тридцать пять. В журнале А получил два предмета, Б три, В ни одного. Соединение по одному коду участника с сохранением всех результатов даст для А четыре сочетания, для Б три, для В одну строку на каждый из двух практикумов без найденной выдачи.
Получится девять строк: четыре плюс три плюс две. Эта ручная проверка объясняет рост таблицы через число соответствий, а не через появление новых наблюдений. Баллы А повторятся дважды, балл Б трижды, а два балла В сохранятся по одному разу. Сумма станет шестьдесят пять: двадцать восемь плюс двадцать один плюс шестнадцать. Ни новых практикумов, ни новых успехов не появилось. Изменилось число представлений тех же наблюдений. Полученные шестьдесят пять нельзя описывать как сумму исходных учебных результатов.
Проверьте число соответствий у каждого ключа
Для каждого кода посчитайте количество строк слева и справа. В нашем примере это А: два и два; Б: один и три; В: два и ноль. При совпадении ключа все строки одной стороны сочетаются со всеми строками другой. Для А два умножается на два, для Б один на три. При сохранении левой стороны участник без соответствия остаётся с пустыми правыми полями. Эта короткая ведомость позволяет предсказать размер результата и выделить коды, которые дают наибольший рост, не просматривая сотни строк вручную.
Официальная документация pandas отдельно предупреждает: при связи многих записей с многими повторяющийся ключ создаёт декартово произведение подходящих строк. Там же описаны проверки ожидаемой уникальности связи. Для нашего аудита техническое следствие простое: совпадающий код не выбирает одну «наиболее подходящую» запись автоматически. В табличном интерфейсе уточните поведение конкретной операции по его справке. Функция поиска одного значения и полноценное объединение наборов могут вести себя по-разному, даже если пользователь называет оба действия одинаково — «подтянуть данные по коду».
Решите, какая связь действительно нужна
Связь один к одному означает, что выбранный ключ уникален с обеих сторон. Например, карточка участника и единственная итоговая запись за курс. Связь многие к одному означает, что у участника несколько практикумов, но справа лежит ровно одна карточка с его группой. Тогда повторение сведений о группе в каждой строке занятия ожидаемо. Связь один ко многим может быть правильной для перечня выдач: одна карточка участника разворачивается в несколько отдельных передач. Название связи следует из реальных данных и смысла результата.
Связь многие ко многим тоже не запрещена сама по себе. Она может требоваться, если задача прямо изучает все допустимые сочетания объектов. Но нельзя молча принимать её ради удобной команды и затем считать каждую строку независимым практикумом. В нашем примере отдельная выдача не обязана относиться к каждому занятию того же человека. Для атрибуции оборудования конкретному практикуму нужна подтверждённая связь с ним. Если такой информации нет, итоговая таблица не должна изображать её существование. Отсутствующее соответствие не восстанавливают произвольным совпадением по человеку.
Составной ключ должен отражать настоящую идентичность
Если журнал содержит номер практикума, проверьте возможность связи по двум полям: код участника и код практикума. Такая пара может различить занятия одного человека. Однако сначала проверьте уникальность и смысл пары в обоих источниках. Если на одном практикуме выдавали два предмета, справа всё равно останутся две записи на ту же пару. Составной ключ уточняет соответствие, но не превращает несколько реальных выдач в одну. Запишите ожидаемую связь после выбора полей и снова посчитайте число соответствий на небольшом фрагменте.
Не добавляйте дату лишь потому, что она уменьшила число строк. В один день могли проходить два занятия, а выдача могла быть оформлена накануне. Равно выглядящие даты ещё не подтверждают принадлежность записи. Для временного сопоставления требуется отдельное установленное правило, которого в исходнике может не быть. Спросите автора набора, какой идентификатор связывает события. Если ответ отсутствует, можно подготовить сводку по человеку, но нельзя выдавать её за точное описание использования оборудования в каждом отдельном практикуме.
Агрегируйте правую сторону, если нужен один показатель
Предположим, учебная задача спрашивает, сколько предметов получил каждый участник за весь период, без распределения по занятиям. Тогда журнал можно сначала свести к одной строке на человека: А — две выдачи, Б — три, В — отсутствующая запись в журнале. Эту сводку присоединяют к результатам как характеристику участника за период. В итоговой таблице снова пять строк практикумов. При этом показатель выдач повторится у человека в каждом занятии, и складывать его по всем строкам результатов всё равно нельзя без дополнительного решения.
Важная оговорка касается В. Отсутствие строки в журнале не всегда означает ноль выдач: журнал может быть неполным или охватывать другую площадку. Заменять пустоту нулём допустимо только при подтверждённой полноте источника и таком определении показателя. Запишите основание рядом с правилом сводки. Аналогично сумма, среднее, последнее наблюдение и число записей отвечают разным вопросам. Не выбирайте среднее только потому, что программа предлагает его первым. Агрегация должна сохранять нужный смысл, а её арифметику проверяют отдельно до нового соединения.
Не лечите размножение удалением одинаковых строк
После объединения возникает соблазн нажать «удалить дубликаты». Если в видимых колонках не показан номер предмета, две реальные выдачи могут выглядеть одинаково. Их удаление скроет часть журнала. В другом случае балл практикума повторяется вместе с разными предметами; строки отличаются, и удаление точных дублей вообще не уменьшит ошибочную сумму. Поэтому сначала определите происхождение каждой повторившейся записи, затем исправляйте способ связи. Команда очистки не может сама решить, какое наблюдение вы считаете одним объектом.
Для контроля можно временно сохранить технические метки исходных строк: например, Р1 для первого результата и ВЫД2 для второй выдачи. Тогда видно, что Р1 встречается рядом с несколькими выдачами, а не получен заново. Это вспомогательные метки происхождения, не новые идентификаторы реальных людей. После аудита их можно оставить в рабочем файле для проверки. В сдаваемом представлении используйте состав полей, который требует задание, но сохраните возможность объяснить, из какой пары исходных записей возникла конкретная итоговая строка.
Проверьте записи, которые не нашли пару
Соединение с сохранением левой стороны оставляет все левые наблюдения, даже если справа ничего не найдено. Внутреннее соединение оставляет только совпавшие. Для нашего примера внутренний вариант уберёт оба практикума В и даст семь строк вместо девяти. Размер станет меньше, но проблема размножения А и Б сохранится. Поэтому уменьшение числа записей не доказывает исправление. Отдельно посчитайте исчезнувшие наблюдения и повторившиеся: они могут частично компенсировать друг друга и создать правдоподобный общий итог.
Посмотрите также записи справа, которым не нашлось места слева. Возможно, журнал охватывает участников другого практикума или более длинный период. Не переносите их автоматически в итог, если они вне учебного вопроса. Но и не скрывайте расхождение: обозначьте охват двух источников и правило включения. В pandas для проверки происхождения соответствий предусмотрен параметр indicator; конкретный синтаксис берите из документации своей версии. При ручной работе тот же результат можно получить отдельными списками совпавших и несопоставленных ключей, не переписывая исходные записи.
Принимайте таблицу по нескольким независимым проверкам
После пересборки проверьте количество строк на нужном уровне, уникальность ожидаемого ключа, сохранение выбранных исходных значений и список отсутствующих соответствий. В нашем варианте с одной правой сводкой на участника должны остаться пять практикумов и исходная сумма баллов тридцать пять. Найдите А и убедитесь, что восемь и шесть не размножились. Найдите Б и проверьте, что семь встречается один раз. Затем рассмотрите В и подтвердите, что отсутствие выдачи отражено по согласованному правилу, а не потеряно вместе с его занятиями.
Проверьте также намеренный повтор: у А действительно два занятия, поэтому две строки с его кодом нужны. Если итог внезапно имеет только три строки по людям, значит, вы сменили уровень наблюдения. Возможно, такая сводка полезна для другой задачи, но она не заменяет таблицу практикумов. Контроль должен обнаруживать и лишнее размножение, и чрезмерное схлопывание. Попросите напарника объяснить одну итоговую строку обычными словами. Если он не понимает, относится ли показатель к занятию или человеку за период, уточните подпись до дальнейших вычислений.
Проверьте повторное получение данных как отдельный сценарий
Допустим, в следующей выгрузке появилась вторая карточка участника Б. В одной указана прежняя группа, в другой новая. Раньше справа была одна строка на человека, теперь ожидаемая связь многие к одному нарушена. Автоматическое объединение может снова увеличить число практикумов, хотя исходные результаты никто не менял. Поэтому правило уникальности проверяют при каждой новой сборке. Нельзя просто взять первую карточку по порядку строк: порядок выгрузки не устанавливает, какая группа действовала в момент занятия. Для исторического соответствия потребуется дата действия записи либо уточнение автора набора.
Если задача использует только текущую группу, сформируйте подтверждённый текущий справочник и укажите этот смысл в описании. Если нужна группа на момент практикума, текущая карточка не заменяет историю. Такой случай не исправляется удалением дубля без объяснения. Запишите, какие сведения позволяют выбрать запись, а какие остаются неизвестными. После согласованного решения повторите прежние проверки: пять наблюдений, сумма тридцать пять, одна характеристика справа на выбранный ключ. При этом правильные контрольные числа ещё не доказывают содержательную точность группы: её основание проверяют отдельно по источнику.
Сохраните правило связи рядом с учебным набором
В коротком описании укажите два источника, смысл строки каждого, выбранные поля, ожидаемую связь, предварительную сводку и способ обработки несовпадений. Добавьте контрольные числа до и после. Не требуется журнал каждого щелчка: нужен способ повторить результат и заметить нарушение ожиданий при следующей выгрузке. Если работа ведётся в коде, используйте доступную проверку уникальности связи вместо молчаливого принятия любого результата. Если интерфейс такой проверки не предоставляет, сохраните отдельный подсчёт повторений ключа перед объединением.
Учебные пояснения и разрешённые к хранению файлы можно собрать в папке предмета в Prepodoff. Зарегистрируйтесь, если вам удобно держать описание связи рядом с материалами практикума. Само объединение выполняйте в выбранном табличном или аналитическом инструменте: библиотека материалов не проверяет соответствия строк. После приёмки пересчитайте зависимые рисунки и выводы по новой таблице. Итог работы — не просто меньший файл, а объяснимый набор, в котором каждое повторение имеет установленный смысл и не превращает одно наблюдение в несколько мнимых результатов.






























































































































































































































































































































































