# 데이터 불러오기
df = pd.read_excel('/content/drive/MyDrive/hana1/data/시도별 전출입 인구수.xlsx',
engine = 'openpyxl')
# NaN 값 채우기
df = df.fillna(method = 'ffill')
# 서울시(전출지)에서 다른 지역(전입지)으로 이동한 인구 데이터
# 불 인덱스(True)를 데이터 추출
b_ind = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')
df_seoul = df[b_ind]
# 전출지별 열 삭제
df_seoul = df_seoul.drop('전출지별', axis = 1)
# 열 이름 변경
df_seoul = df_seoul.rename({'전입지별':'전입지'}, axis = 1)
# 행 인덱스 변경
df_seoul = df_seoul.set_index('전입지')
# 경기도 데이터만 추출
df_ggd = df_seoul.loc['경기도']
선그래프
plt.plot(df_ggd.index, df_ggd.values)
plt.show()

각 옵션 조정
# 한글 폰트 설정
plt.rc("font", family = "NanumGothic")
# 스타일 서식
plt.style.use("ggplot")
# 그래프 객체 생성
fig = plt.figure(figsize = (10,10))
ax1 = fig.add_subplot(2,1,1) # 행의 개수, 열의 개수, 위치
ax2 = fig.add_subplot(2,1,2)
# axe 객체에 그래프 출력
ax1.plot(df_ggd, marker = 'o', markersize = 10)
ax2.plot(df_ggd, marker = 'o', markersize = 10, markerfacecolor = 'green',
color = 'blue', linewidth = 5, label = '서울 => 경기')
# ax2 객체에 범례 추가
ax2.legend(loc = 'best') # 가장 적합한 위치에 범례 추가
# y 축 범위 조정
ax1.set_ylim(0,700000)
ax2.set_ylim(0,700000)
# x 축 눈금 라벨 회전
ax1.set_xticklabels(df_ggd.index, rotation = 75)
ax2.set_xticklabels(df_ggd.index, rotation = 75)
# 차트 제목 추가
ax2.set_title("서울시에서 경기도로 이동한 인구", size = 15)
# 축 이름 추가
ax2.set_xlabel("기간(연도)", size = 10)
ax2.set_ylabel("이동 인구 수", size = 10)
# x 축 눈금 라벨 크기 수정
ax2.tick_params(axis = 'x', labelsize = 8)
ax2.tick_params(axis = 'y', labelsize = 8)
#
plt.show()

면적 그래프
# 4개 지역 추출
df_4 = df_seoul.loc[['충청남도','경상북도','강원도','전라남도']]
df_4.head()
# 행과 열을 바꾸기
df_4_t = df_4.T
# kind 매개변수 기본값은 선
df_4_t.plot(kind = 'area', # 면적 그래프
stacked = False, # 누적 여부
alpha = 0.2, # 투명도
figsize = (7, 5))
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구")
# 축 제목(이름)
plt.xlabel("기간(연도)", size = 10)
plt.ylabel("이동 인구 수", size = 10)
#
plt.show()

* 누적 면적 그래프 -> stacked = True 로 옵션 변경
# 누적 면적 그래프
df_4_t.plot(kind = 'area',
stacked = True, # 누적 여부
alpha = 0.2, # 투명도
figsize = (7, 5))
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구")
# 축 제목(이름)
plt.xlabel("기간(연도)", size = 10)
plt.ylabel("이동 인구 수", size = 10)
#
plt.show()

<옵션 변경>
글꼴 두께, 글씨 크기 등 옵션 변경 가능
# axe 객체로 그리기
# 스타일 서식 적용
plt.style.use('ggplot')
# 누적 면적 그래프
ax1 = df_4_t.plot(kind = 'area',
stacked = True, # 누적 여부
alpha = 0.2, # 투명도
figsize = (7, 5))
print(type(ax1))
# 차트 제목
ax1.set_title("서울시에서 다른 4개 지역으로 이동한 인구", size = 20,
color = 'red', weight = 'bold')
# 축 제목
ax1.set_xlabel("기간(연도)", size = 10, color = 'blue')
ax1.set_ylabel("이동 인구 수", size = 10, color = 'blue')
#
plt.show()

막대 그래프
# 수직 막대 그래프 => kind = 'bar' 로 옵션 지정
# 2000년 이후 데이터 추출
df_4_new = df_4.loc[:, '2000':].T
# 스타일 서식 적용
plt.style.use('ggplot')
# 수직 막대 그래프
df_4_new.plot(kind = 'bar',
figsize = (12,5),
width = 0.5,
color = ['green','red','yellow','blue'])
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구")
# 축 제목(이름)
plt.xlabel("기간(연도)", size = 10)
plt.ylabel("이동 인구 수", size = 10)
#
plt.show()

# 수평 막대 그래프 => kind = 'barh' 옵션 지정
# 스타일 서식 적용
plt.style.use('ggplot')
# 수평 막대 그래프
df_4_new.plot(kind = 'barh',
figsize = (12,5),
width = 0.5,
color = ['green','red','yellow','blue'])
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구")
# 축 제목(이름)
plt.xlabel("기간(연도)", size = 10)
plt.ylabel("이동 인구 수", size = 10)
#
plt.show()

barh - 수평 (역순)
# 인구의 총합 데이터
df_total = df_4_new.T
df_total["합계"] = df_4_new.sum()
# 인구 합계가 적은 지역부터 많은 지역으로 막대 그래프 시각화
# 인구 합계 내림차순 정렬
df_total_dsc = df_total[["합계"]].sort_values(by = '합계', ascending = False)
# 수평 막대 그래프 - 축 전환으로 인해 정렬 순서가 역순
df_total_dsc.plot(kind = 'barh',
figsize = (12,5),
width = 0.5,
color = 'blue')
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구 합계")
# 축 제목(이름)
plt.xlabel("이동 인구 수", size = 10)
plt.ylabel("전입지", size = 10)
#
plt.show()

인구 합계가 많은 지역부터 보고싶다면?
# 인구 합계가 많은 지역부터 적은 지역으로 막대 그래프 시각화
# 인구 합계 오름차순 정렬
df_total_asc = df_total[["합계"]].sort_values(by = '합계')
# 수평 막대 그래프 - 축 전환으로 인해 정렬 순서가 역순
df_total_asc.plot(kind = 'barh',
figsize = (12,5),
width = 0.5,
color = 'blue')
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구 합계")
# 축 제목(이름)
plt.xlabel("이동 인구 수", size = 10)
plt.ylabel("전입지", size = 10)
#
plt.show()

bar - 수직 (역순 x)
인구 합계가 많은 지역부터 적은 지역 순으로 막대 그래프를 그려보자
# 인구 합계가 많은 지역부터 적은 지역으로 막대 그래프 시각화
# 인구 합계 내림차순 정렬
df_total_dsc = df_total[["합계"]].sort_values(by = '합계', ascending = False)
# 수직 막대 그래프
df_total_dsc.plot(kind = 'bar',
figsize = (12,5),
width = 0.5,
color = 'blue')
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구 합계")
# 축 제목(이름)
plt.xlabel("이동 인구 수", size = 10)
plt.ylabel("전입지", size = 10)
#
plt.show()

# 인구 합계가 적은 지역부터 많은 지역으로 막대 그래프 시각화
# 인구 합계 오름차순 정렬
df_total_asc = df_total[["합계"]].sort_values(by = '합계')
# 수평 막대 그래프
df_total_asc.plot(kind = 'bar',
figsize = (12,5),
width = 0.5,
color = 'blue')
# 차트 제목
plt.title("서울시에서 다른 4개 지역으로 이동한 인구 합계")
# 축 제목(이름)
plt.xlabel("이동 인구 수", size = 10)
plt.ylabel("전입지", size = 10)
#
plt.show()

'Python > [시각화]' 카테고리의 다른 글
[folium] 지도 시각화, 단계 구분도 (0) | 2023.06.18 |
---|---|
[seaborn] 시각화(산점도, 히스토그램, 히트맵, 비율 막대 그래프, 빈도 막대 그래프, 상자 그림, 바이올린 그림, 조인트 그림, 그리드 분할, pairplot) (0) | 2023.06.18 |
[matplotlib] 그래프 시각화(보조축, 2축 그래프, 히스토그램, 산점도) (1) | 2023.06.18 |
[matplitlib] 그래프 시각화 (0) | 2023.06.16 |