import numpy as np
import pandas as pd

%pylab inline

"""
Explanation: Доверительные интервалы на основе bootstrap
End of explanation
"""


data = pd.read_csv('verizon.txt', sep='\t')
data.shape

data.head()

data.Group.value_counts()

pylab.figure(figsize(12, 5))
pylab.subplot(1,2,1)
pylab.hist(data[data.Group == 'ILEC'].Time, bins = 20, color = 'b', range = (0, 100), label = 'ILEC')
pylab.legend()

pylab.subplot(1,2,2)
pylab.hist(data[data.Group == 'CLEC'].Time, bins = 20, color = 'r', range = (0, 100), label = 'CLEC')
pylab.legend()

pylab.show()

"""
Explanation: Загрузка данных
Время ремонта телекоммуникаций
Verizon — основная региональная телекоммуникационная компания (Incumbent Local Exchange Carrier, ILEC) в западной 
части США. В связи с этим данная компания обязана предоставлять сервис ремонта телекоммуникационного оборудования 
не только для своих клиентов, но и для клиентов других локальных телекоммуникационых компаний (Competing Local Exchange Carriers, CLEC). При этом в случаях, когда время ремонта оборудования для клиентов других компаний существенно выше, чем для собственных, Verizon может быть оштрафована.
End of explanation
"""


def get_bootstrap_samples(data, n_samples):
    indices = np.random.randint(0, len(data), (n_samples, len(data)))
    samples = data[indices]
    return samples

def stat_intervals(stat, alpha):
    boundaries = np.percentile(stat, [100 * alpha / 2., 100 * (1 - alpha / 2.)])
    return boundaries

"""
Explanation: Bootstrap
End of explanation
"""


ilec_time = data[data.Group == 'ILEC'].Time.values
clec_time = data[data.Group == 'CLEC'].Time.values

np.random.seed(0)

ilec_median_scores = map(np.median, get_bootstrap_samples(ilec_time, 1000))
clec_median_scores = map(np.median, get_bootstrap_samples(clec_time, 1000))

print "95% confidence interval for the ILEC median repair time:",  stat_intervals(ilec_median_scores, 0.05)
print "95% confidence interval for the CLEC median repair time:",  stat_intervals(clec_median_scores, 0.05)

"""
Explanation: Интервальная оценка медианы
End of explanation
"""


print "difference between medians:", np.median(clec_time) - np.median(ilec_time)

"""
Explanation: Точечная оценка разности медиан
End of explanation
"""


delta_median_scores = map(lambda x: x[1] - x[0], zip(ilec_median_scores, clec_median_scores))

print "95% confidence interval for the difference between medians",  stat_intervals(delta_median_scores, 0.05)

"""
Explanation: Интервальная оценка разности медиан
End of explanation
"""


