본문 바로가기
자동포스팅

자동포스팅을 위한 파이썬-PANDAS 사용 데이터 저장방법

by 마자동 2022. 11. 8.
반응형

바로 업로드

쿠팡 상품 데이터를 추출하여 배열로 받은 다음 바로 글을 등록하는 방식으로 자동포스팅을 진행해왔는데요. 문제점이 몇가지 발견되었고 데이터를 관리할 필요가 있어 추출한 데이터를 저장하는 방식으로 변경 및 저장된 데이터를 하나씩 긁어와서 포스팅하는 방식으로 변경하려고 개발 중에 있습니다. 

PANDAS

pandas 라이브러리는 데이터를 excel, csv 등 여러 방식으로 저장하는 서비스를 제공하기에 판다스를 사용하기로 하였고 데이터를 저장 중 몇가지 문제점을 해결하고 그에 대해 적어보고자 합니다. 

dataframe or series?

추출한 데이터를 간단하게 파일로 저장하고자 데이터프레임 사용까지 필요없었습니다. 
series를 사용한 간단한 방법으로 데이터를 csv로 저장하였습니다. 

반응형

코드

import pandas as pd
import os.path   

# 새로운 데이터 저장
new_data = pd.Series(['111', '222', '333', '444', '555', '666', '777'], index=['수집날짜', '상품타이틀', '구매만족도', '상품평 수', '상품평', '썸네일URL', '라다이렉션URL']).to_frame().T
print('새로운 데이터 저장 완료!')

new_data.to_csv('/data_file/file_' + 'test' + '.csv', index=False)
print('새로운 파일 생성 완료!')

새로운 파일을 생성합니다. 테스트 중이라 파일명을 file_test.csv로 생성하였지만 실제 구동 시에는 test 위치에 날짜를 박을 생각입니다. 
위 코드에서 중요한 부분은 시리즈(Series) 함수를 사용하여 데이터를 저장하고 파일(csv)을 생성할 때 자동으로 인덱스 컬럼이 생성되는데 파일을 생성할 때 index=False 조건을 주어 자동 인덱스 생성을 방지합니다. 이부분을 넣지 않으면 concat 함수로 다음 데이터를 계속 쌓을 때마다 자동 index 컬럼이 생성되어 추후 데이터를 불러올 때 위치를 찾을 수 없습니다. 
또 중요한 부분은 .to_frame().T 조건을 넣어 데이터가 가로로 쌓일 수 있게 했습니다. 나중에 데이터 추출하기 좋게 하기 위함이죠. 보기에도 편하구요. 

위와 같이 자동 인덱스 컬럼이 추가되지 않고 파일을 생성합니다. 

import pandas as pd
import os.path   

# 새로운 데이터 저장
new_data = pd.Series(['1111', '2222', '3333', '4444', '5555', '6666', '7777'], index=['수집날짜', '상품타이틀', '구매만족도', '상품평 수', '상품평', '썸네일URL', '라다이렉션URL']).to_frame().T
print('새로운 데이터 저장 완료!')

# 기존 데이터 불러오기
all_data = pd.read_csv('/data_file/file_' + 'test' + '.csv')
print('기존 데이터 불러오기')

# 새로운 데이터와 기존 데이터 합치기
all_data = pd.concat([all_data, new_data], ignore_index=True)
all_data.to_csv('/data_file/file_' + 'test' + '.csv', index=False)
print('기존 데이터에 새로운 데이터 통합 완료!')

데이터를 1건만 저장한다면 이런 고민은 하지 않았을 겁니다.  수집된 데이터를 같은 파일에 저장해봅니다. 새로운 데이터를 추출해옵니다. 그리고 기존데이터를 불러와 concat함수로 데이터를 합칩니다. 
중요한 부분은 concat한 데이터는 파일로 저장할 때 index=False 조건을 주어 인덱스가 자동 생성되지 않게 합니다. 
또한 concat 시 ignore_index=True 조건으로 인덱스를 무시합니다. 

위와 같이 자동 인덱스 생성 없이 데이터를 차곡차곡 쌓을 수 있습니다. 이렇게 데이터가 정형하게 쌓으면 불러올 때 for문이나 기타 방법으로 편하게 불러올 수 있겠지요. 

실제 구동 결과

상품 3건을 돌려본 결과 데이터를 잘 수집하네요. 상품평이 너무 길어 모두 캡쳐하진 못했습니다. 

주의사항

csv 데이터 정렬하겠다고 다음 명령어 입력하게 되면 인덱스가 꼬여서 데이터 전체가 말려버립니다. 해당 명령은 쓰지 마세요. 참고로 저는 VScode 플러그인 중 Rainbow CSV를 사용중입니다. 

더 좋은 방법이 있다면 공유바래요 ~~ 

 

 

반응형

댓글