Stata爬豆瓣和烂番茄——国内外的观影口味果然大不同
本文作者:金点,中南财经政法大学金融学院
本文编辑:赵微微
技术总编:李婷婷
Stata and Python 数据分析
由李春涛教授和团队成员司海涛、薛原编写的《Stata正则表达式及其在财务数据中的应用》终于和大家见面啦!爬虫俱乐部特此为大家准备了100本,即日起购买爬虫俱乐部课程,可赠送本书一本,先到先得!
购书链接:
引言
数据来源
中国人究竟更喜欢什么样的电影?想要研究这个问题,我们需要一个样本——最方便使用的,自然就是豆瓣TOP250的片单。
1.豆瓣电影TOP250
豆瓣用户每天都在对“看过”的电影进行“很差”到“力荐”的评价,豆瓣根据每部影片看过的人数以及该影片所得的评价等综合数据,通过算法分析产生豆瓣电影 Top 250。2.烂番茄
烂番茄(ROTTEN TOMATOES)是美国一个网站,以提供电影相关评论、资讯和新闻为主,其母公司为IGN Entertainment,由加州大学伯克利分校的三位在校学生Senh Duong、Patrick Lee、Stephen Wang创建,该网站已经成为国外电影消费者和影迷的首选目的地。而烂番茄的评分人,分为TOMATOMETER和AUDIENCE SCORE,AUDIENCE SCORE是普通观影者,而TOMATOMETER则是一群对电影更了解的人,包括媒体、大v、电影博主。
爬取豆瓣TOP250榜单
1.爬虫前的准备
首先,确定我们要爬取的网页(https://movie.douban.com/top250)。通过观察我们发现,一共有10页,其中每一页存放着25部影片的信息。因此这里我们需要运用循环遍历这10个页面。接着,鼠标右击查看网页源代码,我们发现所需的数据均存在于当前网页源代码中。2.爬虫开始
*数据读入
*使用copy爬取网页,随后使用fileread()函数将网页源代码读入Stata中。
clear all
cap mkdir "E:\电影爬虫\豆瓣top100"
cd "E:\电影爬虫\豆瓣top100"
forvalues i =0(25)225 {
clear
copy "https://movie.douban.com/top250?start=`i'&filter=" temp.txt, replace
set obs 1
gen v = fileread("temp.txt")
*获取影片的英文名并保存
*由于有些电影并没有英文名,因此使用正则表达式只定位到有英文名的电影
preserve
split v, p(`"<span class="title"> / "' `"<span class="other">"')
sxpose, clear
keep if ustrregexm(_var1, "^[A-Z]+|^[0-9]+") //保留所有大写字母开头或者数字开头的电影名
replace _var1 = ustrregexra(_var1, "<.*?>", "")
replace _var1 = ustrregexra(_var1, "\s{2,}", "")
rename _var1 eng
gen id = _n+`i'
compress
save 影片英文名, replace
levelsof eng, local(films)
restore
*获取影片的评分
split v, p(`"<span property="')
drop v
sxpose, clear
gen count = .
foreach film in `films' {
replace count = 1 if index(_var1, `"`film'"')
}
keep if count == 1
gen score = ustrregexs(0) if ustrregexm(_var1,`"(?<=property="v:average">).+?(?=</span>)"')
keep score
gen id = _n+`i'
compress
save 影片评分, replace
*合并
merge 1:1 id using 影片英文名
drop _m
save `=`i'+1'~`=`i'+25', replace
}
clear
forvalues i =0(25)225 {
append using `=`i'+1'~`=`i'+25'
}
drop id
gen id = _n
*处理一些特殊符号
replace eng = ustrregexra(eng, "'", "'")
replace eng = ustrregexra(eng, "&", "&")
save 豆瓣影片英文, replace
*更改为烂番茄格式
use 豆瓣影片英文, clear
replace eng = ustrregexra(eng, "^The ", "")
replace eng = ustrregexra(eng, "^A ", "")
replace eng = ustrregexra(eng, "'", "")
replace eng = ustrregexra(eng, ":", "")
replace eng = ustrregexra(eng, " ", "_")
save 豆瓣烂番茄格式, replace
03爬取整个豆瓣影片烂番茄清单
通过对烂番茄网站的观察,只需要改变网址最后的电影名便可以跳转到该影片的评分页面,因此获得了豆瓣TOP250中的英文电影名便可以通过循环遍历得到其在烂番茄网上的评分。
*使用宏定位到被循环遍历的豆瓣电影英文名
clear all
cap mkdir "E:\电影爬虫\豆瓣top100"
cd "E:\电影爬虫\豆瓣top100"
clear
use 豆瓣烂番茄格式, clear
levelsof eng,local(films)
*获取local中每一个电影的烂番茄评分
*其中,如果某个电影在烂番茄中搜索不到,便使用continue跳过次循环,进入下一个循环。
local i 1
foreach film in `films' {
clear
cap copy "https://www.rottentomatoes.com/m/`film'" `film'.txt, replace
if fileexists("`film'.txt")==0 {
continue
}
infix strL v 1-100000 using `film'.txt, clear
replace v = ustrfrom(v,"utf-8",1)
keep if strpos(v,`"audiencescore=""') | strpos(v,`"tomatometerscore=""')
sxpose,clear
gen ascore = ustrregexs(0) if ustrregexm(_var1, "\d{2}")
gen tscore = ustrregexs(0) if ustrregexm(_var2, "\d{2}")
drop _var1
drop _var2
disp `"`film'"'
gen eng=`"`film'"'
local ++i
save film`i',replace
}
*合并
cd "E:\电影爬虫\豆瓣top100"
local film: dir . files "film*.dta"
foreach f in `film' {
append using `f'
}
save 评分, replace
use 评分, clear
merge m:1 eng using 豆瓣烂番茄格式
drop _m
drop id
drop if ascore=="" & tscore==""
replace ascore = ustrregexra(ascore, "10", "100")
replace tscore = ustrregexra(tscore, "10", "100")
save 总评分, replace
04进行相关性分析
use 总评分, clear
drop if ascore=="" | tscore==""
destring score ascore tscore , replace
gen _score = score*10
***获得相关性的显著性检验
pwcorr score ascore tscore, sidak sig
结论:由上文相关性分析可知,国际影界的口味并不相同。在国人眼里评分很高的豆瓣TOP电影在外网的评分并不相同。综上所述,可以得出结论:国内外的观影口味果然大不同!
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐 邮箱附件太多?Python帮你批量下载! 正则表达式之多次匹配
爬虫君为你的数据自由操碎了心!cnborder重磅推出!
基于Python的假设检验实现 Stata与MySQL交互--基础操作 Jupyter Notebook中的魔术命令 《Stata正则表达式》由中国金融出版社出版发行 匿名函数lambda到底怎么用?Stata绘图系列—NBER Working paper仿图
Camelot:从PDF中提取表格数据 Stata之计算财务指标——融资约束Stata绘图系列——玩转绘图通用选项之坐标轴玩转地图的好帮手--pyecharts
爬虫俱乐部又又又输送了一位研究助理!!! 【数据分析】一文教你玩转DataFrame【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新
带你玩转Stata编码一言不合就teamviewer 关于我们微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可
以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。