基于大数据的刀具磨损趋势分析

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)
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值