153 막대 그래프 그리기
막대그래프 > 서로 다른 값을 비교해 더 긴 막대가 더 큰 숫자를 나타내는 방식으로 표현하는 다이어그램. 막대차트, bar graph, bar chart라고 부름.
ㅇ파이썬에서 막대그래프를 그리는 방법
1. matplotlib
2. 판다스
3. seaborn
- 판다스 내장 그래프 사용하는 문법 정리
1. 막대그래프
df.plot(kind = 'bar')
#또는
df.plot.bar()
2. 원형그래프
df.plot(kind = 'pie')
#또는
df.plot.pie()
3. 산점도 그래프
df.plot(kind = 'scatter')
#또는
df.plot.scatter()
4. 라인 그래프
df.plot(kind = 'line')
#또는
df.plot.line()
5. 박스 그래프(사분위수 그래프)
df.plot(kind = 'box')
#또는
df.plot.box()
6. 히스토그램 그래프
df.plot(kind = 'hist')
#또는
df.plot.hist()
문제513. 남북한발전전력량.xlsx 파일을 파이썬으로 로드하시오.
import pandas as pd
df = pd.read_excel("c:\\data\\남북한발전전력량.xlsx")
df
문제514. df데이터 프레임에서 남한과 북한의 전력 합계행의 모든 데이터를 가져오시오.(연도 1990~ 2016년까지 모두)
import pandas as pd
df = pd.read_excel("c:\\data\\남북한발전전력량.xlsx")
df[:][df['발전 전력별']== '합계']
컬럼명으로 위의 데이터를 가져올 때는 위의 문법이 불편. 다른 문법이 필요. 위치번호로 가져오는 문법이 필요
# 데이터프레임.iloc[행번호, 열번호]
df2 = df.iloc[[0,5],2:] # 0번과 5번 행의 2번째 열부터 끝까지 가져와라
df2
문제515. 위의 데이터를 전치 시키시오(행과 열을 변경하시오)
df = pd.read_excel("c:\\data\\남북한발전전력량.xlsx")
df2 = df.iloc[[0,5],2:]
df2.index = ['South','North'] # 인덱스에 이름 붙이기
df3 = df2.T # 전치시킴
df3
데이터프레임을 전치시키는 메소드 = .T
df3.plot.bar()
문제516. ggplot 스타일로 위의 그래프를 변경하시오.
import matplotlib.pyplot as plt
print(plt.style.available) # 출력될 수 있는 그래프 스타일
['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
plt.style.use('ggplot')
df3.plot.bar()
문제517. dark_background 스타일로 그래프를 출력하시오.
plt.style.use('dark_background')
df3.plot.bar()
문제518. 업종별 창업건수를 막대그래프로 그리기 위해 "창업건수.csv"파일을 데이터프레임으로 만드시오.
(데이터 프레임명 : df5)
import pandas as pd
df5 = pd.read_csv("c:\\data\\창업건수.csv", encoding = 'euckr')
df5
문제519. 치킨집과 커피음료 두개의 컬럼만 선택해서 출력하시오
import pandas as pd
df5 = pd.read_csv("c:\\data\\창업건수.csv", encoding = 'euckr')
df6 = df5[['치킨집','커피음료']]
df6
문제520. 위의 결과에서 년도 컬럼을 인덱스 컬럼으로 지정하시오.
import pandas as pd
df5 = pd.read_csv("c:\\data\\창업건수.csv", encoding = 'euckr')
df6 = df5[['치킨집','커피음료']]
df6.index = df5['년도']
df6
# 인덱스 설정 방법 2
df6.set_index(['년도'], inplace = True)
문제521. 위의 df6데이터프레임으로 막대 그래프를 그리시오.
# 한글폰트 안깨지는 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
# 그래프 스타일 설정
import matplotlib.pyplot as plt
plt.style.use('grayscale')
import pandas as pd
df5 = pd.read_csv("c:\\data\\창업건수.csv", encoding = 'euckr')
df6 = df5[['년도','치킨집','커피음료']]
df6.set_index(['년도'], inplace = True)
df6.plot.bar()
문제522. 폐업건수.csv를 로드해서 데이터 프레임으로 만들고 치킨집 폐업건수에 대한 연도별 막대그래프를 그리시오.
# 한글폰트 안깨지는 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
# 그래프 스타일 설정
import matplotlib.pyplot as plt
plt.style.use('bmh')
import pandas as pd
df_close = pd.read_csv("c:\\data\\폐업건수.csv", encoding = 'euckr')
df_close2 = df_close[['년도','치킨집']]
df_close2.set_index(['년도'], inplace = True)
df_close2.plot.bar()
# 한글폰트 안깨지는 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
import pandas as pd
df_close = pd.read_csv("c:\\data\\폐업건수.csv", encoding = 'euckr')
df_close2 = df_close[['년도','치킨집']]
df_close2.set_index(['년도'], inplace = True)
df_close2.plot.bar(color = 'tan', figsize = (8,5), width = 0.5, fontsize = 15) # 그래프 스타일 지정 가능
# figsize(가로, 세로) 표 사이즈, width 막대 너비
문제523. 2007년도에 치킨집 폐업이 많았는데 이것이 치킨집만의 문제인지 아니면 다른 업종도 마찬가지인지 확인하기 위해 커피음료와 한식음식점도 같이 막대그래프로 확인하시오.
# 한글폰트 안깨지는 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
# 그래프 스타일 설정
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import pandas as pd
df_close = pd.read_csv("c:\\data\\폐업건수.csv", encoding = 'euckr')
df_close2 = df_close[['년도','치킨집','커피음료','한식음식점']]
df_close2.set_index(['년도'], inplace = True)
df_close2.plot.bar()
# df_close2.plot.bar(color = ['darksalmon','lightsteelblue','orange']) 색 3가지 넣을 때
문제524. 그래프에 제목을 붙이시오.
plt.title('연도별 폐업 건수', size = 20)
plt.show()
문제525. sql 포트폴리오 데이터를 막대그래프로 시각화 하기 위해서 김지연님의 데이터를 다운받아 데이터프레임으로 만드시오.
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df
문제526. 위의 데이터프레임에서 월과 평균 기온 데이터만 취해서 df2 데이터 프레임을 만드시오.
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df2 = df[['월별(1)','2019']][3:]
df2
# .iloc로 가져오는 방법
df2 = df.iloc[3:,[0,1]] # 행번호, 열번호
df2
위의 컬럼명을 month, temp로 변경하시오
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df2 = df.iloc[3:,[0,1]] # 행번호, 열번호
df2.columns = ['month','temp']
df2
문제527. 위의 컬럼중에 month를 인덱스로 지정하시오.
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df2 = df.iloc[3:,[0,1]] # 행번호, 열번호
df2.columns = ['month','temp']
df2.set_index(['month'], inplace = True)
df2
문제528. 위의 결과로 막대 그래프를 그리시오.
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df2 = df.iloc[3:,[0,1]] # 행번호, 열번호
df2.columns = ['month','temp']
df2.set_index(['month'], inplace = True)
df2.plot.bar()
문제529. (점심시간 문제) 2019년도의 최대풍속으로 월별 막대그래프를 그리시오.
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df_wind = df.iloc[3:,[0,15]] # 행번호, 열번호
df_wind.columns = ['month','wind_speed_max']
df_wind.set_index(['month'], inplace = True)
df_wind.plot.bar(color = 'lightsteelblue')
ㅇseaborn을 이용해서 막대 그래프 그리기
seaborn의 막대그래프가 판다스 막대그래프와의 차별성은 hue 옵션이 있어서 막대 그래프를 범주형으로 시각화할 수 있다.
예제1. 사원테이블에서 부서번호, 부서번호별 평균월급을 구해 막대그래프로 시각화하시오.
- 판다스
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
result = emp.groupby('deptno')['sal'].mean().reset_index()
result.columns = ['deptno','mean_sal']
result.plot.bar(color = 'lightsteelblue', x = 'deptno')
# 인덱스로 지정해서 그려도 됨
result.set_index(['deptno'],inplace=True)
result.plot.bar()
- seaborn
import pandas as pd
import seaborn as sns
emp = pd.read_csv("c:\\data\\emp2.csv")
sns.barplot( x='deptno', y='sal', data=emp )
예제2. 사원 테이블의 데이터로 막대그래프를 그리는데 x축을 부서번호로 하고 y축을 월급으로 하고 hue옵션을 직업으로 해서 시각화하시오.
부서번호마다 평균으로 어느 직업이 월급이 높은지를 확인하시오.
import pandas as pd
import seaborn as sns
emp = pd.read_csv("c:\\data\\emp2.csv")
sns.barplot( x='deptno', y='sal', hue = 'job', data=emp )
hue는 hue에 들어간 컬럼의 값을 구분하여 따로따로 모델링하여 결과를 출력해줌.
위의 코드는 직업별 평균월급을 부서번호별로 각각 막대그래프로 시각화 함.
문제530. emp데이터 프레임에서 입사연도 4자리를 출력하시오.
emp['hire_year'] = emp['hiredate'].str[:4] # csv 파일에서 가져오는 것이므로 문자형으로 변화출력
emp
문제531. 입사한 연도별로 평균월급을 출력하는데 아래와 같이 부서번호별로 각각 막대그래프로 출력되게 하세요.
import seaborn as sns
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['hire_year'] = emp['hiredate'].str[:4]
sns.barplot( x='deptno', y='sal', hue = 'hire_year', data=emp )
위의 결과를 평균값으로 출력되는 결과. 다음과 같이 수행한 것과 같음.
import seaborn as sns
import pandas as pd
import numpy as np
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['hire_year'] = emp['hiredate'].str[:4]
sns.barplot( x='deptno', y='sal', hue = 'hire_year', data=emp, estimator = np.mean )
numpy모듈의 estimator 옵션을 넣은 것과 같음.
np.mean : 평균값
np.sum : 토탈값
np.median : 중앙값
np.count_nonzero : 건수(카운트)
문제533. 직업, 직업별 토탈월급을 막대그래프로 시각화 하시오
- 판다스
import seaborn as sns
import pandas as pd
import numpy as np
emp = pd.read_csv("c:\\data\\emp2.csv")
# 판다스
pd_result = emp.groupby('job')['sal'].sum().reset_index()
pd_result.plot.bar(x = 'job')
- seaborn
import seaborn as sns
import pandas as pd
import numpy as np
emp = pd.read_csv("c:\\data\\emp2.csv")
# seaborn
sns.barplot(x='job', y = 'sal', data = emp, estimator = np.sum)
문제534. 위의 seaborn으로 출력된 결과에서 hue 옵션에 deptno를 넣어서 시각화하시오.
import seaborn as sns
import pandas as pd
import numpy as np
emp = pd.read_csv("c:\\data\\emp2.csv")
# seaborn
sns.barplot(x='job', y = 'sal', data = emp, estimator = np.sum, hue = 'deptno')
문제535. 막대 그래프를 그리기 위해 필요한 문법들을 다음과 같이 정리하고 자동화 스크립트에 10번을 눌렀을 때 문법을 보여줄 수 있도록 하시오.
a = """
# 1. iloc 이용해서 데이터 골라내고 판다스로 시각화 하는 코드
import pandas as pd
df = pd.read_excel("c:\\data\\기상개황_20220111115131.xlsx")
df_wind = df.iloc[3:,[0,15]] # 행번호, 열번호
df_wind.columns = ['month','wind_speed_max']
df_wind.set_index(['month'], inplace = True)
df_wind.plot.bar(color = 'lightsteelblue')
# 2. 판다스로 데이터 그룹핑해서 시각화하는 코드
import seaborn as sns
import pandas as pd
import numpy as np
emp = pd.read_csv("c:\\data\\emp2.csv")
pd_result = emp.groupby('job')['sal'].sum().reset_index()
pd_result.plot.bar(x = 'job')
# 3. seaborn으로 데이터 그룹핑해서 시각화하는 코드
import seaborn as sns
import pandas as pd
import numpy as np
emp = pd.read_csv("c:\\data\\emp2.csv")
sns.barplot(x='job', y = 'sal', data = emp, hue = 'deptno' ,estimator = np.sum )
# np.mean : 평균값
# np.sum : 토탈값
# np.median : 중앙값
# np.count_nonzero : 건수(카운트)
"""
print(a)
위의 코드를 자동화 코드에 넣어주면 됨
154 원형 그래프 그리기
원형그래프 > 비율 데이터를 나타내는 시각화 다이어그램. 전체를 100%로 놓고 그 중에 무엇이 얼마나 많은 비율을 차지하고 있는지 확인하는 도표
1. 판다스 문법
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['sal'].plot(kind = 'pie', labels = emp['ename'], autopct = '%0.0f%%')
2. seaborn
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
emp = pd.read_csv("c:\\data\\emp2.csv")
colors = sns.color_palette('pastel')[0:14]
plt.pie(list(emp.sal.values), labels = list(emp.ename.values), colors = colors, autopct = '%0.0f%%')
문제536. 직업별 토탈월급의 결과를 원형 그래프로 시각화 하시오.
# matplotlib
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
emp = pd.read_csv("c:\\data\\emp2.csv")
result = emp.groupby('job')['sal'].sum().reset_index()
colors = sns.color_palette('RdYlBu')[0:5]
plt.pie(list(result.sal.values), labels = list(result.job.values), colors = colors, autopct = '%0.0f%%')
# 판다스
import pandas as pd
import seaborn as sns
emp = pd.read_csv("c:\\data\\emp2.csv")
result = emp.groupby('job')['sal'].sum().reset_index()
colors = sns.color_palette()[0:5] # 색상
result['sal'].plot(kind = 'pie', labels = emp['job'], colors = colors, autopct = '%0.0f%%')
ㅇ seaborn의 color 옵션
문제537. 박사무엘님의 SQL제출물 결과인 도시별 음주운전 발생 건수를 원형 그래프로 시각화하시오.
# 한글폰트 안깨지는 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
import seaborn as sns
import matplotlib.pyplot as plt
city = ['수원시', '천안시','청주시','고양시','강남구','안산시','평택시','성남시']
cnt = [543,458,433,375,373,350,348,330]
colors = sns.color_palette()[:8]
plt.pie( cnt,labels =city , colors = colors, autopct = '%0.0f%%')
plt.pie( 비율을 표시할 값이 있는 리스트, labels = 라벨에 해당하는 값이 있는 리스트, colors = 색깔 값이 있는 리스트, autopct = 비율
문제538. 자동화코드에 11번으로 원형그래프 문법을 출력하는 코드를 추가하시오.
b = """
# 한글폰트 안깨지는 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
# matplotlib
import seaborn as sns
import matplotlib.pyplot as plt
city = ['수원시', '천안시','청주시','고양시','강남구','안산시','평택시','성남시']
cnt = [543,458,433,375,373,350,348,330]
colors = sns.color_palette()[:8]
plt.pie( cnt,labels =city , colors = colors, autopct = '%0.0f%%')
# plt.pie( 비율을 표시할 값이 있는 리스트, labels = 라벨에 해당하는 값이 있는 리스트, colors = 색깔 값이 있는 리스트, autopct = 비율
# 판다스
import pandas as pd
import seaborn as sns
emp = pd.read_csv("c:\\data\\emp2.csv")
result = emp.groupby('job')['sal'].sum().reset_index()
colors = sns.color_palette()[0:5] # 색상
result['sal'].plot(kind = 'pie', labels = emp['job'], colors = colors, autopct = '%0.0f%%')
"""
155 히스토그램 그래프 그리기
히스토그램 그래프 > 막대 그래프를 통해서 숫자 데이터의 빈도를 표시하는 그래프를 말함.
ㅇ막대그래프와 히스토그램 그래프의 차이
막대그래프는 막대를 이용하여 여러 범주의 데이터를 비교하는 그래프이고 히스토그램 그래프는 막대 그래프와 다르게 막대와 막대 사이가 붙어 있고 가로축이 계급, 세로축이 도수
(계급은 키로 예를 들면 150~160, 161~170 이런 식으로 숫자 데이터의 간격을 말하는 것이고 도수는 그 계급 사이의 건수를 말하는 것)
히스토그램은 x축이 반드시 수량(숫자)이어야 하고, 막대그래프는 수량(숫자)이 아니어도 됨.
히스토그램 그래프가 유용한 때는 데이터의 전반적인 분포 상태를 확인할 때 유용.
1. 판다스
ex. 미국 국민의 의료비 데이터를 히스토그램 그래프로 그리시오.
import pandas as pd
insurance = pd.read_csv("c:\\data\\insurance.csv")
insurance['expenses'].plot(kind='hist')
2. seaborn
import pandas as pd
import seaborn as sns
insurance = pd.read_csv("c:\\data\\insurance.csv")
sns.distplot(insurance['expenses'])
문제539. emp의 월급을 히스토그램 그래프로 그리시오.
# 판다스
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['sal'].plot(kind='hist')
# seaborn
import pandas as pd
import seaborn as sns
emp = pd.read_csv("c:\\data\\emp2.csv")
sns.distplot(emp['sal'])
+) 확률 밀도 함수(물결) 그래프가 안나오게 하려면 kde = False를 사용하면 됨
sns.distplot(insurance['expenses'], kde = False)
문제540. (오늘의 마지막 문제) 우리반 나이 데이터를 가지고 히스토그램 그래프를 그리시오.
# 판다스
import pandas as pd
emp14 = pd.read_csv("c:\\data\\emp14.csv")
emp14['age'].plot(kind='hist')
# seaborn
import pandas as pd
import seaborn as sns
emp14 = pd.read_csv("c:\\data\\emp14.csv")
sns.distplot(emp14['age'])
'Study > class note' 카테고리의 다른 글
python / 상관관계그래프, 신뢰구간그래프 (도박사 이야기) (0) | 2022.01.13 |
---|---|
python / 산포도그래프, 라인그래프, 박스그래프, 상관계수그래프 (0) | 2022.01.12 |
python / 파이썬 데이터베이스 연동 시 주의점1(날짜형 데이터) (0) | 2022.01.11 |
python / 파이썬과 mySQL 연동 (0) | 2022.01.10 |
python / 파이썬 오라클 연동 (0) | 2022.01.09 |