세계 주류 소비 데이터분석
데이터 정보
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 |