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

使用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()

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息队列前世今生 字节跳动 Kafka #创作活动

消息队列前世今生 1.1 案例一: 系统崩溃 首先大家跟着我想象一下下面的这个的场景, 看到新出的游戏机,太贵了买不起,这个时候你突然想到,今天抖音直播搞活动,打开抖音搜索,找到直播间以后&am…

边缘计算节点BEC典型实践:如何快速上手PC-Farm服务器?

百度智能云边缘计算节点BEC(Baidu Edge Computing)基于运营商边缘节点和网络构建,一站式提供靠近终端用户的弹性计算资源。边缘计算节点在海外覆盖五大洲,在国内覆盖全国七大区、三大运营商。BEC通过就近计算和处理,大…

并发编程系列-分而治之思想Forkjoin

我们介绍过一些有关并发编程的工具和概念,包括线程池、Future、CompletableFuture和CompletionService。如果仔细观察,你会发现这些工具实际上是帮助我们从任务的角度来解决并发问题的,而不是让我们陷入线程之间如何协作的繁琐细节&#xff0…

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆?如何克隆浅克隆深克隆 Java设计模式什么是设计模式?为什么要学习设计模式? 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

仓库使用综合练习

目录 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 2、安装搭建私有仓库 Harbor 3、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。 4、Dockerfile快速搭建自己专属的LAMP环境,生…

跨平台图表:ChartDirector for .NET 7.1 Crack

什么是新的 ChartDirector for .NET 7.0 支持跨平台使用,但仅限于 .NET 6。这是因为在 .NET 7 中,Microsoft 停止了用于非 Windows 使用的 .NET 图形库 System.Drawing.Common。由于 ChartDirector for .NET 7.0 依赖于该库,因此它不再支持 .…

小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)1

一、传统的流程 1、传统网站部署的流程 在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新-->外网测试--&g…

【ES6】—数组的扩展

一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组,有长度的属性,但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…

《操作系统真象还原》学习笔记:第七章 中断

由于 CPU 获知了计算机中发生的某些事,CPU 暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后,CPU 继续执行刚才的程序。整个过程称为中断处理,也称为中断。 把中断按事件来源分类,来自…

食品制造行业云MES系统解决方案

食品饮料行业大致可以分为初级产品加工、二次加工、食品制造、食品分装、调味品和饲料加工等几大类。由于处于产业链不同的位置,其管理存在一定的差异,那么食品行业的MES应该怎么建设呢? 食品饮料行业生产管理特点: 食品饮料行业…

leetcode 122. 买卖股票的最佳时机 II

2023.8.21 和买卖股票的最佳时机相比&#xff0c;本题的股票可以买卖多次了&#xff0c;直接用贪心解决&#xff0c;计算所有涨价的股票相加。代码如下&#xff1a; 贪心&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int ans 0;for…

Ubuntu18.04 交叉编译curl-7.61.0

下载 官方网址是&#xff1a;curl 安装依赖库 如果需要curl支持https协议&#xff0c;需要先交叉编译 openssl,编译流程如下&#xff1a; Ubuntu18.04 交叉编译openssl-1.1.1_我是谁&#xff1f;&#xff1f;的博客-CSDN博客 解压 # 解压&#xff1a; $tar -xzvf curl-7.61.…

村口的人家排放污水,污水浸染了整个村子,怎么办

从前有一个很不错的村子里&#xff0c;村子里有很多户人家&#xff0c;随着生活水平越来越好&#xff0c;房子也修起来了&#xff0c;柏油马路也宽敞了&#xff0c;大家进出村子&#xff0c;都要走那条马路&#xff0c;要不就出不去。 目录 1. 修厕所 2. 村口的日家 3. 告诉…

Android 系统桌面 App —— Launcher 开发(1)

Android 系统桌面 App —— Launcher 开发&#xff08;1&#xff09; Launcher简介 Launcher就是Android系统的桌面&#xff0c;俗称“HomeScreen”也就是我们开机后看到的第一个App。launcher其实就是一个app&#xff0c;它的作用是显示和管理手机上其他App。目前市场上有很…

商城的TPS与并发用户数是如何换算的?

商城的TPS与并发用户数的换算关系可以通过以下公式计算&#xff1a; TPS 并发用户数 / 平均事务响应时间 其中&#xff0c;平均事务响应时间是指系统处理一个事务所需的平均时间。 下面是商城性能测试的一些用例示例&#xff1a; 用户登录&#xff1a; 目标&#xff1a;测…

【路由器】小米 WR30U 解锁并刷机

文章目录 解锁 ssh环境准备解锁过程 刷入 mt798x uboot简介刷入流程 刷入 ImmortalWrt简介刷入流程 刷为原厂固件参考资料 本文主要记录个人对小米 WR30U 路由器的解锁和刷机过程&#xff0c;整体步骤与 一般安装流程 类似&#xff0c;但是由于 WR30U 的解锁 ssh 和刷机的过程中…

关于档案馆建设的一些标准性文件说明

第一章 总则 第一条 本条阐明了本标准的编制目的。 中国是一个历史悠久的文明古国&#xff0c;档案事业的发展源远流长。档案是人类活动的真实记录&#xff0c;是人们认识和把握客观规律的重要依据。借助档案&#xff0c;我们能够更好地了解过去、把握现在、预见未来。档案工…

使用easyExcel导入导出Date类型的转换问题

起因&#xff1a;在业务需求上需要将Excel表中的日期导入&#xff0c;存储到数据库中&#xff0c;但是entity中的日期类型使用Date来接收&#xff0c;这样导致时间精确到秒。这时&#xff0c;即使使用DateTimeFormat("yyyy-MM-dd")也无法成功转换&#xff0c;会报如下…

微信开发之一键发布群公告的技术实现

简要描述&#xff1a; 设置群公告 请求URL&#xff1a; http://域名地址/setChatRoomAnnouncement 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必…

linux+c+qt杂记

虚拟机网络选择&#xff1b; 桥接模式&#xff1a;设置window宿主机的IP/dns,把虚拟机设置为桥接即可。 切换到终端&#xff1a;我的是 ctrlaltFnF1&#xff1f; 问题解决&#xff1a; Ubuntu系统下载&#xff08;清华大学开源软件镜像站&#xff09;&#xff08;ubuntu-20.…