Следующая тема:  САД. Случайные величины

Вернуться в раздел: Статистический анализ данных

Вернуться в оглавление: Я.Практикум

 

В теме:

 
 

Непрерывные и дискретные переменные

И число проданных машин, и количество проведённого на сайте времени — примеры численных переменных. Но между ними есть серьёзное различие: время пребывания на сайте может принимать любое значение, тогда как число проданных машин может быть только целым.
 
Рассмотрим пример со временем на сайте. В зависимости от того, насколько точны вычисления, эта величина может принимать разные значения: 5 минут, 5 минут 13 секунд, 5 минут 13 секунд и 25 микросекунд и так далее. Аналогично с весом котика. В зависимости от точности весов он может весить 8 килограммов, 8 килограммов и 20 граммов, 8 килограммов и 156 миллиграммов. Таким образом, эта величина может принимать любое значение.
 
А вот число проданных машин не может принимать любое значение, поскольку невозможно продать 15.3 машины, то есть 15 целых машин и ещё кусочек 16-й. Таким образом, число проданных машин будет равно 15 или 16.
 
 

Мода и медиана

Кратко:

  • Мода - наиболее часто встречающееся значение в наборе данных.
  • Медиана - делит набор данных на две равные части.
  • Мода хорошо подходит для дискретных переменных, но не всегда для непрерывных.
  • Медиана используется для непрерывных величин.
  • Для нечетного количества элементов медиана - центральный элемент в отсортированном наборе.
  • Для четного количества элементов медиана - среднее арифметическое двух центральных элементов.
  • В Python для нахождения моды и медианы можно использовать методы mode и median из библиотеки pandas

Мода

Когда аналитик данных определился с типом величины, его задача — описать её. Сделать это можно по-разному, в статистике же для описания некоторой величины используются два основных типа характеристик: характеристики положения и характеристики разброса. В этом уроке вы узнаете о некоторых характеристиках первого типа.
 
Характеристики положения описывают то, где находится условный центр набора данных. Первый и самый простой вариант описать центр некоторого набора данных — вычислить моду.
 
 
 
 
 
 
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 10, 10, 10])
print('Мода набора данных равна', data.mode()[0])
print('Медиана исходного набора данных равна', data.median())
print('Среднее арифметическое набора данных равно', data.mean())
Результат
Мода набора данных равна 10
Медиана исходного набора данных равна 7.5
Среднее арифметическое набора данных равно 6.714285714285714
 
Вычислим для этого набора данных известные вам характеристики положения.
import pandas as pd
data = pd.Series([1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 10])
print('Мода набора данных равна', data.mode()[0])
print('Медиана исходного набора данных равна', data.median())
print('Среднее арифметическое набора данных равно', data.mean())
Результат
Мода набора данных равна 10
Медиана исходного набора данных равна 6.5
Среднее арифметическое набора данных равно 5.875
 
 
Запомнить, какими бывают характеристики положения, вам поможет схема:
 
 

Дисперсия и стандартное отклонение

Кратко:

Разброс данных

В прошлых уроках вы познакомились с характеристиками положения: структурными (модой и медианой) и алгебраическими (средним арифметическим значением). Они помогают описать центр набора данных. Но при работе с данными, кроме определения центра набора, важно понимать и то, насколько сильно эти данные разбросаны вокруг выделенного центра.
Допустим, вы хотите приобрести компанию и выбираете между «Компанией А» и «Компанией Б». Вы намерены купить прибыльное предприятие, и поэтому вам нужно узнать средний доход обеих компаний в месяц. Оказалось, что они примерно равны: средний доход «Компании А» — 50.0 тыс. рублей, «Компании Б» — 49.9 тыс. рублей.
 
Разберёмся с формулой на примере уже знакомого вам набора данных: 1, 2, 2, 3, 4 со средним значением 2.4 с числом элементов n=5 средним значением x‾=2.4 и дисперсией 1.04 Подставим значения в формулу, чтобы посчитать стандартное отклонение:
 
s=s^2**0.5=1.04**0.5=1.0198
 
Результат
2.9166666666666665
 
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6])
mean = data.mean()
var = 0
for i in data:
    var += (i - mean) * (i - mean)
var /= len(data)
std = var**0.5 # извлекаем корень
print(std)
 
import pandas as pd
x = pd.Series([1, 2, 3, 4, 5, 6, 7, 8]) # набор данных
range_value = x.max() - x.min() # размах
print(range_value)
Результат
7
 
 
import pandas as pd
from scipy import stats # подключение модуля stats из библиотеки scipy
x = pd.Series([3, 1, 2, 5, 6, 0, 10])
iqr_value = stats.iqr(x) # межквартильный размах
print(iqr_value)
Результат
4.0
 
 
Как работает линейная интерполяция
Ваш ответ правильный
5
import pandas as pd
import numpy as np
from scipy import stats

x = pd.Series([3, 1, 2, 5, 6, 0, 10])
p25 = np.percentile(x, 25)
print('25-й процентиль с интерполяцией:', p25)
p75 = np.percentile(x,75)
print('75-й процентиль с интерполяцией:', p75)
import pandas as pd
import matplotlib.pyplot as plt
x = pd.Series([-10, 1, 2, 3, 4, 5, 6, 7, 8, 10]) # набор данных
ax = x.plot.box()
plt.show()
Результат
 
 
 

Столбчатая диаграмма

Кратко:

Диаграмма размаха, которую вы подробнее изучили в прошлом уроке, показывает, как расположены данные и их разброс, но она не всегда достаточно информативно описывает, как данные распределены между собой.
 
Для представления на графике непрерывных величин часто используется гистограмма, но она не подходит для изображения дискретных величин. Если описывать их таким образом, могут возникнуть большие пустые интервалы на графиках. Так как дискретные величины могут принимать только определённое число значений, то для них придумали другой график, демонстрирующий частоту данных и то, как расположены данные между собой. Перед тем как перейти к нему, познакомимся с понятием таблицы частот.
 
Пусть имеется набор данных 1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 5, тогда таблица частот для этого набора данных будет выглядеть так:
 
Значение Частота
3 4
1 3
4 2
5 1
2 1
 
Чтобы построить такую таблицу в Python, достаточно воспользоваться методом value_counts() из библиотеки pandas:
 
import pandas as pd
data = pd.Series([1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 5]) # данные
print(data.value_counts())
Результат
 
3    4
1    3
4    2
2    1
5    1
dtype: int64
 
 
import pandas as pd
import matplotlib.pyplot as plt
data = pd.Series([1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 5]) # данные
ax = data.value_counts().plot.bar()
plt.show()
 
import pandas as pd
import matplotlib.pyplot as plt
times = pd.Series([11.2, 20.5, 22.35, 31.1, 32.05, 33.8, 41.2, 42.15, 43.5, 44.123, 
	51.1, 52.712, 53.053, 54.012, 55.2, 61.987, 62.123, 63.123, 64.12, 65.5678, 66.16, 
	71.051, 72.531, 73.121, 74.71, 75.1233, 76.51, 77.12, 81.005, 82.01, 83.5, 84.323, 
	85.1, 86.1, 87.1, 88.12, 91.56, 92.056, 93.651, 94.777, 95.102, 96.105, 97.503, 
	98.003, 99.00005]) # данные
ax = times.value_counts(ascending=True).plot.bar()