内容:
题目 1、给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
题目 2:外卖平台订单数据分析
题目 3:酒店预订数据分析
题目 4:员工考勤数据分析
题目 5:企业销售业绩数据分析
题目 1、给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
示例:nums = [1, 3, -1, -3, 5, 3, 6, 7],k = 3,则滑动窗口的最大值依次为 [3, 3, 5, 5, 6, 7]。
代码解释如下:
def maxSlidingWindow(nums, k):
"""
使用双向队列(deque)实现滑动窗口最大值
时间复杂度:O(n)
"""
from collections import deque
if not nums or k == 0:
return []
if k == 1:
return nums
result = []
# deque存储的是数组的索引,保证deque中的元素是从大到小排列的
deq = deque()
for i in range(len(nums)):
# 移除窗口外的元素
if deq and deq[0] < i - k + 1:
deq.popleft()
# 保持deque单调递减
while deq and nums[i] >= nums[deq[-1]]:
deq.pop()
deq.append(i)
# 当窗口形成时,添加结果
if i >= k - 1:
result.append(nums[deq[0]])
return result
测试结果:
nums = [1, 3, -1, -3, 5, 3, 6, 7]
k = 3
print(f"滑动窗口最大值: {maxSlidingWindow(nums, k)}")
# 输出: [3, 3, 5, 5, 6, 7]
题目 2:外卖平台订单数据分析
“外卖订单数据.csv” 包含字段:“订单 ID”“商家类别”“配送距离 (km)”“配送时长 (分钟)”“订单金额 (元)”“配送费 (元)”“下单时间”。 请使用 pandas、numpy 和 matplotlib 完成以下任务:
-
- 读取 CSV 文件数据,计算实际收入(订单金额 + 配送费),添加为新列。
-
- 按 “商家类别” 分组,统计各类别的订单数、平均配送时长和总实际收入。
-
- 提取 “下单时间” 中的星期信息,统计每周各天的订单金额均值,绘制折线图。
-
- 计算配送距离与配送时长的相关系数。
-
- 找出总实际收入最高的 4 类商家,用饼图展示它们的收入占比。
代码解释如下:可做参考:
题目 3:酒店预订数据分析
“酒店预订数据.csv” 包含字段:“预订 ID”“酒店星级 (1-5 星)”“入住天数”“人均房价 (元)”“入住人数”“预订日期”“是否取消”。请使用 pandas 和 matplotlib 完成以下任务:
-
- 读取 CSV 文件数据,计算订单总金额(人均房价 × 入住人数 × 入住天数),添加为新列。
-
- 按 “酒店星级” 分组,统计未取消订单的平均入住天数、平均总金额和预订成功率(未取消数 / 总预订数)。
-
- 提取 “预订日期” 中的月份,统计每月的总预订量,绘制柱状图。
-
- 计算入住天数与总金额的相关系数。
-
- 筛选出未取消且入住天数 ≥3 天的订单,保存为 “长期入住订单.csv”(不含索引)。
代码解释如下,可做参考:
import pandas as pd
import matplotlib.pyplot as plt
# 1. 读取数据并计算订单总金额
try:
df = pd.read_csv('酒店预订数据.csv')
# 计算订单总金额
df['订单总金额'] = df['人均房价 (元)'] * df['入住人数'] * df['入住天数']
# 2. 按酒店星级分组统计
# 筛选未取消订单
not_cancelled = df[df['是否取消'] == '否']
star_stats = df.groupby('酒店星级 (1-5 星)').apply(lambda x: pd.Series({
'平均入住天数': x[x['是否取消'] == '否']['入住天数'].mean(),
'平均总金额': x[x['是否取消'] == '否']['订单总金额'].mean(),
'预订成功率': (x['是否取消'] == '否').sum() / len(x) * 100
})).round(2)
print("酒店星级统计:")
print(star_stats)
# 3. 统计每月总预订量并绘图
df['预订日期'] = pd.to_datetime(df['预订日期'])
df['月份'] = df['预订日期'].dt.month
monthly_bookings = df.groupby('月份').size()
plt.figure(figsize=(10, 6))
monthly_bookings.plot(kind='bar', color='skyblue')
plt.title('每月总预订量', fontsize=14)
plt.xlabel('月份', fontsize=12)
plt.ylabel('预订量', fontsize=12)
plt.xticks(rotation=0)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('每月预订量柱状图.png', dpi=100)
plt.show()
# 4. 计算入住天数与总金额的相关系数
correlation = not_cancelled['入住天数'].corr(not_cancelled['订单总金额'])
print(f"\n入住天数与总金额的相关系数: {correlation:.4f}")
# 5. 筛选长期入住订单
long_stay_orders = not_cancelled[not_cancelled['入住天数'] >= 3]
long_stay_orders.to_csv('长期入住订单.csv', index=False)
print(f"长期入住订单已保存,共{len(long_stay_orders)}条记录")
except FileNotFoundError:
print("请确保文件 '酒店预订数据.csv' 在当前目录下")
except Exception as e:
print(f"发生错误: {e}")
题目 4:员工考勤数据分析
“考勤数据.csv” 包含字段:“员工 ID”“部门”“日期”“签到时间”“签退时间”“请假类型 (无 / 事假 / 病假)”。请使用 pandas、numpy 和 matplotlib 完成以下任务:
-
- 读取 CSV 文件数据,计算每日工作时长(签退时间 - 签到时间,单位:小时),添加为新列。
-
- 按 “部门” 分组,统计各部门的平均工作时长、出勤率(无请假天数 / 总天数)。
-
- 提取 “日期” 中的星期信息,统计每周各天的请假人数,绘制柱状图。
-
- 计算员工工作时长的均值、中位数和标准差。
-
- 筛选出每月请假 ≥2 天的员工,保存为 “高频请假员工.csv”(不含索引)。
题目 5:企业销售业绩数据分析
“销售业绩数据.csv” 包含字段:“销售代表 ID”“区域”“产品类型”“成交数量”“产品单价 (元)”“成交日期”“客户等级 (A/B/C/D)”。请使用 pandas 和 matplotlib 完成以下任务:
-
- 读取 CSV 文件数据,计算成交总金额(成交数量 × 产品单价),添加为新列。
-
- 按 “区域” 和 “客户等级” 双重分组,统计不同区域、不同客户等级的平均成交金额。
-
- 提取 “成交日期” 中的季度信息(Q1-Q4),统计各季度的总成交金额,绘制柱状图。
-
- 找出总成交金额最高的 5 位销售代表,绘制水平柱状图展示结果。
-
- 计算成交数量与总金额的相关系数,并打印结果。
代码如下,可做参考: