>source

현재 "K"와 "Z"로 시작하는 파일을 반복하고 "Temp"데이터를 플로팅하는 함수가 있습니다. 파란색은 "K"데이터이고 빨간색은 "Z"데이터입니다. 이것은 내 목표에 매우 잘 작동합니다.

내가 갇힌 곳 :

  • 이제 루프의 각 파일에 대해 샘플 100과 샘플 350 사이의 "Temp"평균을 취하려고합니다.
  • 그런 다음 각 파일의 평균을 "K"평균에 대한 열과 "Z"평균에 대한 열이있는 새 dataFrame에 저장하려고합니다.
  • 마지막으로 루프 외부에서 "K"열의 평균과 "Z"열의 평균을 구하고 싶습니다. 차트에 플로팅합니다.
  • 아래 코드에서는 내가 갇혀있는 부분에 주석을 달았습니다.

    부수적 인 질문으로, 누군가가 각 데이터 세트의 "평탄한"영역 (기울기 ~ = 0)을 자동으로 감지하고 평균화 할 간격을 자동으로 선택하는 좋은 방법을 알고 있다면;그것은 가지고있는 추가 멋진 것입니다! 지금 당장은 고정 간격을 설정하여 일부 데이터 포인트를 잃을 것입니다.

    filenamesK = glob("C:/Users/K*.csv")
    filenamesZ = glob("C:/Users/Z*.csv")
    def plot_data(filename, fig_ax, color):
        df = pd.read_csv(f, sep=',',skiprows=24)
        df.columns=['sample','Temp']
        df=df.astype(str)
        df["Temp"] = df["Temp"].str.replace('\+ ', '').str.replace(' ', '').astype(float)
        
        # Now take the average of df["Temp"] from sample 100 until sample 350.
        
        # Append this average to a K_Z_Averages, containing a column for average 
        # from each K file and the average from each Z file.
        
        fig_ax.plot(df[["Temp"]], color=color)
    fig, ax = plt.subplots()
    for f in filenamesK:
        plot_data(f, ax, 'blue')
    for f in filenamesZ:
        plot_data(f, ax, 'red')
    # After the loop is finished, take the average of each column in K_Z_averages 
    # with each average from the K files and from the Z files.    
        
    plt.show()
    
    

    • 답변 # 1

      파일 당 평균을 저장하기위한 사전을 만든 다음이를 사용하여 평균을 추가 할 수 있습니다.

      # Before the the `plot_data` definition
      K_Z_Averages = {'K':[], 'Z':[]}
      # Inside the function
      avg = df.iloc[100-1:350+1]['Temp'].mean()
      K_Z_Averages[filename.split('/')[-1][0]].append(avg)
      
      

      어디 filename.split('/')[-1][0] 경로 확장자를 제거하고 파일 이름의 첫 글자를 사용합니다 (사용하는 것과 유사합니다. os.path.basename(filename)[0] ).

      그런 다음 평균의 전체 평균을 구하려면 :

      pd.DataFrame(K_Z_Averages).mean()
      
      

      <시간 />

      전체 코드는 다음과 같습니다.

      filenamesK = glob("C:/Users/K*.csv")
      filenamesZ = glob("C:/Users/Z*.csv")
      # Create dict of lists for storing the averages
      K_Z_Averages = {'K':[], 'Z':[]}
      def plot_data(filename, fig_ax, color):
          df = pd.read_csv(f, sep=',',skiprows=24)
          df.columns=['sample','Temp']
          df=df.astype(str)
          df["Temp"] = df["Temp"].str.replace('\+ ', '').str.replace(' ', '').astype(float)
          
          # Now take the average of df["Temp"] from sample 100 until sample 350.
          avg = df.iloc[100-1:350+1]['Temp'].mean()
          
          # Append this average to a K_Z_Averages, containing a column for average 
          # from each K file and the average from each Z file.
          K_Z_Averages[filename.split('/')[-1][0]].append(avg)
          
          fig_ax.plot(df[["Temp"]], color=color)
      fig, ax = plt.subplots()
      for f in filenamesK:
          plot_data(f, ax, 'blue')
      for f in filenamesZ:
          plot_data(f, ax, 'red')
      # Take the overall average 
      df_avg = pd.DataFrame(K_Z_Averages).mean() 
      # Add vertical lines for each mean
      ax.vlines(df_avg, *ax.get_ylim(), linestyles='--', colors=['blue','red'], alpha=.5)
      plt.show()
      
      

    • 답변 # 2

      'K_Z_Average'질문의 두 번째 부분을 이해했는지 잘 모르겠습니다. 그러나 여기에 간다 :

         # Now take the average of df["Temp"] from sample 100 until sample 350.
          average_temperature=df.iloc[100:350]['Temp'].mean()
         
          # Append this average to a K_Z_Averages, containing a column for average 
          # from each K file and the average from each Z file.
          df['K_Z_Average']=average_temparature
      
      

  • 이전 node.js - 클라이언트에 반응하기 위해 노드 백엔드에서 데이터를받는 방법은 무엇입니까?
  • 다음 get - HTML 양식 및 입력 데이터