对CSV格式的数据文件进行插值处理

news2025/1/22 16:55:12

使用Python程序,实现对一个较短的csv文件,进行差值处理,并绘制GUI界面;

这个程序是一个使用Python的Tkinter库构建的GUI应用程序,用于对CSV格式的数据文件进行插值处理。下面我会逐步解释程序的各个部分和功能:

1. 导入模块:

python
import tkinter as tk
from tkinter import filedialog
import os
import pandas as pd
import numpy as np

程序开始时,导入了需要使用的各种模块,包括Tkinter(用于GUI界面构建)、文件对话框模块(用于选择文件夹)、操作系统模块(用于文件路径操作)、Pandas(用于数据处理)和NumPy(用于数值计算)。

2. 插值函数 `interpolate_data`:

这个函数从给定的输入文件中读取CSV格式的数据,进行插值处理,并将结果保存到输出文件中。主要步骤包括:

- 读取输入文件中的数据,并提取时间、X、Y和Z列的数据。
- 计算已有行数和需要插值的新行数。
- 生成一些随机索引,用于选择已有数据中的随机行。
- 生成随机时间,并使用 `np.interp` 函数基于时间对X、Y和Z数据进行线性插值。
- 合并原有数据和插值生成的数据。
- 对合并后的数据按时间进行排序。
- 创建一个新的DataFrame并保存为输出文件。

3. 文件夹处理函数 `process_folder`:

这个函数接受一个文件夹路径作为输入,遍历文件夹中的所有文件,对其中的CSV文件进行插值处理。对于每个CSV文件,它会调用 `interpolate_data` 函数来进行插值,并根据生成的文件名保存结果。

4. 生成输出文件名函数 `generate_output_filename`:

给定一个输入文件名,这个函数会生成一个对应的输出文件名,格式为 "800_原文件名.csv",其中 "800" 表示插值后数据的目标行数。

5. 文件夹浏览函数 `browse_folder`:

这个函数使用文件对话框来让用户选择一个文件夹。选择文件夹后,它会调用 `process_folder` 函数对选中文件夹内的CSV文件进行插值处理,并在完成后更新一个标签,显示插值操作已完成。

6. 创建GUI窗口和界面元素:

- 创建一个Tkinter窗口并设置标题为 "CSV数据插值工具"。
- 创建一个按钮 "选择文件夹",点击按钮后会调用 `browse_folder` 函数。
- 创建一个标签用于显示操作结果。

7. 主事件循环:

最后,通过调用 `root.mainloop()` 启动Tkinter的主事件循环,使程序开始监听和响应用户交互事件,保持GUI界面的交互性。

总体来说,这个程序通过Tkinter构建了一个简单的GUI界面,让用户可以选择文件夹,对文件夹中的CSV文件进行插值操作,并在界面上显示操作结果。插值操作会生成新的CSV文件,使数据行数达到800行。

得到最终完整程序

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk
from tkinter import filedialog
import os
import pandas as pd
import numpy as np

def interpolate_data(input_filename, output_filename):
    desired_row_count = 800
    
    data = pd.read_csv(input_filename)
    time = data['Time']
    x = data['X']
    y = data['Y']
    z = data['Z']

    num_existing_rows = len(data)
    num_new_rows = desired_row_count - num_existing_rows
    
    random_indices = np.random.randint(0, num_existing_rows, num_new_rows)
    random_time = np.random.uniform(time.min(), time.max(), num_new_rows)
    random_x = np.interp(random_time, time, x)
    random_y = np.interp(random_time, time, y)
    random_z = np.interp(random_time, time, z)
    
    new_time = np.concatenate((time, random_time))
    new_x = np.concatenate((x, random_x))
    new_y = np.concatenate((y, random_y))
    new_z = np.concatenate((z, random_z))
    
    sorted_indices = np.argsort(new_time)
    new_time = new_time[sorted_indices]
    new_x = new_x[sorted_indices]
    new_y = new_y[sorted_indices]
    new_z = new_z[sorted_indices]

    new_data = pd.DataFrame({'Time': new_time, 'X': new_x, 'Y': new_y, 'Z': new_z})
    new_data.to_csv(output_filename, index=False)

def process_folder(folder_path):
    for filename in os.listdir(folder_path):
        if filename.endswith(".csv"):
            input_file_path = os.path.join(folder_path, filename)
            output_file_path = generate_output_filename(input_file_path)
            interpolate_data(input_file_path, output_file_path)

def generate_output_filename(input_filename):
    dirname, filename = os.path.split(input_filename)
    base_filename, extension = os.path.splitext(filename)
    output_filename = os.path.join(dirname, f"800_{base_filename}{extension}")
    return output_filename

def browse_folder():
    folder_path = filedialog.askdirectory()
    process_folder(folder_path)
    result_label.config(text="插值操作已完成")

# 创建GUI窗口
root = tk.Tk()
root.title("CSV数据插值工具")

# 文件夹选择部分
folder_button = tk.Button(root, text="选择文件夹", command=browse_folder)
folder_button.pack()

# 结果提示
result_label = tk.Label(root, text="")
result_label.pack()

root.mainloop()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 docker 搭建 granfana+prometheus 监控平台监控测试服务器资源

互联网发展的今天,人们对互联网产品的用户体验要求也越来越高,企业为了能提供更优质的用户体验,就会绞尽脑汁想尽各种办法。而对于服务器的资源监控,搭建一个资源监控平台,就是一个很好的维护优质服务的保障平台。利用…

函数的参数传递和返回值-PHP8知识详解

本文学习的是《php8知识详解》中的《函数的参数传递和返回值》。主要包括:向函数传递参数值、向函数传递参数引用、函数的返回值。 1、向函数传递参数值 函数是一段封闭的程序,有时候,程序员需要向函数传递一些数据进行操作。可以接受传入参…

Python如何输出文本到屏幕

如何输出文本到屏幕 在Python中,要将文本输出到屏幕,可以使用print()函数。这个函数是Python中的内置函数,非常常用,让我们一起来学习如何使用它。 使用print()函数 print()函数用于将内容输出到终端(屏幕&#xff…

从0开始配置eslint

没有在.eslintrc文件中配置parserOptions指定语言版本和模块类型 {"parserOptions": {"ecmaVersion": 7, //指定es版本为es2016"sourceType": "module", //使用import导入模块} }eslint还不能识别jsx语法 {"parserOptions"…

Android11.0 Launcher3单层app列表页排序功能实现

1.概述 在11.0的定制化开发中,对于Launcher3的功能定制也是好多的,而对于单层app列表页来说排序功能的开发,也是常有的功能这就需要了解加载app数据的流程,然后根据需要进行排序就可以了, 如图: 2. Launcher3 单层app列表页排序功能实现 packages\apps\Launcher3\src\…

禅道后台命令执行漏洞

漏洞简介 禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效,功能完备丰富,…

Matlab彩色图像转索引图像

索引图像 索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像包括一个数据矩阵X,一个调色板矩阵map,也称为颜色映像矩阵。其中,数据矩阵X可以是8位无符号整型、16位无符号整型或双精度类型。调色板矩阵map是一个m3的数据阵列&…

操作符详解-C语言

目录 一、操作符分类 二、算术操作符 三、移位操作符 3.1. 左移操作数 3.2 右移操作符 四、位操作符 五、赋值操作符 六、单目操作符 七、关系操作符 八、逻辑操作符 九、条件操作符 十、逗号表达式 十一、下标引用函数调用和结构体成员 一、操作符分类 操作符分为算…

ArrayList的介绍

arrayList数组列表,特点是 ①有序:y元素存入的顺序和取出的顺序一致; ②可重复:可以存储重复的元素 ③可为null:可以存储多个null 优点:查询快 缺点:插入删除慢 size是元素的个数,容…

设计模式之详解

概念 在软件工程中,设计模式是指软件设计问题的推荐方案。 设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 好处 设计模式可以提高代码的可重用性和可读…

春秋云镜 CVE-2018-7422

春秋云镜 CVE-2018-7422 WordPress Plugin Site Editor LFI 靶标介绍 WordPress Plugin Site Editor LFI 启动场景 漏洞利用 exp http://<host>/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/etc…

Python爬虫(十五)_案例:使用bs4的爬虫

本章将从Python案例讲起&#xff1a;所使用bs4做一个简单的爬虫案例&#xff0c;更多内容请参考:Python学习指南 案例&#xff1a;使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示&#xff1a;http://hr.tencent.com/position.php?&start10#a 使用BeautifulSoup4解析…

【3dsmax】制作简单的动画

步骤 1. 首先打开“时间配置”按钮进行设置 这里我们设置动画的总时长为300帧&#xff0c;也就是10秒 设置完毕后可以看到时间轴的最大刻度就是300 下面以一个长方体为例来掩饰动画的基本制作方式 2. 首先我们创建了一个长方体 3. 打开“自动关键点” 将时间轴滑块从第0帧修改…

两个git本地如何配置两个ssh密钥for mac

我是在mac上操作的。windows上也差不多一样操作。 1.找到本地的.ssh文件。我的文件结构如下如&#xff1a; 文件结构&#xff1a; &#xff08;1&#xff09;两个known_hosts文件是自动生成的&#xff0c;不用管 &#xff08;2&#xff09;readme文件是我个人记事本记录笔记…

Stable Diffusion 文生图技术原理

图像生成模型简介 图片生成领域来说&#xff0c;有四大主流生成模型&#xff1a;生成对抗模型&#xff08;GAN&#xff09;、变分自动编码器&#xff08;VAE&#xff09;、流模型&#xff08;Flow based Model&#xff09;、扩散模型&#xff08;Diffusion Model&#xff09;。…

Java 基于 SpringBoot+Vue 的在线考试系统的研究与实现,2.0 版本

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数…

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用&#xff08;如果不是现在&#xff0c;可能会在将来&#xff09;&#xff0c;因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…

猜数字游戏过程honest(诚实)判定

根据记录的游戏过程文本&#xff0c;判定Tom是否不老实作弊。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那…

【Unity】【Amplify Shader Editor】ASE入门系列教程第二课 硬边溶解

新建材质&#xff08;不受光照影响&#xff09; 拖入图片 设置 添加节点&#xff1a; 快捷键&#xff1a;K 组合通道&#xff1a;快捷键 V 完成图

2023年11月软考中级信息安全工程师-最新全套学习资料分享

资源介绍 这里整理了一份2023年11月份软考中级-信息安全工程师考试的备考视频教程及电子资料&#xff0c;希望对小伙伴们有所帮助。&#xff08;下载方法详见文章底部&#xff09; 该教程收集于互联网&#xff0c;主要包括三个版本的资料&#xff0c;可以交叉结合使用。内容主…