콘텐츠로 이동

CSV 저장기능 추가하기

필요한 모듈 설치하기

!pip install openai
!pip install gradio

CSV로 저장하는 탭 기능 완성하기

import gradio as gr
import sqlite3
import pandas as pd

# 버튼 클릭 시 실행될 함수 정의
def button1_action():
    return select_db('기술지원')

def button2_action():
    return select_db('영업')

def button3_action():
    return select_db('생산')

# SQLite 데이터베이스에서 분야별로 데이터 가져오는 함수
def select_db(subject):

    # SQLite 데이터베이스에 연결 (파일이 없다면 자동으로 생성됨)
    conn = sqlite3.connect('customer.db')  # 'customer.db'는 데이터베이스 파일 이름

    # 데이터 조회
    query = 'SELECT * FROM as_list where subject = "' + subject + '"'
    df = pd.read_sql_query(query, conn)

    df = df.rename(columns={'title': '제목', 'subject': '분류', 'content': '내용'})
    return df    


# SQLite 데이터베이스에서 데이터 가져오는 함수
def get_data_from_db():

    conn = sqlite3.connect('customer.db')
    cursor = conn.cursor()

    cursor.execute("SELECT subject, COUNT(subject) FROM as_list GROUP BY subject")
    data = cursor.fetchall()

    # 데이터베이스 연결 종료
    conn.close()

    # 결과를 pandas DataFrame으로 변환
    df = pd.DataFrame(data, columns=["분류", "횟수"])
    return df

# CSV로 저장하는 함수 정의
def export_to_csv():

    # SQLite 데이터베이스에 연결 (파일이 없다면 자동으로 생성됨)
    conn = sqlite3.connect('customer.db')  # 'customer.db'는 데이터베이스 파일 이름

    # 결과를 DataFrame으로 변환
    # fetchall()을 사용하여 모든 행을 가져오고 pandas DataFrame으로 변환
    df = pd.read_sql_query("SELECT * FROM as_list", conn)

    # DataFrame을 CSV로 저장
    df.to_csv('customer.csv', index=False, encoding="cp949")

    # 데이터베이스 연결 종료
    conn.close()

    gr.Info("CSV로 저장하였습니다.")


with gr.Blocks() as demo:
    gr.Markdown("# 고객 요청 리스트")
    gr.Markdown("고객이 요청한 데이터를 표시합니다.")

    with gr.Tab("버튼으로 조회"):
        with gr.Row():
            button1 = gr.Button("기술지원")
            button2 = gr.Button("영업")
            button3 = gr.Button("생산")

        # 초기 실행
        df = select_db('기술지원')

        # 버튼 클릭 시 실행될 출력 필드
        output = gr.DataFrame(df, label="결과")            

        # 각 버튼에 클릭 이벤트와 출력 연결
        button1.click(fn=button1_action, outputs=output)
        button2.click(fn=button2_action, outputs=output)
        button3.click(fn=button3_action, outputs=output)

    with gr.Tab("필터로 조회"):
        with gr.Row():
            subject = gr.Dropdown(["기술지원", "영업", "생산"], value="기술지원", label="분류")

        # 초기 실행
        df = select_db('기술지원')

        # 버튼 클릭 시 실행될 출력 필드
        output = gr.DataFrame(df, label="결과")

        # 드롭다운 값 변경 시 필터링된 데이터로 DataFrame 업데이트
        subject.change(fn=select_db, inputs=subject, outputs=output)

    with gr.Tab("통계 그래프"):

        df = get_data_from_db()

        # Y축의 값을 0 ~ 10사이로 설정
        with gr.Row():
            gr.BarPlot(df, x="분류", y="횟수", y_lim=[0, 10])

    with gr.Tab("CSV 저장"):
        with gr.Row():
            button4 = gr.Button("CSV로 저장하기")

        # 버튼에 클릭 이벤트 연결
        button4.click(fn=export_to_csv)

demo.launch()