我正在调查一份包含Prosper贷款信息的数据集,特别是投资者行为。
我想创建的图表将向y轴显示投资者,并在x轴上显示时间,并计入平均月份。这也将受到信用等级的影响。最后,我希望每个bin显示每个信用等级(facet变量)分配给每个信用等级(分面变量)的百分比,按计算月份(或实际月份,但计算似乎更容易进行分级)。
我已经尝试了..density..
,..count..
/ sum(..count..)
,geom_density
等,并且看到了大量帖子,这些帖子会将每个方面的1或整个图表加总为1。为了重新迭代,我试图将所有方面中的每个bin加到1.我还希望直接在ggplot中执行此操作,而不是更改数据帧,但我会采取我能得到的结果。 / p>
以下代码显示了两种显示投资者数量的方法(每箱数量和每箱总数的百分比):
t1 <- ggplot(data = loans, aes(x=as.POSIXct(strptime(LoanOriginationDate, '%Y-%m-%d %H:%M:%S')))) +
geom_histogram(binwidth = 60*60*24*30.4375, aes(y = ..count../sum(..count..), group = Investors)) +
facet_wrap(~ProsperCreditGrade) +
scale_y_continuous()
t2 <- ggplot(loans,aes(x=as.POSIXct(strptime(LoanOriginationDate, '%Y-%m-%d %H:%M:%S')),fill=ProsperCreditGrade))+
geom_histogram(aes(y=2629800* ..count../sum(..count..)),
alpha=1,position='identity',binwidth=2629800) +
facet_wrap(~ProsperCreditGrade) +
stat_bin(aes(y = ..density..))
grid.arrange(t1,t2,ncol=1)
正如您在图中所看到的,总投资者在数据集所涵盖的时间结束时上升了很多。这并未显示给定时间内的相对投资行为,这正是我要调查的内容。
我还能尝试什么?
答案 0 :(得分:0)
在Stephen of Udacity.com和dplyr
的帮助下,最终代码如下:
loans$month <- month(as.POSIXct((round(as.numeric(as.POSIXct(loans$LoanOriginationDate))/2629800)*2629800), origin = "1969-12-31 19:00:00"))
loans$year <- year(as.POSIXct((round(as.numeric(as.POSIXct(loans$LoanOriginationDate))/2629800)*2629800), origin = "1969-12-31 19:00:00"))
loans$calculatedMonth <- ((loans$year-2005)*12)+loans$month
loanInvestors <- loans %>% group_by(calculatedMonth, ProsperCreditGrade) %>% summarise (n = n()) %>% mutate(proportion = n / sum(n))
ggplot(data = loanInvestors, aes(x = calculatedMonth, y = proportion, fill = proportion, width = 3)) +
geom_bar(stat = "identity") + facet_wrap(~ProsperCreditGrade) +
scale_y_sqrt() + geom_smooth(color = "red") +
scale_fill_gradient()