import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
dfsm = pd.read_excel('/content/drive/MyDrive/데이터분석 레포트/11월 보고서/스마트폰_과의존위험군_2016to2022.xlsx')
#오류 메시지 ➡️ /usr/local/lib/python3.10/dist-packages/openpyxl/styles/stylesheet.py:226: UserWarning: Workbook contains no default style, apply openpyxl's default warn("Workbook contains no default style, apply openpyxl's default")
import warnings
warnings.simplefilter("ignore")
dfsm2 = dfsm.iloc[[2,4,5,6,7,8,9,10], [0,2,3,4,9]]
dfsm2
시점 | 과의존위험군.1 | 과의존위험군.2 | 과의존위험군.3 | 과의존위험군.8 |
---|---|---|---|---|
2 | 시점 | 유아동(만3~9세) | 청소년(만10~19세) | 성인(만20~59세) |
4 | 2016 | 17.9 | 30.6 | 16.1 |
5 | 2017 | 19.1 | 30.3 | 17.4 |
6 | 2018 | 20.7 | 29.3 | 18.1 |
7 | 2019 | 22.9 | 30.2 | 18.8 |
8 | 2020 | 27.3 | 35.8 | 22.2 |
9 | 2021 | 28.4 | 37 | 23.3 |
10 | 2022 | 26.7 | 40.1 | 22.8 |
dfsm2.columns
Index(['시점', '과의존위험군.1', '과의존위험군.2', '과의존위험군.3', '과의존위험군.8'], dtype='object')
dfsm2.columns = ['시점', '유아동(만3~9세)','청소년(만10~19세)','성인(만20~59세)','60대(만60~69세)']
dfsm2
시점 | 유아동(만3~9세) | 청소년(만10~19세) | 성인(만20~59세) | 60대(만60~69세) |
---|---|---|---|---|
2 | 시점 | 유아동(만3~9세) | 청소년(만10~19세) | 성인(만20~59세) |
4 | 2016 | 17.9 | 30.6 | 16.1 |
5 | 2017 | 19.1 | 30.3 | 17.4 |
6 | 2018 | 20.7 | 29.3 | 18.1 |
7 | 2019 | 22.9 | 30.2 | 18.8 |
8 | 2020 | 27.3 | 35.8 | 22.2 |
9 | 2021 | 28.4 | 37 | 23.3 |
10 | 2022 | 26.7 | 40.1 | 22.8 |
#행 ➡️ axis = 0
#열 ➡️ axis = 1
#inplace = True ➡️ 원본 데이터프레임 덮어쓰기
dfsm2.drop([2], axis=0, inplace=True)
dfsm2
시점 | 유아동(만3~9세) | 청소년(만10~19세) | 성인(만20~59세) | 60대(만60~69세) |
---|---|---|---|---|
4 | 2016 | 17.9 | 30.6 | 16.1 |
5 | 2017 | 19.1 | 30.3 | 17.4 |
6 | 2018 | 20.7 | 29.3 | 18.1 |
7 | 2019 | 22.9 | 30.2 | 18.8 |
8 | 2020 | 27.3 | 35.8 | 22.2 |
9 | 2021 | 28.4 | 37 | 23.3 |
10 | 2022 | 26.7 | 40.1 | 22.8 |
➕같이 보면 좋을 자료 ➡️ inplace = True 작성 유무
dfsm2 = dfsm2.set_index("시점")
dfsm2
유아동(만3~9세) | 청소년(만10~19세) | 성인(만20~59세) | 60대(만60~69세) |
---|---|---|---|
시점 | |||
2016 | 17.9 | 30.6 | 16.1 |
2017 | 19.1 | 30.3 | 17.4 |
2018 | 20.7 | 29.3 | 18.1 |
2019 | 22.9 | 30.2 | 18.8 |
2020 | 27.3 | 35.8 | 22.2 |
2021 | 28.4 | 37 | 23.3 |
2022 | 26.7 | 40.1 | 22.8 |
plt.figure(figsize=(12,5))
plt.plot(dfsm2, marker='o')
plt.xlabel('연도', labelpad=15) #labelpad: 여백 크기
plt.xticks(fontsize=13)
plt.ylabel('과의존위험도(%)', labelpad=15) #labelpad: 여백 크기
plt.yticks(fontsize=13)
plt.title('연령대별 스마트폰 과의존위험도(2016~2022)', pad=15) #pad: 여백 크기
plt.legend()
plt.show()
데이터프레임 dfsm2
의 값을 기반으로 그래프를 만들었기 때문에 plt.legend()
를 작성하면 알아서 범례가 나올 줄 알았다. 그런데 괄호 안에 아무것도 적지 않았기 때문에 빈칸으로 된 범례 네모박스만 생성되었다. '어떻게 해야 정상적으로 출력이 될까'를 엄청 고민했다. 이것저것 해보고 오랜시간 고민한 결과 범례와 컬럼명이 같다라는 사실을 알게되었다. 컬럼 리스트를 어떤 변수에 대입해 plt.legend()
에 넣으면 되지 않을까? 한번 시도해보았다.
dfsm2_col = dfsm2.columns.to_list()
dfsm2_col #['유아동(만3~9세)', '청소년(만10~19세)', '성인(만20~59세)', '60대(만60~69세)']
plt.plot(dfsm2, marker='o', label=dfsm2_col)
plt.legend(fontsize=12, loc='upper left')
이 게시물을 작성하다가 갑자기 한 아이디어가 떠올랐다. 굳이 컬럼 리스트를 생성하지 말고 dfsm2.columns
를 대신 사용하면 작성할 코드 양이 더 줄어들지 않을까? 왜냐하면 위에서 컬럼명을 변경하려고 dfsm2.columns
를 불러내면 리스트(['시점', '과의존위험군.1', '과의존위험군.2', '과의존위험군.3', '과의존위험군.8']
)로 결과값이 출력되었기 때문이다.
plt.plot(dfsm2, marker='o', label=dfsm2.columns)
동일한 결과가 나온다!!!
제가 수행평가를 하는데, 위에 처럼하는데도 잘 안되는데 혹시 "C:\Users\User\Downloads\CO2 CH4 기체량.xlsx" 파일을 사용해서 만들어 주실 수 있나요 아니면 방법이라도
아 그 엑셀에 행 두 개 이름을 제가 바꿔놨는데 그거는 4번 행은 CO2고 5번 행은 CH4에요