Programming

[Python] Google spread sheet 로 데이터 관리하기

better_coco 2022. 8. 21. 12:30

 

나중에 python 을 활용해서 주식 데이터나 부동산 데이터를 분석하는 법을 다룰 테지만, 이번 포스팅에서는 결과를 어떻게 정리할 수 있을까에 대해 고민해보자.
분석 알고리즘을 정해두고 데이터만 업데이트해서 결과를 뽑고 싶다면, 우리가 흔히 말하는 "자동화"를 시켜야한다.
서버를 활용해서 주기적으로 데이터를 수집/분석할 수 있도록 하고, 그 결과 역시 지속적으로 관리를 해줘야한다.
csv 또는 xlsx 등 파일 형태로 결과를 관리할 수도 있지만 다른 기기를 통해서도 결과를 확인하고 싶다면 google spread sheet 를 활용하는 것을 추천한다.

그럼 필요한 package 설치부터 예제 코드까지 한 번 살펴보자.

1. package 설치
- 아래에 있는 명령어를 활용해, 세 가지 package 를 설치해주면 된다.

  • pip install gspread
  • pip install oauth2client
  • pip install gspread_dataframe

한 번에 여러 package 를 설치하려면, 아래처럼 package 명을 공백으로 구분해주면 된다.

  • pip install gspread oauth2client gspread_dataframe

 

2. goole spread sheet 에 쓰기 권한을 가질 수 있도록 setting
- google spread sheet API 를 활용하기 위해, 우선 권한을 부여받아야 한다. 아래 링크에 접속해서 서비스 계정 및 비공개 key 를 생성해보자. 

프로젝트 생성 - Step 1
프로젝트 생성 - Step 2
프로젝트 생성 - Step 3


2) 사용자 인증 정보 추가 (만든 프로젝트 선택 후)

사용자 인증 정보 추가 - Step 1
사용자 인증 정보 추가 - Step 2
사용자 인증 정보 추가 - Step 3
사용자 인증 정보 추가 - Step 4


3) 비공개 key 생성 (만든 계정 선택한 후)

비공개 key 설정 - Step 1
비공개 key 설정 - Step 2

이렇게 따라하면 json 파일로 key 가 생성되고, 로컬에 저장된다. 그 중 client_email 부분을 따로 복사한다.

생성된 key 내부 내용


4) Google spread sheet 생성 및 마무리 설정
- Google spread sheet 를 생성하고, 복사한 client_email 에게 공유한다.
- 생성한 sheet 의 url 을 복사해서 다운받았던 key json 파일 함께 아래 코드에 추가하면, spread sheet API 로 접근하여 부여받은 권한을 사용할 수 있다. (뷰어, 편집자 등)

spread sheet 에 key 의 client_email 공유
생성한 spread sheet 의 url

 

 

3. 예제코드
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import os
from gspread_dataframe import set_with_dataframe

def write(sheetname, df):
    scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive',]
    
    json_file_name = os.path.join(os.getcwd(), '다운받은 json 파일명') #다운받은 json file 위치
    credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file_name, scope)
    gc = gspread.authorize(credentials)
    spreadsheet_url = '위에서 복사한 sheet 의 url'
    
    #document 가져오기 
    doc = gc.open_by_url(spreadsheet_url)

    #sheet 선택하기
    worksheet = doc.worksheet(sheetname)
    set_with_dataframe(worksheet, df)
    
# 함수 호출
# df 라는 이름의 dataframe 이 있다고 가정
write('sheet1', df)

 

예제로 함수를 만들어놨으니, 마지막 코드처럼 함수를 호출할 때 sheet 정보와 쓰고자 하는 데이터를 넘겨주면 된다.