очень плохо знаком с 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])