现有txt文件“电影信息.txt”,其中三列分别为电影名称、导演和演员表,之间用分号分隔(同一个电影可能会有多个演员,每个演员姓名之间使用逗号分隔;同一部电影也可能有多个导演,多个导演之间用逗号分隔)任务:演员参演电影统计 统计每个演员参演的电影数量和分别有哪些电影,将结果按参演电影数量降序排列,并按照下列要求填入sheet中: 1. 在“电影信息统计.xlsx”文件中新增一个名为“演员参演统计”的sheet,统计每个演员参演的电影数量和参演电影列表。 2. 第一列填写演员名称,第二列填写演员参演电影数量,第三列填写演员参演电影列表。同一演员参演的多部电影在同一单元格中以逗号(,)分隔。 3. 按演员参演电影数量降序排列填入sheet,参演数量相同的演员按姓名升序排列。要求对任务定义函数并使用openpyxl和matplotlab实现电影数据分析任务:
时间: 2024-02-12 11:04:30 浏览: 67
好的,根据你的要求,我为您定义一个函数并使用openpyxl和matplotlab实现电影数据分析任务。代码如下:
```python
import openpyxl
import matplotlib.pyplot as plt
def actor_movie_stats(file_path):
# 读取电影信息文件
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
lines = [line.strip().split(';') for line in lines]
# 统计每个演员参演的电影数量和参演电影列表
actor_dict = {}
for line in lines:
actors = line[2].split(',')
for actor in actors:
actor = actor.strip()
if actor not in actor_dict:
actor_dict[actor] = {'count': 0, 'movies': []}
actor_dict[actor]['count'] += 1
actor_dict[actor]['movies'].append(line[0])
# 对演员参演电影数量降序排列,参演数量相同的演员按姓名升序排列
actor_stats = sorted(actor_dict.items(), key=lambda x: (-x[1]['count'], x[0]))
# 将结果写入Excel文件
wb = openpyxl.load_workbook('电影信息统计.xlsx')
ws = wb.create_sheet('演员参演统计', 0)
ws.cell(row=1, column=1).value = '演员名称'
ws.cell(row=1, column=2).value = '演员参演电影数量'
ws.cell(row=1, column=3).value = '演员参演电影列表'
for i, (actor, stats) in enumerate(actor_stats):
ws.cell(row=i+2, column=1).value = actor
ws.cell(row=i+2, column=2).value = stats['count']
ws.cell(row=i+2, column=3).value = ', '.join(stats['movies'])
# 绘制柱状图
x = [actor for actor, stats in actor_stats]
y = [stats['count'] for actor, stats in actor_stats]
plt.bar(x, y)
plt.xticks(rotation=90)
plt.xlabel('演员名称')
plt.ylabel('演员参演电影数量')
plt.title('演员参演电影数量统计')
plt.tight_layout()
plt.show()
# 保存Excel文件
wb.save('电影信息统计.xlsx')
```
该函数使用了openpyxl和matplotlab库来处理数据并绘制柱状图,具体步骤如下:
1. 使用open函数读取电影信息文件,按行读取并使用分号分隔成列表。
2. 统计每个演员参演的电影数量和参演电影列表,使用字典actor_dict来存储统计结果。
3. 对actor_dict按演员参演电影数量降序排列,参演数量相同的演员按姓名升序排列,使用sorted函数实现。
4. 使用openpyxl库创建新的sheet,将演员参演统计结果写入Excel文件中。
5. 使用matplotlab库绘制柱状图,x轴为演员名称,y轴为演员参演电影数量,使用plt.bar函数实现。
6. 显示柱状图并保存Excel文件。
你只需要调用函数并传入电影信息文件的路径,就可以完成这个任务了。比如:
```python
actor_movie_stats('电影信息.txt')
```
注意:该函数会将结果写入到已存在的Excel文件中,如果没有该文件,会自动创建。如果需要每次运行都创建新的Excel文件,请先删除原有文件。
阅读全文