大数据测试

1 导入数据

    tmdb_5000_movies="static/data/tmdb_5000_movies.csv"

    # 显示所有列

    pd.set_option('display.max_columns', None)

    # 显示所有行

    pd.set_option('display.max_rows', None)

    #显示宽度

    pd.set_option('display.width', None)

    df_tmdb_5000_movies = pd.read_csv(tmdb_5000_movies)

print(df_tmdb_5000_movies.head(3))

 

2 缺失值处理 缺失记录仅________条,采取网上搜索,补全信息。

2.1 补全 release_date

 print(df_tmdb_5000_movies[df_tmdb_5000_movies['release_date']!=df_tmdb_5000_movies['release_date']])#输出指定列为控制的行

#利用任何两个控制都不相等

 

缺失记录的电影标题为《America Is Still the Place》,日期为__ 2014-06-01__。

2.2 补全 runtime

    print(df_tmdb_5000_movies[df_tmdb_5000_movies['runtime']!=df_tmdb_5000_movies['runtime']])#输出指定列为控制的行

 

缺失记录的电影 runtime 分别为_______min 和 _______min。

Chiamatemi Francesco - Il Papa della gente  94.0

To Be Frank, Sinatra at 100 81.0

3 重复值处理

print(df_tmdb_5000_movies['id'].drop_duplicates())

 

运行结果:有___4803__个不重复的 id,可以认为没有重复数据。

4 日期值处理

将 release_date 列转换为日期类型:

    #df_tmdb_5000_movies['release_date'] = df_tmdb_5000_movies['release_date'].apply(lambda x: time.mktime(time.strptime(x, '%Y-%m-%d')))

#有比1970年小的年份,无法使用time.mktime转换

5 筛选数据

使用数据分析师最喜欢的一个语法:

评分人数vote_count

票房revenue、预算budget、受欢迎程度popularity、评分vote_average为___0__的数据应该去除;

评分人数过低的电影,评分不具有统计意义,筛选评分人数大于__100___的数据。

此时剩余______条数据,包含______个字段。

 

先对平分列进行一个简单的统计:

print(df_tmdb_5000_movies['vote_average'].describe())z

 

在对评论人数进行简单统计

print(df_tmdb_5000_movies['vote_count'].describe())

 

取100人小于100的去掉

print(df_tmdb_5000_movies[df_tmdb_5000_movies['vote_count']>=100].shape)

 

票房revenue、预算budget、受欢迎程度popularity、评分vote_average为___0__的数据应该去除;

    print(df_tmdb_5000_movies['revenue'].describe())#票房

    print(df_tmdb_5000_movies['budget'].describe())#预算

    print(df_tmdb_5000_movies['popularity'].describe())#受欢迎程度

    print(df_tmdb_5000_movies['vote_average'].describe())#评分的描述

    print(df_tmdb_5000_movies['vote_count'].describe())#评论人数的描述

    df_tmdb_5000_movies_vote=df_tmdb_5000_movies[df_tmdb_5000_movies['vote_count'] >= 100]#评论人数小于100的去掉

    print(df_tmdb_5000_movies_vote.shape)

    df_tmdb_5000_movies_vote_0=df_tmdb_5000_movies_vote[df_tmdb_5000_movies_vote['revenue']>0]

    print(df_tmdb_5000_movies_vote_0.shape)

    df_tmdb_5000_movies_vote_0 = df_tmdb_5000_movies_vote_0[df_tmdb_5000_movies_vote_0['budget'] > 0]

    print(df_tmdb_5000_movies_vote_0.shape)

    df_tmdb_5000_movies_vote_0 = df_tmdb_5000_movies_vote_0[df_tmdb_5000_movies_vote_0['popularity'] > 0]

    print(df_tmdb_5000_movies_vote_0.shape)

    df_tmdb_5000_movies_vote_0 = df_tmdb_5000_movies_vote_0[df_tmdb_5000_movies_vote_0['vote_average'] > 0]

print(df_tmdb_5000_movies_vote_0.shape)

 

 

 

 

最后剩下2715条

6 json 数据转换 **说明:

genres,

keywords,

production_

companies,

production_countries,

cast,crew

这 6 列都是 json 数据,需要处理为列表进行分析。 处理方法: json 本身为字符串类型,先转换为字典列表,再将字典列表转换为,以’,'分割的字符串

Genres

Keywords

production_companies

production_countries

spoken_languages

只有这几个是json字符串的格式

先将字符转换为字典,在取name属性进行拼接。

def to_str(key,df_tmdb_5000_movies_vote_0):

    str_list=[]

    for i in range(num):

        dictionary=eval(df_tmdb_5000_movies_vote_0[key].iloc[i])#eval将字符串转换为字典

        str=""

        for j in dictionary:

            str=str+j["name"]+","

        str_list.append(str)

df_tmdb_5000_movies_vote_0[key]=str_list

pass

 

 

print(df_tmdb_5000_movies_vote_0[key].head(10))

    to_str('genres', df_tmdb_5000_movies_vote_0)

    to_str('keywords', df_tmdb_5000_movies_vote_0)

    to_str('production_companies', df_tmdb_5000_movies_vote_0)

    to_str('production_countries', df_tmdb_5000_movies_vote_0)

    to_str('spoken_languages', df_tmdb_5000_movies_vote_0)

print(df_tmdb_5000_movies_vote_0.head(10))

 

 

 

 

 

可以看到这几个属性已经变为字符串以逗号分隔了

 

 

 

 

7 数据备份

保存为csv一份,数据库一份

df_tmdb_5000_movies_vote_0.to_csv('clean_df_tmdb_5000_movies.csv')

 

将csv导入到数据库,利用之前的大作业导入

 

posted @ 2021-12-07 23:52  风吹过半夏  阅读(178)  评论(0)    收藏  举报