题目1:酒店入住数据分析
代码
python
体验AI代码助手
代码解读
复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv("酒店入住数据.csv")
df['入住日期'] = pd.to_datetime(df['入住日期'])
df['离店日期'] = pd.to_datetime(df['离店日期'])
# 计算入住天数和订单总费用
df['入住天数'] = (df['离店日期'] - df['入住日期']).dt.days
df['订单总费用'] = df['日房价 (元)'] * df['入住天数'] + df['额外消费 (元)']
# 按月统计
df['月份'] = df['入住日期'].dt.month
month_states = df.groupby('月份').agg({
'入住订单号':'count',
'入住人数':'mean'
}).rename(columns={"入住订单号":"订单量", "入住人数":"平均入住人数"})
# 费用分位数
quantiles = df['订单总费用'].quantile([0.25, 0.5, 0.75])
# 入住人数分组
def group_people(num):
if num == 1:
return '1人'
elif num == 2:
return '2人'
else:
return '3人及以上'
df['入住人数分组'] = df['入住人数'].apply(group_people)
states = df.groupby('入住人数分组').agg({
"入住订单号":"count",
"订单总费用":"mean"
}).rename(columns={"入住订单号":"订单数", "订单总费用":"平均总费用"})
# 可视化
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.bar(states.index, states["订单数"])
plt.title("订单数")
plt.show()
plt.bar(states.index, states["平均总费用"])
plt.title("平均总费用")
plt.show()
# 保存套房订单
new_df = df[df["房型"] == '套房']
new_df.to_csv("套房入住订单.csv", index=False)
结果展示
代码分析
- 使用
pd.to_datetime转换日期格式,便于计算天数差 - 入住天数计算采用
.dt.days提取整数天数 - 按月分组统计使用
groupby与agg聚合函数,分别计数与求均值 - 四分位数计算使用
quantile方法,中位数直接使用median - 入住人数分组通过自定义函数映射实现,逻辑清晰
- 可视化采用Matplotlib柱状图,支持中文显示
- 数据筛选使用布尔索引,导出时去除索引
题目2:物流配送数据分析
代码
python
体验AI代码助手
代码解读
复制代码
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("物流配送数据.csv")
df['发货时间'] = pd.to_datetime(df['发货时间'])
df['签收时间'] = pd.to_datetime(df['签收时间'])
# 计算总费用与耗时
df['配送总费用'] = df['基础配送费 (元)'] + df['超重费 (元)']
df['配送耗时'] = (df['签收时间'] - df['发货时间']).dt.total_seconds() / 3600
# 按日统计
df['发货月份'] = df['发货时间'].dt.month
df['发货天数'] = df['发货时间'].dt.day
df_states = df.groupby(['发货月份', '发货天数']).agg(
配送订单量=('运单号', 'count'),
平均配送距离=('配送距离 (km)', 'mean')
).reset_index()
# 耗时统计
df_data = df['配送耗时'].agg(['max', 'min', 'mean', 'std'])
df_data['变异系数'] = df_data['std'] / df_data['mean']
# 距离分组
def group_distance(dis):
if 0 < dis <=10:
return "0-10km"
elif 10 < dis <=20:
return "10-20km"
else:
return "20km+"
df['配送距离分组'] = df['配送距离 (km)'].apply(group_distance)
df['准时签收标签'] = df['是否准时签收'].map({'是':1, '否':0})
states = df.groupby('配送距离分组').agg(
准时签收率=('准时签收标签', 'mean'),
平均总配送费=('配送总费用', 'mean')
).reset_index()
# 可视化
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.bar(states['配送距离分组'], states['准时签收率'])
plt.title("准时签收率")
plt.show()
plt.bar(states['配送距离分组'], states['平均总配送费'])
plt.title("平均总配送费")
plt.show()
# 保存超时订单
new_df = df[df['配送耗时']> 24]
new_df.to_csv("超时配送订单.csv")
结果展示
代码分析
- 耗时计算使用
total_seconds转换为小时,精度更高 - 按月日双重分组使用
groupby多列,便于多维分析 - 变异系数手动计算,反映数据离散程度
- 距离分组使用自定义函数,逻辑分层明确
- 准时签收列通过映射转为数值,便于计算均值作为比例
- 超时订单筛选条件为耗时>24小时,直接导出CSV
题目3:医院门诊数据分析
代码
python
体验AI代码助手
代码解读
复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("医院门诊数据.csv")
# 高费用判断
df['是否高费用'] = np.where((df['诊疗费用 (元)'] + df['药品费用 (元)']) >= 500, '是', '否')
# 年龄分组
def group_age(age):
if 0 <= age <= 18:
return "0-18"
elif 19 <= age <= 40:
return "19-40"
elif 41 <= age <= 60:
return "41-60"
else:
return "60+"
df['年龄分组'] = df['患者年龄'].apply(group_age)
high_states = df.groupby(['科室', '年龄分组']).agg(
总就诊数=("就诊编号", 'count'),
高费用就诊数=("是否高费用", lambda x:(x=="是").sum())
).reset_index()
high_states['高费用就诊比例'] = high_states['高费用就诊数'] / high_states['总就诊数']
# 相关系数
corr = df['诊疗费用 (元)'].corr(df['药品费用 (元)'])
# 医保分组统计
states = df.groupby('是否医保报销').agg(
诊疗费用均值=("诊疗费用 (元)", 'mean'),
诊疗费用方差=("诊疗费用 (元)", 'var'),
药品费用均值=("药品费用 (元)", 'mean'),
药品费用方差=("药品费用 (元)", 'var')
)
# 科室平均总费用柱状图
df['总费用'] = df['诊疗费用 (元)'] + df['药品费用 (元)']
df_sales = df.groupby("科室")['总费用'].sum()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.bar(df_sales.index, df_sales)
plt.show()
结果展示
代码分析
- 高费用判断使用
np.where向量化操作,效率高 - 年龄分组函数覆盖全年龄段,分类合理
- 高费用比例计算使用自定义聚合函数
lambda,统计“是”的数量 - 相关系数使用
corr方法,衡量两个数值变量的线性关系 - 医保分组聚合一次性计算多个统计量,代码简洁
- 总费用柱状图展示科室费用分布,直观反映业务量差异
题目4:短视频平台用户行为数据分析
代码
python
体验AI代码助手
代码解读
复制代码
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("短视频行为数据.csv")
df['观看日期'] = pd.to_datetime(df['观看日期'])
# 按视频类型分组统计
df_states = df.groupby('视频类型').agg(
平均观看时长=('观看时长 (秒)', 'mean'),
平均点赞数=('点赞数', 'mean'),
活跃用户数=('用户ID', 'nunique')
).reset_index()
# 按月统计总观看时长(小时)
df['月份'] = df['观看日期'].dt.month
hour_month = df.groupby('月份')['观看时长 (秒)'].sum() / 3600
plt.plot(hour_month.index, hour_month)
plt.show()
# 相关系数
corr = df['观看时长 (秒)'].corr(df['点赞数'])
print(corr)
# 高分享记录筛选保存
new_df = df[df['分享数']>=10]
new_df.to_csv("高分享视频记录.csv")
结果展示
代码分析
- 使用
nunique统计去重用户数,反映真实活跃度 - 观看时长转换为小时,更符合业务理解
- 折线图适合展示时间趋势,直观反映月度变化
- 相关系数再次验证用户行为指标间的关联性
- 高分享筛选使用简单条件,导出为独立文件便于后续分析
总结
本文通过四个典型业务场景的数据分析任务,系统展示了Python在数据处理全流程中的应用能力:
-
数据清洗与转换:日期格式处理、类型转换、缺失值处理(未展示但常用)
-
指标计算:自定义列计算、分组统计、聚合函数使用
-
数据分组与透视:单层/多层分组、条件筛选、数据透视
-
统计描述:分位数、均值、方差、相关系数、比例计算
-
数据可视化:柱状图、折线图,支持中文标签
-
数据输出:CSV导出、条件筛选保存