根据记录的日期绘制数据

时间:2018-08-01 00:07:42

标签: python file matplotlib

我有以下代码,它接受文件列表。利用他们的数据绘制饼图,并专门提取每个文件的平均值和百分位数。

但是,该文件可能包含几天以来的记录数据。 (文件的左列是日期,右边是记录的值。)现在,我必须做与以前相同的事情,但是我需要绘制饼图,而不是绘制并从每个文件中获取平均值。图表并获取文件中记录的每个日期的平均值。

import dateutil.parser
import glob
import numpy as np
import matplotlib.pyplot as plt   
import pandas as pd

selection = input('Press all ')
counter=0
files1 = glob.glob(r'C:\Users\And\Documents\testing *.csv')
d2={}
for sfile in files1:
    if selection == 'all':
        x=[]
        y=[]
        z=[]
        xtime=0
        ytime=0
        ztime=0
        data_file = np.genfromtxt(sfile, delimiter=',', usecols=range(2),unpack=True,skip_header=10,dtype='U')
        tdelta=dateutil.parser.parse(data_file[0][1][11:])-dateutil.parser.parse(data_file[0][0][11:])
        tseconds=tdelta.total_seconds()
        for i in data_file[1]:
            if i != 0:
                if float(i) >= 55:
                    x.append(float(i))
                    xtime+=tseconds
                elif float(i)>40 and float(i)<55:
                    y.append(float(i))
                    ytime+=tseconds
                else:
                    z.append(float(i))
                    ztime+=tseconds
        labels = ["upper", "middle", "lower"]
        sizes=[xtime,ytime,ztime]
        legends=[xtime,ytime,ztime]
        colors=["blue","orange","yellow"]
        plt.pie(sizes, explode=(0.1,0,0), labels=labels, colors=colors, autopct='%1.1f%%', shadow=False, startangle=140)
        plt.legend(legends, loc='best')
        plt.axis('equal')
        plt.show()
        plt.savefig("test{filename}.png".format(filename=counter))
        plt.clf()
        xarray=np.asarray(x)
        yarray=np.asarray(y)
        zarray=np.asarray(z)
        totalarray=np.append(zarray,np.append(xarray,yarray))
        counter+=1

        EQ=np.mean(totalarray)
        P15, P50, P85 = np.percentile(totalarray, 15), np.percentile(totalarray, 50), np.percentile(totalarray, 85)
        d2[sfile[36:]]=[f'{P15:.2f}',f'{P50:.2f}',f'{P85:.2f}', f'{EQ:.2f}']
table1 = pd.DataFrame(d2,index=['P15', 'P50', 'P85', 'EQ'])
table= table1.T

The image shows a portion of the data in the csv file

我在编写代码时遇到麻烦,该代码能够根据文件包含的不同日期创建饼图列表,并且无法为整个文件绘制一个饼图。最后,我想提供一个表格,其中包含每个日期的平均值。任何有关如何修改代码以实现此目的的帮助将不胜感激。

0 个答案:

没有答案