공공데이터 포탈(data.go.kr)에 있는 데이터를 활용하여 세종시에 위치하고있는 상가 수를 분석하고 시각화해보겠습니다.
우선 import를 사용하여 pandas, plotly.express를 사용해주겠습니다.
import pandas as pd
import plotly.express as px
이 코드를 사용하면 pd와 px로 pandas, plotly.express를 사용할 수 있습니다.
다운 받은 파일을 data로 이름 변경을 해주어서 사용합니다.
data=pd.read_csv('data.csv')
data
이때 사용하려는 파일을 csv 형태로 해주어야 합니다.
위 코드를 실행할 경우

데이터들이 정리되지 않은 상태로 화면에 표시됩니다.
count 함수를 사용하여 상권업종대분류명에 존재하는 데이터를 업종으로 이름 변경해주어서 columns에 지정해주고 그 갯수를 구해줍니다.
industry_counts = df['상권업종대분류명'].value_counts().reset_index()
industry_counts.columns = ['업종', '갯수']
industry_counts
그래프 형태로 나타내 보겠습니다.
fig = px.pie(industry_counts, names='업종', values='갯수', title='행정동 상가 수', template='plotly_dark')
fig.show()
pie는 원형 그래프라는 뜻으로 pie형 그래프라고 부릅니다.
이번엔 load_data를 함수로 지정해준뒤 df값으로 넣어서 그래프로 나타내 보겠습니다.
def load_data():
df=pd.read_csv('data.csv')
return df
df = load_data()
dong_count = df['행정동명'].value_counts().reset_index()
dong_count.columns = ['행정동명','상가수']
fig1=px.bar(
dong_count,
x = '행정동명',
y = '상가수',
title = '세종시 행정동별 상가 수',
labels = {'행정동명 : 행정동명', '상가 수 : 상가 수'},
text = '상가수')
fig1.update_layout(xaxis_tickangle=-45)
fig1.show()
count를 사용하여 행정동명에 존재하는 상가 수를 알아내는 코드를 짜고
위에서 pie 그래프를 나타낼 때처럼 px.을 해주고 이번엔 pie(원형)이 아닌 bar(막대)형식의 그래프로 나타내보겠습니다.
위와 마찬가지로 data.go.kr에 있는 데이터를 활용하여 전국에 있는 LPG 충전소 현황이 어떻게 되는지 분석해보겠습니다.
import하여 pandas, plotly.express를 사용해주겠습니다.
import pandas as pd
import plotly.express as px
pd와 px로 pandas, plotly.express를 사용할 수 있습니다.
이번에도 불러온 데이터를 data2로 이름을 지정해준뒤 화면에 나타내 보겠습니다.
df = pd.read_csv('data2.csv')
df

이번엔 위 처럼 정리되지 않은 상태로 표시되지 않고 정리가 된 데이터가 화면에 나타납니다.
행정구역에 존재하는 LPG 충전소의 갯수를 알아내는 코드를 짜보겠습니다.
industry_counts = df['행정구역'].value_counts().reset_index()
industry_counts.columns = ['행정구역', '갯수']
industry_counts

존재하는 데이터의 갯수가 너무 많으니 pie형태 보다는 bar형태가 더 좋을거같습니다.
그렇기에 bar형태로 데이터를 나타내겠습니다.
fig = px.bar(industry_counts, x='행정구역', y='갯수', title='전국 LPG 충전소 현황', template='plotly_dark')
fig.show()
x, y, title은 위에서 말했던 거처럼 간단하게 지정해주는 것이고 template는 나타내는 그래프의 테마를 지정해주는 것입니다. dark로 지정을 해줬으니 테마가 검은색으로 나타납니다.
위 코드의 행정구역 값들이 너무 보기 힘드니 각도를 지정해주겠습니다.
fig.update_layout(xaxis_tickangle=-50)

전보다는 행정구역명들이 보기 편해졌습니다.
data.go.kr에 있는 데이터를 활용하여 지역별 전기차 현황이 어떻게 되는지 분석해보겠습니다.
import하여 pandas, plotly.express를 사용해주겠습니다.
import pandas as pd
import plotly.express as px
가져온 데이터를 data3로 이름을 지정해준뒤 화면에 나타내 보겠습니다.
df = pd.read_csv('data3.csv')
df

불러온 데이터들이 화면에 표시됩니다.
기준일을 2024-08-31일로 정한뒤 지역별 전기차 갯수를 구하겠습니다.
latest_data = df[df['기준일'] == '2024-08-31'].drop('기준일', axis=1)
industry_counts = latest_data.T.reset_index()
industry_counts.columns = ['지역', '갯수']
print(industry_counts)
기준일이 '2025-02-28'인 한 줄만 필터링합니다. 이때 결과는 행(row)이 하나인 데이터프레임입니다.
이 데이터에는 여전히 '기준일'이라는 열이 포함되어 있으므로, 시각화에 불필요한 날짜 열을 제거하기 위해 drop을 사용합니다.
데이터를 '지역', '갯수' 형태로 변환해줍니다.

데이터를 활용해서 원형 그래프(Pie Chart) 시각화 코드를 짜겠습니다.
data3 = df[df['기준일'] == '2024-08-31'].drop('기준일', axis=1)
industry_counts = data3.T.reset_index()
industry_counts.columns = ['지역', '갯수']
fig = px.pie(industry_counts, names='지역', values='갯수',
title='2024년 8월 전국 전기차 현황', template='plotly_dark')
fig.show()

이번엔 pie형태가 아닌 bar형태로 나타내보겠습니다.
fig = px.bar(
industry_counts,
x='지역',
y='갯수',
title='2024-08-31 지역별 전기차 현황',
template='plotly_dark')
fig.show()

import하여 pandas, plotly.express를 사용해주겠습니다.
import pandas as pd
import plotly.express as px
가져온 데이터를 data4로 이름을 지정해준뒤 화면에 나타내 보겠습니다.
df = pd.read_csv('data4.csv')
df

발생 연도를 1999년으로 지정해서 그 년도에있는 데이터를 사용해서 나타내겠습니다.
data4 = df[(df['성별'] == '남녀전체') &
(df['암종'] == '모든암') &
(df['발생연도'] == '1999-2022')]
industry_counts = data4[['연령군', '발생자수']].reset_index(drop=True)
industry_counts.columns = ['연령군', '발생자 수']
print(industry_counts)

년도는 코드를 짤때 원하는 년도로 바꿔줄 수 있습니다.
이번에는 연령군별 암 발생자 수를 원형 그래프로 나타내겠습니다.
data4 = df[df['발생연도'] == '1999'][['연령군', '발생자수']]
fig = px.pie(data4, names='연령군', values='발생자수',
title='1999년 연령군별 암 발생자 수', template='plotly_dark')
fig.show()
발생연도를 1999로 지정해주어 그 년도에 지정된 데이터만 사용됩니다.

실행결과를 보면 오른쪽에 작은 네모로 연령이 표시됩니다. 이 작은 네모를 눌러서 상호작용이 가능합니다. 이 그래프만 해당되는것이 아닌 위에 있는 다른 그래프도 전부 해당됩니다.
이번에는 원형 그래프로 나타내봤으니 막대 그래프로도 나타내보겠습니다.
fig = px.bar(
industry_counts,
x='연령군',
y='발생자 수',
title='1999년 연령군별 암 발생자 수',
template='plotly_dark'
)
fig.show()
1.데이터프레임의 컬럼명 확인
print(industry_counts.columns)
위 코드를 실행해서 실제 컬럼명이 '연령군', '발생자 수'로 되어 있는지 확인하세요.
2.컬럼명이 다르다면, 맞게 수정
만약 컬럼명이 다르면, 코드에서 x, y 인자를 실제 컬럼명에 맞게 바꿔주세요.
3.컬럼명이 잘못된 경우
예를 들어, 컬럼명이 'index', '발생자수'라면 아래처럼 수정해야 합니다.
fig = px.bar(industry_counts, x='index', y='발생자수', title='1999년 연령군별 암 발생자 수', template='plotly_dark')
fig.show()
4.컬럼명 재설정 예시
만약 컬럼명이 잘못되어 있다면, 아래처럼 컬럼명을 재설정할 수 있습니다.
industry_counts.columns = ['연령군', '발생자 수']
정리
import하여 pandas, plotly.express를 사용해주겠습니다.
import pandas as pd
import plotly.express as px
가져온 데이터를 data5로 이름을 지정해준뒤 화면에 나타내 보겠습니다.
df = pd.read_csv('data5.csv')
df

원형 그래프(파이 차트)에 연비 상위 20개만 추출해서 나타내 보겠습니다.
데이터(제조(수입사), 차종, 복합_연비)를 원형(pie)그래프로 시각화하는 코드입니다.
차종이 많으므로, 시각적으로 보기 쉽게 연비 상위 20개만 예시로 표시하겠습니다(필요시 n값 조정 가능).
이번에는 각 코드가 무슨 역할을 하는지 주석에 설명을 적어보겠습니다.
df = df.dropna(subset=['복합_연비'])
# 제조(수입사)-차종별 평균 복합 연비 계산
df_grouped = df.groupby(['제조(수입사)', '차종'])['복합_연비'].mean().reset_index()
# 제조(수입사)-차종 라벨 생성
df_grouped['제조(수입사)_차종'] = df_grouped['제조(수입사)'] + '-' + df_grouped['차종']
# 연비 상위 20개만 추출
top_n = 20
df_top = df_grouped.sort_values('복합_연비', ascending=False).head(top_n)
# 원형 그래프 그리기
fig = px.pie(
df_top,
names='제조(수입사)_차종',
values='복합_연비',
title='제조(수입사)-차종별 복합 연비 분포 (상위 20개)',
template='plotly_dark'
)
fig.show()
이번에는 막대(bar)형태도 상위 20개만 출력해서 나타내겠습니다.
df = df.dropna(subset=['복합_연비'])
# 제조(수입사)-차종별 평균 복합 연비 계산
df_grouped = df.groupby(['제조(수입사)', '차종'])['복합_연비'].mean().reset_index()
# 제조(수입사)-차종 라벨 생성
df_grouped['제조(수입사)_차종'] = df_grouped['제조(수입사)'] + '-' + df_grouped['차종']
# 연비 상위 20개만 추출 (원하는 개수로 n값 조정)
top_n = 20
df_top = df_grouped.sort_values('복합_연비', ascending=False).head(top_n)
# 바 그래프 그리기
fig = px.bar(
df_top,
x='제조(수입사)_차종',
y='복합_연비',
title='제조(수입사)-차종별 복합 연비 (상위 20개)',
template='plotly_dark'
)
fig.update_layout(xaxis_tickangle=-45) # x축 라벨 기울이기
fig.show()
설명
주석으로 설명을 적어뒀지만 한번더 정리 해보겠습니다.
필요에 따라 top_n 값을 조정하거나, .head(top_n)을 제거해 전체를 시각화할 수도 있습니다.