Как создать частотные таблицы в Python


Таблица частот — это таблица, в которой отображаются частоты различных категорий. Этот тип таблицы особенно полезен для понимания распределения значений в наборе данных.

В этом руководстве объясняется, как создавать таблицы частот в Python.

Односторонняя таблица частот для ряда

Чтобы найти частоты отдельных значений в серии pandas, вы можете использовать функцию value_counts() :

import pandas as pd

#define Series
data = pd.Series([1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 5])

#find frequencies of each value
data.value_counts()

3 4
1 3
4 2
5 1
2 1

Вы можете добавить аргумент sort=False , если не хотите, чтобы значения данных сортировались по частоте:

data.value_counts(sort= False )

1 3
2 1
3 4
4 2
5 1

Способ интерпретации вывода следующий:

  • Значение «1» встречается в серии 3 раза.
  • Значение «2» встречается в Серии 1 раз.
  • Значение «3» встречается в серии 4 раза.

И так далее.

Односторонняя таблица частот для DataFrame

Чтобы найти частоты кадра данных pandas, вы можете использовать функцию crosstab () , которая использует следующий синтаксис:

перекрестная таблица (индекс, столбцы)

куда:

  • index: имя столбца для группировки
  • столбцы: имя для частотного столбца

Например, предположим, что у нас есть DataFrame с информацией о буквенной оценке, возрасте и поле 10 разных учеников в классе. Вот как найти частоту для каждой буквенной оценки:

#create data
df = pd.DataFrame({'Grade': ['A','A','A','B','B', 'B', 'B', 'C', 'D', 'D'],
 'Age': [18, 18, 18, 19, 19, 20, 18, 18, 19, 19],
 'Gender': ['M','M', 'F', 'F', 'F', 'M', 'M', 'F', 'M', 'F']})

#view data
df

 Grade Age Gender
0 A 18 M
1 A 18 M
2 A 18 F
3 B 19 F
4 B 19 F
5 B 20 M
6 B 18 M
7 C 18 F
8 D 19 M
9 D 19 F 

#find frequency of each letter grade
pd.crosstab(index=df['Grade'], columns='count')

col_0 count
Grade 
A 3
B 4
C 1
D 2

Интерпретировать это можно следующим образом:

  • 3 ученика получили пятерку в классе.
  • В классе 4 ученика получили четверку.
  • 1 учащийся получил оценку «С» в классе.
  • 2 ученика получили «двойку» в классе.

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

pd.crosstab(index=df['Age'], columns='count') 

col_0 count
Age 
18 5
19 4
20 1

Интерпретировать это можно следующим образом:

  • 5 студентов 18 лет.
  • 4 ученика 19 лет.
  • 1 студент 20 лет.

Вы также можете легко отобразить частоты как доли всего набора данных, разделив на сумму:

#define crosstab
tab = pd.crosstab(index=df['Age'], columns='count')

#find proportions 
tab/tab.sum()

col_0 count
Age 
18 0.5
19 0.4
20 0.1

Интерпретировать это можно следующим образом:

  • 50% студентов 18 лет.
  • 40% студентов 19 лет.
  • 10% студентов в возрасте 20 лет.

Двусторонние таблицы частот для DataFrame

Вы также можете создать двустороннюю таблицу частот, чтобы отобразить частоты для двух разных переменных в наборе данных. Например, вот как создать двустороннюю таблицу частот для переменных Возраст и Класс:

pd.crosstab(index=df['Age'], columns=df['Grade'])


Grade A B C D
Age 
18 3 1 1 0
19 0 2 0 2
20 0 1 0 0

Интерпретировать это можно следующим образом:

  • Есть 3 ученика, которым 18 лет, и они получили пятерку в классе.
  • В классе есть 1 ученик, которому 18 лет и он получил четверку.
  • В классе есть 1 ученик, которому 18 лет, и он получил «троечку».
  • В классе 0 учеников в возрасте 18 лет, получивших двойку.

И так далее.

Вы можете найти полную документацию по функции crosstab() здесь .