"์ฌํ์ด๋ ์์ ์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ ์ธ ์ฌ๊ธฐ ์๋ฐฉ ๋ฐ ๋ง์ถคํ ๋งค๋ฌผ ์ถ์ฒ ์๋น์ค"
- Streamlit App: ๐ ๋ฐฐํฌ๋ ์น์ฌ์ดํธ ๋งํฌ ํด๋ฆญ
- GitHub Repository: ๐ ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฐ๋ก๊ฐ๊ธฐ
- ์ํ์์ ๐ ์ ํ๋ธ ์ํ์์ ๋ฐ๋ก๊ฐ๊ธฐ
- ํ๋ก์ ํธ ๊ธฐ๊ฐ: 2026.01.22 ~ 2026.01.23
- ํ๋ช : ์๊ณ (Algo)๋ฆฌ์ง
- ํ ์ค ์๊ฐ: ๊ธ์ต์ด ๋ฏ์ ์ฌํ์ด๋ ์์ ์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ ์ธ ๋์ถ ๊ฐ์ด๋
| ์์งํ | ์ฌํจ์ง | ์ด๋จ๊ธธ | ์ฐ๋ฏผํ |
| @Jihye0623 | @hyojin-shj | @SouthGiri | @minha222 |
โข AI: OpenAI API โข Analysis: Plotly โข DB & Database: MySQL & Pandas |
โข DB: MySQL โข Logic: Filtering & Mapping โข Chart: Folium |
โข DB: MySQL โข Logic: Loan Condition, Monthly Payment โข Chart: Plotly Strip |
โข UI/UX: Main Page Layout โข Form: User Input |
์ ์ธ ๋์ถ ์ํ๊ณผ ๊ธ๋ฆฌ์ ์ต์ํ์ง ์์ ์ฌํ์ด๋ ์์ด ๋ณธ์ธ์ ๊ฒฝ์ ์ํฉ์ ๋ง๊ฒ ์ ์ธ ๋์ถ ์ํ์ ํ๋์ ๋น๊ตํ ์ ์๋๋กํ์ฌ ์์ฌ๊ฒฐ์ ์ ์ง์ํ๊ณ ์ ํฉ๋๋ค.
- ์์ธ์ ๋ถ๋์ฐ ์ ์์ธ๊ฐ ์ ๋ณด: ์ค์ ์ ์์ธ ๊ฑฐ๋ ๊ฐ๊ฒฉ๊ณผ ์์น ์ ๋ณด๋ฅผ ๋ด์, ์์ธ ๋ถ์์ ๊ธฐ์ค์ด ๋จ.
- ์ฃผํ๋์๊ธฐ๊ธ(HUG) ๋์ถ ์ํ ๋ฐ์ดํฐ: '์ฒญ๋ ๋ฒํ๋ชฉ ์ ์ธ์๊ธ๋์ถ'์ ์ ํํ ๊ธ๋ฆฌ์ ํ๋ ์ฐ์ถ์ ์ํด ์ ์ .
- ์ํ์ฐํฉํ ์ ์ธ์๊ธ๋์ถ ์ํ ๋ฐ์ดํฐ: ์์ค ์ํ์ ์ ์ธ ์๊ธ ๋์ถ ์ํ์ ๊ธ๋ฆฌ์ ์ ๋ถ๋ด๊ธ ์ ๋ณด ์ ๊ณต.
- ๋ถ์ ๊ธฐ์ค:
- ํ์คํ ์งํ ๋์ : ์ค์ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๋ฏผ๊ฐํ๊ฒ ์ธ์งํ๋ ์ ์ธ ๋ณด์ฆ๊ธ(deposit) ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ํํจ.
- ๋ฐ์ดํฐ ์ ์ : ์ฃผ์ ๊ธฐ๋ฐ ์ง์ค์ฝ๋ฉ ์ ํ๋๋ฅผ ํ๋ณดํ๊ธฐ ์ํด ๋ณธ๋ฒยท๋ถ๋ฒ ์ ๋ณด๊ฐ ๋๋ฝ๋ ์ฃผ์ ๋ฐ์ดํฐ๋ ๋ถ์ ๋์์์ ์ ์ธํ๊ณ ,์ค์ ์์น ๋งคํ์ด ๊ฐ๋ฅํ ๋งค๋ฌผ๋ง ํ์ฉํจ.
- ์ธ์ฌ์ดํธ (Insights):
- ๐ ๋ถ์ ๊ฒฐ๊ณผ:
- ์ง์ญ๋ณ ๊ฐ๊ฒฉ ํธ์ฐจ: ๋ณด์ฆ๊ธ ๊ธฐ์ค์ผ๋ก ๋งค๋ฌผ์ ์๊ฐํํ ๊ฒฐ๊ณผ, ๊ณ ๊ฐ ๋งค๋ฌผ์ด ๋ฐ์ง๋ ์ง์ญ๊ณผ ์๋์ ์ผ๋ก ์ ๋ ดํ ๋งค๋ฌผ์ด ๋ถํฌํ ์ง์ญ์ด ์ง๋ ์์์ ํ์ธ ๊ฐ๋ฅ.
- ํ๋ณด ๋งค๋ฌผ์ ๋น๊ต: ํํฐ๋ง์ ํตํด ์ ํ๋ ๋งค๋ฌผ๋ค์ ๋ํด ๋ณด์ฆ๊ธ ๋ถํฌ, ์์ฝ ํต๊ณ๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ณ ๋งค๋ฌผ์ ์์ค ํ๋จ ๊ฐ๋ฅ.
- ๐ก ์๋ฃจ์
:
- AI ๊ธฐ๋ฐ ๋ง์ถค ๋งค๋ฌผ ์ถ์ฒ: ์ง๋ ๋ฐ ๋งคํธ๋ฆญ์ค ๋ถ์์ ํตํด ์์ถ๋ ํ๋ณด ๋งค๋ฌผ ์ค์์ ์ฌ์ฉ์์ ์ ํธ ์กฐ๊ฑด์ ์ ๋ ฅ๋ฐ์ OpenAI API ๊ธฐ๋ฐ ๋ถ์์ผ๋ก ์ ํฉํ ๋งค๋ฌผ ์ถ์ฒ.
- ์ง์ญ๋ณ ์์ธ ํ์: ํ์ ๋๋น ๋ณด์ฆ๊ธ์ ์๊ด๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์ถ์ธ์ ์ ์ ๊ณตํ์ฌ, ํ๊ท ์์ธ๋ณด๋ค ๋ฎ์ ๊ฐ๊ฒฉ๋๊ฐ ํ์ฑ๋ ์ง์ญ์ ์๊ฐ์ ์ผ๋ก ํ์ ํ๊ณ ์ฐ์ ์์ ๋ฐํ ํ๋ณด์ง ์ ์ ์ ์ํ ์์ฌ๊ฒฐ์ ์ง์.
- ์์ฌ๊ฒฐ์ ์ง์: ์๋ณ ํ๋จ๊ฐ ๊ทธ๋ํ๊ฐ ์ฐ์ํฅ์ผ ๊ฒฝ์ฐ '๋น ๋ฅธ ๊ณ์ฝ'์, ์ฐํํฅ์ผ ๊ฒฝ์ฐ '๊ด๋ง'์ ์ ์ํ๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ํ์ด๋ฐ ๊ฐ์ด๋ ์ ๊ณต.
- ๐ ๋ถ์ ๊ฒฐ๊ณผ:
- ์ขํ ๊ธฐ๋ฐ ์ค๊ฑฐ๋๊ฐ ์ง๋:
์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ์๊ฒฝ๋(lat,lon)๋ก ๋ณํํ์ฌ DB์ ์ ์ฅํ๊ณ ,
Folium์ง๋ ์์ ์ค์ ์์น ๊ธฐ์ค ๋ฒ๋ธ ๋งค๋ฌผ๋ก ์๊ฐํํฉ๋๋ค. - ์กฐ๊ฑด ๊ธฐ๋ฐ ๋งค๋ฌผ ํํฐ๋ง:
์ฌ์ฉ์๊ฐ ์ค์ ํ ๋ณด์ฆ๊ธ ํ๋, ๋ฉด์ , ๊ฑฐ๋ ์ ํ(์ ์ธ) ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋งค๋ฌผ๋ง ์ ๋ณํ๋
ํํฐ๋ง ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ฌ ๋ถํ์ํ ๋งค๋ฌผ ๋ ธ์ถ์ ์ฐจ๋จํ์ต๋๋ค. - ๋ฒ๋ธ ์ง๋ ์๊ฐํ:
ํํฐ๋ง์ ํต๊ณผํ ๋งค๋ฌผ๋ง ์ง๋์ ๋ฒ๋ธ ํํ๋ก ํ์ํ์ฌ
์ฌ์ฉ์๊ฐ ๊ฐ๊ฒฉยท์ ์ง ๋ถํฌ๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์ํ ์ ์๋๋ก ์ค๊ณํ์ต๋๋ค.
- ๋ง์ถคํ ๋งค๋ฌผ ์ถ์ฒ: ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ๋ถ์๊ธฐ(์: "์กฐ์ฉํ ์ฒ์ธ๊ถ")๋ฅผ ์ ๋ ฅํ๋ฉด OpenAI API๊ฐ ๋งค๋ฌผ์ ํน์ง์ ๋ถ์ํด ์ ํฉ๋๋ฅผ ํ๋จํฉ๋๋ค.
- ์ค๋งํธ ๋น๊ต ๋ฆฌํฌํธ: ์ ํํ ๋ ๋งค๋ฌผ์ ๊ฐ๊ฒฉ, ์์น, ์ฅ๋จ์ ์ 1:1๋ก ๋น๊ตํ์ฌ Markdown ํ์์ ๊น๋ํ ๋ฆฌํฌํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ํ๋ณ ๋์ถ ํ๋ ๋ถ์: ์ฌ์ฉ์์ ๋ณด์ ์์ฐ๊ณผ ํฌ๋งํ๋ ์ ์ธ ๋ณด์ฆ๊ธ์ ์ ๋ ฅํ๋ฉด, ์ฃผ์ ์์ค ์ํ๋ณ๋ก ์ ๊ณต ๊ฐ๋ฅํ ๋์ถ ํ๋์ ๊ธ๋ฆฌ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Strip plot ์๊ฐํ: ์ํ๋ณ ๋์ถ ์ํ์ ์ ๋ถ๋ด๊ธ ๋ถํฌ๋ฅผ Strip plot์ผ๋ก ์๊ฐํํ์ฌ, ์ํ์ ์ ๋ถ๋ด๊ธ์ ํ๋์ ๋น๊ตํ ์ ์์ต๋๋ค.
- ์์ธ ํธ๋ ๋: ์๋ณ ํ๊ท ํ๋จ๊ฐ ์ถ์ด๋ฅผ Line Chart๋ก ์๊ฐํํ๊ณ , ์์น/ํ๋ฝ ํ๋ฆ์ ๋ํ ํด์ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋๋ค๋ณ ๊ฐ์ฑ๋น ๋น๊ต: ์ ํํ ๋๋ค๋ค์ ํ๋จ๊ฐ ๋ถํฌ๋ฅผ Box Plot์ผ๋ก ๋น๊ตํด ๊ฐ๊ฒฉ ๋ถ์ฐ(๋ฐ๊ฐ์ง ์ํ)๊ณผ ๊ฐ์ฑ๋น๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
- ์จ์ ๊ฟ๋งค๋ฌผ ํ์: ํ์-๋ณด์ฆ๊ธ Scatter Plot์ ํ๊ท ์์ธ์ ์ ์ถ๊ฐํ์ฌ, ์์ธ์ ํ๋จ์ ์๋์ ์ผ๋ก ์ ๋ ดํ ๋งค๋ฌผ์ ์ง๊ด์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
๐ FISA-realEstate
โฃ ๐ figure/
โ โฃ ๐ผ๏ธ mapo.png
โ โ ๐ผ๏ธ woorifisa.png
โฃ ๐ pages/
โ โฃ ๐ 1_์ ์ธ_์ง๋_&_AI_์ปจ์คํดํธ.py
โ โ ๐ 2_๋์ถ_ํ๋_๊ณ์ฐํ๊ธฐ.py
โ โ ๐ 3-์ ์ธ_์์ฅ_์ฌ์ธต_๋ถ์.py
โฃ ๐ Home.py
โฃ ๐ sidebar.py
โ ๐ requirements.txt
์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ฉฐ ๊ฒช์ ์ฃผ์ ๊ธฐ์ ์ ๋ฌธ์ ์ ํด๊ฒฐ ๊ณผ์ ์ ๋๋ค.
- ๋ฌธ์ ์ํฉ: 50๋ง ๊ฑด ์ด์์ ์์ธ์ ์ค๊ฑฐ๋๊ฐ CSV ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ MySQL์ ์ ์ฌํ๋ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฐ ํ์์์ ๋ฐ์.
- ์์ธ ๋ถ์: ๋ถํ์ํ ํ์ ์ฝ๋ ์ปฌ๋ผ๊น์ง ๋ชจ๋ ๋ก๋๋์์ผ๋ฉฐ, ํ ๋ฒ์
Insert๋ฅผ ์๋ํ์ฌ ๋ถํ ๋ฐ์. - ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฐ์ดํฐ ๊ฒฝ๋ํ: ํ๋ก์ ํธ ํ๊ฒ์ธ '๋งํฌ๊ตฌ' ๋ฐ์ดํฐ๋ง ํํฐ๋งํ๊ณ ๋ถ์์ ๋ถํ์ํ '์ง๋ฒ์ฝ๋', '์ ์๋ ๋' ๋ฑ 21๊ฐ ์ปฌ๋ผ ์ค 13๊ฐ๋ฅผ ์ ๊ฑฐํ์ฌ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ 343.66MB์์ 4.52MB๋ก ์ฝ 98.7% ๊ฐ์์์ผ ๋ฆฌ์์ค ํจ์จ์ฑ ๊ทน๋ํ.
- ์ ์ฌ ํจ์จํ: ๊ธฐ์กด์ ์คํจํ๋ DB ์ ์ฌ ์์ ์ 15.94์ด ๋ง์ ์๋ฃํ๋ฉฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ์์ ์ฑ ํ๋ณด.
| ๊ตฌ๋ถ | ์๋ณธ ๋ฐ์ดํฐ (Raw) | ๋ณ๊ฒฝ ํ ๋ฐ์ดํฐ (Optimized) | ๊ฐ์ ํจ๊ณผ |
|---|---|---|---|
| ์ปฌ๋ผ ์ | 23๊ฐ | 13๊ฐ | 10๊ฐ ์ปฌ๋ผ ์ ๊ฑฐ / ํตํฉ (์ฝ 43% ๊ฐ์) |
| ๋ฐ์ดํฐ ํ ์ | 500,000+๊ฑด | 600๊ฑด | 99.8% ์ด์ ์ถ์ |
| ๋ฐ์ดํฐ ์ ์ฌ ์๊ฐ | ์ฆ์ ํธ๋ฌ๋ธ์ํ ๋ฐ์ (ํ์ ๋ถ์ผ์น, Null ์ด์ ๋ฑ) | ์ฆ์ ์ ์ฌ ๊ฐ๋ฅ | ์ ์ฌ ์์ ์ฑ ํ๋ณด ๋ฐ ๋ฐ๋ณต ํธ๋ฌ๋ธ ์ ๊ฑฐ |
| ํธ๋ฌ๋ธ์ํ ์์ ์๊ฐ | ํ๊ท 10๋ถ ์ด์ | ๊ฑฐ์ 0 | ๋ฐ์ดํฐ ์ ์ฌยท์ ์ ์๊ฐ ๋ํญ ๋จ์ถ |
| ์ฃผ์ ์ปฌ๋ผ ๊ตฌ์กฐ | ์ ์์ฐ๋, ์์น๊ตฌ๋ช , ๊ฑด๋ฌผ๋ช ๋ฑ ์ค๋ณต ๋ฑ | district, dong, bldg_name, area, deposit, contract_date ๋ฑ | ์ง๊ด์ ยท๋ถ์ ์นํ์ ๊ตฌ์กฐ |
- ๋ฌธ์ ์ํฉ:
- ํ๋ค์ค๋ก ์นด์นด์ค API๋ฅผ ์ฐ๋ํด ์ฃผ์๋ฅผ ์๊ฒฝ๋๋ก ๋ณํํ์ฌ DB์ ์ ์ฌํ๋ ค ํ์์ผ๋ ๊ณ์๋๋ ํต์ ์๋ฌ๋ก ์คํจ.
- ์ฐจ์ ์ฑ ์ผ๋ก ์คํ๋ ๋์ํธ Geocoder ํด์(์๊ฒฝ๋๋ณํ ์ง์) ์ฌ์ฉํ๋ ค ํ์ผ๋ ๋ฌด๋ฃ ๋ณํ ํ๋ ์ด๊ณผ๋ก ์์ ์คํจ.
- ๋ฐ์ดํฐ์ ์ค ์ฃผ์์ง ๋ณธ๋ฒ/๋ถ๋ฒ ๋ฐ์ดํฐ ๊ฒฐ์ธก์น๋ก ์๋ฌ ๋ฐ์
- ์์ธ ๋ถ์
- ๋ฌด๋ฃ ํด์ ์ผ์ผ ์ฟผ๋ฆฌ ์ ํ ๋ฐ ์ ๋ฃ API์ ์ธ์ฆ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ์๊ฐ๋ด ํด๊ฒฐ ๋ถ๊ฐ๋ฅ.
- ๋ฐ์ดํฐ์ ์ bonbun(๋ณธ๋ฒ)์ด๋ bubun(๋ถ๋ฒ)์ด NaN์ธ ํ์ด ์์ด ์ ์ ๋ณํ ์ ์๋ฌ ๋ฐ์.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๊ธฐ์ ์คํ ๋ณ๊ฒฝ: ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Geopy (Nominatim) ์ฑํ.
- pd.isna()๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ธก์น๊ฐ ์๋ ์ฃผ์๋ 0์ผ๋ก ๊ฑด๋๋ฐ๋๋ก ์์ธ ์ฒ๋ฆฌ ๊ตฌํ.
| ๊ตฌ๋ถ | ๊ธฐ์กด ๋ฐ์ดํฐ ์ํ | ๊ฐ์ ํ ๋ฐ์ดํฐ ์ํ | ๊ฐ์ ํจ๊ณผ |
|---|---|---|---|
| ์ฃผ์ ์ปฌ๋ผ ๊ตฌ์กฐ | ๋ฒ์ ๋, ์ง๋ฒ, ๋ณธ๋ฒ, ๋ถ๋ฒ ์ปฌ๋ผ ๋ถ๋ฆฌ ๋ฐ ์ผ๋ถ ๊ฒฐ์ธก | ๋ฒ์ ๋ + ์ง๋ฒ + ๋ณธ๋ฒ + ๋ถ๋ฒ์ ๊ฒฐํฉํ ๋จ์ผ ์ฃผ์ ์ปฌ๋ผ ์์ฑ | ์ง์ค์ฝ๋ฉ ์ ๋ ฅ ํฌ๋งท ํ์คํ |
| ๊ฒฐ์ธก์น ์ฒ๋ฆฌ | ๋ณธ๋ฒ/๋ถ๋ฒ NaN ์กด์ฌ โ ์ ์ ๋ณํ ์ ์๋ฌ ๋ฐ์ | pd.isna() ๊ธฐ๋ฐ ์์ธ ์ฒ๋ฆฌ, ๊ฒฐ์ธก์น๋ 0์ผ๋ก ์นํ |
์ฃผ์ ํ์ฑ ์๋ฌ ์ ๊ฑฐ |
| ์๊ฒฝ๋ ์ปฌ๋ผ | lat, lon ๋ค์ NULL | ์ยท๊ฒฝ๋ ์ ์ ๋งคํ๋ ์ ๊ท ์ปฌ๋ผ ์์ฑ | ์ง๋ ์๊ฐํ ๊ฐ๋ฅ |
| ์ง์ค์ฝ๋ฉ ๋ฐฉ์ | ์นด์นด์ค API / ์คํ๋ ๋์ํธ Geocoder (์ ํ ์ด๊ณผ) | Geopy(Nominatim) ๊ธฐ๋ฐ ์คํ์์ค ์ง์ค์ฝ๋ฉ | ์ฟผ๋ฆฌ ์ ํ ๋ฌธ์ ํด๊ฒฐ |
| ์ต์ข ๋ฐ์ดํฐ์ | ์ฃผ์ ๋ฌธ์์ด ์ค์ฌ | ์ฃผ์ + ์๋(lat) + ๊ฒฝ๋(lon) ํฌํจ | ๊ณต๊ฐ ๋ถ์ ๊ฐ๋ฅ ๋ฐ์ดํฐ ํ๋ณด |
