
# 뉴스 필터링 및 시각화 도구

이 애플리케이션은 CSV 파일을 업로드하여 뉴스 데이터를 필터링하고, 뉴스 제목 길이에 대한 히스토그램을 생성하며, 선택된 뉴스의 상세 정보를 보여줍니다.

## 기능
1. CSV 파일 업로드
2. 키워드를 통한 뉴스 필터링
3. 뉴스 제목 길이에 대한 히스토그램 생성
4. 선택된 뉴스의 상세 정보 표시

## 요구 사항
- Python 3.6 이상
- 다음 Python 패키지들:
  - streamlit
  - pandas
  - plotly

## 설치

다음 명령어를 사용하여 필요한 패키지를 설치할 수 있습니다:

```bash
pip install streamlit pandas plotly
```

## 사용 방법

1. `app.py` 파일을 생성하고 아래의 코드를 복사하여 붙여넣습니다:

    ```python
    import streamlit as st
    import pandas as pd
    import plotly.express as px

    # CSV 파일을 업로드하고 데이터를 로드하는 함수
    def load_data():
        uploaded_file = st.file_uploader("CSV 파일을 업로드하세요", type=["csv"])
        if uploaded_file is not None:
            df = pd.read_csv(uploaded_file)
            return df
        return None

    # 업로드된 데이터가 있다면 필터링하는 함수
    def filter_data(df):
        keyword = st.text_input("키워드로 뉴스 필터링")
        if keyword:
            filtered_df = df[df.apply(lambda row: row.astype(str).str.contains(keyword, case=False).any(), axis=1)]
            st.write(f"'{keyword}'에 대한 필터링 결과")
            st.dataframe(filtered_df)
            return filtered_df
        return df

    # 뉴스 제목 길이에 대한 히스토그램을 생성하는 함수
    def plot_histogram(df):
        df['title_length'] = df['Title'].apply(len)
        fig = px.histogram(df, x='title_length', title='뉴스 제목 길이 히스토그램')
        st.plotly_chart(fig)

    # 선택된 뉴스의 상세 정보를 보여주는 함수
    def show_news_details(df):
        if not df.empty:
            selected_title = st.selectbox("뉴스를 선택하세요", df['Title'])
            selected_news = df[df['Title'] == selected_title].iloc[0]
            st.write("선택된 뉴스 상세 정보")
            st.write(f"**제목:** {selected_news['Title']}")
            st.write(f"**URL:** {selected_news['URL']}")

    # 메인 함수: 데이터 로딩, 필터링, 시각화 및 뉴스 상세 정보 표시
    def main():
        try:
            data = load_data()
            if data is not None:
                st.write("업로드된 뉴스 데이터")
                st.dataframe(data)
                
                filtered_data = filter_data(data)
                if filtered_data is not None:
                    plot_histogram(filtered_data)
                    show_news_details(filtered_data)
        except Exception as e:
            st.error(f"오류가 발생했습니다: {e}")

    if __name__ == "__main__":
        main()
    ```

2. Streamlit 애플리케이션을 실행합니다:

    ```bash
    streamlit run app.py
    ```

3. 웹 브라우저에서 `localhost:8501`로 이동하여 애플리케이션을 확인합니다.

## CSV 파일 형식

업로드할 CSV 파일은 다음과 같은 형식을 가져야 합니다:

| Title              | URL               |
|--------------------|-------------------|
| 뉴스 제목 1        | http://example.com/1 |
| 뉴스 제목 2        | http://example.com/2 |
| ...                | ...               |

## 사용 예시

1. CSV 파일을 업로드합니다.
2. 키워드를 입력하여 뉴스를 필터링합니다.
3. 뉴스 제목 길이에 대한 히스토그램을 확인합니다.
4. 뉴스 목록에서 제목을 선택하여 상세 정보를 확인합니다.

## 기여

기여를 환영합니다! 버그 보고, 기능 요청, 풀 리퀘스트는 GitHub 저장소를 통해 제출해 주세요.

## 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
