import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import os
import chardet
import pandas as pd
import math
from scipy import optimize
from scipy.optimize import fsolve
from scipy.optimize import leastsq
def dataceate(path,txt_index,cnc_code,prog_code):
all_file= os.listdir(path) #读取所有的TXT文件
all_txt=[name for name in all_file if name[-3:]=='txt' ]
all_txt.sort()
need_txt=[]
for index in txt_index: #筛选需要的txt
need_txt.append(all_txt[index])
print('找到这么多txt文件',all_txt)
print('处理的txt文件为',need_txt)
all_data=pd.DataFrame()
for name in need_txt: #合并数据
data= pd.read_table('./'+name, header=None, encoding='gb2312', sep='\t')
columns_list=[]
data1_index=2
useless_index=99
start_index=0
data = data.fillna('null')
#return data
for columns_nums in range(len(data.columns)):
#print(data[columns_nums][start_index],columns_nums)
if data[columns_nums][start_index]=='null':
start_index+=1
if type(data[columns_nums][start_index])==str and len(data[columns_nums][start_index])>10:
columns_list.append(1)
continue
if type(data[columns_nums][start_index])==np.float64:
if data1_index==5:
columns_list.append(useless_index)
useless_index+=1
continue
columns_list.append(data1_index)
data1_index+=1
continue
if type(data[columns_nums][start_index])==np.int64:
columns_list.append(5)
continue
if type(data[columns_nums][start_index])==str and len(data[columns_nums][start_index])==3:
columns_list.append(6)
continue
if type(data[columns_nums][start_index])==str and len(data[columns_nums][start_index])==5:
columns_list.append(7)
continue
columns_list.append(useless_index)
useless_index+=1
#print(columns_list)
data.columns=columns_list
for num in columns_list:
if num>95:
del data[num]
all_data=pd.concat([all_data,data])
all_data=all_data[(all_data[6]==cnc_code)&(all_data[5]==1)&(all_data[7]==prog_code)] #筛选需要的数据
all_data=all_data.sort_values(1)
all_data.index=range(len(all_data.index))
if len(all_data) ==0:
return print('data is empty')
return all_data
def chart_create(data,cut_time,primary_time,middle_time,path_name,wave_time,dev_start,dev_end,limit_nums):
data_time=pd.to_datetime(data[1],format= '%Y-%m-%d')
plt.figure(figsize=(15,70))
ax1=plt.subplot(15,1,1) #分子图
ax2=plt.subplot(15,1,2)
ax3=plt.subplot(15,1,3)
ax4=plt.subplot(15,1,4)
ax5=plt.subplot(15,1,5)
ax6=plt.subplot(15,1,6)
ax7=plt.subplot(15,1,7)
ax8=plt.subplot(15,1,8)
ax9=plt.subplot(15,1,9)
ax10=plt.subplot(15,1,10)
ax11=plt.subplot(15,1,11)
ax12=plt.subplot(15,1,12)
ax13=plt.subplot(15,1,13)
ax14=plt.subplot(15,1,14)
ax15=plt.subplot(15,1,15)
start_index=0
end_index=0
k=0
dif_time=(data_time[2]-data_time[1])*10
data_act_max=pd.DataFrame()
data_act_min=pd.DataFrame()
x_axis_mean=[]
x_axis_std=[]
y_axis_mean=[]
y_axis_std=[]
z_axis_mean=[]
z_axis_std=[]
xyz_axis_mean=[]
time_display=[]
duration=[]
for num in range(len(data.index)-1):
if (data_time[num+1]-data_time[num])>dif_time: #区分两斷波形
if k==0: #去除第一段
start_index=num+1
k+=1
continue
# print(data_T8_time[num+1],data_T8_time[num],data_T8_time[num+1]-data_T8_time[num])
end_index=num
#print(data_T8[2][start_index:end_index])
#print(end_index,start_index,end_index-start_index)
wave_start=start_index+dev_start
wave_end=end_index-dev_end
#提取几段有效数据
all_data=pd.DataFrame()
for axis in range(3):
data_part=data[axis+2][wave_start:wave_end]
all_data.insert(0,str(axis),data_part)
#筛选有效时长数据
if data_time[start_index]>cut_time or data_time[start_index]<primary_time: #设置截至时间段
start_index=num+1
continue
#print(data_T8_time[start_index],cut_time)
#print(pd.Series.mean(all_data['1']))
if end_index-start_index<wave_time[0] or end_index-start_index>wave_time[1] or pd.Series.mean(all_data['1'])>80:
start_index=num+1
continue
if k==1:
for s in range(3):
data_act_max[s]=all_data[str(s)].copy()
data_act_min[s]=data_act_max[s].copy()
#print(data_act_min)
data_act_max.index=range(len(data_act_max))
data_act_min.index=range(len(data_act_min))
print('act initialize')
else:
#print(len(data_T8[2][wave_start:wave_end]),len(data_act_max))
for s in range(3):
for m,data_act in enumerate(all_data[str(s)]):
if m==len(data_act_max[s]):
break
#print(data_act_min[m],data_act_max[m])
if data_act>data_act_max[s][m]:
data_act_max[s][m]=data_act
#print(data_act_min[m],data_act_max[m])
if data_act<data_act_min[s][m]:
#print(data_act<data_act_min[m],data_act-data_act_min[m])
data_act_min[s][m]=data_act
#print(data_act_min[m],data_act_max[m])
x_axis_std.append(pd.Series.std(all_data['0']))
x_axis_mean.append(pd.Series.mean(all_data['0']))
# x_axis_max.append(pd.Series.mad(data_T8[2][wave_start:wave_end]))
y_axis_std.append(pd.Series.std(all_data['1']))
y_axis_mean.append(pd.Series.mean(all_data['1']))
# y_axis_max.append(pd.Series.std(data_T8[3][wave_start:wave_end]))
z_axis_std.append(pd.Series.std(all_data['2']))
z_axis_mean.append(pd.Series.mean(all_data['2']))
# z_axis_max.append(pd.Series.std(data_T8[4][wave_start:wave_end]))
xyz_axis_mean.append((pd.Series.mean(all_data['0'])+pd.Series.mean(all_data['1'])+pd.Series.mean(all_data['2']))/3)
if data_time[start_index]<middle_time:
ax1.plot(np.array(range(len(all_data['0']))),all_data['0'],color='red',linewidth=.1)
ax2.plot(np.array(range(len(all_data['1']))),all_data['1'],color='red',linewidth=.1)
ax3.plot(np.array(range(len(all_data['2']))),all_data['2'],color='red',linewidth=.1)
ax15.plot(np.array(range(len(all_data['0']))),all_data['0'],color='red',linewidth=.1)
ax15.plot(np.array(range(len(all_data['1']))),all_data['1'],color='blue',linewidth=.1)
ax15.plot(np.array(range(len(all_data['2']))),all_data['2'],color='black',linewidth=.1)
else:
ax1.plot(np.array(range(len(all_data['0']))),all_data['0'],color='black',linewidth=.1)
ax2.plot(np.array(range(len(all_data['1']))),all_data['1'],color='black',linewidth=.1)
ax3.plot(np.array(range(len(all_data['2']))),all_data['2'],color='black',linewidth=.1)
ax15.plot(np.array(range(len(all_data['0']))),all_data['0'],color='red',linewidth=.1)
ax15.plot(np.array(range(len(all_data['1']))),all_data['1'],color='blue',linewidth=.1)
ax15.plot(np.array(range(len(all_data['2']))),all_data['2'],color='black',linewidth=.1)
time_display.append(str(data_time[start_index])[5:16])
duration.append(wave_end-wave_start)
start_index=num+1
k+=1
if k%300==0:
print('deal is ',time_display[-1],'nums are',k)
if k==limit_nums:
break
print('len is ',len(x_axis_mean))
x_axis_mean=np.array(x_axis_mean)
y_axis_mean=np.array(y_axis_mean)
z_axis_mean=np.array(z_axis_mean)
ax4.plot(range(len(x_axis_mean)),x_axis_mean,linewidth=.5)
ax5.plot(range(len(x_axis_mean)),y_axis_mean,linewidth=.5)
ax6.plot(range(len(x_axis_mean)),z_axis_mean,linewidth=.5)
ax7.plot(range(len(x_axis_mean)),x_axis_std,linewidth=.5)
ax8.plot(range(len(x_axis_mean)),y_axis_std,linewidth=.5)
ax9.plot(range(len(x_axis_mean)),z_axis_std,linewidth=.5)
ax10.plot(range(len(x_axis_mean)),xyz_axis_mean,linewidth=.5)
ax11.plot(range(len(duration)),duration,linewidth=.5)
ax12.plot(range(len(x_axis_mean)),x_axis_mean-y_axis_mean,linewidth=.5)
ax13.plot(range(len(x_axis_mean)),z_axis_mean-y_axis_mean,linewidth=.5)
ax14.plot(range(len(x_axis_mean)),x_axis_mean-z_axis_mean,linewidth=.5)
ax_top = ax10.twiny() #设置上下坐标轴一致
xlim = ax10.get_xlim()
ax_top.set_xlim(xlim)
xticks = ax10.get_xticks()
top_tick = []
top_label = []
for time_times in range(len(xticks)-2):
if xticks[time_times+1]>len(xyz_axis_mean):
break
#ax.axvline(xticks[time_times+1],linestyle='--',color="blue")
top_tick.append(xticks[time_times+1])
#print(time_times+1,xticks[time_times+1])
top_label.append(time_display[int(xticks[time_times+1])]) # 这两行分别是要显示坐标的位置以及置换的标签
#print(top_tick)
#print(len(xyz_axis_mean),top_tick[-1],top_tick[-1],top_tick[-2])
if len(xyz_axis_mean)-top_tick[-1]>(top_tick[-1]-top_tick[-2])*0.5:
#print(len(new_data),top_tick[-1],top_tick[-2])
top_tick.append(len(xyz_axis_mean))
top_label.append(time_display[-1])
#ax.axvline(len(new_data),linestyle='--',color="blue")
ax_top.set_xticks(top_tick)
#print(top_label)
ax_top.set_xticklabels(top_label)
ax10.grid(ls='--')
#ax6.axhline(5, color="red")
#ax1.text(0,0,'Numbers of processing='+str(k-1))
#ax2.text(0,0,'Numbers of processing='+str(k-1))
#ax3.text(0,0,'Numbers of processing='+str(k-1))
ax1.set_title(['x_axis'])
ax2.set_title(['y_axis'])
ax3.set_title(['z_axis'])
ax4.set_title(['x_mean'])
ax5.set_title(['y_mean'])
ax6.set_title(['z_mean'])
ax7.set_title(['x_std'])
ax8.set_title(['y_std'])
ax9.set_title(['z_std'])
ax10.set_title(['xyz_mean'])
ax11.set_title(['duration'])
ax12.set_title(['Y-X'])
ax13.set_title(['Z-Y'])
ax14.set_title(['X-Z'])
#plt.suptitle('date_all')
all_name=os.listdir(path_name)
log_name=[]
for name in all_name:
if name[-3:]=='png':
log_name.append(name)
print('找到这几个文件:',log_name)
for i in range(100):
if not str(i)+'.png' in log_name:
plt.savefig(path_name+str(i)+'.png')
print('save as '+str(i)+'.png')
break
print('极差 ',pd.DataFrame.max(data_act_max[0]-data_act_min[0]),pd.DataFrame.max(data_act_max[1]-data_act_min[1]),pd.DataFrame.max(data_act_max[2]-data_act_min[2]))
root,txt_index,cnc_code,prog_code='/home/zc/Jupyter_PG/10_10',[-1],'B49','O2008'
data=dataceate(root,txt_index,cnc_code,prog_code)
cut_time=pd.to_datetime('2019-10-30 12:00:00.001',format= '%Y-%m-%d')
primary_time=pd.to_datetime('2019-8-17 10:00:00.001',format= '%Y-%m-%d')
middle_time=pd.to_datetime('2019-9-22 09:00:00.001',format= '%Y-%m-%d')
path_name='./T8/'
wave_time=[690,705]
dev_start=0
dev_end=0
limit_nums=40000
chart_create(data,cut_time,primary_time,middle_time,path_name,wave_time,dev_start,dev_end,limit_nums)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191023213738388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMyODI0MzM1,size_16,color_FFFFFF,t_70)
基于大数据的刀具磨损趋势分析
最新推荐文章于 2024-06-19 11:11:58 发布