要求:通过给定的文件,选取文件中的导演与演员信息,并且将导演与每个演员的合作次数做一个整理

首先再开始任务之前先进行导包操作

电影的数据分析 电影数据分析师_数据

电影的数据分析 电影数据分析师_Code_02

1 import numpy as np
2 import pandas as pd
3 # 不发出警告
4 import warnings
5 warnings.filterwarnings('ignore') 
6 导入系统os模块
7 import os

View Code

第一步:利用os模块,将默认文件夹改为目标文件夹

 

电影的数据分析 电影数据分析师_数据

电影的数据分析 电影数据分析师_Code_02

1 # 这里的文件夹全路径根据电脑里面存储文件所在的位置具体填写
 2 os.chdir("D:\BaiduNetdiskDownload\数据分析网易\【非常重要】课程资料等多个文件\【非常重要】课程资料\CLASSDATA_ch05数据表达逻辑:结果输出及内容美化\CLASSDATA_ch05数据表达逻辑:结果输出及内容美化\CH03关系网络图表可视化\ch0304_data")
 3 
 4 # 读取excel数据
 5 df = pd.read_excel("豆瓣电影数据.xlsx", sheet_name=0, header=0)    
 6 
 7 # 查看数据信息
 8 print("数据总共:%i条" % len(df))
 9 print("数据字段为:\n", df.columns.tolist())
10 df.head(3)

View Code

查看文件数据的结果为:

电影的数据分析 电影数据分析师_电影的数据分析_05

 

 

第二步:进行数据清洗,提取需要的电影名字,导演,演员数据

电影的数据分析 电影数据分析师_数据

电影的数据分析 电影数据分析师_Code_02

1 # 提取导演,主演,电影名字数据
 2 data = df[["name", "主演", "导演"]]
 3 print(data.head(1))
 4 
 5 # 删除数据缺失值,并且替换原data数据
 6 data.dropna(inplace=True)
 7 
 8 # 获取演员信息,并且将它进行分割,生成一个新的df(expand字段的作用)
 9 data_yy = data["主演"].str.split("/", expand=True)
10 data_yy.columns = ["yy" + str(i)  for i in range(len(data_yy.columns))]
11 # 清洗后的演员数据
12 print(data_yy.head(1))
13 
14 data_dy = data["导演"].str.split("/", expand= True)
15 data_dy.columns = ["dy" + str(i) for i in range(len(data_dy.columns))]
16 # 清洗后的导演数据
17 print(data_dy.head(1))
18 
19 # 合并清洗完的导演,演员,电影名字数据
20 data_he = data_dy.join(data_yy).join(data["name"])
21 
22 #想查看为什么演员数据会有64列,这个代码是查看有64列的演员数据的电影信息
23 data_he[data_he["yy64"].notnull()]
24 data_he.head(1)

View Code

查看从原数据中提取的数据结果:

电影的数据分析 电影数据分析师_数据清洗_08

 

 经过数据清洗,并重新生成的演员导演df数据:

65列演员信息:

电影的数据分析 电影数据分析师_数据_09

 

 12列导演信息

 

电影的数据分析 电影数据分析师_Code_10

 

经过清洗过后重新生成的电影,导演,演员df数据:

电影的数据分析 电影数据分析师_Code_11

 

 

 第三步:将合并的df数据里面的按照导演,演员,名字进行分组成详细数据

电影的数据分析 电影数据分析师_数据

电影的数据分析 电影数据分析师_Code_02

1 # 定义一个空的,新的df数据
 2 data_new = pd.DataFrame(columns=["name", "导演", "演员"])
 3 # 获取演员df和导演df的columns列表信息
 4 col_yy = data_yy.columns
 5 col_dy = data_dy.columns
 6 
 7 # 遍历合并的df,将导演与演员一一对应,并且去除空数据
 8 for yy in col_yy:
 9     for dy in col_dy:
10         data_i = data_he[["name", dy, yy]].dropna()
11         data_i.columns = ["name", "导演", "演员"]
12        #将空的df数据与信生成的df数据进行连表操作
13         data_new = pd.concat([data_new, data_i])
14 print(data_new.head())

View Code

新生成的导演,演员,电影数据关系表格:

电影的数据分析 电影数据分析师_电影的数据分析_14

 

 第四步:将新生成的数据按照,导演,演员进行分组操作,并且结算合作次数

电影的数据分析 电影数据分析师_数据

电影的数据分析 电影数据分析师_Code_02

1 result = data_new.groupby(["导演", "演员"]).count()
2 #生成的数据由于有一对多的单元格展示,使用 reset_index()将所有索引级别转换为列,
3 result.reset_index(inplace=True)
4 result.columns=["导演", "演员", "合作次数"]
5 print(result.head())

View Code

查看新生成的df数据信息:

电影的数据分析 电影数据分析师_Code_17

 

 

第五步:将新生成的数据保存到目标文件夹中

电影的数据分析 电影数据分析师_数据

电影的数据分析 电影数据分析师_Code_02

1 writer = pd.ExcelWriter('teamwork.xlsx')
2 result.to_excel(writer,'sheet1')
3 writer.save()
4 
5 print("finished")

View Code

 

至此,数据清洗完毕,大功告成