Это пятый день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления
Всем привет, меня зовут Кай.
Когда я обрабатываю данные, помимо очистки и фильтрации, я также буду использовать обработку статистических вычислений.Здесь мы представим некоторые общие функции статистических вычислений.
1. Предварительный просмотр данных
Демонстрационные данные в этой статье взяты из данных о ВВП каждого региона в Национальном центре данных за последние 5 лет, а справочный ответgdp
Вы можете получить файл данных, так что вы можете попробовать это самостоятельно.
In [1]: df.head() # 预览前5条数据
Out[1]:
地区 2020年 2019年 2018年 2017年 2016年
0 北京市 36102.6 35445.1 33106.0 29883.0 27041.2
1 天津市 14083.7 14055.5 13362.9 12450.6 11477.2
2 河北省 36206.9 34978.6 32494.6 30640.8 28474.1
3 山西省 17651.9 16961.6 15958.1 14484.3 11946.4
4 内蒙古自治区 17359.8 17212.5 16140.8 14898.1 13789.3
In [2]: df.info() # 查看各字段数据类型、条数及空值数
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 地区 32 non-null object
1 2020年 31 non-null float64
2 2019年 31 non-null float64
3 2018年 31 non-null float64
4 2017年 31 non-null float64
5 2016年 31 non-null float64
dtypes: float64(5), object(1)
memory usage: 1.6+ KB
2. Описательная статистика
describe
Функциональный метод может возвращать описательную статистику для набора данных.
Signature:
df.describe(
percentiles=None,
include=None,
exclude=None,
datetime_is_numeric=False,
) -> 'FrameOrSeries'
Docstring:
Generate descriptive statistics.
заDataframe
По типу каждая строка соответствует статистическому показателю, т.е.общее, среднее, стандартное отклонение, минимум, квартиль (по умолчанию 25/50/75) и максимум.
In [3]: df.describe()
Out[3]:
2020年 2019年 2018年 2017年 2016年
count 31.000000 31.000000 31.000000 31.000000 31.000000
mean 32658.551613 31687.758065 29487.661290 26841.819355 24224.148387
std 26661.811640 25848.652250 24136.181387 22161.575235 20008.278500
min 1902.700000 1697.800000 1548.400000 1349.000000 1173.000000
25% 13940.650000 13826.300000 13104.700000 12381.800000 11634.800000
50% 25115.000000 24667.300000 22716.500000 20210.800000 18388.600000
75% 42612.500000 41110.350000 37508.750000 33835.250000 30370.250000
max 110760.900000 107986.900000 99945.200000 91648.700000 82163.200000
Из приведенной выше таблицы описательной статистики мы можем видетьВ 2020 году данные есть в общей сложности по 31 региону, средний показатель ВВП составляет 3,26 трлн, самый высокий – 11,07 трлн, самый низкий – 0,19 трлн и т.д..
Мы видим, что есть также параметры, которые можно настроить для выбора, а именно:
percentiles
Квантиль можно настроить
In [4]: df.describe(percentiles=[.2, .4, .6, .8])
Out[4]:
2020年 2019年 2018年 2017年 2016年
count 31.000000 31.000000 31.000000 31.000000 31.000000
mean 32658.551613 31687.758065 29487.661290 26841.819355 24224.148387
std 26661.811640 25848.652250 24136.181387 22161.575235 20008.278500
min 1902.700000 1697.800000 1548.400000 1349.000000 1173.000000
20% 13698.500000 13544.400000 12809.400000 11159.900000 10427.000000
40% 22156.700000 21237.100000 19627.800000 17790.700000 16116.600000
50% 25115.000000 24667.300000 22716.500000 20210.800000 18388.600000
60% 36102.600000 34978.600000 32494.600000 29676.200000 26307.700000
80% 43903.900000 45429.000000 42022.000000 37235.000000 33138.500000
max 110760.900000 107986.900000 99945.200000 91648.700000 82163.200000
include
,exclude
Укажите и исключите типы данных отдельно, например
df.describe(include=[np.number]) # 指定数字类型的字段
df.describe(exclude=[np.float]) # 排除浮点类型的字段
Мы видим, что по умолчанию указанные описания являются числовыми типами, а часть поля области не задействована.Если вы хотите участвовать, вы можете пройтиinclude='all'
указать.
In [5]: df.describe(include='all')
Out[5]:
地区 2020年 2019年 2018年 2017年 2016年
count 32 31.00 31.00 31.00 31.00 31.00
unique 32 NaN NaN NaN NaN NaN
top 北京市 NaN NaN NaN NaN NaN
freq 1 NaN NaN NaN NaN NaN
... ... ... ... ... ... ...
25% NaN 13940.65 13826.30 13104.70 12381.80 11634.80
50% NaN 25115.00 24667.30 22716.50 20210.80 18388.60
75% NaN 42612.50 41110.35 37508.75 33835.25 30370.25
max NaN 110760.90 107986.90 99945.20 91648.70 82163.20
[11 rows x 6 columns]
В случае данных,площадьДанные под полемobject
Тип, не связанный с цифрами. Мы можем обнаружить, что в результатах описательной статистики добавляетсяunique
,top
иfrep
Три индикатора, наоборот, эти три индикатора недоступны для столбцов полей чисто числового типа. Эти три показателя соответствуютРазличные числа,максимальное значениеичастота(Если есть дубликаты), например, в следующем отдельном случае:
In [6]: s = pd.Series(['red','blue','black','grey','red','grey'])
In [7]: s.describe()
Out[7]:
count 6
unique 4
top red
freq 2
dtype: object
существуетdescripe
В функции есть еще один параметрdatetime_is_numeric
, если это статистическое описание данных типа времени, ему необходимо присвоитьTrue
.
In [8]: s = pd.Series([np.datetime64("2000-01-01"),
...: np.datetime64("2010-01-01"),
...: np.datetime64("2010-01-01")
...: ])
In [9]: s.describe()
FutureWarning: Treating datetime data as categorical rather than numeric in `.describe` is deprecated and will be removed in a future version of pandas. Specify `datetime_is_numeric=True` to silence this warning and adopt the future behavior now.
s.describe()
Out[9]:
count 3
unique 2
top 2010-01-01 00:00:00
freq 2
first 2000-01-01 00:00:00
last 2010-01-01 00:00:00
dtype: object
In [10]: s.describe(datetime_is_numeric=True)
Out[10]:
count 3
mean 2006-09-01 08:00:00
min 2000-01-01 00:00:00
25% 2004-12-31 12:00:00
50% 2010-01-01 00:00:00
75% 2010-01-01 00:00:00
max 2010-01-01 00:00:00
dtype: object
В нашей ежедневной обработке данных, в дополнение к этим статистическим измерениям в описательной статистике, мы также используем некоторые другие статистические расчеты, такие как дисперсия, мода и так далее.
3. Статистические расчеты
Здесь мы демонстрируем общие методы статистических вычислений. По умолчанию статистика по столбцам. Мы также можем указать по строкам. Подробнее см. Демонстрацию ниже.
# 最大值
In [11]: df.max(numeric_only=True)
Out[11]:
2020年 110760.9
2019年 107986.9
2018年 99945.2
2017年 91648.7
2016年 82163.2
dtype: float64
# 最小值
In [12]: df.min(numeric_only=True)
Out[12]:
2020年 1902.7
2019年 1697.8
2018年 1548.4
2017年 1349.0
2016年 1173.0
dtype: float64
# 平均值 (统计项的计算,建议指定数据类型为仅数字,可以通过axis指定是行列,默认是列)
In [13]: df.mean(axis=1, numeric_only=True)
Out[13]:
0 32315.58
1 13085.98
2 32559.00
3 15400.46
...
28 2683.66
29 3432.18
30 12198.96
31 NaN
Length: 32, dtype: float64
Следующие разделы не содержат конкретных демонстраций, а только знакомят с функциями
df.sum() # 求和
df.corr() # 相关系数
df.cov() # 协方差
df.count() # 非空计数
df.abs() # 绝对值
df.median() # 中位数
df.mode() # 众数
df.std() # 标准差
df.var() # 无偏方差
df.sem() # 均值的标准误差
df.mad() # 平均绝对差
df.prod() # 连乘
df.cumprod() # 累乘
df.cumsum() # 累加
df.nunique() # 非重复计数
df.idxmax() # 最大值索引名(注意是索引名,区别于argmax)
df.idxmin() # 最小值索引名
df.sample(5) # 随机抽样5条数据
df.skew() # 样本偏度(第三阶)
df.kurt() # 样本偏度(第四阶)
df.quantile() # 样本分位数
df.rank() # 排名
df.pct_change() # 变化率
df.value_counts() # 不重复值及数量
s.argmax() # 最大值索引(自动索引),dataframe没有
s.argmin() # 最小值索引(自动索引),dataframe没有
На самом деле в каждой функции есть и другие параметры, которые могут сделать функцию более мощной. Вы можете попробовать сами. Вот несколько примеров.
>>> s = pd.Series([90, 91, 85])
>>> s
0 90
1 91
2 85
dtype: int64
>>> s.pct_change()
0 NaN
1 0.011111
2 -0.065934
dtype: float64
>>> s.pct_change(periods=2) # 隔2行求变化率(默认是隔1行)
0 NaN
1 NaN
2 -0.055556
dtype: float64
В дополнение к вышеперечисленным функциям также часто используются следующие функции.
# 某列最大的前5行数据
In [14]: df.nlargest(5,columns='2020年')
Out[14]:
地区 2020年 2019年 2018年 2017年 2016年
18 广东省 110760.9 107986.9 99945.2 91648.7 82163.2
9 江苏省 102719.0 98656.8 93207.6 85869.8 77350.9
14 山东省 73129.0 70540.5 66648.9 63012.1 58762.5
10 浙江省 64613.3 62462.0 58002.8 52403.1 47254.0
15 河南省 54997.1 53717.8 49935.9 44824.9 40249.3
# 某列最小的前五行数据
In [15]: df.nsmallest(5,columns='2020年')
Out[15]:
地区 2020年 2019年 2018年 2017年 2016年
25 西藏自治区 1902.7 1697.8 1548.4 1349.0 1173.0
28 青海省 3005.9 2941.1 2748.0 2465.1 2258.2
29 宁夏回族自治区 3920.5 3748.5 3510.2 3200.3 2781.4
20 海南省 5532.4 5330.8 4910.7 4497.5 4090.2
27 甘肃省 9016.7 8718.3 8104.1 7336.7 6907.9
Сложение, вычитание, умножение и деление, четыре арифметических действия и т. д.
Вы можете использовать символы операций или методы функций; вы также можете передать значение илиDataFrame
илиSerice
.
'''
Among flexible wrappers
(`add`, `sub`, `mul`, `div`, `mod`, `pow`)
to arithmetic
operators:
`+`, `-`, `*`, `/`, `//`, `%`, `**`.
'''
df + 1
df.add(1)
Выше весь контент на этот раз Заинтересованные друзья могут попробовать запустить код самостоятельно, или добавить авторский WeChat для совместного общения!