Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from scipy.stats import spearmanr #модуль для расчета статистик
- import pandas as pd #модуль для работы с данными
- df = pd.read_excel('F:\\Proby Python\\Belyy\\Belyy2017_GHG.xlsx') #cоздали Data Frame
- year = 2016 #берем данные за __ год МОЖНО МЕНЯТЬ
- df = df[df.Year == year] #Фильтрую данные по году
- set_1 = df['t'] # коррелят 1 МОЖНО МЕНЯТЬ
- set_2 = df['t'] #коррелят 2 МОЖНО МЕНЯТЬ
- set_1_copy = list(set_1.copy())#list потому, что метод spearmanr требует такого типа данных
- set_2_copy = list(set_2.copy()) #скопировала ряды для обрезки, мне нужны исходники, чтобы двигаться и в ту, и в другую сторону
- alpha = 0.05
- number_of_observation = 100 #задаем, сколько значений оставить в рядах МОЖНО МЕНЯТЬ
- p_value = []
- spearman_coef = []
- lag = []
- count = 0 #счетчик сдвига
- #можно посчитать коэффициент корреляции не преобразовыывая df, но метод вроде не выдает р-уровни. ПОСМОТРЕТЬ ПОТОМ!!!
- """
- df.corr(method='spearman')
- """
- # считаю коэффициент корреляции Спирмена и р-уровень
- coef, p = spearmanr(set_1_copy, set_2_copy,nan_policy='omit') # nan_policy='omit' отбросит все пары, которые имеют nan
- #добавляю в списки p-уровни и коэффициенты корреляции Спирмена
- p_value+=[p]
- spearman_coef+=[coef]
- lag+=[count]
- """
- я вытащила это отдельно, потому что это ряды до удаления из них элементов, дальше в цикле удаляю
- """
- #сдвигаем в правую сторону set_2 до тех пор, пока не останется заданное число значений
- while len(set_1_copy) > number_of_observation:
- set_1_copy.pop(0) #удаляем первый элемент
- set_2_copy.pop() #удяляем последний элемент
- # считаю коэффициент корреляции Спирмена
- coef, p = spearmanr(set_1_copy, set_2_copy, nan_policy='omit')
- #добавляю в списки p-уровни , коэффициенты корреляции Спирмена, и лаг
- p_value+=[p]
- spearman_coef+=[coef]
- count+=1 #счетчик сдвига
- lag+=[count]
- set_1_copy = list(set_1.copy())
- set_2_copy = list(set_2.copy()) # скопируем заново и движемся в другую сторону
- count = 0 # обнулила сдвиг
- #сдвигаем в левую сторону set_2 до тех пор, пока не останется заданное число значений
- while len(set_1_copy) > number_of_observation:
- set_1_copy.pop() #удяляем последний элемент
- set_2_copy.pop(0) #удаляем первый элемент
- # считаю коэффициент корреляции Спирмена
- coef, p = spearmanr(set_1_copy, set_2_copy, nan_policy='omit')
- #добавляю в списки p-уровни , коэффициенты корреляции Спирмена, и лаг
- p_value+=[p]
- spearman_coef+=[coef]
- count-=1 #счетчик сдвига
- lag+=[count]
- #добавляю коэффициенты Спирмена, p-уровни и лаг в DataFrame2
- df2 = pd.DataFrame({'spearman_coef': spearman_coef,
- 'p_value': p_value,
- 'lag': lag
- })
- df2.head() #это просто посмотреть, как выглядит набор данных для дальнейшего построения графика, чтоб не путаться
- #строим графики временных рядов
- # plotly standard imports
- import plotly.graph_objs as go
- import plotly as py
- from plotly import __version__
- import cufflinks as cf
- from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
- init_notebook_mode(connected=True)
- cf.go_offline()
- # Create traces
- trace0 = go.Scatter(
- x = df['fulldate (GMT+5)'],
- y = df['t'],
- mode = 'lines',
- name = 'Temperature'
- ) # это линия с температурой
- trace1 = go.Scatter(
- x = df['fulldate (GMT+5)'],
- y = df['t'],
- mode = 'lines',
- name = 'Temperature'
- ) # это линия с концентрацией метана
- data = [trace0, trace1]
- layout1 = dict(title = 'Autocorrelation of Temperature (2016)',
- xaxis = dict(title = 'Date'),
- yaxis = dict(title = 'Temperature, OC')
- )
- fig = dict(data=data, layout=layout1)
- py.offline.iplot(fig, filename="Autocorrelation of Temperature (2016)" )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement