美文网首页
爱奇艺视频网站数据清洗整理

爱奇艺视频网站数据清洗整理

作者: 一天天111 | 来源:发表于2019-10-20 09:36 被阅读0次

1.查看数据结构:
['数据获取日期', '演员', '视频ID','详细链接', '剧名','状态', '类型', '来源平台', '整理后剧名', '更新时间', '上映时间', '语言', '评分','地区','上映年份','简介', '导演','差评数', '评分人数', '播放量','更新至','总集数','第几季', '好评数']

2.求以下内容:
(1)填充缺失数据,字符串字段填充为"缺失数据",其他字段填充0.---if else
(2)清洗数据,'数据获取日期'列,格式:将2016年5月4日--->2016.5.4
(3)求好评率前20的导演,并用柱状图绘图。好评率:好评率 = 好评数 / 评分人数。
(4)判断从2001-2006年起数据是否有异常值(评分人数、好评人数)
(5)查看2001-2006年每年的正常数据。

3.代码操作:
(1)数据导入:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

from bokeh.plotting import figure,show,output_file
from bokeh.models import ColumnDataSource

from bokeh.models import HoverTool
from bokeh.palettes import brewer
from bokeh.models.annotations import BoxAnnotation
from bokeh.layouts import gridplot
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#解决绘图中文乱码问题

import os
os.chdir("/Users/liyili2/Downloads/datas/python_wei/04/")
video=pd.read_csv("爱奇艺视频数据.csv",encoding = 'GB18030')
print(video.head())
image.png

(2)处理缺失值

def data_cleaning(df):
    cols=df.columns
    for col in cols:
        if df[col].dtype=='object':
            df[col].fillna('缺失数据',inplace=True)
        else:
            df[col].fillna(0,inplace=True)
    return (df)

data_c1=data_cleaning(video)
image.png

(3)处理日期:

def data_time(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=data_time(data_c1,'数据获取日期')
print(data_c2.head())
image.png

(4)统计好评率前20的导演

df_dir=data_c2.groupby('导演')[['好评数','评分人数']].sum()
df_dir['好评率']=df_dir['好评数']/df_dir['评分人数']
top_20=df_dir.sort_values(['好评率'],ascending=False)[:20]

top_20['好评率'].plot(kind='bar',
      color='k',
      width = 0.8,
       alpha = 0.4,
       rot = 45,
       grid = True,
       ylim = [0.98,1],
       figsize = (12,4),
       title = '不同导演电影的好评率')
image.png

(5)判断从2001-2006年起数据是否有异常值(评分人数、好评人数)

data_c3=data_c2[['上映时间','好评数','评分人数']].drop_duplicates()
data_c3=data_c3[data_c3['上映时间']!=0]
data_c4=data_c3.groupby('上映时间')['好评数','评分人数'].sum()

fig,axes=plt.subplots(4,4,figsize=(20,16))
start = 2001
for i in range(4):
    for j in range(4):
        print(i,j)
        print(start)
        data = data_c3[data_c3['上映时间'] == start]
        sns.boxplot(data=data[['评分人数','好评数']],ax=axes[i,j])
  # 创建矩阵箱型图
        start += 1
            
image.png
image.png

(6)查看异常值

a = data_c3[data_c3['上映时间'] == 2001]
def data_error(df,col):
    q1 = df[col].quantile(q=0.25)  # 上四分位数
    q3 = df[col].quantile(q=0.75)  # 下四分位数
    iqr = q3 - q1   # IQR
    tmax = q3 + 3 * iqr  # 外限最大值
    tmin = q1 - 3 * iqr  # 外限最小值
#    print(tmax,tmin)
    return(tmax,tmin)#,tmin
# 创建函数,得到外限最大最小值


for i in range(2000,2016):
    datayear = data_c3[data_c3['上映时间'] == i]  # 筛选该年度的数据
    print('%i年有%i条数据' % (i,len(datayear)))  # 查看每年的数据量
    t = data_error(datayear,'评分人数')  # 得到外限最大最小值
    print(t)
    print(datayear[datayear['评分人数'] > t[0]])  # 查看评分人数大于外限最大值的异常值
    print('-------\n')
# 查看异常值信息,为什么大于这个值就可以,小于下限的值就不是异常值呢

相关文章

网友评论

      本文标题:爱奇艺视频网站数据清洗整理

      本文链接:https://www.haomeiwen.com/subject/pomvmctx.html