dplyr — легкая работа с данными

Сегодня опишу пакет dplyr, после изучения которого, манипуляции с данными упростятся до безобразия. Велосипед изобретать не буду и использую существующие статьи 1 и 2 по той же теме. Вот еще и на русском. Все гениальное просто, поэтому почти возможные варианты работы пакета базируются на нескольких функциях. Основные из них:
Select() выбирает заданные столбцы;
Filter() отбирает желаемые строки;
Arrange() сортирует строки в заданном порядке;
Mutate() создает новые столбцы из существующих данных;
Summarise() находит интересующие значения.

Установим собственно пакет, если еще не сделали этого
install.packages("dplyr")
И загрузим его
library(dplyr)
Воспользуемся данными о качестве воздуха в Нью-Йорке, измеренными в период с май по сентябрь далекого 1973 года
library(datasets)
Посмотрим на данные
head(airquality)
Ну данные как данные, ничего особенного
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6

Смысл понятен, но информацию о данных в более удобоваримом виде можно получить используя функцию dplur glimplse(). Команда транспонирует данные (поменяет местами строки и столбцы) и укажет количество наблюдений и переменных.
glimpse(airquality)
Вот так это всё выглядит
Observations: 153
Variables: 6
$ Ozone (int) 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, 18, 14, 34, 6, ...
$ Solar.R (int) 190, 118, 149, 313, NA, NA, 299, 99, 19, 194, NA, 256, 290, 274, 65, ...
$ Wind (dbl) 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6, 6.9, 9.7, 9.2...
$ Temp (int) 67, 72, 74, 62, 56, 66, 65, 59, 61, 69, 74, 69, 66, 68, 58, 64, 66, 5...
$ Month (int) 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ...
$ Day (int) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20...

Select
Теперь перейдем к функционалу вышеуказанных команд. Начнем с отбора нужной нам информации, отфильтруем, так сказать, ненужное. Функция select() выберет требуемые столбцы. Она работает также, как и базовая команда subset(), однако включает в себя удобные подфункции contains(), starts_with() и ends_with(), которые облегчают определение и выбор желаемых столбцов.
Выберем только столбцы со скоростью ветра и днём
select(airquality, Wind, Day)
В этом и следующих двух примерах для компактности я покажу только первые три строчки результата.
Wind Day
1 7.4 1
2 8.0 2
3 12.6 3

Выберем все столбцы, имена которых содержат латинскую «o»
select(airquality, contains("o"))
Ozone Solar.R Month
1 41 190 5
2 36 118 5
3 12 149 5

Посмотрим на столбцы, имена которых начинаются с «Oz»
select(airquality, starts_with("Oz"))
Мы-то догадываемся, что в результате будет только столбец с концентрацией озона
Ozone
1 41
2 36
3 12

Filter
Продолжим отбирать интересующую нас информацию. Функция filter() оставит только строки, которые соответствуют заданным условиям. Ну например, выберем все наблюдения, когда температура поднималась выше 92 градусов по фаренгейту.
filter(airquality, Temp > 92)
Получаем
Ozone Solar.R Wind Temp Month Day
1 NA 259 10.9 93 6 11
2 76 203 9.7 97 8 28
3 118 225 2.3 94 8 29
4 84 237 6.3 96 8 30
5 85 188 6.3 94 8 31
6 73 183 2.8 93 9 3
7 91 189 4.6 93 9 4

Приятно, что условия можно комбинировать как душе угодно. Вот хочется мне узнать, когда в июне значения измеренной солнечной радиации превышали 300 Лэнгли. Да проще некуда
filter(airquality, Month == 6 & Solar.R > 300)
Такая картина вырисовывается
Ozone Solar.R Wind Temp Month Day
1 39 323 11.5 87 6 10
2 NA 332 13.8 80 6 14
3 NA 322 11.5 79 6 15

Arrange
Функция arrange() отсортирует данные по переменным. Можно сортировать сразу по нескольким параметрам, а также в порядке возрастания или убывания. Для примера расположим наблюдения по месяцам по убыванию и дням по возрастанию.
arrange(airquality, desc(Month),Day)
В результате (только первые 5 строк)
Ozone Solar.R Wind Temp Month Day
1 96 167 6.9 91 9 1
2 78 197 5.1 92 9 2
3 73 183 2.8 93 9 3
4 91 189 4.6 93 9 4
5 47 95 7.4 87 9 5

Mutate
Переходим к моей любимой команде mutate(), которая позволяет добавлять новые переменные (столбцы). Добавим столбец с температурой в цельсиях, который назовем TempInC
mutate(airquality, TempInC = (Temp - 32) * 5 / 9)
Легко и просто (опять покажу только первые 5 строк результата)
Ozone Solar.R Wind Temp Month Day TempInC
1 41 190 7.4 67 5 1 19.44444
2 36 118 8.0 72 5 2 22.22222
3 12 149 12.6 74 5 3 23.33333
4 18 313 11.5 62 5 4 16.66667
5 NA NA 14.3 56 5 5 13.33333

Summarise
Функция summarise() позволяет получить быстрое представление о всех данных в одном значении, например, посчитать среднее арифметическое. В комбинации с командой группировки данных group_by() можно легко находить интересующие значения для группированных данных. Простой пример: посчитаем среднюю температуру в каждом из месяцев.
summarise(group_by(airquality, Month), mean_monthly_temp=mean(Temp, na.rm = TRUE))
na.rm = TRUE просто не учитывает все отсутствующие данные при расчете среднего. В итоге имеем
Month mean_monthly_temp
(int) (dbl)
1 5 65.54839
2 6 79.10000
3 7 83.90323
4 8 83.96774
5 9 76.90000

В рамках summarise() помимо нахождения среднего арифметического, можно использовать и другие команды, возвращающие скалярные значения, например min(), max(), sum(), sd(), median().

Pipe
Оператор %>% позволяет совершать последовательные операции без сохранения промежуточных результатов. Допустим, мы хотим увидеть, какая максимальная температура в градусах цельсия была зарегистрирована в летние месяцы.
airquality %>%
filter(Month == c(6,7,8)) %>% #оставляем только летние месяцы
mutate(TempInC = (Temp - 32) * 5 / 9)%>% # считаем температуру в градусах цельсия
group_by(Month) %>% # группируем по месяцам
summarise(max_temp_C = max(TempInC, na.rm = TRUE)) # находим максимальное значение температуры для каждого из летних месяцев

В итоге получаем
Month max_temp_C
(int) (dbl)
1 6 33.33333
2 7 31.66667
3 8 36.11111

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

Я постарался коротко изложить основные моменты работы с dplur, думаю, они будут очень полезны для начинающих. Конечно же, в пакете присутствуют и другие команды, но для одного поста достаточно.

Немного об R

Начинать новый блог влом, тем более, что есть и доменное имя и желание сохранить информацию про Японию на существующем хостинге, да и потренироваться немного в писанине.
В общем, попробую здесь сделать переводы некоторых статей о языке R и, вероятно, привести примеры своих работ в программе Rstudio. Начинать с самых азов не буду, уже кое-какие материалы о базовом функционале легко ищутся в гугле. Ну вот, например, R: Анализ и визуализация данных, есть даже книга.
Да и вообще, много чего можно найти интересного. Я опишу относительно недавние приложения, что может помочь в нелегком деле анализа данных товарищам со слабым английским. Да-да, R активно развивается, и, что абсолютно естественно, проще любую информацию найти на басурманском, чем на нашем родном языке.
Возможно, уверенные пользователи R не найдут ничего нового в последующих статьях, однако, для новичков даже подобная информация может быть полезной.

Хирошима и Миядзима

Выходные получились насыщенными: удалось наконец побывать в Хирошиме, а также наведаться на Мияджиму, которая на самом деле называется Ицукусима. Не знаю, как правильно писать и произносить: Хиросима или Хирошима, Миядзима или Мияджима. Нас тут учат говорить Ш и Ж, когда как в русских источниках светятся С и З, соответственно. Ну не суть. Остановлюсь на варианте с шипящими.
В Хирошиме я не просто пинал, а съездил с целью — участие в небольшой уютной конференции, посвященной различным вопросам изучения подземных вод и не только. Таким образом, удалось совместить приятное с полезным.
Пятница, утро, путешествие начинается. На Шинкансене из Окаямы до университета Хирошимы — всего-то около часа пути. Однако, стоит заметить, что университет Хирошимы расположен в достаточной удаленности от самого города, примерно 80 км.
Кадры любого туриста, чо

Погода не сильно в пятницу радовала, зато не жарко. В следующие два дня распогодилось, и было солнечно.
Пройтись немного по кампусу университета, напоминающий парк, всегда интересно
IMG_1291.JPG

Ну и с умным видом посидеть тож надо уметь
IMG_1292.JPG

Я на фоне студентоты. Кажется, будто среди восьмиклассников, не правда ли?
IMG_1294.JPG

Конференция длилась всю пятницу и утро субботы. Результат: отзывы о трудах, полезные советы и новые хорошие знакомы из числа научных сотрудников местного университета.
После окончания научной движухи, сразу же тронулись в Хирошиму: надо ж посмотреть, как там и что.

Хирошима понравилась.
Если кто не в курсе, в августе 1945 года несущие демократию решили устроить экстерминатус на территории Японии, а конкретнее в Хирошиме, посредством сброса атомной бомбы, пытаясь склонить неуступчивых сушиедов к завершению войны. Вторая бомба через пару дней прилетела в Нагасаки. Метод сработал: война закончилась, и все бы ничего, если бы не стёртый с лица земли город и около 200000 в общей сложности погибших людей. 200000, Карл.

Город выглядит свежо, приятно и интересно. Атмосфера располагает чтоль, сложно объяснить. Вот так бывает, приехал — и прям в своей тарелке.
IMG_1295.JPG

IMG_1296.JPG

Самое популярное здание в Хирошиме. Благодаря инженерному таланту архитектора, не развалилось от взрыва бомбы, хотя находилось очень близко к эпицентру. Купол сохранили нетронутым после взрыва, как напоминание о том, чего больше не стоит делать человечеству.
IMG_1297.JPG

IMG_1298.JPG

Еще памятники жертвам бомбардировок
IMG_1301.JPG

IMG_1299.JPG

IMG_1302.JPG

Ну, довольно о грустном. В субботу в Хирошиме был праздник, поэтому можно было наблюдать девушек в юкатах — такое летнее кимоно. Да и вообще много людей на улицах.
IMG_1303.JPG

Очень много
IMG_1304.JPG

IMG_1305.JPG

Переночевать планировалось в хостеле рядом с Мияджимой, в 40 минутах езды на поезде от Хирошимы, чтобы на следующий день осмотреть этот популярный остров. Хостел приятно удивил: уже с его крыши можно было спокойно наблюдать плывущие над водой тории или ворота святилища Ицукусимы, посмотреть на которые съезжаются отовсюду.

IMG_1306.JPG

В общем, на паром скорее!
IMG_1307.JPG

IMG_1308.JPG

Остров, действительно, необычный. Сойдя с парома, сразу натыкаешься на местных обитателей. Олени скромностью не отличаются и хватают все, что только можно и пытаются жевать. Бумагу, например. А если увидят еду! Не отстанут уж никогда.
IMG_1309.JPG

Местные блюстители правопорядка
IMG_1310.JPG

Народу тож не мало, суббота ж
IMG_1311.JPG

Везде праздник, в общем
IMG_1313.JPG

Тории являются неофициальным символом Японии. Ныне существующие красные ворота высотой 16 метров были построены из камфорного дерева в 1875 году. Во время прилива море затапливает сушу до самого Святилища. Спасибо Википедии. Мы как раз-то подъехали во время прилива.
IMG_1314.JPG

IMG_1317.JPG

Можно и другие достопримечательности осмотреть
Пагода Годзю-но, хороша
IMG_1316.JPG

Везде эти олени

IMG_1318.JPG

Мне очень понравился храм Дайшо-ин
IMG_1319.JPG

IMG_1320.JPG

IMG_1321.JPG

IMG_1322.JPG

IMG_1323.JPG

IMG_1324.JPG

Как насчет группового фото с оленями?
IMG_1325.JPG

IMG_1326.JPG

Хочется приехать еще раз.

Окинава. Дождливая поездка в самую южную часть Японии

А Гонконг все откладывается и откладывается на потом. Чую, сил и желания писать о нем все убавляется и воспоминания проходят 🙂 Сегодня — об Окинаве. Необычная префектура, в состав которой входят несколько островов, находится в достаточной удаленности от основной Японии, в двух часах полета от Осаки, например. Мне удалось посетить только главный остров — Окинава, маленькие, но, по слухам, очень красивые островки оставлены на «как-нибудь в другой раз». Окинава чуть менее, чем наполовину населена американскими солдатами, а немалая часть территории занята американскими военными объектами соответственно. Но, очевидно, что прекрасной природе этого притягательного острова и мне, конечно же, как-то все равно.
Отдых планировался короткий и пляжный — всего 3 полных дня. Однако сезон дождей изменил расклады: удалось немношк покататься по острову, осматривая окрестности. Путешествовал я не один, а с компанией аж из восьми студентов по обмену из разных стран, что, конечно же, обеспечило много позитива и хорошего настроения. Вероятно, именно из-за не солнечной погоды двухчасовой перелет туда-обратно Осака-Окинава у авиакомпании Peach стоил всего примерно 50 евро. На самом деле, даже в сезон дождей температура на Окинаве не опускается ниже 27 градусов днем, а вечером и ночью ниже 25, просто небо тучами затянуто и дождик периодически случается. Тем не менее, искупаться мне тож удалось, хотя и в вечернее время.
Итак, первый день — перелет, проезд до места пребывания, легкий отдых, короткое вечернее купание и сон. Кстати, впервые столкнулся с тем, что купаться после 6 вечера запрещено! А пляж работает только до 10 вечера, то есть можно находиться на территории, но купаться нельзя. Ходят полицейские и вежливо просят уйти =) Только в Японии, что ж сказать еще.
Второй день получился насыщенным — долгая поездка на водопад Хиджи (Hiji) на северной оконечности острова. Добираться до него долго, на двух автобусах с остановкой в Наго. Будете на Окинаве, имейте в виду: автобусное расписание абсолютно не выполняет своей функции, и руководствоваться им не стоит. Просто ждите на остановке, автобус обещал скоро подъехать.
Вид изнутри транспорта
IMG_1208.JPG

IMG_1209.JPG

Странный транспорт можно иногда встретить
IMG_1210.JPG

На подходе к парку с водопадом
IMG_1211.JPG

А дождь все шел
IMG_1212.JPG

Трава какая-то растет
IMG_1213.JPG

IMG_1215.JPG

В общем, типичный ландшафт
IMG_1214.JPG

Сам парк, в целом, понравился. До водопада прилично топать: минут 30-40 придется повзбираться по лестницам, чтоб на чудо природы посмотреть.
IMG_1216.JPG

IMG_1217.JPG

IMG_1218.JPG

IMG_1220.JPG

IMG_1221.JPG

IMG_1222.JPG

Фото на память
IMG_1224.JPG

И продолжаем путь
IMG_1225.JPG

IMG_1226.JPG

А вот и он
IMG_1227.JPG

IMG_1228.JPG

Конечно же, селфи
11312652_1847910595433394_4706176747939241071_o.jpg

Третий день — поездка в Наху =) Как бы центральный населенный пункт Окинавы. В плане: замок, обед в приятном месте, прогулки. На автобусе — менее часа от Чатана.

Приехали
IMG_1229.JPG

Улица с сувенирами
11163165_1848018832089237_6204183186185312821_o.jpg

Уютное место. В этом районе издавна продают и производят глиняную посуду
IMG_1230.JPG

Игра — найди котейку на фото
IMG_1231.JPG

Ладно-ладно, вот, полегче
IMG_1233.JPG

Плакат прекрасен
IMG_1234.JPG

Пришло время и поесть. Место для этого выбрано просто замечательное.
IMG_1236.JPG

IMG_1238.JPG

Легкая медитация после обеда
11336891_1848018592089261_1187350613460553918_o.jpg

Замок Окинавы
IMG_1239.JPG

IMG_1240.JPG

Территория вокруг симпатичная, вход внутрь замка стоит 6 евро. Внешне замок смахивает на сарай, если честно
11133865_1848019342089186_5398937466240314509_o.jpg

Как обычно, вожу лицом
IMG_1241.JPG

IMG_1242.JPG

IMG_1243.JPG

Это — трон!
IMG_1244.JPG

Осмотр окончен =)
Только в Японии
IMG_1246.JPG

Пока, замок!
IMG_1247.JPG

Предпоследний день был разгрузочным, просто погуляли в районе нашей съемной квартиры. Жилье, кстати, снимали на airbnb. Только ленивый, кажется, этим сейчас не занимается.
Люди Окинавы показались милыми и добрыми, готовыми помочь. Наличие солдат США объясняет присутствие американских забегаловок в немалом количестве. Более того, существует даже большая зона развлечений с молом, теми же ресторанами, которая так и называется — American village.
Хотелось бы вернуться сюда снова и покататься по островам в округе =) Как-нибудь в другой раз.

А вот и видео для интересующихся

Поездка в Ниими: немного пещер

Давно не писал ничего, как-то свободного времени поменьше стало, да и хотелось дополнить повествования о поездке в Гонконг видеоматериалом от Маркуса, но все дождаться не могу от него.
Поэтому сегодня вернемся в солнечную Окаяму, и я расскажу о небольшом и необычном путешествии на северо-запад префектуры, почти у ее окрайны, в небольшой городок или поселок под названием Ниими.
Добраться в этот населенный пункт можно на поезде, дорога займет около двух часов и билет в одну сторону будет стоить примерно 25 евро.
А зачем, собственно, туда ехать? В Ниими можно посетить самые настоящие пещеры, все осмотреть и даже потрогать =) Чем не отличный повод выбраться поближе к горам на природу в хорошей компании.
Немного о пещере расскажу. Природный памятник известняковая каверна Икура-до (Ikura-do) была обустроена и открыта для посетителей в 1959 году. Эрозия подземных вод создала необыкновенный интерьер пещеры, состоящий из сталактитов и сталагмитов, образованных из карбоната кальция. Сталактиты растут с потолка со скоростью 1 сантиметр в 100 лет, когда как сталагмиты от пола со скоростью 1 сантиметр в 200 лет. Исходя из этого, пещера была сформирована около 250 миллионов лет назад.
в общем, дальше больше фото будет, чтоб легче было оценить, стоит ли тратить время на какие-то непонятные каверны.
Место действительно очень тихое: сойдя с поезда и по пути к пещерам встретились буквально 2-3 человека — на улице пусто.
Ну вот заправка есть, да
IMG_1097.JPG

Приближаемся к пункту назначения. Даже в таком безлюдном месте можно легко наткнуться на общественный туалет — чистый и удобный. В этом плане, похоже, Япония точно впереди планеты всей.
IMG_1098.JPG

IMG_1099.JPG

Горная речка и водопад небольшой. Справа по борту — магазины и кафе.
IMG_1100.JPG

IMG_1101.JPG

IMG_1102.JPG

IMG_1103.JPG

IMG_1104.JPG

Вход в пещеру стоит 6-7 евро. На мост и вперед!
IMG_1105.JPG

10473328_1818131141744673_3066825388380074208_o.jpg

А вот и вход: жутковато, конечно, с белого света уходить
IMG_1106.JPG

Везде подсвечивается различными цветами. Однако стоит заметить, что примерно треть пути из 1200 метров пещеры мне, человеку ростом 189 сантиметров, пришлось пройти сложившись вдвое. Но ничего, прорвемся. Температура в каверне примерно 15 градусов цельсия.
IMG_1107.JPG

IMG_1108.JPG

IMG_1109.JPG

IMG_1110.JPG

IMG_1111.JPG

IMG_1112.JPG

IMG_1114.JPG

IMG_1115.JPG

Пришло время и наружу вылезать
IMG_1117.JPG

Прогулка в пещерах в нормальном темпе занимает около 40 минут, неплохая физкультура.
Теперь можно и перекусить перед обратной дорогой
11082338_1818131628411291_1532296952859214039_o.jpg