Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 338|回复: 0

[默认分类] R语言分析和挖掘豆瓣网站的电影信息数据

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-4-4 10:43:30 | 显示全部楼层 |阅读模式
    首先你要安装R语言,本篇文章是在Rstudio环境下运行。
      这是我从豆瓣网抓取的电影数据。放在SQLyog里面,然后从MySQL导出到Rsudio中,不过这个导入可能有很多同学会出现问题,有关链接参考这里,https://www.cnblogs.com/yiyezhouming/arcHive/2017/05/02/6796905.HTML

    1. con<-dbConnect(MySQL(),user="root",password="1234",host="localhost",port=3306,dbname="mydatabase1")
    2. > dbSendQuery(con,"select names gbk")
    复制代码


      然后,我们发送数据请求查询并把编码模式设置为gbk,

    1. dbSendQuery(con,"set names gbk")
    复制代码

      
    1. 输出结果为<MySQLResult:10,2,0>
    复制代码

      
     下面,我们就可以获取数据库里面的数据。
      
    1. > query<-dbSendQuery(con,"select * from douban1")
    2. > result<-fetch(query)
    复制代码

      
      接下来,我们看看数据结构
    输入str(result)

      
      

    1. douban_movie<-result
    复制代码


     我们把结果赋值给douban_movie,换个名称,然后我们把release_time转化日期格式,把score转化为数值 形式

    1. > douban_movie$release_time<-as.Date(douban_movie$release_time)
    2. > 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))

    1. >p1<-p+geom_bar(stat = "identity",fill="steelblue")
    2. >p1
    3. > p2<-p1+labs(x="年代",y="电影数量",title="各年代的好评电影数量")
    4. > p2
    5. > p3<-p2+theme(plot.title = element_text(hjust = 0.5),colour="brown",face="bold"))
    6. >p3
    复制代码



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-27 10:01 , Processed in 0.440447 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表