Некоторое руководство требуется в фазе биннинга - PullRequest
0 голосов
/ 08 апреля 2020

очень плохо знаком с python и кодированием в целом, так что извините весь беспорядок и все, что с ним связано.

Моя цель - создать код для метода минимизации фазовой дисперсии, а не использовать существующие и применить его к данным https://github.com/PacktPublishing/Practical-Time-Series-Analysis/blob/master/Data%20Files/monthly-sunspot-number-zurich-17.csv.

В настоящее время мой код выглядит следующим образом

from astropy.time import Time

def MYpdm(TIME,DATA,num_bins,PERIOD):

TIME = pd.to_datetime(TIME,format="%Y-%m")
pd.DataFrame(Sunspots)

time_arr = TIME.to_numpy()

t = Time(time_arr)


phase = ((t.jd - t[0].jd)%period)/period
dec_phase = phase - np.floor(phase)

bin_width = 1.0/float(num_bins)   # calculate the width of the bins

values = np.zeros(num_bins)



bins = np.zeros(num_bins)
num_per_bin = np.zeros(num_bins)


for i in range(len(DATA)):
    n = int(phase[i] / bin_width) # calculate bin number for this value
    bins[n] += DATA[i]    # add value to bin SUM OF BINS!!!!
    num_per_bin[n] += 1
    values[n] = np.array(DATA[i])


Average_per_bin = bins/num_per_bin
binEdges = np.arange(num_bins) * bin_width


Mean = sum(DATA) / len(DATA)
Total_variance = sum((xi - Mean) ** 2 for xi in DATA) / (len(DATA)-1)


#Bin_variance = sum((xi - Average_per_bin) ** 2 for xi in bins) / (len(bins)-1)
Bin_variance = sum((xi - Average_per_bin) ** 2 for xi in bins) / (len(bins)-1)

print('Total Variance is % s' %Total_variance)
print()
print('Sum of bins % s' %(bins))
print()
print('Number of data points in bin % s' %(num_per_bin))
print()
print('Average per bin is % s' %(Average_per_bin))
print()
print('Bin variance is % s' %(Bin_variance))
print()
return (values)

Причина, по которой у меня так много отпечатков, в том, что я хочу видеть, что происходит упорядоченным образом. Я доволен всем, кроме того, что мне нужны индивидуальные ценности в мусорных ведрах. Сумма бинов дает правильную сумму в каждом бине, но мне нужно иметь возможность рассчитать дисперсию в каждом бине и требовать отдельных значений, составляющих сумму. Я попытался сделать это в values, но не могу понять, как получить все необходимые значения, он просто возвращает одно. Я добавил свой вывод, как вы можете видеть, возвращаемая часть - это просто одно значение для каждого бина вместо всех значений. Я попытался изменить отступ, но безрезультатно.

Любая помощь будет принята с благодарностью.

Общая дисперсия на выходе равна 1887.8131081642057

Сумма бинов [71788.1 32836.2 39945.7]

Количество точек данных в ячейке [970. 927. 923.]

Среднее значение для корзины составляет [74.00835052 35.42200647 43.27811484]

Дисперсия корзины составляет [3.90301197e + 09 3.90858406e + 09 3.90744923e + 09]

массив ([50,3, 33,4, 159,6])

...