R - прекрасный язык для Data Science

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Обычно, когда я пишу очередной пост в своем блоге, я не вставляю туда код, потому как исхожу из того, что аналитикам и маркетологам важнее новые идеи и возможные инсайты.

И вот недавно крутой маркетолог и аналитик 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

Теперь давайте обогатим нашу таблицу заказов, добавив к каждому заказу информацию о клиенте:

dplyr::left_join()

Ну и напоследок решим Лешину задачу - найти Топ5 городов, принесших самую большую выручку в 2016 году:

dplyr in action

Хотя возможно более интересно было бы узнать не только Топ5 городов по продажам в 2016 году, но также показать самый большой заказ в каждом таком городе в этот период:

dplyr + tidyr + purrr in action

Резюме

Надеюсь это краткое интро в мир современного R (tidyverse) позволит вам оценить лаконичность и эффективность анализа данных на R.

P.S. Машинное обучение не рассматривалось т.к. его не было в исходной шпаргалке по Python.


Источник: ecommerce-in-ukraine.blogspot.com

Комментарии: