2021年美国数学建模C题的数据处理

article/2025/3/16 13:34:39

2021年美国数学建模C题的数据处理

  • C题数据分类存放部分
  • 批量提取图像数据
  • 转化jpg图像格式

C题数据分类存放部分

在拿到C题的数据后,避让要做的一个事情是图像数据的分类。根据2021MCM_ProblemC_ Images_by_GlobalID表格中,可以将图片和ID号对应起来,而ID号在2021MCMProblemC_DataSet表格中明确标识了Positive ID 、Negative ID、Unverified和Unprocessed。因此,在将类别跟ID对应起来后,就可以将数据进行分类,这里我是将图片划分到不同的文件夹中,使用的表格,是我将ID和Lab Status对应起来后的Images_by_GlobalID表格。
在这里插入图片描述
python代码如下

# 系统操作
import os
# 文件移动
import shutil
import cv2
import matplotlib.pyplot as plt
import numpy as np
import cv2
import pandas as pdname = "2021MCM_ProblemC_ Images_by_GlobalID.xlsx"
df = pd.read_excel(name,header = 0,engine='openpyxl')
dfdef remove(path, output):"""path:存放图像数据的文件夹路径output:将图像数据转移分类的目标路径"""pos = os.path.join(output, 'POS')neg = os.path.join(output, 'NEG')unp = os.path.join(output, 'UNP')unv = os.path.join(output, 'UNV')# 如果该文件夹不存在则创建文件夹if not os.path.exists(output):print("创建目标文件夹")os.makedirs(output)os.makedirs(pos)os.makedirs(neg)os.makedirs(unv)os.makedirs(unp)for i in range(listname.shape[0]):try:if listname.loc[i]["Lab Status"]=="Positive ID":print("找到正例")name = listname.loc[i]["FileName"]src = os.path.join(path, name)dst = os.path.join(pos, name)shutil.copyfile(src, dst)elif listname.loc[i]["Lab Status"]=="Negative ID":name = listname.loc[i]["FileName"]src = os.path.join(path, name)dst = os.path.join(neg, name)shutil.copyfile(src, dst)elif listname.loc[i]["Lab Status"]=="Unverified":name = listname.loc[i]["FileName"]src = os.path.join(path, name)dst = os.path.join(unv, name)shutil.copyfile(src, dst)elif listname.loc[i]["Lab Status"]=="Unprocessed":name = listname.loc[i]["FileName"]src = os.path.join(path, name)dst = os.path.join(unp, name)shutil.copyfile(src, dst)except IOError:print("获取文件异常")
remove(r"C:\Users\13086\Desktop\2021MCM_ProblemC_Files", "E:\jupyter文件\data")

最后得到的效果是,在我的目标路径中,创建了四个类别名称的文件夹,每个文件夹下存放着对应类别的图像数据。如下图
在这里插入图片描述
在这里插入图片描述

批量提取图像数据

将压缩包中的图片解压出来

import zipfile
def Unpack_zip(filepath, dir_path):"""参数:filepath:压缩包路径dir_path:解压目标路径函数作用:将压缩包解压目标路径并删除压缩包"""try:# open the zipextracting = zipfile.ZipFile(filepath)# 解压到路径extracting.extractall(dir_path)# close zipextracting.close()os.remove(filepath)except:name = os.path.split(filepath)[-1]print(name+" 文件提取异常, 文件路径为:"+filepath+ " 存储位置为:"+dir_path)

将pdf中的图片提取出来

import pdf2image
import tempfile
import os
def pdf2image2(file_path, dir_path):"""参数:file_path:pdf文件路径dir_path:图像保存路径作用:将pdf中的图像提取到目标路径中,并删除pdf文件"""try:images = pdf2image.convert_from_path(file_path, dpi=200)if not os.path.exists(dir_path):os.makedirs(dir_path)i = 0for image in images:# 根据路径生成图片的名称name = os.path.split(file_path)[-1] # 提取包含后缀名的文件名new_name = os.path.splitext(name)[0] + "image{}.png".format(i) # 修改后缀名new_path = os.path.join(dir_path, new_name)image.save(new_path, 'png')i+=1os.remove(file_path)except:name = os.path.split(file_path)[-1]print(name+" 文件提取异常, 文件路径为:"+file_path+ " 存储位置为:"+dir_path)

将视频文件转化为图像文件

import numpy as np
import os
import cv2
import matplotlib.image as mp
def get_pic_from_mov(filename, dir_path):"""参数:filename:视频文件路径dir_path:图像保存路径作用:将视频文件中的第一帧图像提取到目标路径中,并删除视频文件"""try:# 从文件读取视频内容cap = cv2.VideoCapture(filename)# ret 读取成功True或失败False# frame读取到的图像的内容# 读取一帧数据ret,frame = cap.read();assert ret==True, "图像读取失败"# 根据路径生成图片的名称name = os.path.split(filename)[-1] # 提取包含后缀名的文件名new_name = os.path.splitext(name)[0] + ".jpg" # 修改后缀名new_path = os.path.join(dir_path, new_name)if not os.path.exists(dir_path):os.makedirs(dir_path)mp.imsave(new_path,frame)cap.release()os.remove(filename) # cv.write()只能使用英文路径,同时会打开文件占用视频文件导致无法删除视频except:name = os.path.split(filename)[-1]print(name+" 文件提取异常, 文件路径为:"+filename+ " 存储位置为:"+dir_path)

将word中的图片提取出来

import zipfile
import os
import shutil
def word2pic(path, tmp_path, store_path):'''参数param path:源文件param tmp_path:中转图片文件夹param store_path:最后保存结果的文件夹(需要手动创建)作用:将docx文件中的图片提取到目标路径中'''try:imgType = os.path.splitext(path)[-1]assert imgType==".docx", "文件并非docx,只有docx文件才能转化为zip"zip_path = os.path.splitext(path)[0] + ".zip"if not os.path.exists(tmp_path):print("创建目标文件夹")os.makedirs(tmp_path)if not os.path.exists(store_path):print("创建目标文件夹")os.makedirs(store_path)# 将docx文件重命名为zip文件os.rename(path, zip_path)# 进行解压f = zipfile.ZipFile(zip_path, 'r')# 将图片提取并保存for file in f.namelist():f.extract(file, tmp_path)# 释放该zip文件f.close()# 将docx文件从zip还原为docxos.rename(zip_path, path)# 得到缓存文件夹中图片列表pic = os.listdir(os.path.join(tmp_path, 'word/media'))# 将图片复制到最终的文件夹中for i in pic:# 根据word的路径生成图片的名称name = os.path.split(path)[-1]new_name = os.path.splitext(name)[0] + inew_path = os.path.join(store_path, new_name)print(new_path)# 复制到对应文件夹下shutil.copy(os.path.join(tmp_path + '/word/media', i),  new_path)# 删除缓冲文件夹中的文件,用以存储下一次的文件for i in os.listdir(tmp_path):Type = os.path.splitext(i)[-1]# 如果是文件夹则删除if os.path.isdir(os.path.join(tmp_path, i)):shutil.rmtree(os.path.join(tmp_path, i))# 如果是xml文件,同样删除elif Type==".xml":os.remove(os.path.join(tmp_path, i))os.remove(path)except:name = os.path.split(path)[-1]print(name+" 文件提取异常, 文件路径为:"+path+ " 存储位置为:"+store_path)

使用上述编好的函数,将对应的文件提取图像文件

def get_image(path,tmp_path):"""参数:path: 目标文件夹路径tmp_path: 数据缓冲路径作用:检测.mp4、.MOV .mov .MP4的视频文件,.pdf的pdf文件,.docx的word文件,.zip的压缩包文件,并从中提取出图像存储在目标路径中"""for name in os.listdir(path):filepath = os.path.join(os.path.split(path)[0],name)Type = os.path.splitext(name)[-1]dir_path = os.path.split(fielpath)[0]if Type==".mp4" or Type==".MOV" or Type==".mov" or Type==".MP4":get_pic_from_mov(filepath, dir_path)elif Type==".pdf":pdf2image2(filepath, dir_path)elif Type==".docx":word2pic(filepath, tmp_path, dir_path)elif Type==".zip":Unpack_zip(filepath, dir_path)

由于在分好类的文件夹中,只有NEG文件夹和UNV文件夹中有非图片文件的数据文件,因此支队这两个文件夹进行提取。

fielpath = "E:/jupyter文件/data/NEG/"
tmp_path = "E:/jupyter文件/2021年美赛/pic"
get_image(fielpath,tmp_path)
path = "E:/jupyter文件/data/UNV/"
tmp_path = "E:/jupyter文件/2021年美赛/pic/"
get_image(path,tmp_path)

转化jpg图像格式

由于png图像除了RGB三个颜色通道外,还有第四个透明度的通道。因此,为了将所有图片格式统一,需要将四个文件夹中的png图片文件转化为jpg格式。

import os
from PIL import Image
def png2jpg(path):"""参数:path:图片文件夹路径作用:批量将png格式图片转化为jpg格式"""for name in os.listdir(path):imgpath = os.path.join(path, name)Type = os.path.splitext(name)[-1]if Type==".png" or Type==".PNG":try:img = Image.open(imgpath)  # 打开图片img = Image.open(dir)#打开图片img = img.convert("RGB") # 将一个4通道转化为rgb三通道file = os.path.splitext(name)[0] + ".jpg"img.save(path + file)os.remove(imgpath)except:print(imgpath+" 文件转化失败")
fielpath = "E:/jupyter文件/data/NEG/"
png2jpg(fielpath)
fielpath = "E:/jupyter文件/data/POS/"
png2jpg(fielpath)
fielpath = "E:/jupyter文件/data/UNP/"
png2jpg(fielpath)
fielpath = "E:/jupyter文件/data/UNV/"
png2jpg(fielpath)
文章来源:https://blog.csdn.net/weixin_44569216/article/details/113782385
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/0URFse8I.shtml

相关文章

Unity Shader入门精要笔记(五):其他数学相关介绍

本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。 http://blog.csdn.net/lzhq1982/article/details/73747162 前两篇介绍了Unity Shader的主要数学部分,书上还有些相关的数学介绍,将在这篇做最后的总结。…

2020年数维杯国际大学生数学建模B题股票价格的混沌模型求解全过程文档及程序

2020年数维杯国际大学生数学建模 B题 股票价格的混沌模型 原题再现: 上市公司股价的变化可以直接反映上市公司的经营状况和市场的认可度。股票价格的建模和预测一直是一个难题。最重要的因素是股票价格既有趋势因素又有随机因素。因此,股票市场是一个非…

ugpost_tcl文件

########################## TCL Event Handlers ########################## b.tcl - 3_axis_mill 这是 3 轴铣床。 Created by dp Wednesday, November 06, 2019 8:52:33 AM China Standard Time with Post Builder version 10.0.3. #####################################…

数据结构课设 (快餐店 POS 机计费系统、成绩分析、算术表达式)

目录 快餐店 POS 机计费系统 学生成绩分析系统 算术表达式 参考文献 快餐店 POS 机计费系统 【任务描述】 校园快餐店一共出售三大类食品:饮料,主食,小食品。设计一个快餐店的 POS 机计费系统, 对快餐店的食品信息、销售信息…

linux文件系统-文件的写与读

只有打开可文件以后,或者建立起进程与文件之间的连接之后,才能对文件进行读写。文件的读写主要是通过系统调用read和write来完成的,对于读写的进程,目标文件由一个打开文件号代表。 为了提高效率,稍微复杂一点的操作系…

数学模型——泊车模型(2022年Mathorcup数学建模挑战赛C题,含Matlab代码)

写在前面 之前做了一个2022年Mathorcup数学建模挑战赛C题的比赛心得,上一篇文章主要讲了A*算法的改进以及A*算法如何在C题的第3问的应用。本文主要介绍C题的第2问,即三种泊车模型如何建立,因此部分并非我写,在比赛期间&#xff0…

Python小白的数学建模课-16.最短路径算法

最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径。在图论中,最短路径长度与最短路径距离却是不同的概念和问题,经常会被混淆。求最短路径长度的常用算法是 Dijkstra 算法、Bellman-Ford 算法和Floyd 算法…

数学建模有关DNA序列k-mer index的问题

原问题是这样的: 给定一个DNA序列,这个系列只含有4个字母ATCG,如 S “CTGTACTGTAT”。给定一个整数值k,从S的第一个位置开始,取一连续k个字母的短串,称之为k-mer(如k 5,则此短串为CT…

数学建模暑期集训26:遗传算法

遗传算法是优化类问题的经典智能算法。本篇将介绍遗传算法的基本概念以及利用遗传算法来求解单目标规划模型。 达尔文进化论的基本思想 遗传算法的设计是受到达尔文进化论的启发。先看下面这张图的几个基本概念。 一些花构成一个种群。 每朵花被称为个体。 每个个体内有染色…

2021年亚太杯三等奖选手C题思路

文章目录 亚太杯C题第一小问亚太杯C题第二小问亚太杯C题第三小问亚太杯C题第四小问亚太杯C题第五小问 昨天晚上刚出了亚太杯的成绩,获得了三等奖,毕竟是第一次参加数学建模比赛,不是成功参与奖就很高兴了,结束了之后,还…

python使用networks读取txt文件画一个有权有向图

class demo():def __init__(self):self.file_pathtest.txt#图文件 def draw_graph(self):G2 nx.DiGraph() # 创建:空的 有向图f open(self.file_path)lines [l.split() for l in f.readlines() if l.strip()]# print(lines)for i in lines:G2.add_edge(i[0],…

数学建模常用功能

目录 pandas读取数据 查看数据异常 提取指定列 将dataframe数据以numpy形式提取 数据划分 随机森林回归 GBDT回归 特征重要性可视化 输出: ​ 绘制3D散点图 导入自定义包且.py文件修改时jupyter notebook自动同步 dataframe删除某列中重复字段并删除对应行…

c语言文件操作

文件操作读写 1 文件处理原理及基本概念 C语言的文件处理功能,大体上分为两种:一种是设置缓冲区,另一种是不设置缓冲区。因为不设置缓冲区的方法直接对磁盘进行操作,速度较慢,并且由于不是C的标准函数,跨…

无人机视角展示(无人机图像定位 )--某数学建模A题MATLAB代码

近期没啥空,水个简单的。。。。 目前只写了第一问,有空再写。。。。。 问题描述 无人驾驶飞机简称“无人机”,是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机。搭载图像设备的无人机在高空航拍、区域巡视、军事侦查等方面有广泛…

2020 全国大学生数学建模竞赛C题思路+代码

题目链接:天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享 前言 又是一年数据挖掘题型,第一次接触这种题型还是在去年的mathorcup上,这种题的难度就在于指标的建立和数据的处理上。后面会出一份关于数据挖掘题型,我的相关经…

PU learning半监督学习

半监督学习 Positive-unlabeled learning 什么是半监督学习 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning)。 要利用未标记样本,必然要做一些将未标记样本所揭示的数…

详解基于图卷积的半监督学习

Kipf和Welling最近发表的一篇论文提出,使用谱传播规则(spectral propagation)快速近似spectral Graph Convolution。 和之前讨论的求和规则和平均规则相比,谱传播规则的不同之处在于聚合函数。它使用提升到负幂的度矩阵D对聚合进行…

【半监督医学图像分割 2023】RCPS

文章目录 【半监督医学图像分割 2023 】RCPS摘要1. 介绍2. 相关工作2.1 医学图像分割2.1 半监督学习2.3 对比学习 3. 方法3.1 整体概述3.2 纠正伪监督3.3 双向Voxel对比学习。 4. 实验 【半监督医学图像分割 2023 】RCPS 论文题目:RCPS: Rectified Contrastive Pseu…

半监督之数据增强

目录 前言 传统常见的 Free Lunch for Few-shot Learning: Distribution Calibration Learning to Augment for Data-Scarce Domain BERT Knowledge Distillation MixText: Linguistically-Informed Interpolation of Hidden Space for Semi-Supervised Text Classificati…

半监督的语义分割

现阶段传统的语义分割已经逐渐走向瓶颈,你设计一个网络,修改一下U-Net增加一个模块,现在已经很难再出优秀的成果,大家对你的创新程度认可度也越来越低。所以现在大家在进行语义分割的时候往往需要自行创造出一些需求,比…