目标:

读取数据,以“豆瓣评分”为标准,看看电影评分分布,及烂片情况

要求:

① 读取数据“moviedata.xlsx”
② 查看“豆瓣评分”数据分布,绘制直方图、箱型图
③ 判断“烂片标准” → 这里以上四分位数(该样本中所有数值由小到大排列后第25%的数字)评分为“烂片标准”
⑤ 筛选出烂片数据,并做排名,找到TOP20

提示:

① 读取数据之后去除缺失值


导入库

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import warnings
  5. warnings.filterwarnings('ignore')
  6. from bokeh.plotting import figure, show, output_file
  7. from bokeh.models import ColumnDataSource, HoverTool

数据读取

拿到数据(moviedata.xlsx)以后,首先要做的是提取数据,并去除评分小于0 的数据,代码如下:

  1. import os
  2. os.chdir('C:\\Users\\RaingEye\\Desktop\\数据分析项目实战\\国产烂片深度揭秘\\')
  3. df = pd.read_excel('moviedata.xlsx') #加载数据
  4. df = df[df['豆瓣评分'] > 0] #去掉豆瓣评分小于0的数据

查看数据(豆瓣评分情况)

  1. print(df['豆瓣评分'].describe())
  2. #做描述性统计
  3. df['豆瓣评分'].plot.hist(bins = 50, color = 'green', alpha = 0.6, figsize = (10, 4))
  4. #绘制柱状图
  5. df['豆瓣评分'].plot.box(vert = False, figsize = (10, 4), grid = True)
  6. #绘制箱型图
  7. #初步判断

上方代码,可以全部在Spyder的交互式工具栏中进行,如图所示:
图片.png图片.png
图片.png

KS检验

作出箱型图和柱状图、描述性统计、以及经过初步判断以后,下一步需要确认该数据是否服从正态分布,如下图代码:

  1. from scipy import stats #KS检验
  2. u = df['豆瓣评分'].mean() #均值
  3. std = df['豆瓣评分'].std() #Std
  4. print(stats.kstest(df['豆瓣评分'], 'norm', (u, std)))
  5. #KS检验,statistic值大于0.05,表明其值为正态分布
  6. #norm是指做正太检验

同样的,上述代码依旧可以在交互式窗口进行,如下图:
图片.png

烂片排名前TOP20

  1. #根据以上实验,将4.3分作为一个烂片的评判标准
  2. data_lp = df[df['豆瓣评分']<4.3].reset_index()
  3. #reset_index()可以还原索引,重新变为默认的整型索引,即数据更整齐
  4. lp_top20 = data_lp[['电影名称', '豆瓣评分', '主演', '导演']].sort_values(by = '豆瓣评分').iloc[:20].reset_index()
  5. del lp_top20['index']

根据上述结果的值可以表明,‘statistic’的值大于0.05,表明电影数据符合正态分布,烂片的评分标准为“小于4.3,”,根据结果筛选出烂片排名前20的电影数据,上方代码,依旧可以在交互式工具中实现,结果如图:
图片.png