본문 바로가기

환경, 에너지

[EMS] 데이터 전처리 및 시각화 실습

세계 주류 소비 데이터분석 

데이터 정보

1. country : 국가명
2. beer_servings : 맥주소비량
3. spirit_servings : 음료소비량
4. wine_servings : 와인소비량
5. total_litres_of_pure_alcohol : 순수 알콜량
6. Fontinent' : 대륙명

 

 

  • 상관계수 히트맵

cols = drinks.columns[1:-1] # 국가, 대륙 컬럼명 제거 
corr = drinks[cols].corr()
cols_view = ['beer','spirit','wine','alcohol']
# sns.set(font_scale=1.5)
hm = sns.heatmap(corr.values,  #데이터
                 cbar = True,  #색상맵. true 기본
                 annot =True,  #데이터 수치 표시
                 square = True,  #정사각형으로 표시
                 yticklabels = cols_view,
                 xticklabels = cols_view)

 

 

 

 

  • 상관계수 종류
    • corr()  : 피어슨 상관계수 
    • corr(method = 'kendall') :  켄달 상관계수. 샘플이 크기가 작은 경우에 효과 좋다 scipy 모듈 사용
    • corr(method = 'spearman') : 스피어만 상관계수. 정규화 되지 않은 데이터에 많이 사용

  • 대륙별 국가 수 파이차트

 

 

 

explode = (0, 0, 0, 0.1, 0, 0) # AF, EU, AS, OT, OC, SA 중 조각 튀어나옴
plt.pie(drinks['continent'].value_counts(),
               labels = labels,
               autopct = '%.0f%%',  # 비율표시. %.0f : 소수점이하없음, %% : %문자
               explode = explode,   # 파이조각 간격
               shadow = False)       # 그림자 표시

plt.title('null data to \'OT\'')
# plt.title("null data to 'OT'") 작은따옴표 출력 방법2

 

 

 

 

  • 대륙별 spirit_setnings의 평균,최소,최대,합계 출력

agg() : 여러개의 함수를 설정(평균,최소,최대,합계 한번에 출력)

print('대륙별 평균: ',drinks.groupby('continent')['spirit_servings'].mean())
print('대륙별 최소: ',drinks.groupby('continent')['spirit_servings'].min())
print('대륙별 최대: ',drinks.groupby('continent')['spirit_servings'].max())
print('대륙별 합계: ',drinks.groupby('continent')['spirit_servings'].sum())

# 대륙별 spirit_setnings의 평균,최소,최대,합계 한번에 출력
drinks.groupby('continent')['spirit_servings'].agg(['mean','min','max','sum'])

# 그룹 연산 컬럼 이름 지정
drinks.groupby('continent')['spirit_servings'].agg([('합계','sum'),('평균','mean')])



  • 대륙별 알콜량의 평균이 전체 알콜량 평균보다 많은 대륙명 출력하기
#1. 전체 알콜량 평균 total_mean
total_mean = drinks.total_litres_of_pure_alcohol.mean()

#2. 대륙별 알콜 평균을 cont_mean 저장
cont_mean = drinks.groupby('continent')['total_litres_of_pure_alcohol'].mean()

#3. 전체 알콜량 평균보다 많은 대륙 출력
cont_mean[cont_mean> total_mean].index
cont_mean[cont_mean> total_mean].index.tolist()

 

 

 

  • 대륙별 평균 알콜 섭취량 시각화

cont_mean = drinks.groupby('continent')['total_litres_of_pure_alcohol'].mean()
# continents :  대륙코드명 + Mean 리스트
continents = cont_mean.index.tolist()
continents.append("Mean")
# x_pos : 0 ~ continents 요소의 개수 -1
x_pos = np.arange(len(continents))
alcohol = cont_mean.tolist() # 대륙별 알콜 소비량의 평균 데이터
# total_mean : 전체 알콜 소비량 평균
alcohol.append(total_mean)
# bar_list:  막대그래프의 막대 정보 목록
bar_list= plt.bar(x_pos,alcohol, align='center',alpha=0.5) # alpha=0.5 : 투명도

bar_list[len(continents)-1].set_color('r') # 마지막 막대의 컬러 지정
# [0., 6] : x축 값
# [total_mean, total_mean] ; y축 값
# 'k-' : 검정색 실선
plt.plot([0., 6], [total_mean, total_mean], 'k-')
plt.xticks(x_pos, continents)  #x축 레이블명 변경
plt.ylabel('total_litres_fo_pure_alch=ohol')
plt.title('대륙별 평균 알콜 섭취량')

 

 

  • 대한민국의 전체 술 소비량 위치 그래프 그리기

# 주류 소비량 랭킹
total_serving_rank = drinks.sort_values(by='total_servings',ascending=False)[['country','total_servings']]
total_serving_rank

# 대한민국의 순번을 출력하기
total_serving_rank.country.tolist().index('South Korea') #98번째


# 시각화
country_list = total_serving_rank.country. tolist() # 나라이름 리스트
x_pos = np.arange(len(country_list)) # x축 값. 0~192
rank = total_serving_rank.total_servings.tolist() # y축 값. 주류 소비량 

bar_list = plt.bar(x_pos, rank)  # 막대그래프 목록
bar_list[country_list. index("South Korea") ].set_color('r') # 한국 막대 색상 변경

plt.ylabel('total servings') 
plt. title('drink servings rank by contry')
plt.axis([0, 200, 0, 700]) # x,y축의 범위지정 [x축 시작값, x축 종료값, y축 시작값, y축 종료값]

korea_rank = country_list. index("South Korea") #대한민국 위치값 : 98
korea_sv_rank = total_serving_rank\
[total_serving_rank['country'] == "South Korea"]['total_servings'].values[0] #대한민국 소비량 #165
# annotate : 그래프의 설명선 추가
# annotate(출력값, x,y축의 값, 설명문의 시작 위치)
plt.annotate('South Korea : '+ str(korea_rank + 1)+'번째',
             xy = (korea_rank+1, korea_sv_rank), #x,y축의 값
             xytext = (korea_rank + 10, korea_sv_rank + 100), # 설명문의 시작좌표
             arrowprops = dict(facecolor='red', shrink = 0.1)) # 화살표 출력 
                                              # (shrink: 화살표 길이 축소 비율 0~1사이)

 

 


 

더 많은 그래프를 그렸지만.. 필사에 가까운 시각화 실습 시간..

앞에 배웠던 내용들 날라가기 시작..

'환경, 에너지' 카테고리의 다른 글

[EMS] 에너지 시스템 모델링  (0) 2024.07.16
[EMS] 에너지 빅데이터 분석  (0) 2024.07.15
[EMS]BeautifulSoup, Selenium  (0) 2024.07.10
[EMS] folium, numpy  (0) 2024.07.09
[EMS] matplotlib, folium  (0) 2024.07.08