Programming

2023년 상반기 결산 - 좋은 인연, 박사학위, 자격증, 출판, 유럽여행

개요

  • 블로그를 3년간 운영하면서 회고 또는 결산하는 글을 써본적은 없었다.
  • 요즘에 역 시차적응 때문인지.. 최근 중요한 결정을 내린 후폭풍인지.. 새벽에 자주 잠이 깨는데, 일어난 김에 몇가지 회고의 글을 남겨보려고 한다. (글쓰는 현재 지금 시각 새벽 2시다..)

좋은 인연

  • 상반기에도 좋은 인연이 생겼다.

    • 수많은 학생들, 새로운 기회의 확장, 새로운 학교 및 새로운 과정에서의 여러 만남들
      • 2개 기관은 작년에 이어서 진행한 건, 1개 기관은 신규로 진행한 건
      • 강의 평가가 모두 좋게 나와서 감사할 뿐이다.
    • 취업준비생 및 재직자 대상으로 약 100여명 넘는 사람들을 만난 듯 하다.
    • 모두 원하는 일과 취업 잘되기를 기도 및 소망한다.
    • 과거 3년전에 만났던 수강생도 최근에 결혼을 했다. 결혼하거든 연락 꼭 주세요 ㅎㅎ
  • 상반기 가장 좋은 인연은 공저자 Sara를 만난 것이다.

(파이썬) 빅데이터 분석기사 실기 - 제2유형, 회귀

작업형 2유형 최종정리

  • 작업형1 : 3문제 (30점), 데이터 전처리
  • 작업형2 : 1문제 (40점), 분류/회귀 예측 모델링
  • 작업형3 : 2문제 (30점), 가설 검정

주요 라이브러리

  • palmerpenguins : 팔머펭귄 데이터셋의 목표는 iris 데이터셋의 대안으로 데이터 탐색 및 시각화를 위한 데이터셋 제공.
  • scikit-learn : 머신러닝을 위한 라이브러리
  • lightgbm : LightGBM은 Microsoft에서 개발한 오픈 소스 기계 학습 라이브러리로, 대용량 데이터셋에서 빠른 속도와 높은 성능을 제공하는 것이 특징

주의

  • 각 코드에 대한 설명은 별도로 하지 않습니다.

데이터 파일 불러오기

import pandas as pd 
from palmerpenguins import load_penguins 

penguins = load_penguins()
penguins['ID'] = penguins.reset_index().index + 1
penguins.head()

Untitled

(파이썬) 빅데이터 분석기사 실기 - 제2유형, 분류

작업형 2유형 최종정리

  • 작업형1 : 3문제 (30점), 데이터 전처리
  • 작업형2 : 1문제 (40점), 분류/회귀 예측 모델링
  • 작업형3 : 2문제 (30점), 가설 검정

주요 라이브러리

  • palmerpenguins : 팔머펭귄 데이터셋의 목표는 iris 데이터셋의 대안으로 데이터 탐색 및 시각화를 위한 데이터셋 제공.
  • scikit-learn : 머신러닝을 위한 라이브러리
  • lightgbm : LightGBM은 Microsoft에서 개발한 오픈 소스 기계 학습 라이브러리로, 대용량 데이터셋에서 빠른 속도와 높은 성능을 제공하는 것이 특징

주의

  • 각 코드에 대한 설명은 별도로 하지 않습니다.

데이터 불러오기

import pandas as pd 
from palmerpenguins import load_penguins 

penguins = load_penguins()
penguins['ID'] = penguins.reset_index().index + 1
penguins.head()

Untitled

(파이썬) 빅데이터 분석기사 실기 준비 - 제3유형

작업형 3유형 최종정리

  • 작업형1 : 3문제 (30점), 데이터 전처리
  • 작업형2 : 1문제 (40점), 분류/회귀 예측 모델링
  • 작업형3 : 2문제 (30점), 가설 검정

라이브러리 확인

  • 파이썬에서 가설검정을 위한 통계와 관련된 라이브러리는 크게 2가지이다.
    • scipy : SciPy는 수치 계산, 최적화, 선형 대수, 신호 및 이미지 처리, 통계 분석 등과 같은 과학적 계산 작업을 수행하는 데 사용됨
    • statsmodels : Statsmodels는 통계 분석과 추정을 위한 파이썬 라이브러리로, 선형 회귀, 로지스틱 회귀, 시계열 분석, 비모수적 추정 등 다양한 통계 모델을 지원함.
  • SciPy와 Statsmodels는 각각의 독립성과 기능을 가지고 있으며, 과학적 계산과 통계 분석을 위한 파이썬 생태계에서 함께 사용되는 보완적인 라이브러리임.

주의

  • 여기에서는 각 검정의 구체적인 원리 설명은 하지 않는다.
  • 코드 위주로만 확인을 하도록 한다.

One Sample T-Test

  • 가설검정
    • 귀무가설 : 붓꽃의 sepal_length의 평균은 5.5이다.
    • 대립가설 : 붓꽃의 sepal_length의 평균은 5.5이 아니다.
import seaborn as sns
import pandas as pd

iris_df = sns.load_dataset("iris")
iris_df.head()

Untitled

Python Pandas 날짜 데이터 다루기

개요

  • 연도, 월, 주만 있는 컬럼을 날짜 데이터 타입으로 변경하려면 어떻게 해야할까?
  • 약간의 트릭이 필요하다

데이터 생성

  • 가상의 데이터를 생성한다.
import pandas as pd

data = [
    {"year": 2020, "month": 1, "week": 2, "company" : "A회사", "revenue_pct" : 49},
    {"year": 2020, "month": 1, "week": 2, "company" : "B회사", "revenue_pct" : 51},
    {"year": 2021, "month": 1, "week": 2, "company" : "A회사", "revenue_pct" : 37},
    {"year": 2021, "month": 1, "week": 2, "company" : "B회사", "revenue_pct" : 63},
    {"year": 2022, "month": 12, "week": 1, "company" : "A회사", "revenue_pct" : 70},
    {"year": 2022, "month": 12, "week": 1, "company" : "B회사", "revenue_pct" : 30},
]

df = pd.DataFrame(data)
df

Untitled

ChatGPT 방식

  • chatGPT에서 알려준 방식으로 진행해본다.
df["date"] = pd.to_datetime(df["year"].astype(str) + df["week"].astype(str) + '1', format="%Y%W%w")
df

Untitled

  • 기대했던 것은 2022-12-1 일 방식인데, 2022-01-03이다.
  • 만약, 전체데이터가 있다면, date 날짜가 중복될 수 있다.

수정된 방식

  • 아래와 같이 수정하도록 한다.
    • 두번째 라인 코드 7-6 은 일종의 특정 일자를 지정하는 것이다.
df["date"] = pd.to_datetime(df["year"].astype(str) + "-" + df["month"].astype(str))
df["date"] = df["date"] + pd.to_timedelta(df["week"] * 7 - 6, unit="D")
df

Untitled

출간 기념, Streamlit으로 프로젝트 한방에 끝내기 with 파이썬(2023, Sara & Evan)

  • 책을 출간하였습니다.

book.jpg

Streamlit이란

  • Streamlit은 데이터 분석가가 간단한 코드 몇줄로 빠르게 웹앱을 만들어 줄 수 있는 Python 라이브러리입니다.

누가 읽어야 할까요?

  • 데이터 분석가 : 웹개발은 모르지만 대시보드를 만들어야 하는 분
  • 국비교육 수강중인 비전공자 : Java 웹개발로 머신러닝 플랫폼을 만들어야 하는 분
  • 개별적인 포트폴리오가 필요한 취업준비생 : ML/DL 알고리즘 익히는 것도 어려운데, 웹개발은 언제 배우죠?

데모 페이지

Untitled

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

Kaggle Wandb API 설정

개요

  • Wandb에 접속 후, 활용해본다.

회원가입

Untitled

  • 여기에서 Github로 로그인을 진행한다.

Untitled

  • Authorize wandb를 클릭한다.

Untitled

  • Create your account 항목에 Full name과 회사명을 입력한다.

Untitled

  • 아래와 같이 지정했다.

Untitled

  • 교육 목적으로 선택했다.

Untitled

  • 팀 이름명을 지정한다.

Untitled

  • 추후에 설정한다.

Untitled

  • API Key가 나타난다.

Untitled

  • 어딘가에 인증키를 저장해둔다. db3cce8abed215f7b3770979a0006861dbcfe4f2

추후 확인 시

  • User Settings을 클릭한다.

Untitled

  • Scroll Down 하면 API 키값이 나타난다.

Untitled

  • 캐글 노트북 상단 메뉴 [Add-ones] - [Secrets]를 클릭한다.

Untitled

Streamlit Matplotlib 한글폰트 적용 예제

Streamlit Matplotlib-Seaborn 한글폰트 적용

개요

  • 배포 시, matplotlib & seaborn 한글 폰트 적용 하는 방법에 대해 알아본다.
  • 나눔고딕 폰트를 적용해본다.

폰트 다운로드

Untitled

개발환경 세팅

  • git clone 명령어를 활용하여 프로젝트 repo를 다운로드 받는다.

Untitled

  • 가상환경을 설정한다.
    • virtualenv venv 실행한다.
    • source venv/Scripts/activate 실행하여 가상환경에 접속한다.
$ virtualenv venv
created virtual environment CPython3.9.13.final.0-64 in 606ms
  creator CPython3Windows(dest=C:\Users\YONSAI\Desktop\streamlit-korean-fonts\venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\YONSAI\AppData\Local\pypa\virtualenv)
    added seed packages: pip==23.1.2, setuptools==67.6.1, wheel==0.40.0
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
$ source venv/Scripts/activate
(venv)
$ 
  • requirements.txt 파일에 다음 라이브러리만 설치한다.
streamlit
matplotlib
seaborn
pandas
numpy

폰트 폴더 설정

  • customFonts 폴더를 만들고 다운로드 받은 폴더를 추가한다.

Untitled

R 4.2.3 설치 - Windows

R 프로그램 설치

Untitled

  • 0-Cloud 선택

Untitled

  • 각 OS에 맞는 버전 설치, 여기서는 Windows 선택

Untitled

  • Windows의 경우 아래와 같이 나타난다.

Untitled

  • Download R-4.2.3 for Windows 설치

Untitled

  • 다운로드 받은 설치 파일을 관리자 권한으로 실행한다.

Untitled

  • 언어는 한국어로 해도 상관없지만, 필자는 주로 영어로 선택해서 했기 때문에, 영어로 진행하도록 한다.

Untitled

  • 특별하게 주의 깊게 살펴서 해야 할 항목은 없기 때문에, Next 버튼을 순차적으로 클릭한다.

Untitled

Untitled