首先你要安装R语言,本篇文章是在Rstudio环境下运行。
这是我从豆瓣网抓取的电影数据。放在SQLyog里面,然后从MySQL导出到Rsudio中,不过这个导入可能有很多同学会出现问题,有关链接参考这里,https://www.cnblogs.com/yiyezhouming/archive/2017/05/02/6796905.html
con<-dbConnect(MySQL(),user="root",password=\'1234\',host=\'localhost\',port=3306,dbname=\'mydatabase1\') > dbSendQuery(con,"select names gbk")
然后,我们发送数据请求查询并把编码模式设置为gbk,
dbSendQuery(con,"set names gbk")
输出结果为<MySQLResult:10,2,0>
下面,我们就可以获取数据库里面的数据。
> query<-dbSendQuery(con,"select * from douban1") > result<-fetch(query)
接下来,我们看看数据结构
输入str(result)
douban_movie<-result
我们把结果赋值给douban_movie,换个名称,然后我们把release_time转化日期格式,把score转化为数值 形式
> douban_movie$release_time<-as.Date(douban_movie$release_time) > douban_movie$score<-as.numeric(douban_movie$score)
然后。可以用str(douban_movie)查看
接下来,我们是做出评分最多的TOP的电影名称:
#配置画图的数据
> p<-ggplot(data=arrange(douban_movie,desc(score))[1:10,],mapping = aes(x=reorder(name,-score),y=score))
#显示y轴的范围,然后赋值给p1
p1<-p+coord_cartesian(ylim = c(9.0,10.0))
#对y轴参数进行设置,传给p2
> p2<-p1+scale_y_continuous(breaks = c(9.0,10.0,0.1),labels = paste0(round(seq(9.0,10.0)/1.0,2),\'分\'))
#绘制条形图
> p3<-p2+geom_bar(stat = \'identity\',fill=\'steelblue\')
#添加标轴和标题
> p4<-p3+labs(x=NULL,y=\'评价人数\',title=\'评价人数最多最多的TOP10电影\')
#设置x轴标签以60度倾斜
p5<-p4+theme(axis.text.x = element_text(angle = 60,vjust = 0.5),plot.title = element_text(hjust = 0.5,colour = \'brown\',face = \'bold\'))
# 2,经典电影都是哪些国家排在前面
#提出国家这一列数据
country<-douban_movie$country
#罗列所有的国家:top_countryies<-unlist(country)
#频数统计,并做数据框
df<-as.data.frame(table(top_countryies))
#然后按照降序排列
df<-arrange(df,desc(Freq))
然后我们调入词语包。然后用词语进行可视化
# 4,一部电影需要多少国家合作拍摄
#调用stringr包
library(\'stringr\')
#对country这一列数据进行切割,提出\'/\'
country<str_split(douban_movie$country,\'/\')
#统计每一部电影拍摄的合作国家的数目
movie_contain_country<-sapply(country,length)
table(movie_countain_country)
输出的结果为:
movie_contain_country
1 2 3 4 5
126 46 9 6 1
#转化为数据库形式
df<-as.data.frame(table(movie_contain_country))
输出df:
movie_contain_country Freq
1 1 126
2 2 46
3 3 9
4 4 6
5 5 1
#修改变量名
names(df)[1]<-countries
#转化数据类型:
df$countries<-as.numeric(as.character(df$countries))
df$countries<-as.ifelse(df$countries<=4,df$countries,\'5+\')
#数据聚合操作
groupby_countrys<-group_by(df,countries)
df<-summaries(groupby_countrys,Freq=sum(Freq))
#因子转化:
df$countries<-as.factor(df$countries)
#运用环形图对上面的数据进行可视化
#定义数据
df$ymax<cumsum(df$Freq)
df$ymin<-c(0,cumsum(df$Freq)[-length(df$ymax)])
#生产图例
labels<-paste0(df$countries,\'(\',round(df$Freq/sum(df$Freq)*100,2),\'%\',\')\')
#绘图
p<-ggplot(data=df,mapping = aes(xmin=3,xmax=4,ymin=ymin,ymax=ymax,fill=countries))
p1<-p+geom_rect(size=5)+coord_polar(theta = \'y\')+xlim(1,4)+
+ labs(x=NULL,y=NULL,title=\'一部电影需要多少国家合作\')
p2<-p1+scale_fill_discrete(breaks=df$countries,labels=labels)
p3<-p2+theme(legend.position = \'right\',plot.title = element_text(hjust = 0.5,colour=\'brown\',face=\'bold\'),axis.text=element_blank(),axis.ticks=element_blank(),)
#5.这部电影属于什么类型
type<-douban_movie$style
#展示所有的电影类型
top_type<-unlist(type)
top_type
[1] "剧情" "剧情" "剧情" "剧情" "剧情" "剧情"
[7] "剧情" "剧情" "剧情" "爱情" "剧情" "剧情"
[13] "剧情" "剧情" "喜剧" "剧情" "动画" "剧情"
..................................................................
[169] "剧情" "动画" "剧情" "剧情" "剧情" "剧情"
[175] "剧情" "剧情" "剧情" "剧情" "剧情" "动作"
[181] "动作" "剧情" "动画" "悬疑" "剧情" "剧情"
[187] "喜剧" "剧情"
#转化为数据框
df<-as.data.frame(table(top_type))
#按照降序排列
df<-arrange(df,desc(Freq))
#删除第一行
df<-df[-1,]
#把第一列转化为字符串形式
df$top_type<-as.character(df$top_type)
#t提取出前10的类型
df$top_type<-ifelse(df$top_type %in% df$top_type[1:10],df$top_type,\'其他\')
#聚合操作
groupby_top_type<-group_by(df,top_type)
df<-summarise(groupby_top_type,Freq=sum(Freq))
#打印出结果df:
按照降序排列
df<-arrange(df,desc(Freq))
#制作标签
labels<-paste(round(df$Freq/sum(df$Freq)*100,2),\'%\')
#绘图
p>-ggplot(data = df,mapping = aes(x=reorder(df$top_type,Freq),y=Freq))
#制作条形图
p1<-p+geom_bar(stat=\'identity\',fill=\'steelblue\')
#t添加文字标签
p2<-p1+geom_text(aes(label=labels),size=3,colour=\'black\',position = position_stack(vjust = 0.5),angle=30)
#添加轴标签
p3<-p2+labs(x=\'电影类型\',y=\'电影数量\',title=\'top10的电影类型\')
结论:除了剧情以外,喜剧,动作,动画很受大众青睐
#6.哪些年代的电影好评度高一些?
#首先进行数据清洗,那缺失值处理掉
newdata<-douban_movie[complete.cases(douban_movie),]
#根据年代的倒数第二位判断其所属年代,提取十位数,后面粘贴“0S”
newdata$yearS<-paste0(str_sub(newdata$yearS,3,3),\'0\',\'S\')
#对年代进行聚合
groupbyYS<-group_by(newdata,yearS)
yearS_movies <- summarise(groupbyYS, counts = n())
#绘图
p<-ggplot(data=yearS_movie,mapping = aes(x=reorder(yearS,-counts),y=counts))
>p1<-p+geom_bar(stat = \'identity\',fill=\'steelblue\') >p1 > p2<-p1+labs(x=\'年代\',y=\'电影数量\',title=\'各年代的好评电影数量\') > p2 > p3<-p2+theme(plot.title = element_text(hjust = 0.5),colour=\'brown\',face=\'bold\'))
>p3
请发表评论