R - прекрасный язык для Data Science
Обычно, когда я пишу очередной пост в своем блоге, я не вставляю туда код, потому как исхожу из того, что аналитикам и маркетологам важнее новые идеи и возможные инсайты.
И вот недавно крутой маркетолог и аналитик Alexey Kulichevsky сделал большую и интересную шпаргалку (ссылка на пост с оригинальным кодом) для аналитиков про Python. Я зачитывался блогом Леши еще в далеком 2013 году и могу с уверенностью сказать, что он один из немногих, на кого я равнялся.
Леша, проделал отличную работу показывая основные конструкции на Python, которыми аналитик будет оперировать на ежедневной основе. И мне пришла в голову идея показать, как задачи описанные Лешей, можно было решить на R.
Прежде, чем мы начнем я сразу скажу, что фактически существует два мира R:
Есть еще несколько способов, но это наиболее удобные.
Хотя возможно более интересно было бы узнать не только Топ5 городов по продажам в 2016 году, но также показать самый большой заказ в каждом таком городе в этот период:
Резюме
И вот недавно крутой маркетолог и аналитик Alexey Kulichevsky сделал большую и интересную шпаргалку (ссылка на пост с оригинальным кодом) для аналитиков про Python. Я зачитывался блогом Леши еще в далеком 2013 году и могу с уверенностью сказать, что он один из немногих, на кого я равнялся.
Леша, проделал отличную работу показывая основные конструкции на Python, которыми аналитик будет оперировать на ежедневной основе. И мне пришла в голову идея показать, как задачи описанные Лешей, можно было решить на R.
Прежде, чем мы начнем я сразу скажу, что фактически существует два мира R:
- классический
- современный, который строится на философии и наборе библиотек tidyverse
Я никогда не писал на классическом R, так как мне он НЕ кажется выразительным, компактным и быстрым.
Также я отмечу, что намного удобнее работать с R не в командной строке, а в среде разработки RStudio и я пишу R код только там.
Загрузка данных
В конце шпаргалки есть ссылки на два файла на которых Леша делал демо.
Чтобы прочитать .csv файл нам нужна функция read_csv() из пакета readr. Функция умеет читать файл как с диска вашего компьютера, так и по URL-адресу, чем мы и воспользуемся.
Эта функция имеет эвристику, которая сама определяет типы данных и выводит их после парсинга файла. Это и удобно и важно, т.к. если у вас в какой-то из колонок есть микс цифр и текстовых значений, то эта функция подскажет вам, что колонка распарсилась как текстовая и вы сможете исправить парсинг до начала анализа данных.
reader::read_csv() |
Если ваш .csv файл содержит другой разделитель, то на ваш выбор есть такие варианты:
- read_tsv() - для парсинга текстового файла с разделителем TAB;
- read_csv2() - для парсинга текстового файла с европейской локалью (`;` - разделитель колонок и `,` - разделитель дробной части).
Если же у вас какой-то особый случай, вы можете вызвать более низкоуровневую функцию read_delim() и прочитать любой нестандартный текстовый файл с любым разделителем.
Ну и конечно, если вам нужно прочитать Excel файл, вы легко можете это сделать используя функцию read_excel().
Просмотр прочитанных данных
После того как мы прочитали файл, данные из него сохранились в специальный тип данных tibble (это модернизированный data.frame который используется в классическом R).
Просмотреть данные из него можно разными способами:
- кликнуть на название переменной в панели Environment и увидеть данные в отдельной вкладке;
- нажать Ctrl-Enter и увидеть данные сразу под снипетом R кода;
- набрать в консоли RStudio название переменной (мы прочитали данные в переменную orders) и увидеть данные там;
Выберем тот способ, который наиболее близок по смыслу в команде, которую использовал Леша.
tibble::print() |
Tibble это современный и умный data.frame.
- он подсказал нам размерность этой таблицы;
- вывел названия всех колонок;
- дал нам информацию о типах каждой колонки;
- подчеркнул тысячи для колонки id;
- выровнял все колонки по левому краю;
- показал нам только лишь первые 10 строк (вместо того, чтобы замусорить нашу консоль 5 тысячами строк);
- округлил при принтинге значения колонки sales (чем больше значение, тем меньше нас интересует дробная часть после точки);
Если нам потребуется отдельно
- получить название колонок, то можно использовать команду names();
- узнать размерность таблицы, мы можем использовать команду dim();
- посмотреть первые 6 строк таблицы, мы можем использовать команду head();
- посмотреть последние 6 строк таблицы, мы можем использовать команду tail().
Операции в tibble
Очевидно возможности работы с данными должны быть самой ценной и критической частью для аналитика. И здесь пакеты dplyr и ggplot2 показывает все элегантность современного R.
Если мы хотим доступиться к какой-то колонке tibble (data.frame), то обычно мы пишем так: orders$sales (используем знак `$`).
Однако, когда вы работаете в dplyr, вам не обязательно указывать таблицу$колонка. Пакет dplyr сам понимает контекст таблицы, а вы фокусируетесь на самом анализе.
Если вы хотите отфильтровать колонки, то просто воспользуйтесь командой select().
dplyr::select() |
Если вы хотите отфильтровать строки, то просто воспользуйтесь командой filter().
dplyr::filter() |
Если вы хотите сделать агрегацию таблицы, то просто воспользуйтесь командой summarize() для агрегации данных и group_by() для группировки данных.
dplyr::group_by() and dplyr::summarize() |
Леша давал пример, когда нужно было посчитать Топ10 самых прибыльных дней по продажам:
dplyr:: group_by(), summarize(), top_n(), arrange() |
Хотя, на мой взгляд интереснее было бы посмотреть Топ10 дней по продажам, сохранив сортировку по дате.
Так мы могли бы понять, что происходит с нашими топовыми продажами во времени: растут они или падают:
dplyr:: group_by(), summarize(), top_n() |
Так как смотреть на динамику во времени намного удобнее на графике, давайте быстро построим такой график (как видите, для отрисовки графика мы дописали всего 2 строчки кода):
dplyr + ggplot2 |
Теперь давайте обогатим нашу таблицу заказов, добавив к каждому заказу информацию о клиенте:
Ну и напоследок решим Лешину задачу - найти Топ5 городов, принесших самую большую выручку в 2016 году:
dplyr in action |
Хотя возможно более интересно было бы узнать не только Топ5 городов по продажам в 2016 году, но также показать самый большой заказ в каждом таком городе в этот период:
dplyr + tidyr + purrr in action |
Резюме
Надеюсь это краткое интро в мир современного R (tidyverse) позволит вам оценить лаконичность и эффективность анализа данных на R.
P.S. Машинное обучение не рассматривалось т.к. его не было в исходной шпаргалке по Python.
P.S. Машинное обучение не рассматривалось т.к. его не было в исходной шпаргалке по Python.
http://smysl.io/data/pandas/orders.csv посилання на дані для зручності копіювання, в тексті не знайшов просто. І хотілось б більше таких розборів і прикладів з кодом)
ReplyDeleteДякую дуже!