2016-06-03 3 views
0

У меня есть два набора данных, созданных двумя измерительными приборами, каждый инструмент дает столбцы столбца времени и напряжения, в то время как два набора данных представляют одинаковое количество времени (или очень близко), они хранятся в массивах разного размера, так как время выборки отличается. Я хочу получить коэффициенты scipy.stats.pearsonr, но для этого мне нужны два набора данных для того же размера.Подгонка данных к разным размерам массива

Как я могу масштабировать размер меньшего из двух наборов до размера большего из двух наборов, так что одни и те же данные представлены с большим количеством точек данных?

Редактировать.

Извините, что я должен был предоставить пример данных, я не сделал этого, потому что в файлах есть дополнительные данные, и я думал, что это привлечет внимание от аспекта, с которым у меня возникли проблемы.

Файл с именем OOL_Drift.dat содержит данные, которые я хочу знать, если они коррелируют с показаниями температуры, которые содержатся в TemperatureChannels.txt и Room_Temperature.txt. 1-й столбец в каждом файле - время. Второй столбец OOL_Drift.dat содержит данные, которые я хочу сравнить. 4-й, 8-й, 12-й, 16-й, 20-й столбцы в файле TemperatureChannels.txt содержат данные для сравнения.

Вот файлы https://drive.google.com/folderview?id=0B_viQkcWo4Z2LUlyVG82eWpmUXM&usp=sharing

Поскольку у меня есть много образцов и показания не меняются очень быстро, я думаю, он должен работать.

Спасибо всем дали предложения

+0

Если вы уверены, что хотите это сделать, @npielawski дал вам представление о том, как это сделать. Тем не менее, я считаю, что вам действительно нужно много думать о том, хотите ли вы сделать все это. Вы сами это сказали: «одни и те же данные представлены с большим количеством точек данных», что, строго говоря, невозможно. Если обе частоты дискретизации намного превышают сигнал, который вы хотите сравнить, он (вероятно) будет в порядке. Но если данные очень шумные или у вас бурные измерения, это (возможно) плохая идея.Возможно, вам следует задать более конкретный вопрос (с данными) по адресу http://stats.stackexchange.com/ – StefanS

ответ

0

Что вы могли бы сделать, хотя, чтобы добраться до массива той же длины, чтобы взять короче и расширить его путем интерполяции информации. Вы можете интерполировать сигнал (билинейный или даже трилинейный, чтобы иметь более высокие значения) и перепрограммировать его.

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.interp.html

0

Это трудно ответить без некоторого минимального примера того, что вы делаете точно, но один подход, который мог бы работать, чтобы сделать это с помощью pandas. Если у вас есть время ваших измерений, вы можете создать два DataFrames с индексами даты и времени:

df1 = pd.DataFrame({"data":np.random.rand(6)}, index=pd.date_range("01:00:00","06:00:00", freq="H")) 

        data 
2016-06-03 01:00:00 0.436862 
2016-06-03 02:00:00 0.171859 
2016-06-03 03:00:00 0.273939 
2016-06-03 04:00:00 0.949059 
2016-06-03 05:00:00 0.434267 
2016-06-03 06:00:00 0.212041 

df2 = pd.DataFrame({"data2":np.random.rand(3)}, index=pd.date_range("01:00:00","06:00:00", freq="2H")) 

        data2 
2016-06-03 01:00:00 0.544233 
2016-06-03 03:00:00 0.253989 
2016-06-03 05:00:00 0.893227 

Вы можете просто присоединиться к двум на индексах, которые будут автоматически выравнивают те наблюдения, которые происходили в то же самое время, в то время как заполнение «недостающее» наблюдения в массиве, который имеет меньше наблюдений с NaN:

df1["data2"] = df2.data2 

        data  data2 
2016-06-03 01:00:00 0.436862 0.544233  
2016-06-03 02:00:00 0.171859 NaN 
2016-06-03 03:00:00 0.273939 0.253989  
2016-06-03 04:00:00 0.949059 NaN 
2016-06-03 05:00:00 0.434267 0.893227  
2016-06-03 06:00:00 0.212041 NaN 

Вы можете использовать панда довольно обширный interpolate метод, чтобы заполнить эти NaN сек до вычисления коэффициента корреляции - там, вероятно, будет интерполяция Routin e там, что имеет смысл для вашего приложения.