2024 年(第 7 届)“泰迪杯”数据分析技能赛A 题 自动化生产线数据分析
一等奖并获泰迪杯
一、背景
随着信息技术的快速发展,工业自动化领域的智能控制系统日益完善。自动化生产线能够独立完成从物料输送到元件抓取,再到产品安装和质量检验的各个环节,这不仅极大提升了制造效率和产品质量,也有效降低了生产成本。
为了使企业的管理层和工程技术人员及时掌握生产线的运行状况和潜在问题,需要对生产线产生的数据进行深入分析,从而提高生产线的生产效率,减少产品的次品率。
二、目标
(1) 数据整理与统计。
(2) 生产线运行情况的可视化分析。
(3) 生产线影响因素分析。
三、任务
附件 1 中的文件 M101.csv、M102.csv 分别记录了某生产企业两条生产线全年加工处理过程中各个工序的生产线数据。请编程完成以下任务,根据附件 2 中的模板文件保存结果,并撰写报告,在报告中详细描述各项任务的处理思路、过程及必要的结果。所有实数类型的结果保留两位小数。
任务 1 数据整理与统计
任务 1.1
分别统计两条生产线每天的产品总数(包含不合格产品)、合格产品数、不合格产品数与合格率,将结果分别存放到 result1_1.xlsx 的 M101 和 M102 工作表中(格式见表 1),并在报告中给出各生产线全年的产品总数、合格产品数、不合格产品数与合格率(格式见表 2)。
导入所需库
import numpy as np
import pandas as pd
读取文件
M101 = pd.read_csv("./附件1/M101.csv", encoding="gbk")
M102 = pd.read_csv("./附件1/M102.csv", encoding="gbk")
print(M101['月份'].unique())
print(M101['日期'].value_counts())
print(M101['时间'].max())
print(12 * 28799)
# 月份一共12个月,日期为每个月的每天,时间为每天的总时长,按秒计算
# 分别统计两条生产线每天的产品总数(包含不合格产品)、合格产品数、不合格产品数与合格率
# 将结果分别存放到 result1_1.xlsx 的 M101 和 M102 工作表中(格式见表 1)
# 并在报告中给出各生产线全年的产品总数、合格产品数、不合格产品数与合格率(格式见表 2)。
grouped_101 = M101.groupby(["月份", "日期"]).agg({
"检测累计数": "max",
"合格产品累计数": "max",
"不合格产品累计数": "max"
})
grouped_101.columns = ['产品总数(件)', '合格产品数(件)', '不合格产品数(件)']
grouped_101['合格率(%)'] = round(
(grouped_101['合格产品数(件)'] / grouped_101['产品总数(件)'] * 100), 2)
grouped_101.reset_index(inplace=True)
grouped_102 = M102.groupby(["月份", "日期"]).agg({
"检测累计数": "max",
"合格产品累计数": "max",
"不合格产品累计数": "max"
})
grouped_102.columns = ['产品总数(件)', '合格产品数(件)', '不合格产品数(件)']
grouped_102['合格率(%)'] = round(
(grouped_102['合格产品数(件)'] / grouped_102['产品总数(件)'] * 100), 2)
grouped_102.reset_index(inplace=True)
from openpyxl import load_workbook
# 加载已存在的Excel文件
wb = load_workbook('./附件2/result1_1.xlsx')
# 获取工作表M101和M102
ws_101 = wb['M101']
ws_102 = wb['M102']
# 确定开始写入数据的行号,通常是已有数据的下一行
start_row_101 = ws_101.max_row + 1
start_row_102 = ws_102.max_row + 1
# 将grouped_101的数据写入M101工作表
for r_idx, row in enumerate(grouped_101.itertuples(index=False),
start=start_row_101):
for c_idx, value in enumerate(row, start=1):
ws_101.cell(row=r_idx, column=c_idx, value=value)
# 将grouped_102的数据写入M102工作表
for r_idx, row in enumerate(grouped_102.itertuples(index=False),
start=start_row_102):
for c_idx, value in enumerate(row, start=1):
ws_102.cell(row=r_idx, column=c_idx, value=value)
# 保存工作簿
wb.save('./附件2/result1_1.xlsx')
result1_1_M101 = pd.read_excel("./附件2/result1_1.xlsx", sheet_name="M101")
result1_1_M102 = pd.read_excel("./附件2/result1_1.xlsx", sheet_name="M102")
result1_1_M101