Compute Engine

Streamlit와 BigQuery 활용한 배포 (API)

사전학습

실습 순서

  • 서울시 부동산 실거래가를 API 크롤링으로 가져온다.
  • JSON 형태의 데이터를 pandas 데이터프레임으로 변환한다.
  • 데이터프레임을 BigQuery에 전체 데이터를 저장한다.
  • 저장된 데이터프레임을 BigQuery에서 일부 컬럼만 불러온다.

실습 1 - API 크롤링에서 빅쿼리로 데이터 저장

  • .streamlit/secrets.toml 을 열고 아래와 같이 설정한다.
  • seoul_api_key는 서울 열린데이터 광장을 의미한다.
  • gcp_service_account 아래 내용은 api keyjson 파일로 열면 확인할 수 있다.
# .streamlit/secrets.toml
[public_data_api]
seoul_api_key = 'your_api_key'

[gcp_service_account]
type = "service_account"
project_id = "your_project_id"
private_key_id = "your_private_key_id"
private_key = "your_private_key"
client_email = "your_client_email"
client_id = "your_client_id"
auth_uri = "https://accounts.google.com/o/oauth2/auth"
token_uri = "https://oauth2.googleapis.com/token"
auth_provider_x509_cert_url = "https://www.googleapis.com/oauth2/v1/certs"
client_x509_cert_url = "your_client_x509_cert_url"
  • utils.py를 생성하고 아래와 같이 설정을 저장한다.
import streamlit as st
from google.oauth2 import service_account

SERVICE_KEY = st.secrets.public_data_api.seoul_api_key

# Create API client.
credentials = service_account.Credentials.from_service_account_info(
    # Very Important Point
    st.secrets["gcp_service_account"]
)
  • [aptCrawling.py](http://aptCrawling.py) 를 아래와 같이 작성한다.
# -*- coding:utf-8 -*-
import requests
import pandas as pd

# Google Cloud
from google.cloud import bigquery
import pandas_gbq

# API Key Settings
from utils import credentials, SERVICE_KEY
client = bigquery.Client(credentials=credentials)

def aptCrawling(SERVICE_KEY):
    data = None
    for j in range(1,2):
        url = f'http://openapi.seoul.go.kr:8088/{SERVICE_KEY}/json/tbLnOpendataRtmsV/{1+((j-1)*1000)}/{j*1000}'
        print(url)
        req = requests.get(url)
        content = req.json()
        con = content['tbLnOpendataRtmsV']['row']
        result = pd.DataFrame(con)
        data = pd.concat([data, result])
    data = data.reset_index(drop=True)
    data['DEAL_YMD'] = pd.to_datetime(data['DEAL_YMD'], format=("%Y%m%d"))

    return data

def save2BQ(data):
    table_name = "seoul.realestate"
    project_id = "streamlit-dashboard-369600"

    # Save the DataFrame to BigQuery
    pandas_gbq.to_gbq(data,
                      table_name,
                      project_id=project_id, if_exists='replace')

if __name__ == "__main__":
    data = aptCrawling(SERVICE_KEY)
    save2BQ(data)
  • 아래와 같이 실행해보자.
$ python aptCrawling.py
http://openapi.seoul.go.kr:8088/your_api_key/json/tbLnOpendataRtmsV/1/1000
100%|████████████████████████████████████████████████████████████| 1/1 [00:00<?, ?it/s]
  • 이번에는 BigQuery 콘솔에서 확인해본다.

Untitled

Google Clound & WSL2 Ubuntu 20.04 개발환경 설정

개요

  • GCP에서 개발환경을 설정하도록 한다.
  • Local PC에서 GCP로 접속을 하도록 한다.

사전준비

  • WSL2 Ubuntu 설치 과정은 여기에서 다루지 않는다.

Untitled

개발환경 설치

  • Python3 설치한다. (본인에게 맞는 언어를 선택한다)
sudo apt update
sudo apt install -y python3 python3-pip
python3

최신 버전(417.0.1) gcloud CLI 설치

$ sudo apt-get install apt-transport-https ca-certificates gnupg
  • 패키지 소스로 gcloud CLI 배포 URI를 추가합니다. 배포판에서 서명 옵션을 지원하는 경우 다음 명령어를 실행합니다.
$ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
  • Google Cloud 공개 키를 가져옵니다. 배포판의 apt-key 명령어가 --keyring 인수를 지원하는 경우 다음 명령어를 실행합니다.
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
  • gcloud CLI를 업데이트하고 설치합니다.
$ sudo apt-get update && sudo apt-get install google-cloud-cli

Shell 재시작 후 설치 확인

  • 다음 명령어를 통해 설치가 정상적으로 되었는지 확인한다.
$ exec -l $SHELL
$ gcloud version
Google Cloud SDK 419.0.0
alpha 2023.02.17
beta 2023.02.17
bq 2.0.85
bundled-python3-unix 3.9.16
core 2023.02.17
gcloud-crc32c 1.0.0
gsutil 5.20

시작하기

  • 시작하려면 [gcloud init](https://cloud.google.com/sdk/gcloud/reference/init?hl=ko)을 실행합니다.
$ gcloud init
Welcome! This command will take you through the configuration of gcloud.

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.                                                                      
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).

You must log in to continue. Would you like to log in (Y/n)?  Y

Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?response_type=...

Enter authorization code: your_code
You are logged in as: [your_email@gmail.com].

Pick cloud project to use: 
 [1] Enter a project ID
 ...
 [2] Create a new project
Please enter numeric choice or text value (must exactly match list item):  

Your current project has been set to: [your_project_name].

...

Some things to try next:

* Run `gcloud --help` to see the Cloud Platform services you can interact with. And run `gcloud help COMMAND` to get help on any gcloud command.
* Run `gcloud topic --help` to learn about advanced features of the SDK like arg files and output formatting
* Run `gcloud cheat-sheet` to see a roster of go-to `gcloud` commands.

WM 설정

  • 아래 화면에서 VM을 선택한다.

Untitled