检波点分段区间统计

在地震采集中,经常需要障碍物涉及的检波点进行统计,当障碍物分布为不规则的时候,就会出现一条检波点被切割成多段,因此在统计上,也需要进行相应的体现,excel也可以做该类统计,当公式较为繁琐,同时生产的数据需要重新整理,为便于日常工作,就编写了检波点分段区间统计小程序。

首先是把数据读入,其次按照桩号顺序进行排序,最后再进行统计。


from itertools import groupby
import time
import csv
import tkinter as tk
from tkinter import filedialog, dialog
from tkinter.messagebox import *
import pandas as pd
import os

import time
def open_bigspsfile():
    filebig_path = filedialog.askopenfilename(title='选择数据文件', filetypes=[('All Files', ['.xlsx','xls'])])
    bigpath.set(filebig_path)
def getValueBig():
    filebig_path=entry1.get()
    return filebig_path
def mat_file():
    filebig_path=getValueBig()
    filetemp_path=os.path.splitext(filebig_path)[0]
    time_start = time.time()
    print('读取数据......')
    df=pd.read_excel(filebig_path,header=None,dtype='int32') ##int32数据类型,减少内存开销
    df.columns=['rline','rpoint']
    df['rlinepoint']=df['rline']*10000+df['rpoint']
    df=df.sort_values(by = ['rlinepoint'])
    df.reset_index(drop=True, inplace=True)
    print('数据处理中......')
    fun = lambda x: x[1]-x[0]
    lst=df['rlinepoint'].values.tolist()
    f = open(filetemp_path+'_数据分段统计.csv','w',encoding='utf-8-sig', newline="")
    csv_writer = csv.writer(f)
    csv_writer.writerow(['线号','范围','数量'])
    for k, g in groupby(enumerate(lst), fun):
        l1 = [j for i, j in g]    # 连续数字的列表
        scop = str(min(l1))[-4:] + '-' + str(max(l1))[-4:]    # 将连续数字范围用"-"连接
        rline=str(min(l1))[0:5]
        num=str(len(l1))
        csv_writer.writerow([rline, scop, num])
    f.close()
    time_end=time.time()
    timecost = str(round(time_end-time_start,4))
    print('耗时 '+timecost+' S')   
    result = showinfo('提示', '数据处理结束,位于原数据文件夹下')
    print(f'提示: {result}')       
root = tk.Tk()
root.resizable(0, 0)
root.geometry('500x100+400+100')
root.title('检波点分段区间统计')
bigpath= tk.StringVar()

label1 = tk.Label(root, text=" 1、excel数据位置:")
label1.grid(row=0)


entry1 = tk.Entry(root,width=40,textvariable = bigpath)
entry1.grid(row=0, column=1)

buttonForFile = tk.Button(root, text="浏览文件", command=open_bigspsfile)
buttonForFile.grid(row=0, column=2)
buttonMatch = tk.Button(root, text="2、合并处理", command=mat_file)
buttonMatch.grid(row=1, column=1)

root.mainloop()

软件界面

统计结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值