진료정보_통합.csv 파일에서 다음 작업 진행
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rc('font', family='Malgun Gothic')
df= pd.read_csv('./data/진료정보_통합.csv')
df
1. '날짜'가 '2023' 보다 크고 '지역명'이 '서울'인 관측치를 인덱싱
plt.figure()
df_sub = df[(df['지역명']== '서울') & (df['날짜']>'2023')]
df_sub
2. 1번 결과에서 날짜별 '천식','눈병','피부병'의 추이를 하나의 표안에 여러개의 선그래프로 그리기
df_gp = df_sub.groupby('날짜',as_index=True)[['천식','눈병','피부병']].mean()
df_gp
plt.figure(figsize=(20,10))
ax = plt.subplot()
x = df_gb.index.astype('datetime64[ns]')
for col in df_gp.columns:
ax.plot(x, df_gb[col], label = col)
ax.legend()
plt.show()
▷ groupby안하고 날짜 컬럼만 가져와도 됨 (컬럼인지 인덱스인지 잘 인지만 하면 됨)
▷ 여러개의 그래프를 그릴때, 값을 동일하게 하는것이 좋기 때문에
▷ astype으로 타입 날짜형으로 변환
▷ for반복문으로 컬럼을 하나씩 가져옴
: y값만 각 컬럼에 해당하는 값만 시리즈로 가져옴
3. '날짜'가 '2023' 보다 큰 관측치에서 '지역명'과 '날짜'로 그룹화 하여 '감기'의 평균을 피벗 테이블로 생성
df_sub = df[df['날짜']>'2023']
pivot = pd.pivot_table(df_sub, index='지역명',
columns='날짜',
values='감기',
aggfunc='mean')
pivot=pivot.astype('int64')
4. 3번의 결과에서 '날짜'가 '2023-01-01','2023-02-01','2023-03-01','2023-04-01'인 데이터만 선택하여 부분 데이터프레임 생성
print(pivot.columns)
Index(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05',
'2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-10',
...
'2023-04-21', '2023-04-22', '2023-04-23', '2023-04-24', '2023-04-25',
'2023-04-26', '2023-04-27', '2023-04-28', '2023-04-29', '2023-04-30'],
dtype='object', name='날짜', length=120)
▷ 날짜가 인덱스가 아닌 컬럼이므로, 선택할때 주의해야함
▷ 컬럼으로 되어있는 날짜만 인덱싱하기
pivot_sub = pivot[['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01']]
pivot_sub
▷ 이렇게 피벗 테이블 들고와도 됨
pivot_sub = pivot.loc[:,['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01']]
pivot_sub
▷ pivot.loc[['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01']] 가 아닌
▷ pivot.loc[ : , ['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01']]
5. 4번의 결과에서 다음과 같은 3개의 그래프를 각각의 표로 하나의 그림판 안에 그리기 (배치는 자유롭게)
plt.figure(figsize = (20,20))
ax1 = plt.subplot(2,2,1)
ax2 = plt.subplot(2,2,2)
ax3 = plt.subplot(2,1,2)
plt.show()
a. '지역명'이 '경기'인 관측치에서 각 날짜별 감기 평균값을 막대그래프로 그리고 평균선을 중첩하여 그리기
b. '지역명'이 '서울'인 관측치에서 각 날짜별 감기 평균값을 막대그래프로 그리고 평균선을 중첩하여 그리기
c. 경기의 날짜별 감기 평균과 서울의 날짜별 감기 평균을 중첩 막대그래프로 표현
plt.figure(figsize = (20,20))
ax1 = plt.subplot(2,2,1)
ax2 = plt.subplot(2,2,2)
ax3 = plt.subplot(2,1,2)
mean = pivot.loc['경기'].mean()
ax1.bar(x=pivot_sub.columns, height=pivot_sub.loc['경기'], color = '#AFEEEE', label='값')
ax1.axhline(mean, color='red', linestyle='--', label=f'평균: {mean:.2f}')
ax1.set_title('경기 막대 평균',fontsize=16)
mean = pivot.loc['서울'].mean()
ax2.bar(x=pivot_sub.columns, height=pivot_sub.loc['경기'], color = '#FFB6C1', label='값')
ax2.axhline(mean, color='red', linestyle='--', label=f'평균: {mean:.2f}')
ax2.set_title('서울 막대 평균',fontsize=16)
# 막대 너비 설정
bar_width = 0.4
# 막대 위치 조정
x1 = [i - bar_width/2 for i in range(4)]
x2 = [i + bar_width/2 for i in range(4)]
# 첫 번째 막대
ax3.bar(x1, pivot_sub.loc['경기'], bar_width, label='경기')
# 두 번째 막대
ax3.bar(x2, pivot_sub.loc['서울'], bar_width, label='서울')
#컬럼 이름들 변경
ax3.set_xticks(range(len(x1)))
ax3.set_xticklabels(pivot_sub.columns, fontsize=12)
ax3.set_title('경기&서울 막대',fontsize=16)
plt.tight_layout()
plt.legend()
plt.show()
▷ height=pivot_sub.loc['경기'] : '경기'에 해당하는 값들을 시리즈로 들고 옴
'데이터 분석 > Python - pandas' 카테고리의 다른 글
[이론] 문자열과 날짜형 (2) | 2025.01.14 |
---|---|
[이론] 연속형과 비연속 (2) | 2025.01.14 |
[이론] 시각화 : 여러 그래프 (2) | 2025.01.13 |
[실습] 데이터 시각화 : 특수 그래프 (2) | 2025.01.13 |
[실습] 시각화 : 기본 그래프 (2) | 2025.01.13 |