[МУЗЫКА] [МУЗЫКА] [МУЗЫКА] В этом видео мы поговорим о том, как не создавать проблем себе и другим людям. Давно подсчитано, что на подготовку данных к анализу у аналитиков уходит до 80 % времени. Если бы вы только знали, что порой приносят люди, желающие обработать свои данные. Мы еще поговорим об основных ошибках, которые такие люди совершают, подготавливая данные к анализу. Ну, и вместе с тем существуют определенные правила предоставления данных, которые, конечно, надо держать в голове, и данные, построенные в соответствии с такими требованиями, еще называют tidy data, или «опрятные данные». Как правило, основные проблемы порождаются уже на этапе набивки данных в электронных таблицах. Вот почему, собственно, Excel в этом отношении не совсем хорош, потому что он позволяет любые вольности. И вот, соответственно, вот эти широкие оформительские возможности, которые подразумевают программы типа Excel, как раз очень часто создают такие проблемы. Здесь можно создать таблицу любой красоты и сложности, но именно это и мешает создавать tidy data. Вот наиболее частые ошибки, которые допускают создатели таблиц с данными, следующие. Вот на этом слайде я привел специально такую картинку, которая включает практически все возможные ошибки, которые допускают люди, приносящие данные, которые не соответствуют требованиям опрятных данных. Прежде всего это объединенные ячейки. Это вообще не допустимая вещь в любых базах данных и в тех данных, которые требуют дальнейшей обработки. Единственное место, где объединенные ячейки приемлемы — это финальные красивые таблицы с итогами работы. Но никакие таблицы, никаких таблиц вот с первичными данными, не должны включать объединенные ячейки. Это совершенно запрещенная вещь. Следующая распространенная ошибка — это отсутствующие заголовки столбцов. Вместо них стоят какие-то числа, или ничего не стоит, или слишком длинные имена каких-то заголовков. Короче говоря, заголовки могут стоять в самых разных местах, и это очень часто является огромной проблемой при дальнейшей обработке данных. Этого тоже надо избегать. Бывает, что автор в тех или иных данных в одну ячейку вмещает несколько разных значений, и бывает, что в пределах одного столбца находятся разные типы величин. Вот проанализируйте эту таблицу, которая здесь приведена, и вы здесь увидите некоторое количество таких примеров. Мне кажется, некоторые авторы не используют какого-то стандартного обозначения пропущенных значений, но в каком-то случае написано, что нет данных, где-то просто прочерк стоит, где-то стоит пустая строчка или просто ячейка. Соответсвенно, вот посмотрите на этого монстра, которого я привел на данной картинке. Здесь вы можете увидеть все возможные ужасы, которые могут порождать люди, не знакомые с правилами оформления опрятных данных. Если вы думаете, что это выдумка, то вы ошибаетесь. В этой выдумке есть часть правды. Довольно часто мне приходят такие варианты набивки данных, которые, так сказать, вполне соответствуют тому монстру, который здесь приведен. Но об ошибках, которые создают проблемы для работы с данными, можно говорить бесконечно долго. Это больная тема для любого аналитика. Давайте лучше опишем, как должны быть действительно оформлены эти данные. Для этого давайте введем некоторые важные понятия. Данными, или Dataset, называется такой набор значений, который называется Values по-английски, количественных или текстовых, или логических. При этом каждое значение принадлежит какой-то определенной переменной, которая называется Variable, и какому-то определенному наблюдению, которое называется Observation. При планировании структуры Dataset, а это очень важный этап — надо продумать то, как будет устроен Dataset в дальнейшем при набивке, надо помнить, что проще работать с колонками как с единым целым, чем со строками, поэтому удобно, когда в таблице столбцы — это переменные, а строки — это наблюдения. Соотвественно, каждая переменная имеет имя, которое является заголовком столбца. Далее, строки (или наблюдения) именовать можно, но совершенно не обязательно. Важно, что если строки имеют имя, то оно должно быть уникальным, то есть оно отличаться должно от всех остальных строк хотя бы номером. Поэтому, если вы в качестве имен строк указываете какие-то текстовые величины, эти текстовые величины должны быть уникальны для каждой строки. Каждая переменная должна содержать только один тип данных, то есть если у вас какая-то колонка посвящена текстовым переменным, то здесь должны быть только текстовые переменные, в другой колонке если количественные данные — только количественные данные. Все значения одной переменной должны быть измерены в одинаковых единицах. Например, для всех наблюдений измерение сделано в сантиметрах, и не было такого, чтобы в одном наблюдении сантиметры, в другом — миллиметры, в третьих — метры. Этого быть не должно. Далее, важный момент. Пропущенные значения должны маркироваться единообразно. Например, это будут просто пустые ячейки или, что более правильно, можно использовать сочетание NA, которое означает not available, которое является принятым в среде R обозначением пропущенных значений. Соблюдать эти правила очень просто — надо только подумать, как свои данные представлять в опрятном виде. Если эти данные представлены в таком вот виде tidy data, то далее, загрузив их в R, можно как угодно преобразовывать эти данные. Это называется управлением данными. Так что надо стремиться к тому, чтобы ваши данные были представлены в таком виде, виде dity data. Значит, в среде R есть целый арсенал средств, которые позволяют управлять данными. Вот несколько удобных пакетов, которые позволяют преобразовывать данные. Это пакеты reshape2, dplyr, tidyr. Все эти пакеты позволяют очень легко и логично переходить из одной формы записи данных к другой, и мы этими пакетами будем пользоваться. Так вот одной из рутинных операций в управлении данных является преобразование так называемого широкого формата в так называемый длинный формат и из длинного формата в широкий формат. Вот так вот что это за длинный и широкий форматы такие? Так вот, часто одни и те же данные можно представить в двух вариантах. Широкий формат — это формат, при котором каждая строка содержит информацию о нескольких наблюдениях. И длинный формат — когда каждая строка содержит информацию об одном-единственном наблюдении. Вот эти два формата надо уметь превращать один в другой. Так вот, данные о погибших на «Титанике» мы можем попытаться представить как в широком, так и в длинном формате. Соответственно, прочитав файл, мы уже это умеем делать с помощью функции read.table, мы видим, что полученные в нашем случае данные — это типичный широкий формат. Широкий формат удобнее для чтения и презентации данных в табличном виде, но он сложнее для обработки данных, поэтому для целого ряда анализов целесообразно перевести широкий формат в длинный. Так вот, поскольку методов перевода из широкого в длинный формат довольно много, про это можно прочитать отдельную лекцию. Мы покажем лишь один пример, который применим для данного конкретного случая. Вот здесь в широком формате представлены частоты, которые показывают то, сколько человек определенного возрастного, полового и социального статуса погибли, но для представления в длинном формате каждая строка должна характеризовать элементарный объект. В данном случае это отдельный человек. Так вот, с помощью функции uncount мы можем, которая находит функцию uncount — это функция из пакета tidyr, мы можем преобразовать вот этот широкий формат в длинный. Для этого мы должны указать, что частоты, или weights, находятся в переменной Freq. Соответственно, это позволит нам перейти от широкого формата к длинному, который несомненно будет иметь гораздо большее количество строк, но теперь каждая строка содержит информацию только об отдельном человеке. Вот дальше такой формат данных гораздо удобней для частотного анализа и многих других анализов, которые необходимо производить с данными.