现有txt文件“电影信息.txt”,其中三列分别为电影名称、导演和演员表,之间用分号分隔(同一个电影可能会有多个演员,每个演员姓名之间使用逗号分隔;同一部电影也可能有多个导演,多个导演之间用逗号分隔), 使用openpyxl和matplotlab实现电影数据分析任务:导演作品统计及可视化 对电影数据中的导演信息进行统计并生成柱状图,具体要求如下: 1. 在“电影信息统计.xlsx”文件中新增一个名为“导演作品统计”的sheet,统计每个导演执导的电影数量和执导电影列表。 2. 第一列填写导演姓名,第二列填写导演执导电影数量,第三列填写导演执导电影列表。如果同一导演中有多部电影,则多部电影之间以逗号(,)分隔。 3. 绘制横向柱状图,以电影数量为横坐标,以导演姓名为纵坐标。纵坐标从上到下按电影数量降序排列。 4. 在每个柱状图顶部标注出与其合作最多的演员姓名,若有多个演员,则演员名称以逗号(,)分隔。
时间: 2024-02-13 19:05:17 浏览: 169
好的,我明白了。这是一个很有趣的数据分析任务!我们可以使用openpyxl和matplotlib库来完成这个任务。
首先,我们需要读取“电影信息.txt”文件中的数据,统计每个导演执导的电影数量和执导电影列表。我们可以使用Python的字典来实现这个功能,代码如下:
```python
import openpyxl
# 读取txt文件中的电影数据
with open('电影信息.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 统计每个导演执导的电影数量和执导电影列表
director_dict = {}
for line in lines:
movie_info = line.strip().split(';')
directors = movie_info[1].split(',')
for director in directors:
if director not in director_dict:
director_dict[director] = {'count': 1, 'movies': [movie_info[0]]}
else:
director_dict[director]['count'] += 1
director_dict[director]['movies'].append(movie_info[0])
```
接下来,我们使用openpyxl库创建一个新的Excel文件,并在其中新增一个名为“导演作品统计”的sheet。然后,我们将导演的姓名、执导电影数量和执导电影列表分别写入第一列、第二列和第三列。代码如下:
```python
import openpyxl
# 创建一个新的Excel文件
wb = openpyxl.Workbook()
# 新增一个名为“导演作品统计”的sheet
ws = wb.create_sheet('导演作品统计')
# 写入表头
ws.cell(row=1, column=1, value='导演姓名')
ws.cell(row=1, column=2, value='执导电影数量')
ws.cell(row=1, column=3, value='执导电影列表')
# 写入导演信息
row_num = 2
for director in sorted(director_dict, key=lambda x: director_dict[x]['count'], reverse=True):
ws.cell(row=row_num, column=1, value=director)
ws.cell(row=row_num, column=2, value=director_dict[director]['count'])
ws.cell(row=row_num, column=3, value=','.join(director_dict[director]['movies']))
row_num += 1
# 保存Excel文件
wb.save('电影信息统计.xlsx')
```
最后,我们使用matplotlib库绘制横向柱状图,并在每个柱状图顶部标注出与其合作最多的演员姓名。代码如下:
```python
import openpyxl
import matplotlib.pyplot as plt
# 读取Excel文件中的导演信息
wb = openpyxl.load_workbook('电影信息统计.xlsx')
ws = wb['导演作品统计']
# 获取导演姓名、执导电影数量和执导电影列表
directors = []
counts = []
movies = []
for row in ws.iter_rows(min_row=2, max_col=3, values_only=True):
directors.append(row[0])
counts.append(row[1])
movies.append(row[2])
# 绘制横向柱状图
plt.barh(directors, counts)
plt.xlabel('执导电影数量')
plt.ylabel('导演姓名')
# 标注与其合作最多的演员姓名
for i, director in enumerate(directors):
actors = {}
for movie_info in movies[i].split(','):
actors_list = movie_info.split(',') # 注意这里是中文逗号
for actor in actors_list:
if actor not in actors:
actors[actor] = 1
else:
actors[actor] += 1
top_actor = max(actors, key=actors.get)
plt.text(counts[i], i, top_actor, ha='left', va='center')
# 显示图形
plt.show()
```
这样,我们就完成了这个电影数据分析任务。可以看到,使用Python进行数据分析非常方便,而且可以快速地获得有价值的结论。
阅读全文