본문 바로가기
클라우드

[GCP] 빅쿼리와 연동해서 스트림릿 페이지로 확인하기

by 포 키 2023. 10. 18.
728x90

 

 

오늘은 구글 클라우드를 빅쿼리와 연동시키고, 스트림릿 페이지를 통해서 확인하는 과정에 대해 배웠다.

솔직히 어제 내용보다 오늘 내용이 더 정신없이 머리에 남은 것 같다.

포스팅 준비를 안하고 수업만 따라가서인지 아니면 집중이 잘 안됐던건지 오늘 별건 없지만, 어려웠다..

그래도 정신차리고 정리한걸 남겨보겠다!

 

 

0. 루커 스튜디오 연결하기 - 별첨

루커 스튜디오의 경우에는 차트 같이 활용하기가 매우 간편한 툴이다.

굳이 파이썬, R 등으로 힘들게 표현하지 않아도 프로그램으로 간단하게 할 수 있는 장점이 있다.

단, 구글 클라우드 메뉴바에서는 프로버전이나 한달 무료 체험 등으로만 되어 있기 때문에 아래 링크로 접속해주자

https://lookerstudio.google.com/

 

Looker Studio Overview

Connect Easily access a wide variety of data. Looker Studio’s built-in and partner connectors makes it possible to connect to virtually any kind of data. See what data you can access Visualize Turn your data into compelling stories of data visualization

lookerstudio.google.com

 

들어가서 구글 계정으로 로그인을 해주고, 빈 보고서를 누르면 처음이라면 계정 설정이 있을 것이다.

대충 설정해주고 보고서 탭으로 이동해도 된다.

아래의 창이 나온다면 여기서 다양하게 광고건들에 대한 마케팅에 활용가능한 부분들이 있다.

디지털 마케터가 되기 위해서는 꼭 사용하는 것이 좋다고 한다.

 

 

그중 구글 애널리틱스를 연결시켜봤다.

 

 

 

 

1. 빅쿼리 연동하기

먼저 구글 클라우드 메뉴바에서 빅쿼리를 찾아서 눌러준다.

빅쿼리 창이 열렸다면, 데이터 세트를 생성하고, 테이블을 만들어줘야한다.

데이터 세트는 이전에 생성한 인스턴스에서 점3개 메뉴를 눌러서 생성하면된다.

위치 유형은 리전으로, 위치는 서울로 한다.

위치(국가)가 다르면 추후에 문제가 발생할 수 있으니 애초에 서울로 설정해두자!

 

 

생성한 데이터세트에서 테이블을 생성하자

나는 수업중에 예시로 참고를 한 것이라서 붓꽃데이터 csv 파일을 사용했다.

혹시나 예시로 사용해보고 싶은 사람들을 위해 csv 파일을 업로드 해두겠다.

 

iris.csv
0.00MB

 

 

이렇게 하면 일단 테이블 생성까지 끝이다!

그리고 보고서에 데이터를 추가해주자

 

 

정상적으로 된 것인지 확인하기 위해 생성된 테이블의 쿼리를 열고  SELECT 뒤에 * 를 넣어준 뒤 실행해본다.

 

 

빅쿼리 연동은 이것으로 끝!

추가적으로 새로 파일을 덮어쓰는 과정에 대해 작성하겠다.

 

 

빅쿼리 테이블 덮어쓰기

테이블을 새로 생성하지 않고, 덮어쓰는 방법은 쉽다.

먼저 코랩 환경을 열어준다.

그리고 내가 나타내고자 하는 코드를 실행시켜주고 테이블 쿼리를 실행시키면 끝이다!

이 때, 중요한건 if_exists="replace" 으로 설정을 해줘야 덮어쓰는 것이 가능하다.

import pandas as pd
import pandas_gbq

project_id = "생성명"
table_id = "데이터세트명.테이블명"

df = pd.DataFrame(
    {
        "my_string": ["a", "b", "c"],
        "my_int64": [1, 2, 3],
        "my_float64": [4.0, 5.0, 6.0],
        "my_bool1": [True, False, True],
        "my_bool2": [False, True, False],
        "my_dates": pd.date_range("now", periods=3),
    }
)

pandas_gbq.to_gbq(df, table_id, project_id=project_id, if_exists="replace")

 

 

2. 빅쿼리 활용해서 스트림릿으로 확인하기

스트림릿과 연동해서 확인하기 위해서는 스트림릿을 먼저 설치해줘야한다.

스트림릿 외에도 활용되는 라이브러리들을 한번에 설치해주기 위해 requirements.txt 파일을 만들자

vi 편집기를 사용해서 requirements.txt 파일을 생성하고, 아래의 라이브러리들을 작성하고 저장해주자

pandas
streamlit
matplotlib
seaborn
plotly

 

위의 라이브러리들을 설치하기 위해서는 다음 명령어를 작성해야한다.

pip install -r requirements.txt

 

라이브러리들이 다 설치 되었다면, 빅쿼리를 업그레이드 시켜주자

왜냐하면, 스트림릿을 실행하려면 빅쿼리에서 불러와서 해야하기 때문이다!

pip install --upgrade google-cloud-bigquery

 

 

터미널 창에서 스트림릿 페이지 설정하기

당연한 말이지만, 스트림릿 페이지를 구동시키기 위해서는 스트림릿 페이지를 세팅해줘야한다.

스트림릿 페이지를 설정하기 위한 코드를 작성하기 전에 먼저 나한테 부여된 구글 클라우드 서비스 이메일을 확인해야한다!

터미널 창에서 서비스 이메일 확인하는 방법은 아래 코드를 작성하면 된다.

확인하고 복사해오자!

gcloud auth list

 

이제 스트림릿을 구현할 코드 다듬어서 터미널 창에 올려야 하는데 아래 코드에 복사해온 이메일을 작성해야한다.

vi 편집기를 이용해서 새로운 파이썬 파일을 생성해서 아래의 코드를 작성해주자

꼭!! 일반 이메일이 아닌 구글 클라우드의 서비스 이메일이다!

import streamlit as st
import pandas as pd
from google.auth import compute_engine
from google.cloud import bigquery
credentials = compute_engine.Credentials(
    service_account_email='이메일')

client = bigquery.Client(
    project='생성명',
    credentials=credentials)

# Perform query.
# Uses st.cache_data to only rerun when the query changes or after 10 min.
@st.cache_data(ttl=600)
def run_query():
    sql = """
      SELECT * FROM `생성명.데이터세트명.테이블명` LIMIT 1000
    """

    project_id = '생성명'
    df = pd.read_gbq(sql, project_id = project_id, dialect='standard')
    st.write(df)

    st.title("The query data 가져오기")
    

def main():
    
    st.title("Streamlit Iris Data Visualization")
    run_query()
    st.write("""
    ## Explore the Iris dataset
    Use the controls below to explore different visualizations of the Iris dataset.
    """)

    

if __name__ == '__main__':
    main()

 

그리고 스트림릿 페이지를 확인해보면 되는데 아래 코드를 먼저 실행시켜서 스트림릿에서 날 에러를 방지해주자

pip install pandas-gbq

 

스트림릿 실행 코드는 다음과 같다.

나의 경우 main.py을 만들어서 위의 코드를 붙여넣었기 때문에 생성한 파일이름에 main.py를 넣었다.

streamlit run 생성한 파일이름

 

 

이렇게 잘나오는 것을 확인할 수 있다!!!

아래 부분이 붓꽃 예시를 따라한 사람과는 결과가 다를것이다.

왜냐하면 아까 테이블 덮어쓰기를 했기 때문에 결과가 다를 수밖에 없다.

 

 

728x90