프로그램

[파이썬] 문제 : 폐기물 csv파일로 막대그래프(bar) 그리기(pandas, groupby)

오디세이99 2022. 12. 10. 16:21
728x90
반응형

(문제)

파이썬 데이터 시각화 관련.

csv 파일에서 필요한 데이터만 추출해서
지역별로 나이에 따라 인구수와
지역별로 PET병 배출량을 막대 그래프 그리기
 
 
(방법)
1) 지역별로 나이에 따라 인구수
- 첨부한 데이터를 정확히 몰라서 어떤 컬럼이 인구수인지 모르겠습니다.
대략 다음 컬럼들이 인구수로 가정했습니다.

남_~9,남_10~19...남_100~

여_~9,여_10~19...여_100~

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('폐기물dataset.csv', header=0, encoding='cp949')

df['배출량'] = df['배출량'].str.replace(',', '')   # 배출량이 317,827.8 와 같이 ','가 있어 실수가 아닌 Object로 되어 있어서 ','제거
df = df.astype({'배출량':'float'})                 # Object -> Float

df2.groupby(['지역']).sum()

fig = plt.figure(figsize=(14, 6))            # plot 크기 설정
plt.rcParams['font.family'] = 'NanumGothic'  # 한글 가능하도록 폰트 설정
f_size = 16                  # 제목 폰트 크기
bar_width = 0.1
x_column = 'X축'
y_column = 'Y축'
x_label = list(df2['지역'])           # 데이터명
x = np.arange(len(x_label))
y = list(df2['남_~9'])           # 데이터
y2 = list(df2['남_10~19'])           # 데이터
y3 = list(df2['남_20~29'])           # 데이터
y4 = list(df2['남_30~39'])           # 데이터
y5 = list(df2['남_40~49'])           # 데이터
y6 = list(df2['남_50~59'])           # 데이터
y7 = list(df2['남_60~69'])           # 데이터
y8 = list(df2['남_70~79'])           # 데이터
y9 = list(df2['남_80~89'])           # 데이터
y10 = list(df2['남_90~99'])           # 데이터
y11 = list(df2['남_100~'])           # 데이터
plt.bar(x, y, bar_width, alpha=0.4, label='남_~9')                # bar chart 그리기
plt.bar(x+bar_width, y2, bar_width, label='남_10~19')
plt.bar(x+2*bar_width, y3, bar_width, label='남_20~29')
plt.bar(x+3*bar_width, y4, bar_width, label='남_30~39')
plt.bar(x+4*bar_width, y5, bar_width, label='남_40~49')
plt.bar(x+5*bar_width, y6, bar_width, label='남_50~59')
plt.bar(x+6*bar_width, y7, bar_width, label='남_60~69')
plt.bar(x+7*bar_width, y8, bar_width, label='남_70~79')
plt.bar(x+8*bar_width, y9, bar_width, label='남_80~89')
plt.bar(x+9*bar_width, y10, bar_width, label='남_90~99')
plt.bar(x+10*bar_width, y11, bar_width, label='남_100~')
plt.xticks(x, x_label)
plt.title("지역별 나이별 인구수(남)",fontsize=f_size)  # 제목 쓰기
plt.legend()
plt.show()

 

 

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('폐기물dataset.csv', header=0, encoding='cp949')

df['배출량'] = df['배출량'].str.replace(',', '')   # 배출량이 317,827.8 와 같이 ','가 있어 실수가 아닌 Object로 되어 있어서 ','제거
df = df.astype({'배출량':'float'})                 # Object -> Float

df2.groupby(['지역']).sum()

fig = plt.figure(figsize=(14, 6))            # plot 크기 설정
plt.rcParams['font.family'] = 'NanumGothic'  # 한글 가능하도록 폰트 설정
f_size = 16                  # 제목 폰트 크기
bar_width = 0.1
x_column = 'X축'
y_column = 'Y축'
x_label = list(df2['지역'])           # 데이터명
x = np.arange(len(x_label))
y = list(df2['여_~9'])           # 데이터
y2 = list(df2['여_10~19'])           # 데이터
y3 = list(df2['여_20~29'])           # 데이터
y4 = list(df2['여_30~39'])           # 데이터
y5 = list(df2['여_40~49'])           # 데이터
y6 = list(df2['여_50~59'])           # 데이터
y7 = list(df2['여_60~69'])           # 데이터
y8 = list(df2['여_70~79'])           # 데이터
y9 = list(df2['여_80~89'])           # 데이터
y10 = list(df2['여_90~99'])           # 데이터
y11 = list(df2['여_100~'])           # 데이터
plt.bar(x, y, bar_width, alpha=0.4, label='여_~9')                # bar chart 그리기
plt.bar(x+bar_width, y2, bar_width, label='여_10~19')
plt.bar(x+2*bar_width, y3, bar_width, label='여_20~29')
plt.bar(x+3*bar_width, y4, bar_width, label='여_30~39')
plt.bar(x+4*bar_width, y5, bar_width, label='여_40~49')
plt.bar(x+5*bar_width, y6, bar_width, label='여_50~59')
plt.bar(x+6*bar_width, y7, bar_width, label='여_60~69')
plt.bar(x+7*bar_width, y8, bar_width, label='여_70~79')
plt.bar(x+8*bar_width, y9, bar_width, label='여_80~89')
plt.bar(x+9*bar_width, y10, bar_width, label='여_90~99')
plt.bar(x+10*bar_width, y11, bar_width, label='여_100~')
plt.xticks(x, x_label)
plt.title("지역별 나이별 인구수(여)",fontsize=f_size)  # 제목 쓰기
plt.legend()
plt.show()

 

 

2) 지역별로 PET병 배출량

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def add_value_label(x_list,y_list):           # bar chart에 값을 text로 표시
    for i in range(1, len(x_list)+1):
        plt.text(i-1,y_list[i-1],y_list[i-1])

df = pd.read_csv('폐기물dataset.csv', header=0, encoding='cp949')

df['배출량'] = df['배출량'].str.replace(',', '')   # 배출량이 317,827.8 와 같이 ','가 있어 실수가 아닌 Object로 되어 있어서 ','제거
df = df.astype({'배출량':'float'})                 # Object -> Float

df2 = df[(df['폐기물상세'] == 'PET병')]
df2.groupby(['지역']).sum()

fig = plt.figure(figsize=(14, 6))            # plot 크기 설정
plt.rcParams['font.family'] = 'NanumGothic'  # 한글 가능하도록 폰트 설정
f_size = 16                  # 제목 폰트 크기
bar_width = 0.8
x_column = 'X축'
y_column = 'Y축'
x_label = list(df2['지역'])           # 데이터명
x = np.arange(len(x_label))
y = list(df2['배출량'])           # 데이터
plt.bar(x, y, bar_width, alpha=0.6, color='green', label='배출량(PET병)')                # bar chart 그리기
plt.xticks(x, x_label)
add_value_label(x, y)        # 값 표시
plt.title("지역별 배출량(PET병)",fontsize=f_size)  # 제목 쓰기
plt.grid()
plt.legend()
plt.show()

728x90
반응형