项目概述
我们将完成以下步骤:
- 数据收集与准备
- 数据清洗与处理
- 数据分析
- 数据可视化(饼状图)
- 结果解读
步骤1:数据收集与准备
向AI助手提问:
"请帮我生成一个Python代码,模拟2024年春节档几部主要电影的票房数据,包括《哪吒2》、《热辣滚烫》、《飞驰人生2》、《第二十条》和《熊出没》的票房数据"
AI助手返回代码:
import pandas as pd
import numpy as np
# 设置随机种子保证可复现
np.random.seed(42)
# 模拟春节档电影数据
movies = ['哪吒2', '热辣滚烫', '飞驰人生2', '第二十条', '熊出没', '其他电影']
# 生成随机票房数据(单位:亿元)
box_office = np.random.randint(10, 40, size=len(movies)) * 0.5 + 15
box_office[-1] = np.random.randint(5, 15) # 其他电影票房较低
# 创建DataFrame
df_box_office = pd.DataFrame({
'电影名称': movies,
'票房(亿元)': box_office
})
# 计算总票房
total_box_office = df_box_office['票房(亿元)'].sum()
df_box_office['票房占比'] = df_box_office['票房(亿元)'] / total_box_office * 100
print(df_box_office)
步骤2:数据清洗与处理
虽然我们的数据是模拟生成的,但在真实项目中,数据清洗是重要步骤。我们可以询问AI如何进行基本的数据清洗。
向AI助手提问:
"如何检查并处理电影票房数据中的缺失值和异常值?"
AI助手返回代码:
# 检查缺失值
print("缺失值检查:")
print(df_box_office.isnull().sum())
# 检查异常值(假设票房超过40亿或低于1亿为异常)
print("\n异常值检查:")
abnormal = df_box_office[(df_box_office['票房(亿元)'] > 40) | (df_box_office['票房(亿元)'] < 1)]
print(abnormal)
# 处理异常值(这里只是示例,实际处理方式取决于业务需求)
if not abnormal.empty:
# 可以用中位数替换异常值
median_value = df_box_office['票房(亿元)'].median()
df_box_office.loc[abnormal.index, '票房(亿元)'] = median_value
# 重新计算占比
total_box_office = df_box_office['票房(亿元)'].sum()
df_box_office['票房占比'] = df_box_office['票房(亿元)'] / total_box_office * 100
步骤3:数据分析
现在我们来分析《哪吒2》的票房占比情况。
向AI助手提问:
"如何从电影票房数据中提取《哪吒2》的票房占比,并与其他电影进行比较?"
AI助手返回代码:
# 提取哪吒2的数据
nezha_data = df_box_office[df_box_office['电影名称'] == '哪吒2']
nezha_percentage = nezha_data['票房占比'].values[0]
# 其他电影总占比
other_percentage = 100 - nezha_percentage
print(f"《哪吒2》票房占比: {nezha_percentage:.2f}%")
print(f"其他电影总占比: {other_percentage:.2f}%")
# 计算排名
df_sorted = df_box_office.sort_values('票房(亿元)', ascending=False)
rank = df_sorted[df_sorted['电影名称'] == '哪吒2'].index[0] + 1
print(f"《哪吒2》票房排名: 第{rank}名")
步骤4:数据可视化
现在我们来创建饼状图展示《哪吒2》的票房占比。
向AI助手提问:
"请帮我用matplotlib创建一个美观的饼状图,展示《哪吒2》在春节档电影中的票房占比,要求有适当的标签、百分比和标题"
AI助手返回代码:
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 准备数据
labels = ['哪吒2', '其他电影']
sizes = [nezha_percentage, other_percentage]
colors = ['#ff9999', '#66b3ff']
explode = (0.1, 0) # 突出显示哪吒2
# 创建饼图
plt.figure(figsize=(8, 6))
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
plt.title('2024春节档《哪吒2》票房占比分析', fontsize=15, pad=20)
# 添加图例
plt.legend(labels, loc="best")
# 显示图形
plt.tight_
layout()
plt.show()
步骤5:高级可视化
如果我们想要更详细地展示所有电影的票房占比,可以创建一个完整的饼图。
向AI助手提问:
"如何创建一个展示春节档所有电影票房占比的饼状图,要求按照票房从高到低排序,并添加适当的样式?"
AI助手返回代码:
# 按票房排序
df_sorted = df_box_office.sort_values('票房(亿元)', ascending=False)
# 准备数据
labels = df_sorted['电影名称']
sizes = df_sorted['票房占比']
colors = plt.cm.tab20.colors[:len(labels)] # 使用tab20色系
# 创建饼图
plt.figure(figsize=(10, 8))
wedges, texts, autotexts = plt.pie(sizes, labels=labels, colors=colors,
autopct='%1.1f%%', startangle=140,
pctdistance=0.85, shadow=True)
# 设置文本样式
plt.setp(autotexts, size=10, weight="bold")
plt.setp(texts, size=10)
# 添加中心圆
centre_circle = plt.Circle((0,0), 0.70, fc='white')
fig = plt.gcf()
fig.gca().add_artist(centre_circle)
# 添加标题
plt.title('2024春节档电影票房占比分析', fontsize=16, pad=20)
# 显示图形
plt.tight_layout()
plt.show()
步骤6:结果解读与报告
最后,我们可以让AI帮助我们解读结果并生成简单的报告。
向AI助手提问:
"根据上面的票房数据分析结果,请帮我写一段简短的报告,解读《哪吒2》在春节档的表现。
AI助手返回文本:
根据票房数据分析,2024年春节档期间,《哪吒2》表现优异,票房占比达到XX.X%(具体数值取决于模拟数据),在春节档电影中排名第X。这一成绩表明:
作为国产动画电影的续作,《哪吒2》成功延续了前作的热度,获得了观众的广泛认可;
与其他类型电影相比,动画电影在春节档依然有稳定的受众群体;
《哪吒2》的票房占比显著高于春节档平均水平,显示出其强大的市场号召力。
建议后续可以进一步分析观众画像和口碑评价,以了解其成功因素并为未来动画电影的制作提供参考。
完整代码示例
以下是整合后的完整代码示例:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 1. 数据准备
np.random.seed(42)
movies = ['哪吒2', '热辣滚烫', '飞驰人生2', '第二十条', '熊出没', '其他电影']
box_office = np.random.randint(10, 40, size=len(movies)) * 0.5 + 15
box_office[-1] = np.random.randint(5, 15)
df_box_office = pd.DataFrame({
'电影名称': movies,
'票房(亿元)': box_office
})
# 2. 数据处理
total_box_office = df_box_office['票房(亿元)'].sum()
df_box_office['票房占比'] = df_box_office['票房(亿元)'] / total_box_office * 100
# 3. 数据分析
nezha_data = df_box_office[df_box_office['电影名称'] == '哪吒2']
nezha_percentage = nezha_data['票房占比'].values[0]
other_percentage = 100 - nezha_percentage
# 4. 数据可视化 - 哪吒2占比图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
labels = ['哪吒2', '其他电影']
sizes = [nezha_percentage, other_percentage]
colors = ['#ff9999', '#66b3ff']
explode = (0.1, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
plt.title('《哪吒2》票房占比')
# 5. 所有电影占比图
plt.subplot(1, 2, 2)
df_sorted = df_box_office.sort_values('票房(亿元)', ascending=False)
labels = df_sorted['电影名称']
sizes = df_sorted['票房占比']
colors = plt.cm.tab20.colors[:len(labels)]
wedges, texts, autotexts = plt.pie(sizes, labels=labels, colors=colors,
autopct='%1.1f%%', startangle=140,
pctdistance=0.85, shadow=True)
plt.setp(autotexts, size=8, weight="bold")
plt.setp(texts, size=8)
plt.title('春节档电影票房占比')
plt.tight_layout()
plt.show()
# 6. 输出分析结果
print("\n分析结果:")
print(f"《哪吒2》票房: {nezha_data['票房(亿元)'].values[0]:.2f}亿元")
print(f"《哪吒2》票房占比: {nezha_percentage:.2f}%")
df_sorted['排名'] = range(1, len(df_sorted)+1)
print("\n春节档电影票房排名:")
print(df_sorted[['排名', '电影名称', '票房(亿元)', '票房占比']].reset_index(drop=True))