pbj0812의 코딩 일기

[PYTHON] fill_between 을 이용한 신뢰구간을 포함한 lineplot 구현하기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] fill_between 을 이용한 신뢰구간을 포함한 lineplot 구현하기

pbj0812 2021. 8. 6. 22:56

0. 목표

 - fill_between 을 이용한 신뢰구간을 포함한 lineplot 구현하기

1. seaborn 의 lineplot

import seaborn as sns

flights = sns.load_dataset("flights")
sns.lineplot(data=flights, x="year", y="passengers")

2. 구현하기

 0) library 호출

import seaborn as sns
import matplotlib.pyplot as plt
import math

 1) 데이터 확인

flights.head()

 2) 변수 생성

  - flights_mean : 연도별 탑승자 평균

  - flights_year : 연도

  - flights_len : 연도별 데이터 길이

flights_mean = flights.groupby(by = 'year').agg({'passengers' : 'mean'})
flights_mean = list(flights_mean['passengers'])

flights_year = flights.year.unique()

flights_len = len(flights_year)

 3) 연도별 표준편차 구하기

flights_std = []

for i in range(flights_len):
    year = flights_year[i]
    tmp = list(flights[flights['year'] == year]['passengers'])
    tmp_mean = sum(tmp)/len(tmp)
    tmp2 = []
    for j in tmp:
        tmp2.append((j - tmp_mean)**2)
    flights_std.append(math.sqrt(sum(tmp2) / len(tmp)))

 4)  연도별 신뢰도 구하기

  - 신뢰도 95% 사용 => 1.96

flights_reliability = []

for i in flights_std:
    flights_reliability.append(1.96 * i / math.sqrt(len(tmp)))

 5) 연도별 신뢰구간 구하기

  - 윗부분과 아랫부분 따로 연산

upper_ci = []
lower_ci = []

for i in range(len(flights_mean)):
    upper_ci.append(flights_mean[i] + flights_reliability[i])
    lower_ci.append(flights_mean[i] - flights_reliability[i])

 6) 그림 그리기

# 도화지
fig, ax = plt.subplots()
fig.set_size_inches(15, 15)

# 신뢰구간
ax.fill_between(flights_year, upper_ci, lower_ci, facecolor='green', interpolate=True, alpha = 0.2)

# 평균
ax.plot(flights_year, flights_mean, 'g')

# x축, y축 제목
ax.set_xlabel('year', fontsize = 50)
ax.set_ylabel('passengers', fontsize = 50)

# x축, y축 폰트 사이즈
ax.tick_params(axis = 'x', labelsize = 20)
ax.tick_params(axis = 'y', labelsize = 20)

# 년도 데이터 전체 표출
ax.set_xticks(flights_year);

  - 결과

3. 참고

 - 신뢰 구간 계산법

Comments