파이썬을 사용하여 32x32 행렬을 가져 와서 이러한 행렬의 대부분을 단일 배열에 추가 한 다음 각 행렬에 타임 스탬프 인덱스를 추가합니다.

매튜 브루어

저는 파이썬 코딩을 처음 접했고 타임 스탬프가있는 1024 열 행에 32x32 행렬을 제공하는 .CSV 파일로 작업하고 있습니다. 32x32 배열을 제공하기 위해 데이터를 재구성하고 행렬을 numpy 배열에 추가하는 각 행을 반복했습니다.

`i = 0 
while i < len(df_array):
    if i == 0:
    spec = np.reshape(df_array[i][np.arange(1,1025)], (32,32))
    spectrum_matrix = spec
else: 
    spec = np.reshape(df_array[i][np.arange(1,1025)], (32,32))
    spectrum_matrix = np.concatenate((spectrum_matrix, spec), axis = 0)
i = i + 1
print("job done")`

내가하고 싶은 것은 원래 데이터 파일의 타임 스탬프를 추가하고 각 행렬에 추가하여 평균 5 분 동안 데이터를 다시 샘플링 할 수 있도록하는 것입니다. 또한이 Drop size 분포 와 유사한 플롯을 얻기 위해 bin을 플로팅하고 싶습니다.

참고로 pandas로 데이터 .CSV를 읽고 있으며 여기에 원시 데이터의 일부 예가 있습니다. 01.06.2017; 18 : 22 : 20; 0.122; 0.00; 51; 7.401; 10375; 18745; 57; 27; 0.00; 23.6; 0.110; 0; <스펙트럼> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;

SPECTRUM 뒤의;는 32x32 행렬입니다.

도움을 주셔서 미리 감사드립니다!

Tkanno

Python 및 관련 패키지는 루프없이 많은 작업을 수행 할 수 있습니다.

귀하의 데이터에 대한 내 이해에서 (8640 x 32 x 32) 데이터 구조 (시간 x 크기 x 속도)가 있습니다. Pandas는 2D 데이터 구조와 매우 잘 작동하지만 더 높은 차원의 데이터를 위해서는 xarray에 익숙해지는 것이 좋습니다 . pandas와 함께이 패키지를 사용하면 루프에 의존하지 않고도 데이터를 만들고 조작 할 수 있습니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import xarray as xr
import seaborn as sns
%matplotlib inline

#create random data
data = (np.random.binomial(n =5, p  =0.2, size =(8640,32,32))*1000).astype(int)

#create labels for data
sizes= np.linspace(1,5,32)
velocities = np.linspace(1,1000, num = 32)

#make time range of 24 hours with 10sec intervals
ind = pd.date_range(start='2014-01-01', periods=8640, freq='10s') 

#convert data to xarray 3D data structure
df = xr.DataArray(data, coords = [ind, sizes, velocities], 
                  dims = ['time', 'size', 'speed'])

#make a 5 min average of the data
min_average= df.resample('300s', dim = 'time', how = 'mean')

#plot sample of data and 5 min average
my1d = min_average.isel(size = 5, speed= 10)
my1d.plot(label = '5 min avg')
plt.gca()
df.isel(size = 5, speed =10).plot(alpha = 0.3, c = 'r', label = 'raw_data')
plt.legend() 

데이터의 예 플롯


연결 한 것과 같은 분포도를 만드는 것은 약간 까다로워 지지만 가능합니다.

#transform your data to only have mean speed for each time and size
#and convert to pandas dataframe
mean_speed =min_average.mean(dim = ['speed'])
#for some reason xarray make you name the new column when you convert
#to a pandas dataframe. I then get rid of the extra empty variable with 
#a list comprehension
df= mean_speed.to_dataframe('').unstack().T
df.index =  np.array([np.array(i)[1].astype(float) for i in df.index])

#make a contourplot of your new data
plt.contourf(df.columns, df.index, df.values, cmap ='PuBu_r')
plt.title('mean speed')
plt.ylabel('size')
plt.xlabel('time')
plt.colorbar()

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관