我有以下代码,它接受文件列表。利用他们的数据绘制饼图,并专门提取每个文件的平均值和百分位数。
但是,该文件可能包含几天以来的记录数据。 (文件的左列是日期,右边是记录的值。)现在,我必须做与以前相同的事情,但是我需要绘制饼图,而不是绘制并从每个文件中获取平均值。图表并获取文件中记录的每个日期的平均值。
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
我在编写代码时遇到麻烦,该代码能够根据文件包含的不同日期创建饼图列表,并且无法为整个文件绘制一个饼图。最后,我想提供一个表格,其中包含每个日期的平均值。任何有关如何修改代码以实现此目的的帮助将不胜感激。