豆瓣电影评分分析(数据分析)

本文主要通过对豆瓣电影爬取的数据进行的简要分析,观察得出各部分之间对应的关系影响。

一.数据抓取

我们要想进行数据分析,首先就要通过爬虫对分析对象网页的数据爬取保存,可以保存到数据库或者文件形式到本地,这里我是保存在表格中。既然获取了数据,那肯定要分析一下,豆瓣电影的各种详细的数据,评分,影评等等在国内同类型网站中,算是高质量的,所以进行数据分析也是有价值的。下面是爬取数据的关键步骤:

1.HTML解析

解析的工具有很多。比如:正则表达式、Beautifulsoup、Xpath、css等,这里采用xpath方法。

    #  构造第i页的网址
    url='https://movie.douban.com/top250?start='+str(25*i)
    header={'user-agent':'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'}
    #  发送请求,获得返回的html代码并保存在变量html中
    html = requests.get(url,headers=header)
    #将返回的字符串格式的html代码转换成xpath能处理的对象
    html=etree.HTML(html.text)

headers是设置反爬虫的措施

2.逐层查询信息

首先鼠标右键检查或者F12,打开当前网页的html代码。然后先单击右上角处的箭头,把鼠标移动到你要查找的信息上,右边就会显示你点击信息在html代码中的位置。一个网页的html代码是一层一层结构化的,非常规整的。每一对尖括号包起来的是一个标签,比如…,这就是一个span标签。span叫标签名,class="title"是标签的属性,“肖申克的救赎”是标签的内容。标签span在html代码中的完整路径应该是:
用xpath查找元素就是按照路径一层层找下去,[@id=“wrapper”]表示查找的标签的属性,用标签加上属性,我们可以更方便的定位,不用从头找到尾。div[1]、span[1]表示要查找的是该标签下的第1个div标签,第1个span标签。找到span标签可以用方法span[1]/text()取出其中的内容,pan[1]/@class可以取出属性值。

    datas = html.xpath('//ol[@class="grid_view"]/li')
    for data in datas:
        data_title=data.xpath('div/div[2]/div[@class="hd"]/a/span[1]/text()')#电影名称
        data_info=data.xpath('div/div[2]/div[@class="bd"]/p[1]/text()')#电影导演、主演、上映时间
        data_score=data.xpath('div/div[2]/div[@class="bd"]/div/span[@class="rating_num"]/text()')#评分
        data_num=data.xpath('div/div[2]/div[@class="bd"]/div/span[4]/text()')#评论人数

3.保存到CSV文件

	def write_dictionary_to_csv(self,dic,filename):
		#file_name='{}.csv'.format(filename)
		file_exists = os.path.isfile(filename)#判断是否为文件
		with open(filename, 'a',encoding='utf-8',newline='') as f: 
			headers=dic.keys()#dic是字典形式最后获取的所有信息
			w =csv.DictWriter(f,delimiter=',',lineterminator='\n',fieldnames=headers)
			#以字典形式向w中写入
			if not file_exists :
				w.writeheader()#保存数据
			w.writerow(dic)#单行写入
		print('当前行写入csv成功!')

二.数据可视化分析

2.1中国电影分布情况

首先对电影评分进行统计分析,由于电影数据只有top50,数据较少且都是排名靠前的电影,所以进行相应能得到符合现实情况的分析。
我们先来看看其中中国的影片:

mask1=data['country'].isin(['中国大陆','中国香港'])
data.loc[mask1]#找country列中名字是'中国大陆','中国香港'的行

可以发现中国影片在前50就占了7个,14%分布,其中霸王别姬排名第二(top从0开始)。可以发现中国影片在前50就占了7个,14%分布,其中霸王别姬排名第二(top从0开始)
这里我们可以把中国大陆和中国香港统称为中国,毕竟咱们都是一家人嘛,可以

countrys=list(data.country.unique())
data.loc[data['country']=='中国香港','country']='中国'#把country列中名字是中国香港的国家改为中国
data.loc[data['country']=='中国大陆','country']='中国'
mask2=data['country'].isin(['中国'])
data.loc[mask2]

对比上一个图可以看到全部改为了中国
对比上一个图可以看到全部改为了中国

2.2评分分布情况

plt.rcParams['figure.figsize']=(8,3)#图形大小
data.groupby(['year']).sum().plot(kind='bar')#x轴
plt.xticks(rotation=60)#夹角旋转60度
plt.ylabel('score',fontsize=15)#y轴及字号
plt.xlabel('Date',fontsize=15)#x轴及字号

这里本想着借助图形表分析随着年份的推移,有没有更好的电影出现,但这里由于评论人数基数相对于评分,星级太大,所以没有显示出来,不过根据评论人数的多少也是可以看出电影的受欢迎度,因此这个影响不大这里本想着借助图形表分析随着年份的推移,有没有更好的电影出现,但这里由于评论人数基数相对于评分,星级太大,所以没有显示出来,不过根据评论人数的多少也是可以看出电影的受欢迎度,因此这个影响不大

data.groupby('year').sum()['score']#每年好的评分作品有多少
plt.figure(figsize=(5,4))
data.groupby('year').sum()['score'].plot()#图形显示

电影所代表的那个年份里,对应的评分总和比较,发现在上世纪90年代好的电影层出不穷,达到顶峰电影所代表的那个年份里,对应的评分总和比较,发现在上世纪90年代好的电影层出不穷,达到顶峰

还可以对最受大众讨论热烈的电影进行划分三个等级,分析以评论人数为标准,得出热度等级

from matplotlib import pyplot as plt1
data=pd.read_csv(r'C:\Users\许元宵\Desktop\d.csv',encoding='gbk')
len1=len(data[data['commonnum'] >= 1500000])
len2=len(data[(data['commonnum'] < 1500000) & (data['commonnum'] >=1000000)])
len3=len(data[(data['commonnum'] < 1000000) & (data['commonnum'] >=100000)])

plt1.figure(figsize=(10,15)) #调节图形大小
labels = ['大于一百五十万','一百万到一百五十万','十万到一百万'] #定义标签
sizes = [len1,len2,len3]
colors = ['yellow', 'blue', 'red'] #每块颜色定义
explode = (0,0,0) #将某一块分割出来,值越大分割出的间隙越大
# 中文乱码和坐标轴负号处理
plt1.rcParams['font.sans-serif'] = ['KaiTi']

plt1.rcParams['axes.unicode_minus'] = False
patches,text1,text2 = plt.pie(sizes,
                      explode=explode,
                      labels=labels,
                      colors=colors,
                      autopct = '%3.2f%%', #数值保留固定小数位
                      shadow = False, #无阴影设置
                      startangle =90, #逆时针起始角度设置
                      pctdistance = 0.6) #数值距圆心半径倍数距离
#patches饼图的返回值,texts1饼图外label的文本,texts2饼图内部的文本
# x,y轴刻度设置一致,保证饼图为圆形
plt1.axis('equal')
plt1.title("豆瓣热门电影分布图")
plt1.legend()
plt1.show()

通过matplotlib可视化分析得出
在这里插入图片描述热度第一的电影占16%,第二占32%,第三占52%,说明评论越多的电影数量越少。

  • 24
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: 豆瓣电影数据分析实战需要对豆瓣电影网站上的电影数据进行收集、整理、分析和可视化,以了解电影市场的趋势,评估电影的受欢迎程度和质量等方面。具体的需求如下: 1. 数据收集:从豆瓣电影网站上收集电影的基本信息、评分、评论等数据。 2. 数据整理:对收集到的数据进行清洗、去重、补全等处理,使其符合分析需求。 3. 数据分析:使用统计学方法和机器学习算法对电影数据进行分析,例如:分析电影类型、地区、时间趋势,分析电影评分分布、受众群体等。 4. 可视化展示:将数据分析结果以图表、地图等形式进行可视化展示,让用户更直观地了解电影市场的情况。 5. 用户画像分析:根据用户评论数据进行用户画像分析,了解不同类型电影的受众群体特征,为电影推广和营销提供参考。 6. 推荐算法:运用协同过滤、基于内容的推荐等算法,为用户推荐更符合其兴趣和口味的电影。 ### 回答2: 豆瓣电影数据分析实战的需求分析主要包括以下几个方面。 首先,需要对豆瓣电影的数据进行采集和清洗。采集可以使用网络爬虫技术获取豆瓣电影的相关信息,如电影名称、导演、演员、评分、评论等。在进行数据清洗的过程中,需要处理缺失值、重复值、错误值等问题,以保证后续分析的准确性和可靠性。 其次,需要进行对电影数据的统计分析。可以对电影评分进行平均值、中位数等统计指标的计算,以了解豆瓣电影评分分布情况。还可以通过对不同类型电影评分进行对比,探究不同类型电影的受欢迎程度。此外,还可以对导演和演员进行统计分析,比如哪些导演/演员的电影评分更高,哪些导演/演员的电影更受欢迎等。 第三,需要进行电影数据的可视化展示。可以利用柱状图、折线图、饼图等可视化手段展示电影评分分布、不同类型电影评分对比、导演/演员的电影数量等信息,使分析结果更加直观和易于理解。 最后,可以进行电影推荐系统的开发。通过分析用户对电影评分和评论,可以利用机器学习和推荐算法为用户推荐个性化的电影。例如,可以根据用户的历史评分记录,利用协同过滤算法预测用户对未评分电影评分,并推荐评分较高的电影给用户。 综上所述,豆瓣电影数据分析实战的需求分析主要包括数据采集和清洗、统计分析、可视化展示以及电影推荐系统的开发等方面,通过这些分析和应用手段,可以更好地了解豆瓣电影评分情况、导演演员的影响力,同时为用户提供个性化的电影推荐服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值