2017-01-01 6 views
0

Вот link to the file с информацией в «sunspots.txt». За исключением внешних модулей matploblib.pyplot и seaborn, как можно вычислить текущее среднее значение без импорта внешних модулей, таких как numpy и future? (Если это поможет, я могу LINSPACE и loadtxt без NumPy.)Как построить график работы без импорта внешних модулей (кроме matplotlib)?

Если это поможет, мой код до сих пор размещен ниже:

## open/read file 
f2 =  open("/Users/location/sublocation/sunspots.txt", 'r') 
## extract data 
lines = f2.readlines() 
## close file 
f2.close() 

t = [] ## time 
n = [] ## number 
## col 1 == col[0] -- number identifying which month 
## col 2 == col[1] -- number of sunspots observed 
for col in lines: ## 'col' can be replaced by 'line' iff change below is made 
    new_data = col.split() ## 'col' can be replaced by 'line' iff change above is made 
    t.append(float(new_data[0])) 
    n.append(float(new_data[1])) 
## extract data ++ close file 

## check ## 
# print(t) 
# print(n) 
## check ## 

## import 
import matplotlib.pyplot as plt 
import seaborn as sns 

## plot 
sns.set_style('ticks') 
plt.figure(figsize=(12,6)) 
plt.plot(t,n, label='Number of sunspots oberved monthly') 
plt.xlabel('Time') 
plt.ylabel('Number of Sunspots Observed') 
plt.legend(loc='best') 
plt.tight_layout() 
plt.savefig("/Users/location/sublocation/filename.png", dpi=600) 

Вопрос от the weblink from this university (стр.11 в формате PDF, с.98 книги, упражнение 3-1).

Перед маркировки это как дубликат:

similar question was posted here. Разница в том, что все опубликованные ответы требуют импорта внешних модулей, таких как numpy и future, в то время как я пытаюсь обойтись без внешнего импорта (за исключением выше).

+0

Есть несколько «скользящие средние» , Что конкретно вы имеете в виду, с какими весами и временными окнами? (Мы не должны смотреть на вашу внешнюю связь, но это похоже на 11 измерений, сосредоточенных на текущем измерении, с равными весами.) –

+0

Да, это 11 измерений (от -5 до 5). Ниже приведена [картина проблемы] (https://i.imgur.com/64Yybr6.png), если это помогает. – mikey

+0

Не требует ли matplotlib numpy? – wwii

ответ

1

зашумленных данных, который должен быть сглажены

y = [1.0016, 0.95646, 1.03544, 1.04559, 1.0232, 
    1.06406, 1.05127, 0.93961, 1.02775, 0.96807, 
    1.00221, 1.07808, 1.03371, 1.05547, 1.04498, 
    1.03607, 1.01333, 0.943, 0.97663, 1.02639] 

Попробуйте running average с размером окна n

n = 3 

Каждое окно может по представлены кусочком

window = y[i:i+n] 

Нужно что-то сохраняют средние значения в

averages = [] 

Итерировать на ломках n-длины данных; получить среднее значение для каждого среза; сохранить среднее значение в другом списке.

from __future__ import division # For Python 2 
for i in range(len(y) - n): 
    window = y[i:i+n] 
    avg = sum(window)/n 
    print(window, avg) 
    averages.append(avg) 

При печати средних Вы заметите, что меньше, чем в среднем есть образцы в данных.


Может быть, вы могли бы импортировать внутренний/встроенный модуль и использовать этот SO ответ - https://stackoverflow.com/a/14884062/2823755


Много хитов поиска с running average algorithm python