Python编程之数据筛选(数据转换为曲线图)

标签: Python CSV 多文件数据生成曲线图
3人阅读 评论(0) 收藏 举报
分类:

该程序需要结合文件名获取脚本及数据数据提取脚本。

该脚本自动化将目录下所有的csv文件中的数据转换为曲线图显示,且循环显示每一csv数据的曲线图。自动化执行,直到将目录下所有的csv数据全部显示完。并且在每绘制一次csv数据图时,自动将数据图以png类型保存在桌面下.../CSV/NewData/DataValue/Figure目录下。

#!usr\bin\python
# -*-coding:utf-8 -*-
import csv
import pandas as pd
import numpy as np
import winreg
import os
import matplotlib.pyplot as plt
import shutil

'''******************链表文件数据和个数提取******************'''
def get_desktop():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')#利用系统的链表
    return winreg.QueryValueEx(key, "Desktop")[0] #返回的是Unicode类型数据

def mkdir(root):#创建CSV文件夹
    Desktop_path = str(root)
    mkpath = Desktop_path + '\CSV\NewData\DataValue\Figure'
    if os.path.exists(mkpath) is False:  # 判断一个目录是否存在
        os.mkdir(mkpath + '\\')  # 创建目录,用于存放处理后的数据
    else:
        shutil.rmtree(mkpath)  # 可以直接删除非空文件夹
        os.mkdir(mkpath + '\\')  # 创建目录,用于存放处理后的数据
    return mkpath

def listfilehandle(listfile):
    Rowdata = []
    rfile = open(listfile, 'r')
    rfilelist = rfile.readlines()#直接读取文件中每一行数据转换成List类型
    #ListFileLen = len(rfilelist)  # 链表文件中文件名的个数
    #print ListFileLen
    for filename in rfilelist:
        Rowdata.append(filename.strip('\n'))
    return Rowdata

'''******************CSV文件名打开路径列表*****************'''
def fnlistpath(filename):
    root = 'C:\Desktop\CSV\NewData\DataValue'#转换后的csv数据所在的目录
    fileopenpath = root + '\\' + filename
    return fileopenpath

'''***********************特定数据提取********************************'''
def get_desktop():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')#利用系统的链表
    return winreg.QueryValueEx(key, "Desktop")[0] #返回的是Unicode类型数据

def GetCsvAllData(filepath):#读取CSV所有数据
    data = pd.read_csv(filepath, header=None, index_col=None)
    return data

def GetCsvColData(data,Col):#读取Col=1列数据
    getcoldata = data.ix[:,Col]  # 读取所有行,Col列数据,此处固定第一列(表示扫描电压值)Col=1
    return getcoldata

def DataToList(data):#只转换一列数据为List类型
    arrsdata = data.values  # Col列数据的值存放在数组中
    listdata = arrsdata.tolist()  # array类型转换为list类型
    return listdata

def GetSatisfyDataRowList(listdata, satisfyvalue):#得到满足数据的所有行,转换为List类型
    getdatalist = []  # 参考列下所有数据列表
    getrowlist = []  # 满足条件的行号列表
    for idata_list in listdata:#主要对参考列的数据进行曲有效数据位,方便数据检索(可去除,视情况而定)
        fidata_list = float("%.4f" % idata_list)  # 仅显示4位有效数据,且转换为浮点型
        getdatalist.append(fidata_list)
    for ilb in range(len(listdata)):
        if getdatalist[ilb] == satisfyvalue:
            getrowlist.append(ilb)
            #print ilb
    return getrowlist

def dataclassify(datalist):
    Singdata = []
    Doubdata = []
    datalen = len(datalist)

    for item in range(datalen):
        if item % 2 == 0:
            Singdata.append(datalist[item])
        else:
            Doubdata.append(datalist[item])
    return Singdata,Doubdata

if __name__=='__main__':

    alllistdata = []
    Desktop_path = str(get_desktop())
    newdir = mkdir(get_desktop())
    print newdir
    listfilesroot = Desktop_path +'\CSV\NewData\listfile.txt'#CSV文件名所在的TXT文件
    Rowdata = listfilehandle(listfilesroot)

    i=0
    plt.figure(1)
    plt.ion()#动画显示
    for index in Rowdata:
        i += 1
        filepath = fnlistpath(index)

        getdata1 = GetCsvAllData(fnlistpath(Rowdata[0]))
        listVoldata = np.array(DataToList(GetCsvColData(getdata1, 1)))

        getdata = GetCsvAllData(filepath)
        listdata = np.array(DataToList(GetCsvColData(getdata,2)))

        #plt.figure(num=i)
        plt.title("I-V Curve["+str(i)+']')
        #plt.scatter(X_parameter, Y_parameter, color='black')
        plt.plot(listVoldata, abs(listdata), 'b*-', linewidth=3)
        plt.yscale('log')#Y轴采用对数显示
        plt.xlabel('Voltage(V)')
        plt.ylabel('Current(A)')
        #plt.xlim(-0.5,5.0)#X轴起始点
        plt.ylim(0.0000000000001,0.001)
        #plt.axvline(0.1,color='red', linewidth=3)
        plt.axhline(0.0001,color ='red', linewidth=3)
        plt.grid(True)#显示格线
        plt.pause(0.002)#图像延时
        plt.savefig(newdir+'\\'+str(index)+'.png')#,dpi=72)
        plt.cla()#擦除图像
        plt.show()
    print("END")

查看评论

多屏幕显示器编程( 三 )

Programming for Multiple Monitors in Windows 98New Multiple-Monitor Win32 API functionsContinued fro...
  • ghj1976
  • ghj1976
  • 2001-08-21 14:12:00
  • 1916

编程之禅 浅谈封装

作为一个整天与代码打交道的人,你真的会coding吗? 今天依旧来反思一下自身。伊始大一的时候,刚接触到了C语言,一门神奇的语言。老师就教导我们要多敲例子,照着书本敲就可以了。可能当时并没有真正的理解...
  • Marksinoberg
  • Marksinoberg
  • 2016-06-17 10:00:27
  • 6929

python编程之PyS60编程课程

  • 2010年02月24日 14:06
  • 1023KB
  • 下载

【大牛之路】大牛指导,报酬丰厚的开源项目---“谷歌编程之夏”

一个参与开源项目,开源社区的绝好机会,2018年谷歌编程之夏已经开始了? 什么,你想参与开源又不知道从何下手,这是一个好机会。 有社区大牛引导,为开源项目贡献代码,获取丰厚报酬,这样的好机会千万不要错...
  • XiyouLinux_Kangyijie
  • XiyouLinux_Kangyijie
  • 2018-02-20 20:38:19
  • 439

Python编程之基本方法

程序的基本编写方法 IPO模式 - I:Input 输入,程序的输入 - P:Process 处理,程序的主要逻辑 - O: Output 输出,程序的输出...
  • qq_35417815
  • qq_35417815
  • 2017-08-16 15:51:05
  • 98

编程之魂:与27位编程语言创始人对话

深入PHP : 面向对象、模式与实践 (第2版)   软件架构师应该知道的97件事 编程之魂:与27位编程语言创始人对话   2010-04-22 09:35:55|  分...
  • junecauzhang
  • junecauzhang
  • 2013-07-21 14:02:36
  • 730

Python的分支和循环结构的练习

# 输入三个数,按从小到大的顺序输出a = int(input('a = '))b = int(input('b = '))c = int(input('c = '))if a > b:...
  • weixin_40985545
  • weixin_40985545
  • 2018-03-01 22:50:02
  • 18

编程之禅(程序员的哲学 )

  • 2011年07月18日 13:25
  • 349KB
  • 下载

《编程之禅》 Geoffrey James

  • 2011年05月01日 23:20
  • 369KB
  • 下载

python 3 程序的控制结构:分支、循环

程序的控制结构:顺序、分支、循环。一、分支结构1.单分支结构if<条件>: <语句块>2.二分支结构if<条件>...
  • a18353365031
  • a18353365031
  • 2018-04-16 21:12:55
  • 6
    个人资料
    等级:
    访问量: 92
    积分: 63
    排名: 162万+
    文章分类
    文章存档