План-факт, динамика и прибыль на одной диаграмме c помощью R
Каждый раз, когда подводятся финансовые итоги прошедшего года и готовится соответствующая презентация, люди ломают голову, как бы уместить основные цифры на одной диаграмме. Какова бы ни была сфера деятельности организации, подведение итогов, как правило, начинается с анализа основных финансовых показателей, отдельно по каждому из бизнес-направлений: оборот в завершившемся году (фактические цифры); установленные ранее планы на завершившийся год (для анализа выполнения); оборот годом ранее (для понимания динамики); прибыльность. Стандартная столбчатая диаграмма, которую можно на скорую руку построить в Excel, даёт, мягко говоря, не совсем наглядный результат. К примеру, если у бизнеса четыре направления, то на диаграмме появятся 16 рядом стоящих столбцов, и кто-то может с непривычки спутать передовиков и отстающих.Специалисты, знакомые с R, могут использовать ggplot2 для программного построения нужной диаграммы, например, такой как здесь. Для примера взяты цифры за 2012 год из годового отчета компании Unilever. Плановые показатели не относятся к публичным данным, поэтому пришлось их выдумать из головы, установив, для определенности, на уровне «прошлый год + 5%».Исходные цифры находятся в Excel и выглядят так (данные в миллионах евро): Построенная в RStudio диаграмма выглядит следующим образом: Проверьте диаграмму на интуитивность, и не глядя на цифры, предположите, какому показателю какой элемент диаграммы соответствует, а объяснения будут далее.Идея в том, чтобы основной параметр — оборот (Turnover) — показывался в виде залитых цветом столбцов, показатель прошлого года (LastYear) — как контур, находящийся визуально позади, плановые показатели (Forecast) в виде «планок», а прибыльность (точнее, противоположная величина — расходы) — небольшой отметкой.Для чтения данных из Excel используется пакет XLConnect. Из файла Excel, из одного из листов, в R загружается именованная таблица.Цвета для диаграммы взяты из таблицы корпоративных цветов Unilever.Итак, код require (XLConnect) require (data.table) require (ggplot2) require (scales)
indata <- readTable(loadWorkbook("Unilever.xlsx"), sheet = "FinResults", table = "Unilever2012", useCachedValues = TRUE)
finreport <- data.table(indata)[, list( Segment = reorder(Segment, -Turnover), Cost = (Turnover - Profit), Forecast, Turnover, LastYear )] turnover_format = function(...){ function(x) paste("€B ", format(x/1000, ..., nsmall = 1L, scientific = FALSE, trim = TRUE)) }
chart <- ggplot(finreport, aes(x = Segment)) + geom_bar(aes(y = LastYear), stat = "identity", color = "#004976", fill = "white", width = 0.9) + geom_bar(aes(y = Turnover), stat = "identity", color = "white", fill = "#0085CA", width = 0.6) + geom_crossbar(aes(ymin = Forecast, ymax = Forecast, y = Forecast), color = "#ED8800", width = 0.4, size = 0.7) + geom_point(aes(y = Cost), shape = 25, color = "#cedc00", fill = "white") + scale_y_continuous(breaks = pretty_breaks(20), labels = turnover_format()) + theme_bw() + theme ( panel.border = element_blank() , axis.line = element_line() , axis.title.x = element_blank() , axis.title.y = element_blank() , axis.text = element_text( size = 13, color = "#3C1053") )
print (chart) Исходные данные: Univeler, годовой отчет и финансовая отчетность 2012, страница 92.