首先你要安装R语言,本篇文章是在Rstudio环境下运行。

  这是我从豆瓣网抓取的电影数据。放在SQLyog里面,然后从MySQL导出到Rsudio中,不过这个导入可能有很多同学会出现问题,有关链接参考这里,https://www.cnblogs.com/yiyezhouming/archive/2017/05/02/6796905.html

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
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)

  R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第1张

 

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)查看

R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第2张

接下来,我们是做出评分最多的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'))

 R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第3张

 

# 2,经典电影都是哪些国家排在前面

#提出国家这一列数据

country<-douban_movie$country

#罗列所有的国家:top_countryies<-unlist(country)

#频数统计,并做数据框

df<-as.data.frame(table(top_countryies))

#然后按照降序排列

df<-arrange(df,desc(Freq))

然后我们调入词语包。然后用词语进行可视化

R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第4张

 

# 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(),)

R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第5张

#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的电影类型')

 

R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第6张

 

结论:除了剧情以外,喜剧,动作,动画很受大众青睐

#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

 R语言分析和挖掘豆瓣网站的电影信息数据 随笔 第7张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄