Pandas Advanced Tutorial: Статистические методы | Месяц темы Python

Python

Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие

Введение

При анализе данных часто используются многие статистические методы, в этой статье будут представлены статистические методы, используемые в Pandas.

100% изменение

Обе серии и DF имеютpct_change()Метод используется для расчета процентного изменения данных. Этот метод особенно полезен при заполнении значений NaN.

ser = pd.Series(np.random.randn(8))

ser.pct_change()
Out[45]: 
0         NaN
1   -1.264716
2    4.125006
3   -1.159092
4   -0.091292
5    4.837752
6   -1.182146
7   -8.721482
dtype: float64

ser
Out[46]: 
0   -0.950515
1    0.251617
2    1.289537
3   -0.205155
4   -0.186426
5   -1.088310
6    0.198231
7   -1.530635
dtype: float64

Также в pct_change есть параметр period, который может указать периоды для расчета процента, то есть сколько элементов нужно вычислить:

In [3]: df = pd.DataFrame(np.random.randn(10, 4))

In [4]: df.pct_change(periods=3)
Out[4]: 
          0         1         2         3
0       NaN       NaN       NaN       NaN
1       NaN       NaN       NaN       NaN
2       NaN       NaN       NaN       NaN
3 -0.218320 -1.054001  1.987147 -0.510183
4 -0.439121 -1.816454  0.649715 -4.822809
5 -0.127833 -3.042065 -5.866604 -1.776977
6 -2.596833 -1.959538 -2.111697 -3.798900
7 -0.117826 -2.169058  0.036094 -0.067696
8  2.492606 -1.357320 -1.205802 -1.558697
9 -1.012977  2.324558 -1.003744 -0.371806

Ковариация ковариация

Series.cov() используется для вычисления ковариации двух рядов, игнорируя данные NaN.

In [5]: s1 = pd.Series(np.random.randn(1000))

In [6]: s2 = pd.Series(np.random.randn(1000))

In [7]: s1.cov(s2)
Out[7]: 0.0006801088174310875

Точно так же DataFrame.cov() будет вычислять ковариацию соответствующего ряда и игнорировать данные NaN.

In [8]: frame = pd.DataFrame(np.random.randn(1000, 5), columns=["a", "b", "c", "d", "e"])

In [9]: frame.cov()
Out[9]: 
          a         b         c         d         e
a  1.000882 -0.003177 -0.002698 -0.006889  0.031912
b -0.003177  1.024721  0.000191  0.009212  0.000857
c -0.002698  0.000191  0.950735 -0.031743 -0.005087
d -0.006889  0.009212 -0.031743  1.002983 -0.047952
e  0.031912  0.000857 -0.005087 -0.047952  1.042487

DataFrame.cov имеет параметр min_periods, который может указать минимальное количество элементов для расчета ковариации, чтобы гарантировать отсутствие экстремальных данных.

In [10]: frame = pd.DataFrame(np.random.randn(20, 3), columns=["a", "b", "c"])

In [11]: frame.loc[frame.index[:5], "a"] = np.nan

In [12]: frame.loc[frame.index[5:10], "b"] = np.nan

In [13]: frame.cov()
Out[13]: 
          a         b         c
a  1.123670 -0.412851  0.018169
b -0.412851  1.154141  0.305260
c  0.018169  0.305260  1.301149

In [14]: frame.cov(min_periods=12)
Out[14]: 
          a         b         c
a  1.123670       NaN  0.018169
b       NaN  1.154141  0.305260
c  0.018169  0.305260  1.301149

Коэффициент корреляции корреляции

Метод corr() можно использовать для расчета коэффициента корреляции. Существует три способа расчета коэффициента корреляции:

имя метода описывать
pearson (default) Стандартный коэффициент корреляции
kendall Коэффициент корреляции Кендалла Тау
spearman Коэффициент ранговой корреляции Спирмена
n [15]: frame = pd.DataFrame(np.random.randn(1000, 5), columns=["a", "b", "c", "d", "e"])

In [16]: frame.iloc[::2] = np.nan

# Series with Series
In [17]: frame["a"].corr(frame["b"])
Out[17]: 0.013479040400098775

In [18]: frame["a"].corr(frame["b"], method="spearman")
Out[18]: -0.007289885159540637

# Pairwise correlation of DataFrame columns
In [19]: frame.corr()
Out[19]: 
          a         b         c         d         e
a  1.000000  0.013479 -0.049269 -0.042239 -0.028525
b  0.013479  1.000000 -0.020433 -0.011139  0.005654
c -0.049269 -0.020433  1.000000  0.018587 -0.054269
d -0.042239 -0.011139  0.018587  1.000000 -0.017060
e -0.028525  0.005654 -0.054269 -0.017060  1.000000

corr также поддерживает min_periods :

In [20]: frame = pd.DataFrame(np.random.randn(20, 3), columns=["a", "b", "c"])

In [21]: frame.loc[frame.index[:5], "a"] = np.nan

In [22]: frame.loc[frame.index[5:10], "b"] = np.nan

In [23]: frame.corr()
Out[23]: 
          a         b         c
a  1.000000 -0.121111  0.069544
b -0.121111  1.000000  0.051742
c  0.069544  0.051742  1.000000

In [24]: frame.corr(min_periods=12)
Out[24]: 
          a         b         c
a  1.000000       NaN  0.069544
b       NaN  1.000000  0.051742
c  0.069544  0.051742  1.000000

corrwith может вычислить коэффициент корреляции между различными DF.

In [27]: index = ["a", "b", "c", "d", "e"]

In [28]: columns = ["one", "two", "three", "four"]

In [29]: df1 = pd.DataFrame(np.random.randn(5, 4), index=index, columns=columns)

In [30]: df2 = pd.DataFrame(np.random.randn(4, 4), index=index[:4], columns=columns)

In [31]: df1.corrwith(df2)
Out[31]: 
one     -0.125501
two     -0.493244
three    0.344056
four     0.004183
dtype: float64

In [32]: df2.corrwith(df1, axis=1)
Out[32]: 
a   -0.675817
b    0.458296
c    0.190809
d   -0.186275
e         NaN
dtype: float64

классифицировать

Метод ранжирования может ранжировать данные в ряду. Что такое оценка? Возьмем пример:

s = pd.Series(np.random.randn(5), index=list("abcde"))

s
Out[51]: 
a    0.336259
b    1.073116
c   -0.402291
d    0.624186
e   -0.422478
dtype: float64

s["d"] = s["b"]  # so there's a tie

s
Out[53]: 
a    0.336259
b    1.073116
c   -0.402291
d    1.073116
e   -0.422478
dtype: float64

s.rank()
Out[54]: 
a    3.0
b    4.5
c    2.0
d    4.5
e    1.0
dtype: float64

Выше мы создали серию, внутреннюю часть данных в порядке возрастания:

-0.422478 < -0.402291 <  0.336259 <  1.073116 < 1.073116

Таким образом, соответствующие ранги равны 1, 2, 3, 4, 5.

Поскольку у нас есть два одинаковых значения, по умолчанию берется среднее из двух, равное 4,5.

В дополнение к default_rank также можно указать max_rank, чтобы каждое значение было максимум 5.

Вы также можете указать NA_bottom, что означает, что данные для NaN также используются для расчета ранга, и он будет размещен внизу, что является максимальным значением.

Вы также можете указать pct_rank , где значение ранга представляет собой процентное значение.

df = pd.DataFrame(data={'Animal': ['cat', 'penguin', 'dog',
...                                    'spider', 'snake'],
...                         'Number_legs': [4, 2, 4, 8, np.nan]})
>>> df
    Animal  Number_legs
0      cat          4.0
1  penguin          2.0
2      dog          4.0
3   spider          8.0
4    snake          NaN
df['default_rank'] = df['Number_legs'].rank()
>>> df['max_rank'] = df['Number_legs'].rank(method='max')
>>> df['NA_bottom'] = df['Number_legs'].rank(na_option='bottom')
>>> df['pct_rank'] = df['Number_legs'].rank(pct=True)
>>> df
    Animal  Number_legs  default_rank  max_rank  NA_bottom  pct_rank
0      cat          4.0           2.5       3.0        2.5     0.625
1  penguin          2.0           1.0       1.0        1.0     0.250
2      dog          4.0           2.5       3.0        2.5     0.625
3   spider          8.0           4.0       4.0        4.0     1.000
4    snake          NaN           NaN       NaN        5.0       NaN

ранг также может быть указан по строке (axis=0) или по столбцу (axis=1) вычислять.

In [36]: df = pd.DataFrame(np.random.randn(10, 6))

In [37]: df[4] = df[2][:5]  # some ties

In [38]: df
Out[38]: 
          0         1         2         3         4         5
0 -0.904948 -1.163537 -1.457187  0.135463 -1.457187  0.294650
1 -0.976288 -0.244652 -0.748406 -0.999601 -0.748406 -0.800809
2  0.401965  1.460840  1.256057  1.308127  1.256057  0.876004
3  0.205954  0.369552 -0.669304  0.038378 -0.669304  1.140296
4 -0.477586 -0.730705 -1.129149 -0.601463 -1.129149 -0.211196
5 -1.092970 -0.689246  0.908114  0.204848       NaN  0.463347
6  0.376892  0.959292  0.095572 -0.593740       NaN -0.069180
7 -1.002601  1.957794 -0.120708  0.094214       NaN -1.467422
8 -0.547231  0.664402 -0.519424 -0.073254       NaN -1.263544
9 -0.250277 -0.237428 -1.056443  0.419477       NaN  1.375064

In [39]: df.rank(1)
Out[39]: 
     0    1    2    3    4    5
0  4.0  3.0  1.5  5.0  1.5  6.0
1  2.0  6.0  4.5  1.0  4.5  3.0
2  1.0  6.0  3.5  5.0  3.5  2.0
3  4.0  5.0  1.5  3.0  1.5  6.0
4  5.0  3.0  1.5  4.0  1.5  6.0
5  1.0  2.0  5.0  3.0  NaN  4.0
6  4.0  5.0  3.0  1.0  NaN  2.0
7  2.0  5.0  3.0  4.0  NaN  1.0
8  2.0  5.0  3.0  4.0  NaN  1.0
9  2.0  3.0  1.0  4.0  NaN  5.0

Эта статья была включена вwoohoo.floydpress.com/10-python-afraid…

Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!