같은 질문에 일관된 답변이 필요한 분들에게 이 해결 방법을 공유합니다.
생성형 AI의 작업 결과를 보고 놀랄 때가 많습니다. 며칠을 고생했던 엑셀 데이터 분석을 몇 마디 프롬프트로 해결하고, 엄두도 내지 못했던 그래프 작업도 척척 해내는 것을 보고 이제 고생 끝!이라고 생각을 했던 적이 많았습니다. 하지만, 10번 중 8번은 정상적인 결과가 나오지만, 2번은 틀린 결과가 나오는 등 업무에 사용하기에는 부족한 도구라는 생각이 드는 경우도 많았습니다.
1년 넘게 다양한 생성형 AI 도구를 사용해본 결과 그나마(?) ChatGPT 4-o가 적절하게 데이터를 분석하지만 70~80% 정도의 정확성을 가지는 것 같았습니다. 프롬프트가 부정확해서 잘못된 결과가 나오는 경우도 많았습니다. 하지만, 같은 프롬프트에서 다른 결과가 나올 때는 어떻게 해결해야 할지 난감한 생각이 들기도 했습니다.
여러 가지 시도를 해봤는데, 프로그래밍을 통한 작업이 가장 확실했습니다. 프로그래밍을 할 줄 모르신다고요? 상관없습니다. ChatGPT가 코드를 알려주고, 해당 코드를 실행하는 방법도 알려줍니다. 오늘 설명하는 방법이 조금 복잡할 수도 있지만 꼼꼼하게 살펴보고 실습한다면, 데이터 분석 업무에 정말 많은 도움을 얻을 수 있을 겁니다.
1차 작업 - ChatGPT로 데이터 변환하기
회사에서 관리하는 대부분의 정형 데이터는 엑셀이나 csv 파일 형태로 저장돼 있지만, 간혹 HTML이나 이미지 형태로 정리된 자료도 있습니다. 이러한 종류의 데이터는 분석을 위해서 OCR 혹은 수작업을 거쳐 엑셀 혹은 csv 파일로 만들어야 합니다. 하지만, 변환 작업에 시간이 많이 걸리고 오류가 발생할 때가 많습니다. 이럴 때 생성형 AI를 활용해보세요.
간단한 예제를 살펴보겠습니다. 위키북스에서 판매 중인 전자책 도서 판매 내역은 각 서점 데이터를 크롤링해서 다음과 같은 HTML 파일 형태로 저장하고 있는데요. 아래 데이터를 엑셀로 변환하는 작업을 진행해보겠습니다.
먼저 2024년 상반기 전자책 판매내역이 정리된 ‘2024상반기_전자책.html’ 파일을 업로드 하고, 아래와 같은 프롬프트를 입력하고 작업을 요청하면 됩니다. (테스트를 위해서 일부 데이터만 정리된 파일로 실습을 진행하겠습니다).
당신은 능력있는 프로그래머입니다. 아래 지시 사항을 참고해서 업로드한 파일에 있는 내용을 엑셀 파일로 만들어주세요.
- 0~9 숫자는 정수형태로 변환해야 합니다.
- '-' 로 표시된 부분도 정수 0 으로 표시해주세요
그리면 다음과 같은 작업 완료 메시지와 함께 엑셀 파일을 다운받을 수 있는 링크가 제공됩니다.
해당 파일을 다운 받아서 검증한 결과 안타깝게도 다음과 같이 일부 데이터만 엑셀 파일로 변환이 됐습니다.
다시 다음과 같이 프롬프트를 추가해서 작업을 요청하겠습니다. 이번에는 작업해야 할 범위를 명확하게 개수로 지정을 했습니다.
업로드한 html 파일에는 총 10개의 테이블이 있고, 해당 테이블에 있는 모든 데이터가 엑셀 파일로 변환이 되야 합니다. 작업을 마무리한 후 총 10개의 테이블 데이터가 모두 변환이 됐는지 확인해주세요
작업이 완료되면 완료 메시지와 함께 다시 엑셀 파일을 내려받을 수 있는 링크를 제공해줍니다.
엑셀 파일을 다운 받은 후에 데이터를 확인해보니 10개의 데이터가 정확히 시트별로 저장된 것을 확인할 수 있었습니다.
아마 두 번째 프롬프트에서 10개의 테이블이 있다는 것을 명확히 지정했기 때문에 제대로 된 결과가 나온 것 같습니다. 그럼 이번에는 첫 번째 프롬프트와 두 번째 프롬프트를 합쳐서 작업을 진행해 보겠습니다. 새로운 ChatGPT 창을 열고 다음과 같이 첫 번째 프롬프트와 두 번째 프롬프트를 합쳐서 작업을 요청합니다.
당신은 능력있는 프로그래머입니다. 아래 지시 사항을 참고해서 업로드한 파일에 있는 내용을 엑셀 파일로 만들어주세요.
- 업로드한 html 파일에는 총 10개의 테이블이 있고, 해당 테이블에 있는 모든 데이터가 엑셀 파일로 변환이 되야 합니다.
- 작업을 마무리한 후 총 10개의 테이블 데이터가 모두 변환이 됐는지 확인해주세요
- 0~9 숫자는 정수 형태로 변환해야 합니다.
- '-' 로 표시된 부분도 정수 0으로 표시해주세요
작업 완료 후 엑셀 파일 다운로드 링크를 클릭해서 데이터를 확인한 결과 정확하게 엑셀 파일로 변환된 것을 확인할 수 있습니다. 지금까지의 작업 결과로 보면 생성형 AI를 사용할 때 가능하면 정확한 요구사항을 프롬프트에 반영하는 것이 제대로된 결과를 얻기 위해서 가장 중요한 사실이라는 점을 알 수 있습니다.
하지만 조금 더 복잡한 작업이 진행된다면 ‘정확한 요구사항’을 정리하기가 너무 어렵습니다. 또한 정확하게 요구사항을 정리했다고 해도 제대로 된 결과가 나오지 않는 경우도 많고요. 결과가 일정하지 않다면 업무에서 사용할 수는 없는데요, 이럴때 지금부터 제안드리는 방법을 사용하면 항상 같은 값을 얻을 수 있습니다.
프로그래밍을 모른다고요? 걱정하지 않아도 됩니다.
2차 작업 - 파이썬 코드 요청
작업은 간단합니다. 실행 결과가 정확하다는 것을 확인했으면 다음과 같은 프롬프트로 ChatGPT에게 파이썬 코드를 요청합니다.
지금 작업한 사항을 파이썬 코드로 생성해주세요
프롬프트를 실행하면 다음과 같은 파이썬 코드가 간단한 설명과 함께 나옵니다.
이 코드의 의미를 잘 모르겠다면, 설명을 요청하세요
코드를 조금 자세히 설명해주세요
다음과 같이 친절하게 코드를 설명해줍니다. 이 코드는 HTML 파일에서 테이블 데이터를 추출하여 엑셀 파일로 변환하는 과정입니다. 각 단계가 어떻게 작동하는지 조금 더 자세히 설명해드리겠습니다.
1. import pandas as pd 와 from bs4 import BeautifulSoup
- Pandas: 데이터를 다루는 데 매우 유용한 라이브러리입니다. 여기서는 테이블 데이터를 읽고 변환한 후 엑셀 파일로 저장하는 데 사용됩니다.
- BeautifulSoup: HTML 파일을 파싱(구조적으로 분석)하여 테이블과 같은 특정 요소를 쉽게 찾고 추출할 수 있게 해줍니다.
2. with open('path_to_your_html_file.html', 'r', encoding='utf-8') as file:
- HTML 파일 읽기: open 함수를 사용하여 HTML 파일을 읽어들입니다. utf-8 인코딩은 한글과 같은 비ASCII 문자를 처리하기 위해 사용됩니다.
- 이 파일을 soup이라는 BeautifulSoup 객체로 변환하여 HTML 구조에 접근할 수 있게 합니다.
3. tables = soup.find_all('table')
- HTML에서 테이블 찾기: soup.find_all('table')은 HTML 문서에서 태그를 모두 찾아 리스트로 반환합니다. 이 리스트에는 문서 내의 모든 테이블이 포함됩니다.
4. 각 테이블을 pandas DataFrame으로 변환
dataframes = []
for table in tables:
df = pd.read_html(str(table))[0]
df.replace('-', 0, inplace=True)
df = df.apply(pd.to_numeric, errors='ignore')
dataframes.append(df)
- pd.read_html(str(table)): Pandas의 read_html 함수는 HTML 문자열에서 테이블 데이터를 DataFrame으로 읽어옵니다. [0]은 read_html이 리스트로 반환하기 때문에 첫 번째 테이블만 선택하는 코드입니다.
- df.replace('-', 0, inplace=True): 테이블의 데이터에서 -로 표기된 항목을 0으로 변환합니다. inplace=True는 원래 DataFrame에 직접 변경 사항을 적용한다는 의미입니다.
- df.apply(pd.to_numeric, errors='ignore'): 이 함수는 DataFrame의 모든 데이터를 숫자형으로 변환하려고 시도합니다. 만약 문자열 등 변환이 불가능한 값이 있으면 무시(errors='ignore')됩니다.
- dataframes.append(df): 변환된 DataFrame을 dataframes 리스트에 추가합니다.
5. 엑셀 파일로 변환
output_file_path = 'sales_data.xlsx'
with pd.ExcelWriter(output_file_path) as writer:
for i, df in enumerate(dataframes):
df.to_excel(writer, sheet_name=f'Table_{i+1}', index=False)
- pd.ExcelWriter(output_file_path): 이 객체는 여러 개의 DataFrame을 하나의 엑셀 파일에 여러 시트로 저장할 수 있게 해줍니다.
- df.to_excel: 각 테이블(DataFrame)을 엑셀 파일의 개별 시트로 저장합니다. sheet_name=f'Table_{i+1}'로 각 시트의 이름을 "Table_1", "Table_2"와 같이 지정합니다. index=False는 DataFrame의 인덱스를 엑셀 파일에 포함시키지 않겠다는 의미입니다.
- output_file_path: 엑셀 파일이 저장될 경로입니다. 여기서는 sales_data.xlsx라는 파일 이름을 사용하고 있습니다.
요약
이 코드는 HTML 파일에서 테이블을 찾아 변환하며, 특히 다음과 같은 작업을 수행합니다:
- HTML 파일을 읽고, 테이블을 추출합니다.
- 값을 0으로 변환하고 숫자 데이터를 정수로 변환합니다.
- 각 테이블을 엑셀 파일의 개별 시트로 저장합니다.
이 방식은 HTML에 포함된 여러 개의 테이블을 처리하고, 모든 데이터를 엑셀 파일로 변환하는 데 매우 유용합니다.
3차 작업 - 파이썬 코드 실행
코드 실행은 구글 코랩(https://colab.research.google.com/)이라는 도구를 활용해서 진행하겠습니다. 구글 코랩은 구글에서 제공하는 파이썬 프로그래밍 도구로 웹 상에서 실행이 가능하므로 따로 복잡한 설치 절차가 필요없습니다. 또한, 간단한 작업은 무료로 실행이 가능해서 초보자에게 강력하게 추천하는 도구입니다.
구글 코랩 사용법은 인터넷에 정말로 많이 있는데요, 구글 코랩 경험이 없는 분이라면 우선 아래 블로그 글을 간단하게 읽어보기 바랍니다.
Google Colab 기초(클라우드에서 Python 프로그래밍 시작하기): https://bit.ly/3zILWWC
자, 그럼 ChatGPT에 다음과 같이 작업을 요청합니다.
지금 생성한 코드를 구글 코랩에서 실행하려고 합니다. 방법을 친절하게 알려주세요
ChatGPT는 친절한 설명과 함께 단계별로 해야할 작업을 알려줍니다.
이대로 따라해도 되지만 프로그래밍 경험이 많지 않거나, 한번에 해결하기를 원한다면 다음과 같이 다시 요청을 합니다.
하나의 구글 코랩 파일로 실행할 수 있는 방법을 알려주세요
이제 ChatGPT에서 다음과 같이 한꺼번에 실행할 수 있는 코드를 제공해줍니다. 화면 우측에 있는 [코드 복사] 부분을 클릭해서 코드를 복사합니다.
다음으로 구글 코랩(https://colab.research.google.com/) 사이트로 들어가서 [+ 새 노트] 버튼을 클릭합니다.
이어서 나오는 다음 창의 회색 상자에서 Ctrl + V 키를 눌러 앞서 복사했던 코드를 붙여넣기 합니다.
붙여 넣기가 마무리 됐다면 [런타임] 메뉴의 [모두 실행] 부분을 클릭해서 프로그램을 실행합니다.
프로그램이 정상적으로 실행이 되면서 하단에 창이 나옵니다. [파일 선택] 버튼을 클릭해서 작업하려는 파일(2024상반기_전자책.html)을 선택해서 업로드하면 계속 작업이 진행됩니다.
결과 엑셀 파일이 다운되고 다음과 같은 메시지가 나오면서 작업이 완료됩니다. 다운 받은 엑셀 파일이 정상이라는 것을 확인했으면 구글 코랩에 convertHTML.ipynb라고 파일을 저장합니다. 이제 해당 파일을 불러서 언제든지 작업을 수행할 수 있습니다.
작업 중 오류가 날 수도 있고, 잘못된 결과가 나올 수도 있습니다. 그때마다 ChatGPT에게 고쳐달라고 해보세요. 불평 한마디 없이, 바로바로 결과를 보여줄 겁니다.
이처럼 ChatGPT에게 데이터 분석을 바로 요청할 수도 있지만, 프로그래밍을 통해 작업한다면 항상 같은 결괏값을 얻을 수 있고, 다양한 데이터 분석 업무에 도움을 받을 수 있습니다. ChatGPT를 활용하여 데이터를 분석하는 더 자세한 방법이 궁금하다면 아래 도서를 참고해주세요.
AI로 인해 일을 하는 방법과 해야할 일이 바뀌고 있습니다.
위키북스에서는 “미래 소년 코난” 프로젝트를 통해서 조금씩 업무를 변화시키고 있으며, 그 과정을 글로 정리했습니다.
생성형 AI로 여러분의 고민을 해결하는 데 조금이나마 도움이 되길 기대합니다.