2015-09-03 15 views
-4

У меня есть набор наборов данных, выводимых из программы. Моя цель - нарисовать среднее число наборов данных в виде линейного графика в pyplot или numpy. Моя проблема заключается в том, что длина выходных наборов данных не контролируется.усреднение наборов данных различной длины

Например, у меня есть четыре набора данных длиной от 200 до 400 точек с значениями x, нормированными на цифры от 0 до 1, и я хочу рассчитать медианную линию для четырех наборов данных.

Все, что я могу представить до сих пор, заключается в том, чтобы интерполировать (линейно было бы достаточно), чтобы добавить дополнительные точки данных в более короткие последовательности или каким-то образом периодически удалять значения из более длинных последовательностей. У кого-нибудь есть предложения?

В настоящее время я импортирую с помощью csv-ридера и добавляю строку за строкой в ​​список, поэтому вывод представляет собой список списков, каждый из которых имеет набор координат xy, который, как я думаю, совпадает с массивом 2d?

Я действительно думал, что проще удалить лишние точки данных, чем интерполировать, например, начиная с четырех списков, я мог бы удалить ненужные точки вдоль оси x, так как они нормализованы и увеличиваются, а затем отбирают точки слишком маленький размер шага, ссылаясь на короткие размерах списка шагов (это объяснение не может быть так ясно, я буду стараться писать пример и поставить его завтра)

Заданные данные примера будет

line1 = [[0,33,2], [0,66,5], [1,5]]

строка 2 = [[0,25,43], [0,5,53], [0,75,6,5], [1,98 6]]

+3

Примеры данных? Желаемые результаты? Какова форма наборов данных, выводимых из программы? – Alexander

+0

@Alexander Похоже, что все на самом деле дано для одного; желаемые результаты указаны как «средняя линия для четырех наборов данных» – Ross

+2

@ Ross. Ты шутишь? Нет данных. Являются ли списки результатов, словари, серии панд и т. Д. Это применимо для того, чтобы спросить хороший вопрос Панды, но здесь уместен. http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples – Alexander

ответ

0

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

первые данные импортируются в качестве словаря для облегчения доступа и манипуляций :

def average(files, newfile):  
    import csv                 
    dict={}                  
    ln=[]                  
    max=0                  
    for x in files:                
     with open(x+'.csv', 'rb') as file:          
      reader = csv.reader(file, delimiter=',')        
      l=[]                 
      for y in reader:              
       l.append(y)              
      dict[x]=l               
      ln.append(x) 

Следующая длина самого длинного набора данных устанавливается:

for y in ln:                 
     if max == 0:                
      max = len(dict[y])             
     elif len(dict[y]) >= max:            
      max = len(dict[y])             

следующий число итераций, необходимое для каждого набора данных должен быть четкости INED:

for y in ln:                 
     dif = max - len(dict[y])             

наконец промежуточные значения рассчитываются путем линейной интерполяции и вставляется в набор данных

 for i in range(dif):              
      loc = int(i* len(dict[y])/dif)          
      if loc ==0:               
       loc =1               
      new = [(float(dict[y][loc-1][x])+float(dict[y][loc][x]))/2 
      for x in range(len(dict[y][loc]))] 
      dict[y].insert(loc,new)            

затем усреднением очень просто:

for x in range(len(dict[ln[0]])):           
     t = [sum(float(dict[u][x][0]) for u in ln)/len(ln), 
     sum(float(dict[u][x][1])/4 for u in ln)] 
     avg.append(t)               

Я не говорю это довольно код, но он делает то, что мне нужно ...

 Смежные вопросы

  • Нет связанных вопросов^_^