Страница 1 из 1

Гистограмма распределения данных по месяцам

Добавлено: 22 окт 2013, 17:55
Petruxin
Продолжаю.
Возникла необходимость научиться строить гистограммы в распределении по времени(конкретно по месяцам). Примера не нашел, чтобы повториьь со своими данными. Пытаюсь сделать так:

Код: Выделить всё

 unemployed2010<-c(rep(1,24552),rep(2,25688),rep(3,27287),rep(4,26045),rep(5, 24364),rep(6,21967))
где 1....6 -месяца, а по y - количество граждан(и гражданок).
Вывожу график так :

Код: Выделить всё

 hist(unemployed2010,breaks=1:6)
и получается график от большего к меньшему, (рис hist) а надо (должно?) чтобы гистограмма описывалась чем то типа перевернутой параболы
если же попробовать

Код: Выделить всё

 plot(density(unemployed2010), type="l", col="seagreen")
, то вроде получается около дела. (рис density)
Пробовал использовать , но это уж совсем в ручную получается.
Может все не так делается? Где нибудь пример расмотрен?

Re: Гистограмма распределения данных по месяцам

Добавлено: 22 окт 2013, 20:18
Petruxin
Попробовал по другому:

Код: Выделить всё

> mon<-c("январь","февраль","март","апрель","май","июнь")
> unemployed2010<-c(24552,25688,27287,26045,24364,21967)
> mon.f<-factor(mon)
> plot(mon.f,unemployed2010)
> hist(mon.f,unemployed2010)
Ошибка в hist.default(mon.f, unemployed2010) : 'x' должен быть числовым
plot чего то строит (на картинке), но логика мне пока не ясна, а с гистограммой совсем глухо. Видимо "факторы" так использовать нельзя?

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 01:41
Иван Стрельников
Я не совсем понял задачу, что значит "распределение по времени"?
Может Вы имеете ввиду простую столбчатую диаграмму, тогда это функция barplot().

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 05:22
jerry-maori
Хм.... начнём с того, что гистограмма распределения не обязательно колоколобразная... Всё зависит от распределения...
Я бы сделал для начала самым топорным методом: если у нас есть ряд значений, и для каждого указано, в каком месяце (по номеру) оно имело место быть, то простой подсчёт количества значений каждого типа даст нам искомое...
Правда желательно хотя бы кусок исходных данных увидеть..

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 05:37
Petruxin
Наверно я намудрил с вопросом.
В первом топике, в первом кодде

Код: Выделить всё

 unemployed2010<-c(rep(1,24552),rep(2,25688),rep(3,27287),rep(4,26045),rep(5, 24364),rep(6,21967))
цифры 1,2, и тд. обозначают - январь, февраль...июнь. вторые - количество оф. безработных. Видно, что их количество по месяцам растет до марта а потом спадает. На первой гистограмме же этого не видно. А вот в этом забавном примере гистограммы как я хочу. Может сравнение не корректно?
barplot() - построил лестницу. Тоже ничего, но не то что я хочу. :D

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 07:05
gamm
Petruxin писал(а):Наверно я намудрил с вопросом.
таки да ...

Код: Выделить всё

unemployed2010<-c(rep(1,24552),rep(2,25688),rep(3,27287),rep(4,26045),rep(5, 24364),rep(6,21967))
foo<-table(unemployed2010)
plot(foo,type="h",lwd=3)
для построения того, чего вы хотите, посмотрите разные aggregate(). Тут могут быть разные нюансы, например, если месяц пропущен, то его вообще не будет (вместо того, чтобы он был с нулем). Там придется брать заготовку с нулями, искать существующие позиции (смотрим match()), и вставлять в заготовку. Позиции из таблицы извлекаются с помощью as.integer(attr(foo, "dimnames")[[2]]).

как-то так ...

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 08:01
Petruxin
Получилось, как gamm подсказал.
Всем спасибо за помощь. Почитаю про команды, которые подсказали.

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 09:10
Иван Стрельников
Как по мне, то логика немного странная. Зачем сначала создавать несуразный вектор из постоянных значений, а потом его агрегировать. Ладно если есть данные по дням, а нужно получить значения для месяцев, но тогда это будет делаться немного иначе. В Вашем случае самый элементарный ход будет таким:

Код: Выделить всё

unemployed2010<-c(24552,25688,27287,26045,24364,21967)
names(unemployed2010)<-c("январь","февраль","март","апрель","май","июнь")
barplot(unemployed2010)

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 09:20
Petruxin
Попробовал - тоже получилось, как мне надо.
Все больше команд...

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 11:07
gamm
Иван Стрельников писал(а):Как по мне, то логика немного странная. Зачем сначала создавать несуразный вектор из постоянных значений, а потом его агрегировать.
логика нормальная, имитация выборки. Ну лень человеку писать что-то типа unemployed2010<-sample(1:6,10000,prob=c(5,6,7,7,6,5)/(sum(c(5,6,7,7,6,5)),replace=TRUE), а потом plot(table(unemployed2010),type="h") :D

Re: Гистограмма распределения данных по месяцам

Добавлено: 24 окт 2013, 11:20
Petruxin
НЕ лень. Разбирусь - и не такое понапишу :evil: