Введение

На данном занятии мы узнаем, как язык программирования R можно сочетать с RMarkdown’ом. На выходе мы можем получить красивые документы в трёх разных форматах: Ворде, LaTeX’е и HTML’е. К тому же, при перезапуске кода информация, отражаемая в этих документах, может автоматически обновляться. А если Вы используете в качестве выходного формата HMTL, то Вы можете разместить свои документы в интернете на всеобщее обозрение и, конечно, сделать их нтерактивными.

Загрузка данных

Для начала загрузим данные, чтобы можно было с чем работать. В этот раз мы рассмотрим сведения о стоимости жизни в разных городах России, собираемые пользователями портала Numbeo.

sFolder = "d:/kkholodilin/VShE/"
sInFile = "Data/Statistika/Cost_of_living_Numbeo_RUB_Russia_2019-12.csv"
sOutFile = "Draft/Statistika/Fig_Numbeo_Russia.pdf"

#---------------------------------------------------------
#--- Load the cost of living data for Russia

X = read.csv(paste(sFolder, sInFile, sep=""), dec = ",", sep = ";")

Обычно я создаю отдельные текстовые переменные для названия папки, а также входных и выходных файлов. С помощью функции paste() их можно легко комбинировать, получая пути к читаемым и создаваемым файлам.

Первое знакомство с данными

Посмотрим для начала, что за данные мы загрузили. Сколько в них переменных? Что они обозначают? Насколько велик наш набор данных?

head(X)
##                                                    Item Average         Range
## 1                          Meal, Inexpensive Restaurant  233.09 166,19-300,00
## 2 Meal for 2 People, Mid-range Restaurant, Three-course 1000.00              
## 3        McMeal at McDonalds (or Equivalent Combo Meal)      NA              
## 4                     Domestic Beer (0.5 liter draught)   50.00              
## 5                     Imported Beer (0.33 liter bottle)  100.00              
## 6                                  Cappuccino (regular)  120.00 100,00-140,00
##    Lower Upper   City
## 1 166.19   300 Abakan
## 2     NA    NA Abakan
## 3     NA    NA Abakan
## 4     NA    NA Abakan
## 5     NA    NA Abakan
## 6 100.00   140 Abakan
summary(X)
##      Item              Average             Range               Lower        
##  Length:5952        Min.   :      0.0   Length:5952        Min.   :      0  
##  Class :character   1st Qu.:     59.1   Class :character   1st Qu.:     40  
##  Mode  :character   Median :    250.0   Mode  :character   Median :    150  
##                     Mean   :  51765.2                      Mean   :  39424  
##                     3rd Qu.:   4642.9                      3rd Qu.:   2000  
##                     Max.   :1843000.0                      Max.   :1836000  
##                     NA's   :967                            NA's   :1339     
##      Upper             City          
##  Min.   :      1   Length:5952       
##  1st Qu.:     70   Class :character  
##  Median :    300   Mode  :character  
##  Mean   :  64290                     
##  3rd Qu.:   5000                     
##  Max.   :2000000                     
##  NA's   :1339
table(X$City)
## 
##                   Abakan              Arkhangelsk                Astrakhan 
##                       64                       64                       64 
##               Balashikha                  Barnaul                 Belgorod 
##                       64                       64                       64 
##          Blagoveshchensk                  Bryansk               Cheboksary 
##                       64                       64                       64 
##              Chelyabinsk              Cherepovets                 Fryazino 
##                       64                       64                       64 
##                  Irkutsk                  Ivanovo                  Izhevsk 
##                       64                       64                       64 
##              Kaliningrad                   Kaluga                    Kazan 
##                       64                       64                       64 
##                 Kemerovo               Khabarovsk                   Khimki 
##                       64                       64                       64 
##                    Kirov                 Korolyov                 Kostroma 
##                       64                       64                       64 
##                Krasnodar              Krasnoyarsk                   Kurgan 
##                       64                       64                       64 
##                    Kursk                  Lipetsk                Lyubertsy 
##                       64                       64                       64 
##                  Magadan             Magnitogorsk              Makhachkala 
##                       64                       64                       64 
##                   Moscow                 Murmansk                Mytishchi 
##                       64                       64                       64 
##                  Nalchik          Nizhny Novgorod             Nizhny Tagil 
##                       64                       64                       64 
##          Novocheboksarsk             Novokuznetsk             Novorossiysk 
##                       64                       64                       64 
##              Novosibirsk                  Obninsk                Odintsovo 
##                       64                       64                       64 
##                     Omsk                 Orenburg             Oryol (Orel) 
##                       64                       64                       64 
##                    Penza                     Perm Petropavlovsk-Kamchatsky 
##                       64                       64                       64 
##             Petrozavodsk                  Podolsk                    Pskov 
##                       64                       64                       64 
##               Pyatigorsk           Rostov-na-donu                   Ryazan 
##                       64                       64                       64 
##         Saint Petersburg                   Samara                  Saransk 
##                       64                       64                       64 
##                  Saratov           Sergiyev Posad               Sevastopol 
##                       64                       64                       64 
## Shchelkovo (Shchyolkovo)               Simferopol                 Smolensk 
##                       64                       64                       64 
##                    Sochi                Stavropol              Sterlitamak 
##                       64                       64                       64 
##                   Surgut                Syktyvkar                 Taganrog 
##                       64                       64                       64 
##                   Tambov     Tolyatti (Togliatti)                    Tomsk 
##                       64                       64                       64 
##                     Tula                     Tver                   Tyumen 
##                       64                       64                       64 
##                      Ufa                 Ulan Ude                Ulyanovsk 
##                       64                       64                       64 
##          Veliky Novgorod              Vladikavkaz                 Vladimir 
##                       64                       64                       64 
##              Vladivostok                Volgograd                  Vologda 
##                       64                       64                       64 
##                 Voronezh                  Yakutsk                Yaroslavl 
##                       64                       64                       64 
##            Yekaterinburg              Yoshkar-Ola        Yuzhno-Sakhalinsk 
##                       64                       64                       64
table(X$Item)
## 
##              1 min. of Prepaid Mobile Tariff Local (No Discounts or Plans) 
##                                                                         93 
##                                     1 Pair of Jeans (Levis 501 Or Similar) 
##                                                                         93 
##                                       1 Pair of Men Leather Business Shoes 
##                                                                         93 
##                                   1 Pair of Nike Running Shoes (Mid-Range) 
##                                                                         93 
##                           1 Summer Dress in a Chain Store (Zara, H&M, ...) 
##                                                                         93 
##                                       Apartment (1 bedroom) in City Centre 
##                                                                         93 
##                                    Apartment (1 bedroom) Outside of Centre 
##                                                                         93 
##                                      Apartment (3 bedrooms) in City Centre 
##                                                                         93 
##                                   Apartment (3 bedrooms) Outside of Centre 
##                                                                         93 
##                                                               Apples (1kg) 
##                                                                         93 
##                                     Average Monthly Net Salary (After Tax) 
##                                                                         93 
##                                                               Banana (1kg) 
##                                                                         93 
##   Basic (Electricity, Heating, Cooling, Water, Garbage) for 85m2 Apartment 
##                                                                         93 
##                         Beef Round (1kg) (or Equivalent Back Leg Red Meat) 
##                                                                         93 
##                                                 Bottle of Wine (Mid-Range) 
##                                                                         93 
##                                                        Buy Apartment Price 
##                                                                         93 
##                                                       Cappuccino (regular) 
##                                                                         93 
##                                Chicken Breasts (Boneless, Skinless), (1kg) 
##                                                                         93 
##                                                                  Childcare 
##                                                                         93 
##                                              Cigarettes 20 Pack (Marlboro) 
##                                                                         93 
##                                      Cinema, International Release, 1 Seat 
##                                                                         93 
##                                                         Clothing And Shoes 
##                                                                         93 
##                                             Coke/Pepsi (0.33 liter bottle) 
##                                                                         93 
##                                           Domestic Beer (0.5 liter bottle) 
##                                                                         93 
##                                          Domestic Beer (0.5 liter draught) 
##                                                                         93 
##                                                        Eggs (regular) (12) 
##                                                                         93 
##                                      Fitness Club, Monthly Fee for 1 Adult 
##                                                                         93 
##                                                         Gasoline (1 liter) 
##                                                                         93 
##                                          Imported Beer (0.33 liter bottle) 
##                                                                        186 
##                           International Primary School, Yearly for 1 Child 
##                                                                         93 
##                     Internet (60 Mbps or More, Unlimited Data, Cable/ADSL) 
##                                                                         93 
##                                                           Lettuce (1 head) 
##                                                                         93 
##                                           Loaf of Fresh White Bread (500g) 
##                                                                         93 
##                                                         Local Cheese (1kg) 
##                                                                         93 
##                                                                    Markets 
##                                                                         93 
##                             McMeal at McDonalds (or Equivalent Combo Meal) 
##                                                                         93 
##                      Meal for 2 People, Mid-range Restaurant, Three-course 
##                                                                         93 
##                                               Meal, Inexpensive Restaurant 
##                                                                         93 
##                                                  Milk (regular), (1 liter) 
##                                                                         93 
##                                               Monthly Pass (Regular Price) 
##                                                                         93 
## Mortgage Interest Rate in Percentages (%), Yearly, for 20 Years Fixed-Rate 
##                                                                         93 
##                                           One-way Ticket (Local Transport) 
##                                                                         93 
##                                                                Onion (1kg) 
##                                                                         93 
##                                                              Oranges (1kg) 
##                                                                         93 
##                                                               Potato (1kg) 
##                                                                         93 
##        Preschool (or Kindergarten), Full Day, Private, Monthly for 1 Child 
##                                                                         93 
##                     Price per Square Meter to Buy Apartment in City Centre 
##                                                                         93 
##                  Price per Square Meter to Buy Apartment Outside of Centre 
##                                                                         93 
##                                                             Rent Per Month 
##                                                                         93 
##                                                        Rice (white), (1kg) 
##                                                                         93 
##                                                     Salaries And Financing 
##                                                                         93 
##                                                         Sports And Leisure 
##                                                                         93 
##                                         Taxi 1hour Waiting (Normal Tariff) 
##                                                                         93 
##                                                   Taxi 1km (Normal Tariff) 
##                                                                         93 
##                                                 Taxi Start (Normal Tariff) 
##                                                                         93 
##                                      Tennis Court Rent (1 Hour on Weekend) 
##                                                                         93 
##                                                               Tomato (1kg) 
##                                                                         93 
##                   Toyota Corolla 1.6l 97kW Comfort (Or Equivalent New Car) 
##                                                                         93 
##                                                             Transportation 
##                                                                         93 
##                                                        Utilities (Monthly) 
##                                                                         93 
##                Volkswagen Golf 1.4 90 KW Trendline (Or Equivalent New Car) 
##                                                                         93 
##                                                  Water (0.33 liter bottle) 
##                                                                         93 
##                                                   Water (1.5 liter bottle) 
##                                                                         93

Мы увидели, что в этой выборке представлены данные о стоимости различных потребительских товаров и услуг в городах России. Но городов и товаров слишком много, чтобы представить в одной таблице. Поэтому мы можем воспользоваться функцией, создающей интерактивные таблицы. Внимание: использовать её можно только, если ваш выходной формат – HTML.

DT::datatable(X, rownames=F)

Обработка данных

Выбор нужной части данных

Нередко работа с данными начинается с их доведения до нужного состояния. Иногда нам нужна лишь часть данных, например, определённые города или группы товаров. Здесь мы выберем только один товар – молоко. Построим график средней цены за литр молока в рублях.

vSel = grep("Milk", X$Item)
Y = X[vSel,]

plot(Y$Average)

Красивый график? По-моему, не очень. А вы, что думаете?

Сортировка данных

Отсортируем данные по средней цене и снова нарисуем график.

Y = Y[order(Y$Average),]
plot(Y$Average)

Что вы можете сказать об этой картинке?

Рисуем красивый график

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

par(mar=c(4,7,1,1), bty="l", mfcol=c(1,1), cex.axis=0.6)
barplot(Y$Average, lwd=3, col="cyan4", xlab="", ylab="", main = "Цена молока в городах России", horiz=T, names.arg=Y$City, las=2)
mtext("Источник: Numbeo и собственное представление.", side=1, line=3)
mtext("рублей за литр", side=1, line=2)

Правильный график должен содержать понятное описание изображённых на нём данных. Кроме того, он должен быть хорошо читаемым. В частности, это означает, что названия лучше располагать горизонтально. Наконец, на нём не должно быть ненужной информации. Поэтому мы убираем лишние оси (верхнюю и правую), которые не содержат никакой информации. Также очень важно указывать источник данных. Таким образом, мы добиваемся прозрачности и воспроизводимости нашего исследования. Любой другой исследователь, взяв наши данные и методы сможет легко понять, что мы проделали, и получить точно такие же результаты. Если же речь идёт не об исследователях, которые захотят проверить наши результаты, а о просто заинтересованных людях, то наше исследование должно быть понятным, убедительным и увлекательным. Мы рассказываем историю и хотим, чтобы наши читатели и слушатели поняли, насколько она интересна.