1 读取数据,以“豆瓣评分”为标准,看看电影评分分布,及烂片情况
要求:
① 读取数据“moviedata.xlsx”,去除缺失值
② 查看“豆瓣评分”数据分布,绘制直方图、箱型图
③ 判断“烂片标准” → 这里以上四分位数(该样本中所有数值由小到大排列后第25%的数字)评分为“烂片标准”
④ 筛选出烂片数据,并做排名,找到TOP20
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 不发出警告
from bokeh.io import output_notebook
output_notebook()
# 导入notebook绘图模块
from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource,HoverTool
# 导入图表绘制、图标展示模块
# 导入ColumnDataSource模块
# 查看数据,数据清洗
import os
os.chdir(r'E:\Python数据分析\项目\国产烂片深度揭秘')
# 创建工作路径
df = pd.read_excel('moviedata.xlsx')
df = df[df['豆瓣评分'] > 0]
print('初步清洗后数据量为%i条' % len(df))
# 读取数据
# 删除“豆瓣评分”小于等于0的值
# 查看豆瓣评分情况
fig = plt.figure(figsize = (10,6))
plt.subplots_adjust(hspace=0.2)
# 创建绘图空间
ax1 = fig.add_subplot(2,1,1)
df['豆瓣评分'].plot.hist(stacked=True,bins=50,color = 'green',alpha=0.5,grid=True)
plt.ylim([0,150])
plt.title('豆瓣评分数据分布-直方图')
# 绘制直方图
ax2 = fig.add_subplot(2,1,2)
color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')
df['豆瓣评分'].plot.box(vert=False, grid = True,color = color)
plt.title('豆瓣评分数据分布-箱型图')
# 绘制箱型图
df['豆瓣评分'].describe()
# 判断是否符合正态分布
from scipy import stats
# 导入相关模块
u = df['豆瓣评分'].mean() # 计算均值
std = df['豆瓣评分'].std() # 计算标准差
stats.kstest(df['豆瓣评分'], 'norm', (u, std))
# 这里p值大于0.05,为正态分布
# 结论:以样本数据上四分位数为烂片评判标准 → 4.3分
# 筛选出烂片数据,并做排名,找到TOP20
data_lp = df[df['豆瓣评分']<4.3].reset_index()
print('数据整理后,得到烂片数据量为%i条' % len(data_lp))
# 筛选烂片数据
lp_top20 = data_lp[['电影名称','豆瓣评分','导演','主演']].sort_values(by = '豆瓣评分').iloc[:20].reset_index()
del lp_top20['index']
lp_top20
# 查看烂片top20
烂片评价标准:4.3分,整理后烂片数据大概546条
2 什么题材的电影烂片最多?
要求:
① 按照“类型”字段分类,筛选不同电影属于什么题材
② 整理数据,按照“题材”汇总,查看不同题材的烂片比例,并选取TOP20
③ 将得到的题材烂片比例TOP20制作散点图 → 横坐标为“题材”类型,纵坐标为烂片比例,点大小为样本数量
提示:
① 删除“类型”字段空值的数据
② 由于一个电影“类型”会有多个,这里需要将一个电影每个“类型”都识别出来,在统计某个题材时都需要计算,例如:
如果一个电影的类型为:“喜剧/爱情”,则在计算“喜剧”、“爱情”题材的烂片比例时,都需要将该电影算上