Google Sheet와 파이썬 연동하기

computer-tool
google-sheet
dashboard
데이터 앱 만들기의 시작
Author

JS HUHH

Published

June 6, 2024

TL; DR

  • Google Sheet를 파이썬과 연동하는 방법을 알아보자.
  • 🔗LINK와 함께 참고하시라.

데이터 앱 만들기의 시작

데이터 앱을 만드는 최초의 단계는 데이터와 이를 다룰 도구(언어)의 연동이다. 별도로 DB를 만들지 않을 것이라면 데이터 소스는 아마도 엑셀 혹은 구글 시트와 같은 ‘스프레드시트’ 형태일 것이다. 당신이 소박한 용도의 데이터 앱을 만들기로 했다면 첫번째 단계가 여기다. 소박한 데이터 분석이 csv 등 데이터 파일을 로드하는 것에서 시작한다는 점을 떠올리면 좋겠다. 앱에 쓰일 데이터 소스를 매번 수동으로 업로드할 것이 아니라면 구글 스프레드 시트와 같은 온라인 서비스와 데이터를 연동할 수 있다면 좋을 것이다. 활용할 데이터는 외부에서 별도로 관리하고 앱은 해당 데이터를 받아서 분석하고 시각화하는 방식으로 운영하려는 것이 의도이다.

거두절미하고 파이썬과 구글 스프레드 시트는 어떻게 연동하면 될까? 이 포스트 역시 이 내용을 까먹을 미래의 나놈을 위한 것이다.

기본적인 내용은 LINK를 참고했다.

Google Sheet API 설정

Google Cloud Console에서 프로젝트 생성

구글 클라우드 콘솔로 가서 새 프로젝트를 적절하게 생성하자. 계정이 없다면 적당히 생성하면 된다.

 

Figure 1: 프로젝트를 생성하자.

 

API 활성화

API를 활성화해야 한다. API를 활성화하는 메뉴에서 Figure 2와 같이 두 개의 API를 활성화하자.

활성화해야 하는 API는 Google Drive API, Google Sheets API 두 가지이다.

 

Figure 2: Google Drive와 Google Sheet API 활성화

 

사용자 인증 정보 만들기

  • 구글 시트에 접근하기 위해서는 “서비스 계정”(Figure 3)으로 만들도록 하자.
  • 사용자 인증 정보 유형은 “어플리케이션 데이터”이다(Figure 4).
Figure 3: 서비스 계정 활성화

 

Figure 4: API 설정

키 생성하기

  • Figure 5에서 생성된 서비스 계정을 클릭한다.
  • Figure 6에서 보듯이 “키” 탭에서 JSON으로 생성하면 해당 JSON 파일이 다운로드 된다. 파이썬이 구글 시트에 접근하는데 파일을 활용한다. 이 녀석은 패스워드와 같은 것이므로 노출되지 않도록 주의하자.
Figure 5: 로봇 계정 선택

 

Figure 6: 키 생성

public 계정의 github에 크리덴셜 파일을 넣어두는 것이 가장 흔한 실수이다. 이 점 각별히 주의하도록 하자. public 계정이라도 마스킹 처리가 부분적으로 가능하고, private 계정이라고 해도, GitHub Pages 서비스는 가능하다.

Google Spread Sheet 공유하기

구글 스프레드 시트의 상단의 공유 버튼에서 앞서 크리덴셜을 생성한 로봇 유저를 공유자로 지정한다.

파이썬에서 작업하기

패키지 설치 등의 과정은 생략하고 테스트할 수 있는 코드만 간략하게 소개한다.

  • 아래의 패키지를 설치하고 임포트한다. 구글 계정과의 연동을 위한 google-api-python-client, oauth2client 그리고 구글 스프레드 시트를 다루기 위한 gspread 패키지가 필요하다.
#!pip3 install gspread
#!pip3 install --upgrade google-api-python-client oauth2client

#importing the required libraries
import gspread
import pandas as pd
from oauth2client.service_account import ServiceAccountCredentials
  • 크리덴셜을 활용해서 해당 구글 스프레드 시트에 접근할 수 있다.
    • add_json_file_here.json에 앞서 다운로드한 JSON 파일을 넣으면 된다.
# define the scope
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

# add credentials to the account
creds = ServiceAccountCredentials.from_json_keyfile_name('add_json_file_here.json', scope)

# authorize the clientsheet 
client = gspread.authorize(creds)
  • ’구글 스프레드 서비스 이름’에는 접근할 구글 스프레드 시트의 타이틀을 넣는다. 왼쪽 상단에 있다.

  • 서비스 내의 개별 시트의 선택은 아래 get_worksheet(0)로 한다. 0번이 첫번째 위치한 시트이다. 시트의 위치가 바뀌면 이 역시 따라서 바뀌어야 한다.

# get the instance of the Spreadsheet
sheet = client.open('구글 스프레드 서비스 이름')

# get the first sheet of the Spreadsheet
sheet_instance = sheet.get_worksheet(0)
  • get_all_records()를 통해 모든 데이터를 가져올 수 있고, 파이썬 dictionary 형태로 저장된다. 이를 pandas의 DataFrame으로 변환하면 된다.
# get all the records of the data
records_data = sheet_instance.get_all_records()

# convert the json to dataframe
records_df = pd.DataFrame.from_dict(records_data)