Hitung Anomali Iklim menggunakan Garis Dasar 30 Tahun dengan Python

Saya mencoba mengurangi suhu rata-rata 30 tahun untuk setiap bulan dari data rangkaian waktu asli. Rangkaian waktu ini menampilkan suhu yang diamati, dalam derajat C pada rentang waktu bulanan, dari tahun 1985-2015.

Inilah yang telah saya coba sejauh ini:

M=pd.read_excel('Temperature.xlsx',1,parse_dates=True, index_col= 'Date')
#this is just a timeseries of Monthly Temperature from 1895-2015
df=M['Temp']  #All of the timeseries
MT=M['Temp']['1981-Jan':'2010-Dec']  #30 Year Timeslice

Saya bisa mendapatkan rata-rata setiap bulan menggunakan:

MTT=MT.groupby(MT.index.strftime("%m")).mean()

Bagaimana cara saya mengurangi setiap elemen bulanan MTT dari rangkaian waktu bulanan asli saya?

Saya juga mencoba:

U=df-df.groupby([df.index.month]).transform('mean')

Namun ini memberi saya perbedaan antara rata-rata setiap bulan di seluruh rangkaian waktu dan rangkaian waktu asli. Apa yang saya lewatkan?

Terima kasih sebelumnya untuk bantuan!

EDIT: Berikut cuplikan data saya dari tahun 1895 hingga akhir tahun 1939.

Date    Temp
1/1/1895    7.72
2/1/1895    5.50
3/1/1895    13.56
4/1/1895    17.83
5/1/1895    20.39
6/1/1895    25.50
7/1/1895    25.89
8/1/1895    25.11
9/1/1895    22.67
10/1/1895   15.83
11/1/1895   10.28
12/1/1895   8.89
1/1/1896    7.56
2/1/1896    8.78
3/1/1896    14.61
4/1/1896    20.11
5/1/1896    26.11
6/1/1896    27.78
7/1/1896    26.00
8/1/1896    25.50
9/1/1896    22.56
10/1/1896   16.11
11/1/1896   11.67
12/1/1896   8.17
1/1/1897    5.06
2/1/1897    10.11
3/1/1897    13.22
4/1/1897    17.06
5/1/1897    21.17
6/1/1897    25.67
7/1/1897    26.61
8/1/1897    24.39
9/1/1897    21.33
10/1/1897   19.17
11/1/1897   12.94
12/1/1897   6.61
1/1/1898    7.33
2/1/1898    10.89
3/1/1898    13.28
4/1/1898    17.56
5/1/1898    22.67
6/1/1898    25.94
7/1/1898    26.33
8/1/1898    24.72
9/1/1898    22.50
10/1/1898   17.44
11/1/1898   9.78
12/1/1898   5.61
1/1/1899    6.11
2/1/1899    5.78
3/1/1899    14.61
4/1/1899    17.33
5/1/1899    23.00
6/1/1899    26.56
7/1/1899    26.61
8/1/1899    26.83
9/1/1899    23.89
10/1/1899   18.28
11/1/1899   12.00
12/1/1899   7.22
1/1/1900    7.94
2/1/1900    8.50
3/1/1900    13.78
4/1/1900    17.22
5/1/1900    23.39
6/1/1900    27.78
7/1/1900    27.00
8/1/1900    26.44
9/1/1900    25.89
10/1/1900   18.72
11/1/1900   12.89
12/1/1900   6.56
1/1/1901    7.94
2/1/1901    9.22
3/1/1901    12.00
4/1/1901    16.72
5/1/1901    22.67
6/1/1901    27.83
7/1/1901    27.17
8/1/1901    27.44
9/1/1901    23.56
10/1/1901   19.33
11/1/1901   13.67
12/1/1901   6.61
1/1/1902    6.72
2/1/1902    9.50
3/1/1902    11.83
4/1/1902    20.11
5/1/1902    24.00
6/1/1902    28.28
7/1/1902    25.83
8/1/1902    26.67
9/1/1902    22.06
10/1/1902   18.67
11/1/1902   12.94
12/1/1902   7.22
1/1/1903    6.78
2/1/1903    6.17
3/1/1903    11.78
4/1/1903    17.67
5/1/1903    21.17
6/1/1903    23.06
7/1/1903    27.44
8/1/1903    26.11
9/1/1903    22.72
10/1/1903   17.00
11/1/1903   12.39
12/1/1903   6.94
1/1/1904    6.50
2/1/1904    12.17
3/1/1904    16.00
4/1/1904    18.44
5/1/1904    21.17
6/1/1904    24.61
7/1/1904    25.50
8/1/1904    25.50
9/1/1904    21.67
10/1/1904   16.50
11/1/1904   10.22
12/1/1904   7.06
1/1/1905    7.11
2/1/1905    6.39
3/1/1905    13.33
4/1/1905    15.33
5/1/1905    22.22
6/1/1905    25.56
7/1/1905    25.39
8/1/1905    25.67
9/1/1905    22.72
10/1/1905   16.72
11/1/1905   11.89
12/1/1905   3.61
1/1/1906    6.56
2/1/1906    7.83
3/1/1906    12.44
4/1/1906    16.89
5/1/1906    21.56
6/1/1906    26.00
7/1/1906    24.39
8/1/1906    24.22
9/1/1906    22.33
10/1/1906   15.22
11/1/1906   9.50
12/1/1906   9.28
1/1/1907    10.33
2/1/1907    11.00
3/1/1907    16.50
4/1/1907    17.22
5/1/1907    19.56
6/1/1907    24.39
7/1/1907    25.44
8/1/1907    27.11
9/1/1907    23.61
10/1/1907   17.94
11/1/1907   9.11
12/1/1907   8.06
1/1/1908    7.44
2/1/1908    9.17
3/1/1908    15.61
4/1/1908    17.33
5/1/1908    21.28
6/1/1908    26.28
7/1/1908    24.44
8/1/1908    24.39
9/1/1908    21.94
10/1/1908   16.44
11/1/1908   10.94
12/1/1908   8.22
1/1/1909    10.17
2/1/1909    10.17
3/1/1909    13.11
4/1/1909    17.89
5/1/1909    21.39
6/1/1909    26.22
7/1/1909    26.67
8/1/1909    25.06
9/1/1909    21.50
10/1/1909   17.39
11/1/1909   13.89
12/1/1909   4.33
1/1/1910    7.06
2/1/1910    7.11
3/1/1910    15.33
4/1/1910    17.00
5/1/1910    22.00
6/1/1910    26.00
7/1/1910    27.22
8/1/1910    27.00
9/1/1910    23.44
10/1/1910   16.67
11/1/1910   13.17
12/1/1910   7.83
1/1/1911    10.44
2/1/1911    9.00
3/1/1911    14.67
4/1/1911    17.28
5/1/1911    20.39
6/1/1911    25.83
7/1/1911    25.17
8/1/1911    25.78
9/1/1911    24.06
10/1/1911   16.67
11/1/1911   9.39
12/1/1911   4.22
1/1/1912    7.00
2/1/1912    7.06
3/1/1912    11.17
4/1/1912    15.78
5/1/1912    21.78
6/1/1912    24.33
7/1/1912    26.22
8/1/1912    25.56
9/1/1912    21.44
10/1/1912   16.78
11/1/1912   9.94
12/1/1912   4.11
1/1/1913    5.89
2/1/1913    7.56
3/1/1913    10.28
4/1/1913    15.61
5/1/1913    21.67
6/1/1913    23.00
7/1/1913    25.22
8/1/1913    24.39
9/1/1913    19.17
10/1/1913   15.94
11/1/1913   12.44
12/1/1913   4.94
1/1/1914    9.22
2/1/1914    6.94
3/1/1914    10.67
4/1/1914    16.44
5/1/1914    20.72
6/1/1914    24.39
7/1/1914    25.33
8/1/1914    24.61
9/1/1914    22.17
10/1/1914   17.39
11/1/1914   11.44
12/1/1914   4.44
1/1/1915    4.72
2/1/1915    8.72
3/1/1915    7.78
4/1/1915    16.39
5/1/1915    20.67
6/1/1915    26.11
7/1/1915    26.33
8/1/1915    24.06
9/1/1915    23.00
10/1/1915   17.61
11/1/1915   12.39
12/1/1915   8.56
1/1/1916    9.78
2/1/1916    10.94
3/1/1916    15.94
4/1/1916    17.00
5/1/1916    23.22
6/1/1916    28.00
7/1/1916    25.89
8/1/1916    25.06
9/1/1916    22.00
10/1/1916   17.78
11/1/1916   9.94
12/1/1916   7.44
1/1/1917    7.33
2/1/1917    10.22
3/1/1917    12.50
4/1/1917    17.44
5/1/1917    20.44
6/1/1917    26.22
7/1/1917    28.00
8/1/1917    26.22
9/1/1917    23.11
10/1/1917   16.89
11/1/1917   13.33
12/1/1917   7.22
1/1/1918    2.89
2/1/1918    9.06
3/1/1918    14.61
4/1/1918    16.78
5/1/1918    21.83
6/1/1918    26.56
7/1/1918    27.67
8/1/1918    25.89
9/1/1918    21.44
10/1/1918   18.22
11/1/1918   9.22
12/1/1918   5.44
1/1/1919    4.44
2/1/1919    8.61
3/1/1919    12.22
4/1/1919    18.17
5/1/1919    21.56
6/1/1919    23.50
7/1/1919    26.00
8/1/1919    26.83
9/1/1919    22.33
10/1/1919   18.39
11/1/1919   11.67
12/1/1919   6.89
1/1/1920    5.11
2/1/1920    10.56
3/1/1920    10.89
4/1/1920    15.78
5/1/1920    22.39
6/1/1920    24.89
7/1/1920    26.67
8/1/1920    24.44
9/1/1920    24.06
10/1/1920   18.00
11/1/1920   10.50
12/1/1920   7.22
1/1/1921    9.11
2/1/1921    9.22
3/1/1921    13.83
4/1/1921    16.61
5/1/1921    22.28
6/1/1921    24.78
7/1/1921    25.61
8/1/1921    26.50
9/1/1921    24.17
10/1/1921   18.78
11/1/1921   12.89
12/1/1921   9.72
1/1/1922    5.56
2/1/1922    10.06
3/1/1922    12.22
4/1/1922    17.72
5/1/1922    22.61
6/1/1922    25.44
7/1/1922    27.44
8/1/1922    27.33
9/1/1922    23.78
10/1/1922   17.50
11/1/1922   11.39
12/1/1922   9.78
1/1/1923    10.17
2/1/1923    7.94
3/1/1923    10.22
4/1/1923    16.94
5/1/1923    22.11
6/1/1923    26.67
7/1/1923    26.33
8/1/1923    25.72
9/1/1923    23.17
10/1/1923   16.00
11/1/1923   10.11
12/1/1923   6.06
1/1/1924    4.44
2/1/1924    7.50
3/1/1924    10.50
4/1/1924    16.39
5/1/1924    20.89
6/1/1924    28.33
7/1/1924    27.22
8/1/1924    27.89
9/1/1924    22.22
10/1/1924   18.06
11/1/1924   13.17
12/1/1924   6.89
1/1/1925    5.22
2/1/1925    11.83
3/1/1925    15.11
4/1/1925    20.22
5/1/1925    22.67
6/1/1925    27.22
7/1/1925    27.72
8/1/1925    24.39
9/1/1925    23.00
10/1/1925   16.56
11/1/1925   10.06
12/1/1925   4.78
1/1/1926    4.56
2/1/1926    11.17
3/1/1926    11.00
4/1/1926    15.44
5/1/1926    21.17
6/1/1926    25.56
7/1/1926    25.50
8/1/1926    25.17
9/1/1926    24.17
10/1/1926   18.89
11/1/1926   11.28
12/1/1926   6.94
1/1/1927    8.67
2/1/1927    11.94
3/1/1927    12.50
4/1/1927    19.00
5/1/1927    24.56
6/1/1927    26.00
7/1/1927    26.61
8/1/1927    27.00
9/1/1927    23.11
10/1/1927   18.06
11/1/1927   14.72
12/1/1927   4.89
1/1/1928    7.17
2/1/1928    8.17
3/1/1928    14.44
4/1/1928    16.22
5/1/1928    21.89
6/1/1928    27.06
7/1/1928    26.56
8/1/1928    25.00
9/1/1928    21.44
10/1/1928   18.61
11/1/1928   9.78
12/1/1928   7.06
1/1/1929    7.17
2/1/1929    6.83
3/1/1929    12.50
4/1/1929    18.44
5/1/1929    20.94
6/1/1929    26.56
7/1/1929    25.78
8/1/1929    25.56
9/1/1929    22.78
10/1/1929   17.11
11/1/1929   8.28
12/1/1929   7.39
1/1/1930    4.11
2/1/1930    11.33
3/1/1930    11.00
4/1/1930    19.22
5/1/1930    21.11
6/1/1930    25.28
7/1/1930    26.06
8/1/1930    25.83
9/1/1930    24.17
10/1/1930   17.44
11/1/1930   9.83
12/1/1930   4.94
1/1/1931    6.06
2/1/1931    9.11
3/1/1931    10.72
4/1/1931    15.17
5/1/1931    20.22
6/1/1931    25.61
7/1/1931    26.17
8/1/1931    25.17
9/1/1931    25.83
10/1/1931   20.17
11/1/1931   12.28
12/1/1931   6.11
1/1/1932    6.39
2/1/1932    11.33
3/1/1932    10.33
4/1/1932    18.06
5/1/1932    21.39
6/1/1932    26.00
7/1/1932    26.61
8/1/1932    25.83
9/1/1932    20.33
10/1/1932   15.67
11/1/1932   10.06
12/1/1932   4.83
1/1/1933    7.78
2/1/1933    7.28
3/1/1933    13.83
4/1/1933    16.11
5/1/1933    21.33
6/1/1933    25.56
7/1/1933    26.78
8/1/1933    25.67
9/1/1933    24.83
10/1/1933   18.72
11/1/1933   12.11
12/1/1933   9.89
1/1/1934    6.50
2/1/1934    10.06
3/1/1934    12.44
4/1/1934    18.83
5/1/1934    23.28
6/1/1934    27.67
7/1/1934    27.33
8/1/1934    27.11
9/1/1934    23.78
10/1/1934   20.22
11/1/1934   12.72
12/1/1934   8.22
1/1/1935    9.39
2/1/1935    8.67
3/1/1935    15.17
4/1/1935    18.61
5/1/1935    20.67
6/1/1935    25.72
7/1/1935    26.06
8/1/1935    26.78
9/1/1935    20.67
10/1/1935   18.50
11/1/1935   11.72
12/1/1935   6.44
1/1/1936    6.28
2/1/1936    9.22
3/1/1936    13.67
4/1/1936    17.56
5/1/1936    21.72
6/1/1936    26.61
7/1/1936    26.11
8/1/1936    26.00
9/1/1936    21.94
10/1/1936   15.94
11/1/1936   9.33
12/1/1936   7.61
1/1/1937    5.67
2/1/1937    8.50
3/1/1937    10.56
4/1/1937    18.11
5/1/1937    22.83
6/1/1937    26.28
7/1/1937    27.28
8/1/1937    27.11
9/1/1937    23.33
10/1/1937   18.17
11/1/1937   10.78
12/1/1937   6.94
1/1/1938    7.50
2/1/1938    11.56
3/1/1938    14.33
4/1/1938    17.50
5/1/1938    22.61
6/1/1938    26.00
7/1/1938    25.33
8/1/1938    25.89
9/1/1938    22.39
10/1/1938   19.00
11/1/1938   10.00
12/1/1938   7.28
1/1/1939    7.06
2/1/1939    6.78
3/1/1939    14.00
4/1/1939    18.00
5/1/1939    23.00
6/1/1939    27.28
7/1/1939    26.56
8/1/1939    24.78
9/1/1939    23.67
10/1/1939   18.00
11/1/1939   9.11
12/1/1939   8.61

person Jeff Coldplume    schedule 20.09.2018    source sumber
comment
Bisakah Anda memposting beberapa contoh data?   -  person yogkm    schedule 20.09.2018
comment
Bisakah Anda menjelaskan mengapa U=df-df.groupby([df.index.month]).transform('mean') tidak berfungsi?   -  person jezrael    schedule 20.09.2018
comment
Saya kira saya harus menjelaskannya. Saya mencari T_anomaly = Suhu Asli - AvgTemp (diambil selama periode 30 tahun). Kode berfungsi tetapi memberi saya anomali suhu berdasarkan rata-rata yang diambil dari seluruh rangkaian waktu. Saya kira ini bermuara pada pertanyaan berikut: bagaimana Anda mengambil rata-rata setiap bulan dalam jangka waktu 30 tahun (dihitung oleh MTT) dan menguranginya dari setiap elemen bulanan dalam rangkaian waktu (df)?   -  person Jeff Coldplume    schedule 20.09.2018


Jawaban (1)


Saya yakin perlu memeriksa apakah format waktu tanggal sudah benar - mungkin parameter yang diperlukan dayfirst=True:

M = pd.read_csv('file.csv', sep='\s+', parse_dates=True, index_col= 'Date', dayfirst=True)
print(M.head())
             Temp
Date             
1895-01-01   7.72
1895-01-02   5.50
1895-01-03  13.56
1895-01-04  17.83
1895-01-05  20.39

Lalu bila perlu hitung rata-rata per tahun dan bulan:

MTT = M['Temp'] - M.groupby(M.index.strftime("%Y%m"))['Temp'].transform('mean')
print (MTT.head(10))
Date
1895-01-01    -8.8775
1895-01-02   -11.0975
1895-01-03    -3.0375
1895-01-04     1.2325
1895-01-05     3.7925
1895-01-06     8.9025
1895-01-07     9.2925
1895-01-08     8.5125
1895-01-09     6.0725
1895-01-10    -0.7675
Name: Temp, dtype: float64

Atau per bulan saja:

MTT = M['Temp'] - M.groupby(M.index.month)['Temp'].transform('mean')
print (MTT.head(10))
Date
1895-01-01    -9.342167
1895-01-02   -11.562167
1895-01-03    -3.502167
1895-01-04     0.767833
1895-01-05     3.327833
1895-01-06     8.437833
1895-01-07     8.827833
1895-01-08     8.047833
1895-01-09     5.607833
1895-01-10    -1.232167
Name: Temp, dtype: float64
person jezrael    schedule 20.09.2018
comment
Secara mekanis saya mencoba mengurangi suhu asli dalam deret waktu dan MTT. MTT memiliki nilai rata-rata setiap bulannya (selama 30 tahun, 10 tahun, atau periode dasar apa pun yang saya pilih). Bagaimana cara mengurangi nilai rata-rata yang saya miliki setiap bulan dari rangkaian waktu suhu asli. Apakah ada cara mudah untuk melakukan pengurangan unsur ini? - person Jeff Coldplume; 21.09.2018
comment
@JeffColdplume - MTT has an average value for each month - apa maksudnya? Anda perlu menghitung dengan MT.groupby(MT.index.strftime("%m")).mean() ? - person jezrael; 21.09.2018
comment
@JeffColdplume - Apa hasil yang diharapkan jika data sampel rng = pd.date_range('2017-04-03', periods=36, freq='M') df = pd.DataFrame({'Date': rng, 'Temp': range(36)}) ? - person jezrael; 21.09.2018
comment
Saya kira saya agak bingung dengan apa yang Anda maksud. Output yang diharapkan untuk kode yang Anda berikan adalah: 01 7.085125 02 9.435036 03 13.195341 04 17.815860 05 22.343190 06 26.332437 07 26.704301 08 26.105239 09 23.020 325 10 17.903794 11 11.540650 12 7.406956 Nama: Suhu, tipe d: float64 - person Jeff Coldplume; 01.10.2018
comment
Itu adalah sarana untuk setiap bulannya. Jadi jika saya memiliki deret waktu yang lebih besar dari indeks yang digunakan untuk mengukur mean, bagaimana cara saya mengurangi rata-rata 30 tahun tersebut dari data? - person Jeff Coldplume; 01.10.2018