'''
1、数据清洗 - 去除空值
'''
import numpy as np
import pandas as pd
data = pd.read_csv('C:/Users/HP/Desktop/爱奇艺视频数据.csv',engine = 'python')
def data_cleaning(df):
for col in df.columns:
if df[col].dtype == 'object':
df[col].fillna('缺失数据',inplace = True) #fillna方法填充缺失数据,注意inplace参数
else:
df[col].fillna(0,inplace = True)
return (df)
data_c1 = data_cleaning(data)
data_c1.iloc[20:30]
'''
2、数据清洗 - 时间标签转化
'''
def date_cleaning(df,*cols):
for col in cols:
df[col] = df[col].str.replace('年','.')
df[col] = df[col].str.replace('月','.')
df[col] = df[col].str.replace('日','.')
df[col] = pd.to_datetime(df[col]) # 需要将中文日期转化为非中文日期
return (df)
data_c2 = date_cleaning(data_c1,'数据获取日期')
'''
3、 分析出不同导演电影的好评率,并筛选出TOP20
'''
df_dir = data_c2.groupby('导演').sum()[['好评数','评分人数']] #好评率 = 好评数 / 评分人数
df_dir['好评率'] = df_dir['好评数']/df_dir['评分人数']
df_dir = df_dir.sort_values('好评率',ascending = False)[:20]
print(df_dir)
执行结果:
好评数 评分人数 好评率
导演
王静 5.601448e+06 5.602704e+06 0.999776
萧锋 4.415545e+07 4.416801e+07 0.999716
向灼 3.685386e+06 3.691240e+06 0.998414
乌兰塔娜 1.916524e+07 1.920091e+07 0.998142
徐宗政 3.113422e+06 3.123920e+06 0.996639
欧凡 3.088701e+06 3.100421e+06 0.996220
肖光辉 3.264290e+05 3.284140e+05 0.993956
张国立/罗长安 8.177111e+06 8.230880e+06 0.993467
刘逢声/林峰 3.591638e+06 3.617351e+06 0.992892
林添一 1.049628e+09 1.057556e+09 0.992504
毛尉光 1.747925e+06 1.766237e+06 0.989632
郭东旭 1.027664e+06 1.039609e+06 0.988510
苏沅峰/张艺腾 3.600976e+06 3.643071e+06 0.988445
袁刚/成志超 1.185439e+07 1.200596e+07 0.987375
胡雪杨 1.042170e+06 1.056247e+06 0.986673
丁晓雄 1.568219e+06 1.591727e+06 0.985231
延艺 4.094535e+07 4.157757e+07 0.984794
潇庸 5.338679e+06 5.427978e+06 0.983548
白羽/陈迅 1.705608e+07 1.737295e+07 0.981761
张蠡/姜峰 2.100617e+08 2.143382e+08 0.980047
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline
mpl.rcParams['font.sans-serif']=['SimHei'] #调整字体格式,防止中文不能显示
mpl.rcParams['axes.unicode_minus']=False
mpl.rcParams['font.size']=15 # 设置字体大小
fig = plt.figure(figsize = (15,6))
df_dir['好评率'].plot(kind = 'bar',
width = 0.8,
rot = 45,
color = 'grey',
ylim = (0.98,1),
alpha = 0.8,
edgecolor ='k')
plt.title('不同导演的好评率TOP20\n',fontsize = 20,color = 'k')
plt.grid(True,linestyle = '--',linewidth = 0.5,color = 'grey')
plt.xlabel('导演',fontsize = 15)
for i,j in zip(range(20),df_dir['好评率']):
plt.text(i-0.4,0.981,'%.4f'%j,fontsize = 12)
'''
4、统计分析2001-2016年每年评影人数总量
'''
q1data = data_c2[['上映年份','整理后剧名','导演']].drop_duplicates()
q1data = q1data[q1data['上映年份']!= 0]
q2data = data_c2.groupby('整理后剧名').sum()[['评分人数','好评数']]
q3data = pd.merge(q1data,q2data,left_on = '整理后剧名',right_index = True)
q4data = q3data.groupby('上映年份').sum()[['评分人数','好评数']]
print(q4data.head())
# 通过面积图,做图表可视化,分析每年人数总量变化规律。
fig1 = plt.figure(num = 1,figsize = (14,6))
q4data['评分人数'].loc[2001:].plot.area(grid = True,
alpha = 0.8,
)
plt.xticks(range(2001,2017))
plt.grid(True,linestyle = '--',linewidth = 0.5,color = 'grey')
plt.title('2001-2016年每年评影人数总量\n',color = 'k',fontsize = 20)
#通过箱型图验证异常值情况
fig,axes = plt.subplots(4,4,figsize = (14,18))
start = 2001
for i in range(4):
for j in range(4):
data = q3data[q3data['上映年份'] == start]
f = data[['评分人数','好评数']].boxplot(whis = 3,
sym = '+',grid = True,
return_type = 'dict',
ax = axes[i,j])
start += 1
运行结果:
评分人数 好评数
上映年份
1937.0 84367.0 63120.0
1985.0 163064.0 135462.0
1986.0 58593.0 41216.0
1987.0 3930018.0 3728651.0
1988.0 410722.0 337484.0
'''
验证是否有异常值(极度异常)
筛选查看异常值 → 是否异常值就是每年的热门电影?
'''
# 创建函数分析出数据外限最大最小值
def data_e(df,col):
q1 = df[col].quantile(q = 0.25) # 通过quantile(q=0.5)方法,得到四分位数
q3 = df[col].quantile(q = 0.75)
iqr = q3 - q1 # IQR=Q3-Q1
tmax = q3 + 3*iqr # 外限:最大值区间Q3+3IQR
tmin = q1 - 3*iqr # 最小值区间Q1-3IQR (IQR=Q3-Q1)
return (tmax,tmin)
for i in range(2001,2017):
data_year = q3data[q3data['上映年份'] == i]
print('%i年有%i条数据'%(i,len(data_year)))
t = data_e(data_year,'评分人数')
print(t)
print(data_year[data_year['评分人数']>t[0]])
下面是2015-2016年的结果
2015年有324条数据
(8785182.0, -6582672.25)
上映年份 整理后剧名 导演 评分人数 好评数
98 2015.0 特警力量 刘猛 38965035.0 34765796.0
116 2015.0 小爸妈 毛小睿 13843324.0 10845473.0
263 2015.0 仙侠剑 朱锐斌 12257353.0 8589762.0
281 2015.0 抓住彩虹的男人 吴锦源/邓衍成 16323976.0 13230803.0
430 2015.0 地雷战 焦晓雨 9350124.0 7335714.0
476 2015.0 千金女贼 陈玉珊/马华干/周晓鹏 57678789.0 49943512.0
587 2015.0 大舜 吴子牛 8865405.0 6782176.0
652 2015.0 花火 邹集城 12446127.0 10594296.0
743 2015.0 鸳鸯佩 黄家辉 17827128.0 12909386.0
1106 2015.0 野山鹰 虎子/张文东 9643269.0 6707485.0
1366 2015.0 2胎时代 滕文骥/王为 24608401.0 21156992.0
1663 2015.0 冰与火的青春 潘镜丞 47471498.0 38431391.0
1674 2015.0 加油吧实习生 孙皓 198990274.0 175397693.0
1730 2015.0 左手劈刀 李印 10972150.0 8111186.0
1774 2015.0 克拉之恋 陈铭章 11178336.0 9864390.0
1775 2015.0 克拉恋人 陈铭章 301107808.0 256092092.0
1805 2015.0 神犬小7 王小列 82828676.0 76041178.0
1857 2015.0 俺娘田小草 王梓 11559426.0 8039081.0
1968 2015.0 爱情公寓番外篇 韦正 13816459.0 12222270.0
2018 2015.0 我的媳妇是女王 俞钟 17072270.0 14224495.0
2033 2015.0 聊斋新编 黄祖权/蓝志伟/麦炳华/谭朗昌 10692667.0 8420913.0
2084 2015.0 多情江山 李惠民/白云默 33151339.0 25256433.0
2121 2015.0 少年神探狄仁杰 林峰 35482235.0 31894395.0
2142 2015.0 锦绣缘华丽冒险 林合隆 54482448.0 46376708.0
24177 2015.0 熊出没之冬日乐翻天 缺失数据 8967986.0 6191465.0
2016年有77条数据
(7406404.0, -5545542.0)
上映年份 整理后剧名 导演 评分人数 好评数
282 2016.0 寂寞空庭春欲晚 吴锦源 39880567.0 34573682.0
358 2016.0 青丘狐传说 林玉芬/高林豹/徐惠康 41505217.0 35920680.0
769 2016.0 山海经之赤影传说 朱锐斌 36172373.0 31617163.0
983 2016.0 煮妇神探 吴锦源/冯柏源 57826201.0 52276038.0
1123 2016.0 武神赵子龙 袁英明/程力栋/国建勇 37148312.0 31850186.0
92960 2016.0 武神赵子龙 梁胜权/国建勇 37148312.0 31850186.0
1878 2016.0 因为爱情有幸福 刘俊杰 35075669.0 30790737.0
1935 2016.0 5鼠闹东京 吴家骀 13576509.0 11748866.0