2025. 6. 1. 13:45ใPython(AI)
๐ต ๊ฒฝ์ฐฐ์ฒญ ๋ฒ์ฃ ๋ฐ์ ์๊ฐ๋ ๋ถ์ with Pandas & Matplotlib
"์ด์ ๋ ๋ฐ์ดํฐ ๋ถ์๋ ํ์ด์ฌ์ผ๋ก ์ง์ ํด๋ณด๋ ์๋!"
๊ณต๋ถ๋ ํ๊ณ , ์ฌํ ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ก ๋ฐ๋ผ๋ณด์. โจ
๐ฏ ์ค๋์ ๋ชฉํ
- ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์ ๋ฐ์ CSV ํ์ผ์ ๋ถ๋ฌ์ค๊ณ
- Pandas๋ก ๊ฐ๊ณตํ ๋ค
- Matplotlib๋ก ์๊ฐ๋๋ณ ๋ฒ์ฃ ๋ฐ์๋์ ์๊ฐํํฉ๋๋ค.
- ํ๊ธ์ด ๊นจ์ง์ง ์๋๋ก ํฐํธ ์ค์ ๋ ๊ฐ์ด!
๐ ๊ฐ๋ฐ ํ๊ฒฝ
| IDE | VSCode + Jupyter ํ์ฅ |
| ์ธ์ด | Python 3.11 |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ | pandas, matplotlib |
| ๋ฐ์ดํฐ | ๊ฒฝ์ฐฐ์ฒญ_๋ฒ์ฃ ๋ฐ์ ์๊ฐ๋ ๋ฐ ์์ผ_20191231.csv (cp949 ์ธ์ฝ๋ฉ) |
pip install pandas matplotlib
๐งช 1๋จ๊ณ – CSV ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
# %%
# pandas: ๋ฐ์ดํฐํ๋ ์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import pandas as pd
# %%
# ๊ณต๊ณต๋ฐ์ดํฐ CSV ํ์ผ ๋ถ๋ฌ์ค๊ธฐ (ํ๊ธ ์ธ์ฝ๋ฉ ๋ฌธ์ ๋ก cp949 ์ฌ์ฉ)
data = pd.read_csv('C:\\Dev\\ESG\\06_01\\๊ฒฝ์ฐฐ์ฒญ_๋ฒ์ฃ ๋ฐ์ ์๊ฐ๋ ๋ฐ ์์ผ_20191231.csv', encoding='cp949')
# %%
# ๋ฐ์ดํฐํ๋ ์ ์ ์ฒด ์ถ๋ ฅํด๋ณด๊ธฐ (๋ฐ์ดํฐ ๊ตฌ์กฐ ํ์ธ์ฉ)
print(data)
# %%
# ์ด(Column) ๊ธฐ์ค์ผ๋ก ์ ์ฒด ํฉ๊ณ๋ฅผ ๊ตฌํจ (์๊ฐ๋๋ณ, ์์ผ๋ณ ์ดํฉ ๋ฑ ํ์ธ ๊ฐ๋ฅ)
print(data.sum(axis=0))
โ๏ธ encoding='cp949'๋ ํ์!
๊ณต๊ณต๋ฐ์ดํฐ์ ํ๊ธ CSV๋ ๋๋ถ๋ถ UTF-8์ด ์๋๋๋ค.
๊ทธ๋ฆฌ๊ณ .sum(axis=0)์ ์ด๋ณ ํฉ๊ณ๋ก, ์๊ฐ๋·์์ผ๋ณ ๋ฒ์ฃ ์ดํฉ์ด ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
๐ 2๋จ๊ณ – ๋ฐ์ดํฐ ๊ตฌ์กฐ ํ์ธ
# %%
import matplotlib.pyplot as plt
# %%
# ์ปฌ๋ผ๋ช
(์ด ์ด๋ฆ)๊ณผ ์ธ๋ฑ์ค(ํ ๋ฒํธ) ํ์ธํ๊ธฐ
print(data.columns)
print(data.index)
๐ ๋ฐ์ดํฐ ํ์ธ ๊ฒฐ๊ณผ!
๋ฒ์ฃ ์ ํ์ ํ(row)์ ์๊ณ , ์๊ฐ๋/์์ผ์ ์ด(column)์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ์๊ฐ๋๋ ์๋ 8๊ฐ:
# ๋ถ์์ ์ฌ์ฉํ ์๊ฐ๋ ๊ด๋ จ ์ปฌ๋ผ ๋ฆฌ์คํธ ์ ์
time_columns = [
'0์00๋ถ-02์59๋ถ', '03์00๋ถ-05์59๋ถ', '06์00๋ถ-08์59๋ถ',
'09์00๋ถ-11์59๋ถ', '12์00๋ถ-14์59๋ถ', '15์00๋ถ-17์59๋ถ',
'18์00๋ถ-20์59๋ถ', '21์00๋ถ-23์59๋ถ'
]
๐ง 3๋จ๊ณ – ์๊ฐ๋๋ณ ๋ฒ์ฃ ์ดํฉ ๊ตฌํ๊ธฐ
โ violent_by_time๋ ์ธ๋ฑ์ค๊ฐ ์๊ฐ๋, ๊ฐ์ ๋ฒ์ฃ ๋ฐ์ ๊ฑด์์ธ ์๋ฆฌ์ฆ ํํ์ ๋๋ค.
๐ญ 4๋จ๊ณ – ํ๊ธ ๊นจ์ง ํด๊ฒฐ (์ค์!)
import matplotlib.font_manager as fm
import platform
# ์์คํ
์ ๋ฐ๋ผ ํ๊ธ ํฐํธ ์ง์
if platform.system() == 'Windows':
plt.rcParams['font.family'] = 'Malgun Gothic' # ์๋์ฐ ๊ธฐ๋ณธ ํ๊ธ ํฐํธ
elif platform.system() == 'Darwin': # macOS
plt.rcParams['font.family'] = 'AppleGothic'
else: # ๋ฆฌ๋
์ค (ex: Colab) plt.rcParams['font.family'] = 'NanumGothic'
# ๋ง์ด๋์ค ๋ถํธ ๊นจ์ง ๋ฐฉ์ง
plt.rcParams['axes.unicode_minus'] = False
โ๏ธ ์ด๊ฑธ ์ค์ ์ ํ๋ฉด ์๊ฐ๋, ๊ฐ๋ ฅ๋ฒ์ฃ, ๊ฑด์ ๊ฐ์ ํ ์คํธ๊ฐ ๊นจ์ง ์ฑ ์ถ๋ ฅ๋ฉ๋๋ค.
๐ 5๋จ๊ณ – ์๊ฐํ (Bar Chart)
# %% plt.figure(figsize=(10, 5)) # ๊ทธ๋ํ ํฌ๊ธฐ ์ค์
plt.bar(violent_by_time.index, violent_by_time.values) # ๋ง๋๊ทธ๋ํ ์์ฑ
# ๊ทธ๋ํ ํ์ดํ๊ณผ ๋ผ๋ฒจ ์ค์
plt.title('๊ฐ๋ ฅ๋ฒ์ฃ ์๊ฐ๋๋ณ ๋ฐ์ ๊ฑด์ (์ ์ฒด ํฉ์ฐ)')
plt.xlabel('์๊ฐ๋')
plt.ylabel('๊ฑด์')
plt.xticks(rotation=45) # X์ถ ๊ธ์จ ๊ธฐ์ธ์ด๊ธฐ
plt.tight_layout() # ์ฌ๋ฐฑ ์๋ ์กฐ์ plt.show()
๐ ์ง์!
์๊ฐํ๋ก ํ๋์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๋ฒ์ฃ๋ ์๋ฒฝ์๋ ๋ฐ์ํฉ๋๋ค… ์กฐ์ฌํ์ธ์ ์ฌ๋ฌ๋ถ ๐
'Python(AI)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Decision Tree ์๊ฐํ ๋ฐฉ๋ฒ ์ ๋ฆฌ (graphviz vs matplotlib) (1) | 2025.07.01 |
|---|---|
| ๐ง ์ธ๊ณต์ง๋ฅ์ 7๋จ๊ณ (1) | 2025.06.17 |
| ๐ง AI ์ฌํ ์์ Day1: ๋จธ์ ๋ฌ๋ ๊ฐ๋ + ์ด๋ฏธ์ง ์๋ฒ ๋ฉ ์ค์ต ์ ๋ฆฌ(with Orange) (0) | 2025.06.16 |
| ๐ฅ ์๋ฃ๊ธฐ๊ด ๋ฐ์ดํฐ๋ถ์ ์ค์ต ์ ๋ฆฌ (4) | 2025.06.09 |
| ๐ ์บ ํ์ฅ ๋ฐ์ดํฐ ๋ถ์ยท์๊ฐํ ์ค์ต ์ ๋ฆฌ (2) | 2025.06.09 |