Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🗺️ Senti-Logic (지능형 지역 경제 모니터링 및 자산 영향 분석 대시보드)

Senti-Logic은 전국 권역별 경제 뉴스 데이터를 실시간 크롤링·정제하고, AI 감성 분석(KoELECTRA) 및 금융 자산 지수(KOSPI/KOSDAQ)와 결합하여 지역별 경제 심리 지도자산 영향력 상관관계를 제공하는 지능형 대시보드 플랫폼입니다.


👨‍💻 My Role & Key Contributions (이채현 - Team Leader & Crawling Class / Map UI Lead)

본 프로젝트의 **팀장(Team Leader)**으로서 모듈화된 객체지향(Class) 크롤링 엔진 설계, DB 스키마 정제/마이그레이션, Folium 기반 단계 구분도(Choropleth) 및 인터랙티브 지도 UI 구축, Streamlit 동적 캐시 최적화 & Multi-DB 병합, 프로젝트 총괄 발표까지 전 파이프라인을 리드하여 성공적으로 완료했습니다.


📌 목차 (Table of Contents)


🏢 프로젝트 개요

  • 프로젝트 주제: 주가 상승/하락에 따른 경제 뉴스 감성 관계 추적
  • 프로젝트 목적: 전국 각 지역 언론사 경제 기사를 다각도로 수집하여 지능형 지역 경제 모니터링 및 자산(KOSPI/KOSDAQ) 영향 분석 대시보드 구현
  • 핵심 가치:
    • 지역 특화 데이터 파이프라인: 충청, 경상, 전라 등 지역 언론사 경제 섹션 자동 수집
    • 감성 분석 & 이슈 추출: KoELECTRA 기반 감성 점수 산출 및 단어 키워드 가중 평균
    • 인터랙티브 공간 시각화: 시도 경계 GeoJSON 연동 지능형 단계 구분도 지도
    • 자산 영향력 상관분석: 피어슨 상관계수, 회귀선, 볼린저 밴드 시각화

🔑 담당 핵심 기능 및 기술적 성과

1. 객체지향(Class) 수집 모듈 설계 및 지역 특화 크롤러 구축

  • 재사용 가능한 크롤링 모듈 (Class) 설계: 언론사별 상이한 HTML 구조에 유연하게 대응하기 위해 기사 목록 탐색, 본문 추출, 날짜 정제를 추상화한 객체지향 수집 크롤러 모듈 설계.
  • 지역 특화 데이터 수집 엔진: 충청도(충청투데이, 충청뉴스 등), 경상도(부산일보, 경남경제, 매일신문 등), 전라도(광주일보, 전남일보 등) 권역별 신문사 크롤러 구축 (requests, BeautifulSoup4, Selenium).
  • ThreadPoolExecutor 병렬 스크래핑: 멀티스레딩(max_workers=10) 환경을 통해 수집 속도 약 10배 향상 및 지수 백오프 (Exponential Backoff)로 차단 회피.

2. DB 스키마 구조 개편, 마이그레이션 & 정합성 파이프라인

  • 필수 컬럼 취합 및 DB 스키마 재설계: 뉴스 기사 원문, 감성 점수, 지역 정보, 뉴스 발행 일자(published_time)를 포함하도록 DB 구조 수정 및 정제 마이그레이션 진행.
  • 데이터 정합성 확보: 인코딩 자동 교정(response.encoding = 'utf-8'), HTML 잡음 태그(ins, script, style) 제거, 날짜 포맷 YYYY-MM-DD 절대 표기 정규화로 데이터 무결성 100% 달성.

3. Folium 단계 구분도(Choropleth) & 인터랙티브 지도 UI 개발

  • 단계 구분도 (Choropleth Map) 구현: 대한민국 광역시/도 경계 GeoJSON 공간 데이터와 DB 내 뉴스 기사 수, 부정 기사 비율, 감성 지수를 연결하여 감성 농도에 따른 단계 구분 시각화 구현.
  • 동적 공간 매핑 & 인터랙션:
    • 부정 기사 비율에 따른 지하시각화 및 색상 매핑 (빨강 = 위험 51%+, 파랑 = 우세 50%-).
    • 특정 지역 클릭 시 팝업(folium.Popup, IFrame)을 통해 해당 지역의 뉴스 건수, 긍/부정 비율, 주요 뉴스 목록이 노출되는 HTML/JS 인터랙션 커스텀 구축.
  • Folium 라이브러리 오류 해결 및 최적화: 맵 객체 생성 시 발생하던 렌더링 충돌 방지 및 메모리 사용 최적화.

4. Streamlit 캐시 동작 개선 & Multi-DB 병합 연동

  • Multi-DB 병합 연동: 팀원 분원 작업 환경으로 분리되어 있던 news.dbnews_scraped.db를 URL 기반 중복 제거 로직을 적용하여 손실 없이 통합 병합 관리.
  • Streamlit 캐시 최적화 (@st.cache_data):
    • UI 상에서 사용자가 분석 일자(시작일/종료일)를 변경할 때 지도의 뉴스 수집 개수 및 통계가 동적으로 업데이트되지 않는 문제 해결.
    • Streamlit 캐시 재계산 이벤트를 정밀 제어하여 날짜 변경 시 실시간 매핑 연동 구현.
  • 실시간 금융 지수 결합: FinanceDataReader로 수집된 KOSPI/KOSDAQ 종가 데이터와 뉴스 감성 지수 시계열 결합 시각화.

5. 프로젝트 총괄 리딩 & 발표 파이프라인

  • 팀 리더십 및 발표 진행: 프로젝트 기획부터 DB, 웹크롤링, 지도 UI, 대시보드 통합까지 전체 일정 관리 및 발표 자료(PPT) 작성, 발표 대본 구성, 최종 프로젝트 발표 총괄 진행.

🛠️ 기술 스택 (Tech Stack)

구분 상세 기술 스택
Language & Core Python 3.10+
Scraping & Crawling requests, BeautifulSoup4, Selenium, urllib3, ThreadPoolExecutor
Data Processing pandas, re (정규표현식), chardet, datetime
Data Visualization folium (Choropleth Map), GeoJSON, streamlit, HTML5/JS
Database sqlite3 (news.db + news_scraped.db Merge)

🏗️ 데이터 파이프라인 아키텍처

[ 권역별 신문사 크롤러 Class (충청/경상/전라 등) ]
             │
             ▼  ThreadPoolExecutor (max_workers=10) & Exponential Backoff
[ Raw Data Scraping & Encoding Fix ]
  ├── UTF-8 Force Encoding & HTML Noise Decompose
  └── Regex Filtering & Date Normalization (YYYY-MM-DD)
             │
             ▼  DB Schema Migration & Multi-DB Integration
[ Integrated SQLite DB (news.db + news_scraped.db) ] ◄── KoELECTRA Engine
             │
             ▼  Regional Group-by Aggregation (Filtered by Date)
[ Folium Choropleth Generator ] ──► GeoJSON Region Layer Mapping
             │
             ▼  Streamlit Cache Optimization (@st.cache_data)
[ Streamlit Interactive Dashboard ]

🚨 대표적 데이터 & DB 트러블슈팅 (Troubleshooting)

  • SQL 문법 에러 "no column named date" 트러블슈팅:

    • 원인: 기사 수집 날짜 필드가 DB 생성 스키마와 쿼리문 간에 date vs published_time으로 불일치하여 SQL 조회 에러 발생.
    • 해결: DB 컬럼 구조를 정제 재설계하고 published_time 컬럼을 명시적으로 추가하는 스키마 마이그레이션 스크립트를 작성하여 해결.
  • 경상뉴스 크롤러 데이터 파싱 에러 수정:

    • 원인: 특정 모바일/지역 언론사(경상뉴스 등)의 본문 DOM 구조 변경 및 날짜 텍스트 파싱 예외 발생.
    • 해결: BeautifulSoup 유연한 선택자(selectors) 리스트 도입 및 예외 처리 로직(Try-Except Fallback)을 강화하여 정상 파싱 처리.
  • Folium 렌더링 에러 & Streamlit 캐시 지연 해결:

    • 원인: Streamlit에서 날짜 필터를 변경해도 기존 캐시 데이터가 유지되어 지도의 뉴스 개수가 갱신되지 않는 현상.
    • 해결: @st.cache_data 함수의 인자값 동기화 및 Folium Map save/iframe 렌더링 수명주기를 보정하여 날짜 변경 시 즉시 갱신되도록 개선.

© Lee Chae-hyeon (chaehyeon42). All Rights Reserved.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages