SHARE
TWEET

Untitled

a guest Oct 15th, 2019 88 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from scipy.stats import spearmanr #модуль для расчета статистик
  2. import pandas as pd #модуль для работы с данными
  3.  
  4. df = pd.read_excel('F:\\Proby Python\\Belyy\\Belyy2017_GHG.xlsx') #cоздали Data Frame
  5.  
  6. year = 2016 #берем данные за __ год МОЖНО МЕНЯТЬ
  7.  
  8. df = df[df.Year == year] #Фильтрую данные по году
  9. set_1 = df['t'] # коррелят 1 МОЖНО МЕНЯТЬ
  10. set_2 = df['t'] #коррелят 2 МОЖНО МЕНЯТЬ
  11.  
  12.  
  13. set_1_copy = list(set_1.copy())#list потому, что  метод spearmanr требует такого типа данных
  14. set_2_copy = list(set_2.copy()) #скопировала ряды для обрезки, мне нужны исходники, чтобы двигаться и в ту, и в другую сторону
  15.  
  16. alpha = 0.05
  17. number_of_observation = 100 #задаем, сколько значений оставить в рядах МОЖНО МЕНЯТЬ
  18. p_value = []
  19. spearman_coef = []
  20. lag = []
  21. count = 0 #счетчик сдвига
  22.  
  23. #можно посчитать коэффициент корреляции не преобразовыывая df, но метод вроде не выдает р-уровни. ПОСМОТРЕТЬ ПОТОМ!!!
  24. """
  25. df.corr(method='spearman')
  26. """
  27.  
  28. # считаю коэффициент корреляции Спирмена и р-уровень
  29. coef, p = spearmanr(set_1_copy, set_2_copy,nan_policy='omit') # nan_policy='omit' отбросит все пары, которые имеют nan
  30.  
  31. #добавляю в списки p-уровни и коэффициенты корреляции Спирмена
  32. p_value+=[p]
  33. spearman_coef+=[coef]
  34. lag+=[count]
  35.  
  36.  
  37. """
  38. я вытащила это отдельно, потому что это ряды до удаления из них элементов, дальше в цикле удаляю
  39. """
  40.  
  41.  
  42. #сдвигаем в правую сторону set_2 до тех пор, пока не останется заданное число значений
  43. while len(set_1_copy) > number_of_observation:
  44.     set_1_copy.pop(0) #удаляем первый элемент
  45.     set_2_copy.pop() #удяляем последний элемент
  46. # считаю коэффициент корреляции Спирмена
  47.     coef, p = spearmanr(set_1_copy, set_2_copy, nan_policy='omit')
  48.  
  49. #добавляю в списки p-уровни , коэффициенты корреляции Спирмена, и лаг
  50.     p_value+=[p]
  51.     spearman_coef+=[coef]
  52.     count+=1 #счетчик сдвига
  53.     lag+=[count]
  54.    
  55.  
  56. set_1_copy = list(set_1.copy())
  57. set_2_copy = list(set_2.copy()) # скопируем заново и движемся в другую сторону
  58. count = 0 # обнулила сдвиг
  59.  
  60.  
  61. #сдвигаем в левую сторону set_2 до тех пор, пока не останется заданное число значений
  62. while len(set_1_copy) > number_of_observation:
  63.     set_1_copy.pop()   #удяляем последний элемент
  64.     set_2_copy.pop(0)  #удаляем первый элемент
  65. # считаю коэффициент корреляции Спирмена
  66.     coef, p = spearmanr(set_1_copy, set_2_copy, nan_policy='omit')
  67.  
  68. #добавляю в списки p-уровни , коэффициенты корреляции Спирмена, и лаг
  69.     p_value+=[p]
  70.     spearman_coef+=[coef]
  71.     count-=1 #счетчик сдвига
  72.     lag+=[count]  
  73.    
  74. #добавляю коэффициенты Спирмена, p-уровни и лаг в DataFrame2
  75. df2 = pd.DataFrame({'spearman_coef': spearman_coef,
  76.                     'p_value': p_value,
  77.                     'lag': lag
  78.                     })
  79. df2.head() #это просто посмотреть, как выглядит набор данных для дальнейшего построения графика, чтоб не путаться
  80.  
  81. #строим графики временных рядов
  82. # plotly standard imports
  83. import plotly.graph_objs as go
  84. import plotly as py
  85. from plotly import __version__
  86.  
  87.  
  88. import cufflinks as cf
  89. from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
  90. init_notebook_mode(connected=True)
  91.  
  92.  
  93. cf.go_offline()
  94.  
  95.  
  96.  
  97.  
  98.  
  99. # Create traces
  100. trace0 = go.Scatter(
  101.     x = df['fulldate (GMT+5)'],
  102.     y = df['t'],
  103. mode = 'lines',
  104. name = 'Temperature'
  105. ) # это линия с температурой
  106. trace1 = go.Scatter(
  107.     x = df['fulldate (GMT+5)'],
  108.     y = df['t'],
  109.     mode = 'lines',
  110.     name = 'Temperature'
  111. ) # это линия с концентрацией метана
  112.  
  113. data = [trace0, trace1]
  114. layout1 = dict(title = 'Autocorrelation of Temperature (2016)',
  115.           xaxis = dict(title = 'Date'),
  116.           yaxis = dict(title = 'Temperature, OC')
  117.          
  118.           )
  119. fig = dict(data=data, layout=layout1)
  120.  
  121.  
  122. py.offline.iplot(fig, filename="Autocorrelation of Temperature (2016)" )
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top