首页 > 其他分享 >2024 年(第 7 届)“泰迪杯”数据分析技能赛A 题 自动化生产线数据分析

2024 年(第 7 届)“泰迪杯”数据分析技能赛A 题 自动化生产线数据分析

时间:2024-12-03 16:31:43浏览次数:9  
标签:数据分析 M102 泰迪杯 M101 result1 2024 故障 生产线 row

**

使用或者下载仅与作者联系后方可,否则视为侵权!!!!!

**

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['生产线'] = "M101"
result1_1_M102['生产线'] = "M102"
Repoet1_1 = pd.concat([result1_1_M101, result1_1_M102])
Repoet1_1 = Repoet1_1.groupby('生产线').agg({
   
    "产品总数(件)": "sum",
    "合格产品数(件)": "sum",
    "不合格产品数(件)": "sum"
}).reset_index()
Repoet1_1['合格率'] = round((Repoet1_1['合格产品数(件)'] / Repoet1_1['产品总数(件)']) * 100,2)
# 生产线全年的产品总数、合格产品数、不合格产品数与合格率
Repoet1_1

在这里插入图片描述

任务 1.2 分别列出两条生产线每次故障的相关信息,按照月份、日期和开始时间升序

排列,将结果分别存放到 result1_2.xlsx 的 M101 和 M102 工作表中(格式见表 3),并在报
告中给出各生产线每种故障一年中第 25 次发生的相关信息(格式见表 4)。
在这里插入图片描述

# 筛选非空故障类别的行
filtered_M101 = M101[M101['故障类别'].notnull()]
# 选择 '月份'、'日期'、'时间' 和 '故障类别' 这四列
filtered_M101 = filtered_M101[['月份', '日期', '时间', '故障类别']]
# 计算每两个连续行之间的时间差,即持续时长(秒)。
# diff() 函数计算当前行与前一行之间的差值,fillna(0) 用于填充第一行的差值,因为第一行没有前一行
filtered_M101['持续时长(秒)'] = filtered_M101['时间'].diff().fillna(0)
# 创建一个段标识,用于区分不同的故障段。如果持续时长不等于1秒,则表示一个新的故障段开始,段标识增加1。
filtered_M101['段标识'] = (filtered_M101['持续时长(秒)'] != 1).cumsum()
# 按照 '月份'、'日期'、'故障类别' 和 '段标识' 进行分组,
# 然后对每组数据计算 '时间' 的第一个值(即开始时间)和 '持续时长(秒)' 的计数(即故障段的数量)。
result1_2_M101 = filtered_M101.groupby(['月份', '日期', '故障类别', '段标识']).agg({
   
    '时间':
    'first',
    '持续时长(秒)':
    'count'
}).reset_index()
# 删除段标识列
result1_2_M101 = result1_2_M101.drop('段标识', axis=1)
# 将 '时间' 列重命名为 '开始时间'
result1_2_M101.rename(columns={
   "时间": "开始时间"}, inplace=True)
# 排序
result1_2_M101 = result1_2_M101.sort_values(['月份', '日期', '开始时间'])
result1_2_M101 = result1_2_M101[['月份', '日期', '开始时间', '故障类别', '持续时长(秒)']]

# 筛选非空故障类别的行
filtered_M102 = M102[M102['故障类别'].notnull()]
# 选择 '月份'、'日期'、'时间' 和 '故障类别' 这四列
filtered_M102 = filtered_M102[['月份', '日期', '时间', '故障类别']]
# 计算每两个连续行之间的时间差,即持续时长(秒)。
# diff() 函数计算当前行与前一行之间的差值,fillna(0) 用于填充第一行的差值,因为第一行没有前一行
filtered_M102['持续时长(秒)'] = filtered_M102['时间'].diff().fillna(0)
# 创建一个段标识,用于区分不同的故障段。如果持续时长不等于1秒,则表示一个新的故障段开始,段标识增加1。
filtered_M102['段标识'] = (filtered_M102['持续时长(秒)'] != 1).cumsum()
# 按照 '月份'、'日期'、'故障类别' 和 '段标识' 进行分组,
# 然后对每组数据计算 '时间' 的第一个值(即开始时间)和 '持续时长(秒)' 的计数(即故障段的数量)。
result1_2_M102 = filtered_M102.groupby(['月份', '日期', '故障类别', '段标识']).agg({
   
    '时间':
    'first',
    '持续时长(秒)':
    'count'
}).reset_index()
# 删除段标识列
result1_2_M102 = result1_2_M102.drop('段标识', axis=1)
# 将 '时间' 列重命名为 '开始时间'
result1_2_M102.rename(columns={
   "时间": "开始时间"}, inplace=True)
# 排序
result1_2_M102 = result1_2_M102.sort_values(['月份', '日期', '开始时间'])
result1_2_M102 = result1_2_M102[['月份', '日期', '开始时间', '故障类别', '持续时长(秒)']]
# 加载已存在的Excel文件
wb = load_workbook('./附件2/result1_2.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

# 将result1_2_M101的数据写入M101工作表
for r_idx, row in enumerate(result1_2_M101.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)

# 将result1_2_M102的数据写入M102工作表
for r_idx, row in enumerate(result1_2_M102.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_2.xlsx')

在这里插入图片描述

在这里插入图片描述

# 在报告中给出各生产线每种故障一年中第 25 次发生的相关信息
result1_2_M101 = pd.read_excel("./附件2/result1_2.xlsx", sheet_name="M101")
result1_2_M102 = pd.read_excel("./附件2/result1_2.xlsx", sheet_name="M102")

result1_2_M101['生产线'] = "M101"
result1_2_M102['生产线'] = "M102"

Repoet1_2 = pd.concat([result1_2_M101, result1_2_M102])

# 对数据按照生产线和故障类别进行分组,并计算每种故障的发生次数
Repoet1_2['发生次数'] = Repoet1_2.groupby(['生产线', '故障类别']).cumcount() + 1

# 筛选出每种故障的第 25 次发生记录
Repoet1_2 = Repoet1_2[Repoet1_2['发生次数'] == 25]

# 选择所需的列
Repoet1_2 = Repoet1_2[['生产线','故障类别','月份', '日期', '开始时间','持续时长(秒)']] \
.sort_values(['生产线','故障类别'])
Repoet1_2

在这里插入图片描述

任务 1.3 根据任务 1.2 的结果,分别统计两条生产线各类故障每天发生的总次数和平

均持续时长,按照生产线、月份、日期、故障类别升序排列,将结果存放到 result1_3.xlsx 中
(格式见表 5;如果某天没有指定类别的故障,则该天该故障的总次数为 0,平均持续时长
为 Null)。在报告中分别给出两条生产线各类故障发生的总次数、平均持续时长、故障发生
频率,并进行汇总(格式见表 6)。
在这里插入图片描述

# 将2条生产线数据合并
M101_13 = pd.read_excel('./附件2/result1_2.xlsx', sheet_name="M101")
M101_13["生产线"] = "M101"

M102_13 = pd.read_excel('./附件2/result1_2.xlsx', sheet_name="M102")
M102_13["生产线"] = "M102"

data_13 = pd.concat([M101_13, M102_13], ignore_index=True)
result1_3 = data_13.groupby(['生产线', '月份', '日期', '故障类别']).agg({
   
    "持续时长(秒)": 'mean',
    "开始时间": "count"  # 计算每个组的平均持续时长(秒)
}).reset_index()
result1_3.rename(columns={
   "持续时长(秒)": "平均持续时长(秒)", "开始时间": "总次数"}, inplace=True)
resul

标签:数据分析,M102,泰迪杯,M101,result1,2024,故障,生产线,row
From: https://blog.csdn.net/2201_75620196/article/details/144215715

相关文章

  • 2024最值得入手的5款设计协作软件
    在设计领域,团队协作是实现高效创作和快速迭代的关键。然而,设计团队面临的痛点不容忽视:不同角色之间沟通不畅、设计文件版本混乱、反馈周期过长、项目管理滞后等问题,常常让设计进程受阻。为了提升团队协作效率,许多协作工具应运而生,它们不仅帮助团队解决这些难题,还为设计流程注入了......
  • idea2023.x、2024.x 最新激活到2099年教程附资源(亲测有效)
    前言:本教程将指导您如何激活IntelliJIDEA2024.1.2版本。激活方法适用于Windows、MacOS和Linux系统,同样适用于JetBrains旗下的其他IDE,如Pycharm、WebStorm、PhpStorm等。此插件,不仅适用于2024的版本,2023、2022、2021的版本同样是适用的哦。1、安装IDEA首先要做的......
  • 2024最全CTF入门指南、CTF夺旗赛及刷题网站(建议收藏!)
    前言CTF(CaptureTheFlag)中文译作:夺旗赛CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式,2013年全球举办了超过五十场国际性CTF赛事。而DEFCON作为CTF赛制的发源地,DEFCON......
  • 2024年 值得去的50家互联网公司名单。。。 转载
    你好,我是郭震!2024再有一个月就要和我们说再见了。相信大家这一年又多了一些好的故事跟别人说,祝福关注我的读者朋友们,未来一切顺利。2024注定是不平凡的一年,AI继续突飞猛进的发展,目前国内互联网公司也都在着力应用AI迭代业务,继续降本增效。今天这篇文章,盘点2024年最新的互联网科......
  • NOIP 2024 游记 / 2024 OI 年终总结
    NOIP2024游记/2024OI年终总结赛前11.27在NOIP赛前最后一场信心赛中嗯造T4两个小时还不会。蓝题都做不出来,感觉把信心打没了。11.28模板大赛!复习了一些数据结构;复习了串串;Duel。11.29上午继续模板大赛,复习了图论;Duel。下午到达郑州,进酒店后一起狠人杀;高档宾馆就是......
  • 20222405 2024-2025-1 《网络与系统攻防技术》实验八实验报告
    1.实验内容1.1学习内容本周通过学习HTML,加深了对Web安全的理解。我掌握了表单的创建与使用,以及GET和POST方法。了解了MySQL的基本操作,包括数据库的创建、用户管理和表的操作。我学习了如何通过恶意SQL语句绕过认证并获取敏感数据,了解了使用预处理语句防止注入攻击。我还学习了X......
  • 【每日一题】20241203
    【每日一题】如图所示,将物块\(a\)分别放入光滑的\(A\)轨道和\(B\)轨道的最高点,以零初速度滑至轨道的最低点所用时间分别为\(t_1\)与\(t_2\).则已知\(A\)轨道与\(B\)轨道完全一至,则A.\(t_1>t_2\)B.\(t_1<t_2\)C.\(t_1=t_2\)D.\(t_1\geqt_2\)E.\(t_1\l......
  • 2024/12/2【链表】LeetCode 142 环形链表 II 【X】
    题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/题解链接:https://www.programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC没做出来......
  • 2024最新苹果群控,手机实现多设备同步管理
    对苹果群控技术实现多设备同步管理的简要介绍。###一、核心原理-苹果群控技术的基础是硬件连接,使用USB数据线或无线网络(Wi-Fi)将多台苹果手机与控制电脑连接起来。-在控制电脑上安装专门的群控软件是实现远程控制的关键步骤。-群控软件通过特定的远程控制协议与苹果手......
  • 20222407 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    1.实验内容1.1本周学习的内容是web安全中的XSS跨站脚本攻击、CRCS及其防范、burpsuit工具的使用方法。1.2实验要求:本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,......