Экскурсия по R: часть 2 (создание простых диаграмм)

HowTo Инструменты

Первая часть здесь.

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

Прежде всего, отметим, что мы сейчас имеем дело с категориальными данными. В одной колонке у нас способ убийства, во второй – пол жертвы в каждом случае. Распространенный способ визуализации данных такого типа – это столбчатая диаграмма (barchart).
Прежде всего, с помощью функций, рассмотренных в предыдущей части, извлечем нужные нам данные в соответствующем формате:
> data <- readLines("homicides.txt")
> source("gendercause.R") # загружаем в R нужный нам код
> source("getdataframe.R") # загружаем в R нужный нам код

Сохраняем извлеченные данные в переменной, чтобы с ними было удобнее работать:
> gc <- getdataframe()
Теперь можно сделать таблицу, на основе которой будет сделан график:
> table1 <- table(gc$Cause, gc$Gender)
> table1

Вот что у нас получилось:

cont_table1

Теперь создадим на основе этой таблицы диаграмму.
> barplot(table1)

chart1_grey

По умолчанию R создает такие диаграммы с градациями серого цвета. Чтобы сделать более контрастные цвета, их можно ввести вручную. Для этого надо знать названия цветов, которые есть в R. Их легко узнать, введя команду
> colors()
Добавим к нашей диаграмме цвета, а также название для оси y:
barplot(table1, col = c("steelblue", "peru", "red",
"seagreen", "grey1", "blue"), ylab = "Number of homicides")

Еще, чтобы было понятно, что к чему относится, нужно добавить легенду. Здесь главное сохранить те же цвета и тот же порядок наименований, что и в диаграмме.

legend("topleft", c("asphyxiation", "blunt force", "shoothing", "stabbing", "other", "unknown"),
pch = 15, col = c("steelblue", "peru", "red", "seagreen", "grey1", "blue"))

bar_chart_by_gender

На этой диаграмме хорошо видно, что число жертв среди мужчин значительно больше, чем среди женщин. Также хорошо заметно, что большинство убийств совершается с помощью огнестрельного оружия.
Однако, чтобы ответить на вопрос о том, есть ли какие-либо различия по способу убийства, эта диаграмма неудобна – на ней плохо видны соотношения. Чтобы их увидеть, лучше сравнивать пропорции. И заодно можно поменять оси, чтобы столбцы соответствовали способам убийства. Для этого создадим новую таблицу:
> table2 <- table(gc$Gender, gc$Cause)
> table2

cont_table2

Оси поменялись, но нам по-прежнему нужны пропорции. Используем соответствующую функцию:
> proptab <- prop.table(table2, 2)
> proptab

proptab

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

barplot(proptab)
barplot(proptab, col = c("orange", "green"), ylab = "Frequency")
legend("topright", c("female", "male"), pch = 15, col = c("orange", "green"))

stacked_barchart_by_cause