Kaggle Feature Engineering - House Price

강의 홍보

공지

  • 현재 책 출판 준비 중입니다.
  • 구체적인 설명은 책이 출판된 이후에 요약해서 올리도록 합니다.

Kaggle API

Kaggle API를 활용한 데이터를 수집하는 예제는 Feature Engineering with Housing Price Prediction - Numerical Features 에서도 확인할 수 있기 때문에 생략 합니다.

ml 개발환경 세팅

개요

  • M1에서 GPU를 활용한 딥러닝을 수행하는 예제 코드를 구현해봤다.

  • Apple 공식 Repo대로 설치를 하면 잘 될 것이라 생각했지만, 생각지 못한 복병을 만났다.

  • 어떻게 해결했는지 그 과정에 대해 잠깐 기술하려고 한다.

Rosetta 너는 누구니?

  • 그동안 맥북은 인텔 기반의 Mac 프로세서를 사용해왔고, M1은 애플이 개발한 프로세서를 처음 도입한 것이다.
  • 그런데, 이게 왜 문제가 되는 것일까?

M1 tensorflow Test Preview

개요

  • M1에서 Tensorflow 테스트를 진행해본다.
    • 현재 M1 시스템 환경은 아래와 같다. (2021-01-16)

주의: 텐서플로 공식 버전은 아님

라이브러리 설치

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"
Installation script for pre-release tensorflow_macos 0.1alpha1.  Please visit https://github.com/apple/tensorflow_macos 
for instructions and license information.

This script will download tensorflow_macos 0.1alpha1 and needed binary dependencies, then install them into a new 
or existing Python 3.8 virtual enviornoment.
Continue [y/N]? 
  • 위 질문이 나오면 y 입력한다.

Ch07_data_upload

공지

  • 구글 빅쿼리 책 Chapter 4장 학습
  • 참고 교재는 아래와 같다.

개요

  • 로컬에서 데이터를 업로드 해본다.

데이터 다운로드

  • 깃허브에서 데이터를 다운로드 받는다.
$ git clone https://github.com/onlybooks/bigquery.git
  • ch04 폴더로 이동한 뒤, 실제 압축된 파일의 내용을 페이지 단위로 확인해본다.
  • 먼저 ch04 폴더로 이동한다.
  • zlees 명령으로 데이터를 확인해본다.
$ cd bigquery/ch04
$ zless college_scorecard.csv.gz
  • 명령을 실행한 후 스페이스 이용하여 페이지 단위로 데이터 확인 후, 종료하려면 q키를 누른다.
  • zless는 .gz과 같은 파일을 풀지 않고 Preview 형식으로 볼 수 있도록 도와준다.

bq 명령줄 도구

  • bq에 대해 자세히 확인하려면 아래 싸이트에서 확인하기를 바란다.
  • bq 명령줄 도구는 빅쿼리 플랫폼상의 빅쿼리 서비스를 사용하기 위한 편리한 명령들 제공
$ bq --location=US mk ch04
Dataset 'biggquerysample:ch04' successfully created.

에러 상황 1.

  • 다음과 같은 에러 메시지가 발견이 되면 프로젝트를 세팅해줘야 한다.
$ bq --location=US mk ch04
BigQuery error in mk operation: Not found: Project biggquerysample2
  • 대개의 경우, project 세팅을 해줘야 한다.
$ gcloud config set project your_project_ID

데이터 로드

  • 이제 데이터를 빅쿼리 내부의 테이블로 로드하는 명령을 수행해보자.
$ bq --location=US load --source_format=CSV --autodetect ch04.college_scorecard ./college_scorecard.csv.gz
Upload complete.
Waiting on bqjob_r1c47395bddea55ee_00000176e0b2548e_1 ... (37s) Current status: DONE 

에러 상황

  • 필자는 에러 상황이 발생하지는 않았다.
  • 교재에서는 에러가 발생할 수도 있다고 하였다.
Could not parse 'NULL' as int for field HBCU (position 26) starting at location 11945910
  • 위 문제는 데이터 상에 NULL값이 발생해서 생긴 값이다.

Ch06_gcloud_projects

개요

  • MacOS m1, Big Sur에서 gcloud 환경 세팅을 해본다.
  • 목표는 gcloud를 설치 한 뒤, 신규 프로젝트를 설치하도록 한다.

gcloud projects list

  • 현재 active project를 실행하여 보여주는 명령어를 실행하여 확인한다.
    • 프로젝트는 각 계정마다 조금씩 다를 수 있다.
$ gcloud projects list
PROJECT_ID       NAME             PROJECT_NUMBER
biggquerysample  biggquerysample  826877287968

New gcloud projects

  • 이제 새로운 프로젝트를 만들어본다.
$ gcloud projects create bigquerysample2
Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/your_project_name].
Waiting for [your_number_will_be_created] to finish...done.                                                                                        
Enabling service [cloudapis.googleapis.com] on project [bigquerysample2]...
Operation "your_number_will_be_created" finished successfully.
  • 이제 새로운 프로젝트가 생겼는지 다시 확인해본다.
$ gcloud projects list
PROJECT_ID       NAME             PROJECT_NUMBER
biggquerysample  biggquerysample  826877287968
bigquerysample2  bigquerysample2  641510072575

새로운 프로젝트 이동

  • 먼저 gcloud config list로 실행하면 아래와 같이 project=bigquerysample로 세팅이 되어 있는 것을 확인할 수 있다.
$ gcloud config list
[core]
account = yourname@gmail.com
disable_usage_reporting = False
project = biggquerysample

Your active configuration is: [default]
  • 기존 gcloudbiggquerysample에서 biggquerysample2로 이동해보자.
$ gcloud config set project biggquerysample2
$ gcloud config list
[core]
account = yourname@gmail.com
disable_usage_reporting = False
project = biggquerysample2

Your active configuration is: [default]

Reference

Warrick.(2020). Setup and Switch Between Google Cloud Projects in the SDK. Retrieved from https://medium.com/google-cloud/setup-and-switch-between-google-cloud-projects-in-the-sdk-885c5000624c

Ch05_gcloud_settings

개요

  • MacOS m1, Big Sur에서 gcloud 환경 세팅을 해본다.
  • 목표는 gcloud를 설치 한 뒤, 신규 프로젝트를 설치하도록 한다.

Cloud SDK 시작 전

  • MacOS에서는 Python이 필요하다.
  • 지원되는 버전은 Python3(권장, 3.5 ~ 3.8) 및 Python 2 (2.7.9) 이상이다.
  • 만약 Python이 설치되지 않았다면 추가로 설치를 진행해야 한다.

Cloud SDK 시작

  • 필요한 파일 및 설치 참고 자료는 공식홈페이지: 빠른 시작: Cloud SDK 시작하기 에서 확인한다.
  • 압축 파일을 풀고 해당 경로로 이동한다.
  • 이 때, 환경문제가 발생할 수 있으니, 가급적 .sh 스크립트를 실행한다.
  • 다음과 같이 실행한다.
$ cd google-cloud-sdk
$ ./install.sh
.
.
Do you want to help improve the Google Cloud SDK (y/N)? y
.
.
Modify profile to update your $PATH and enable shell command 
completion?

Do you want to continue (Y/n)? N

Cloud SDK 초기화

  1. 명령 프롬프트에서 다음 명령어를 실행하면 로그인 등을 진행해야 한다.
  • 먼저, GCP 프로젝트 폴더를 만들고, 해당 경로로 이동한다.
$ mkdir GCP
$ cd GCP
  • 이제 초기화를 진행한다.
$ gcloud init
  1. Google 사용자 계정을 사용하여 로그인 한다.
To continue, you must log in. Would you like to log in (Y/n)? Y
  1. 그러면, 구글 사용자 계정에 로그인하고 허용을 클릭한다.
  2. 터미널에서 본인으 프로제트를 선택하거나 또는 신규 프로젝트를 선택한다.
This account has a lot of projects! Listing them all can take a while.
 [1] Enter a project ID
 [2] Create a new project
 [3] List projects
Please enter your numeric choice:
  1. Google Compute Engine API를 사용 설정한 경우 gcloud init을 사용하여 기본 Compute Engine 영역을 선택할 수 있습니다.
Which compute zone would you like to use as project default?
 [1] [asia-east1-a]
 [2] [asia-east1-b]
 ...
 [14] Do not use default zone
 Please enter your numeric choice:
  • gcloud init은 설정 단계를 성공적으로 완료되었다.
gcloud has now been configured!
You can use [gcloud config] to change more gcloud settings.

Your active configuration is: [default]

gcloud 실행 완료

  • SDK 설치에 대한 정보를 보려면 gcloud 명령어를 실행해보자.
$ gcloud auth list
[core]
account = jhjung@dschloe.com
disable_usage_reporting = False
project = bigquerysample

Your active configuration is: [default]
  • 위 내용까지 잘 출력이 되면, 정상적으로 출력이 된 것이다.

참고자료

빠른 시작: Cloud SDK 시작하기: https://cloud.google.com/sdk/docs/quickstart

Kaggle Countplot with Text using Seaborn

강의 홍보

개요

캐글 데이터 연동

  • 캐글 데이터를 구글 드라이브에 업로드 한 뒤 구글 코랩과 연동한다.
  • Kaggle API를 통해 데이터를 불러올 수도 있지만, 수동으로 다운로드 받은 뒤 드라이브에 업로드 하였다.
# Mount Google Drive
from google.colab import drive # import drive from google colab

ROOT = "/content/drive"     # default location for the drive
print(ROOT)                 # print content of ROOT (Optional)
drive.mount(ROOT)           # we mount the google drive at /content/drive
/content/drive
Mounted at /content/drive
# import join used to join ROOT path and MY_GOOGLE_DRIVE_PATH
from os.path import join  

# path to your project on Google Drive
MY_GOOGLE_DRIVE_PATH = 'My Drive/Colab Notebooks/competition/kaggle/2020 Kaggle Machine Learning'

PROJECT_PATH = join(ROOT, MY_GOOGLE_DRIVE_PATH)
print(PROJECT_PATH)
/content/drive/My Drive/Colab Notebooks/competition/kaggle/2020 Kaggle Machine Learning
%cd "{PROJECT_PATH}"
/content/drive/My Drive/Colab Notebooks/competition/kaggle/2020 Kaggle Machine Learning

라이브러리 & 데이터 불러오기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

pd.set_option('mode.chained_assignment', None)
survey = pd.read_csv('./data/kaggle_survey_2020_responses.csv')
question = survey.iloc[0,:].T
full_df = survey.iloc[1:,:]
full_df.shape
/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:2718: DtypeWarning: Columns (0) have mixed types.Specify dtype option on import or set low_memory=False.
  interactivity=interactivity, compiler=compiler, result=result)





(20036, 355)

데이터 전처리

  • 우선 IndiaUSA를 제외한 나라는 삭제하도록 한다.
  • 출력된 결과를 확인해보면 알겠지만, 행이 대폭 감소한 것을 확인할 수 있다.
full_df['Q3'].replace({'United States of America':'USA'}, inplace=True)
df1 = full_df[(full_df['Q3']=='India')|(full_df['Q3']=='USA')]
df1.reset_index(drop=True, inplace=True)
print(df1['Q3'].unique())
df1.shape
['USA' 'India']





(8088, 355)

1차 데이터 시각화

  • 이제 countplot()을 활용하여 시각화를 진행한다.
sns.countplot(x = 'Q4', hue = 'Q3', data = df1)
<matplotlib.axes._subplots.AxesSubplot at 0x7f3bbad50ac8>

png

matplotlib 03_2 Scatter Plot

강의 홍보

산점도 그래프

산점도는 두 수치형 변수의 분포를 비교하고 두 변수 사이에 상관 관계가 있는지 여부를 확인하는 데 사용됩니다. 데이터 내에 구별되는 군집/분할이 있으면 산점도에서도 명확해집니다.

(1) 라이브러리 불러오기

필요한 라이브러리를 불러옵니다.

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

(2) 데이터 생성

이번에는 seaborn 패키지 내 tips 데이터를 활용합니다.

(Mac) Python 기본 환경설정 및 주피터 노트북 설치

개요

  • M1 맥북을 구입 후, 환경 설정을 하다보며, 기록을 남기기로 하였다.
  • 환경변수에 대해 살짝 다루도록 한다.
  • Jupyter Notebook 설치를 진행해본다.
    • Note: 아나콘다가 아닌, Python 공식홈페이지에서 다운 받은 것을 전제로 한다.

설정 1. zsh to bash 환경으로 바꾸기

  • 필자는 zsh는 잘 쓰지 않았다.
  • 그런데, Mac은 Default로 bash 환경을 쓴다.
  • 써보지 않았기에, bash로 바꾸도록 한다. (쉽다!)
$ chsh -s /bin/bash
  • 위 설정을 진행한 후, 터미널을 종료한 뒤 다시 시작한다.
  • 만약, 현재 쉘 스크립트를 알고자 하면 아래와 같은 명령어를 입력하도록 한다.
$ echo $SHELL
/bin/bash

설정 2. 파이썬 환경설정

  • 먼저 아래 코드를 실행한다.
$ cd ~
$ ls -a
.			.ipython		.zshrc
..			.local			Applications
.CFUserTextEncoding	.matplotlib		Desktop
.DS_Store		.python_history		Documents
.Rhistory		.r			Downloads
.Trash			.rstudio-desktop	Library
.bash_history		.ssh			Movies
.bash_profile		.viminfo		Music
.bash_profile.swp	.zprofile		Myblog
.bash_sessions		.zprofile.swp		OneDrive
.config			.zsh_history		Pictures
.gitconfig		.zsh_sessions		Public
  • 위 파일 중에서 특히 관심을 가져야하는 파일은 두가지다

Hugo Blog 옮기기

개요

  • 새로운 맥을 구입하면서 생긴 여러 에러를 해결하면서 기록으로 남겼다.

선수 학습

  • 본 포스트는 기존 hugo 깃허브 블로그를 운영중인 독자들을 위한 글이다.
  • 만약 깃허브 블로그를 처음 만드시는 분은 공식 홈페이지를 참조하기를 바란다.

기존 블로그 활용

  • 필자는 blog라는 깃허브 repo가 존재하였음
  • 따라서, blog 레포를 내려 받았다.
$ git clone https://github.com/yourname/your_repo.git

상황 1. submodule에 대한 충분하지 못한 이해

  • 필자가 실수한 것이 있다.
  • github에서 submodule은 영어 단어 그대로, 서브 모듈이다. 즉, 한개의 메인 프로젝트가 존재하지만, 다른 프로젝트는 공통으로 사용할 모듈이라는 뜻이다.
  • 다시 정리하자면,
    • 필자에게 메인 프로젝트는 blog 레포에 글을 남기는 것이다.
    • 필자가 필요한 것은 깃허브 블로그에 필요한 mainroad라는 테마(theme) 모듈과, 배포를 위한 public 모듈이다.
  • public은 필자의 깃허브 주소와 연동되어 있는 모듈이라고 생각하면 쉽다.
    • 즉, public과 필자의 깃허브 주소 레포와 하나로 연결되어 있기 때문에, 자동으로 배포가 되는 시스템이다.
  • 여하튼, 필자가 실수한 것은 바로, 저 public에 대한 서브모듈을 생각하지 못했고, 이 에러가 가장 치명적이었다.

해결방안

  • 어떻게 해결할까? Note: 순서를 꼭 잘 지키도록 한다
  • 우선, 깃허브를 내려받으면, 기존 publicthemes/your_theme는 삭제한다.
    • 이유: 캐시가 남아 있는데, 위 두개 삭제를 하지 않으면 에러의 무한루프에 빠진다.
    • 아래 코드는 에러의 한 예다.
blog % git commit -m "updated"
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
        modified:   themes/mainroad (modified content, untracked content)

no changes added to commit
  • 위 에러가 발생이 되면, 안된다. 즉, 무언가 제대로 삭제가 되지 않았다는 뜻이며, 폴더가 없음에도 위와 같은 에러가 발생이 되면 그 때는 아래 명령어를 추가하도록 한다.
$ git rm -r --cached themes/mainroad
  • 이 때, 중요한 것은, 삭제 후, git push 까지 진행해야 한다.
$ rm -rf public
$ rm -rf themes/your_theme
$ git add .
$ git commit -m "your commit msg"
$ git push origin master(or main)
  • 이제부터가 중요하다. 순서를 지키도록 한다.
  • 먼저, theme부터 submodule을 진행한 후, 마지막으로 public에 대한 submodule을 설정한다.
    • 코드로 보면 다음과 같다.
$ git submodule add https://github.com/developer_name/your_theme.git themes/your_theme
$ git submodule add -b master git@github.com:your_name/your_name.github.io.git public
  • 이렇게 함으로써 blog 레포안에 있는 public 디렉토리는 your_name.github.io 주소와 연동이 끝나게 되는 것이다.

주의점

  • 필자의 경우, themes/my_theme안에 shortcodecss 코드 등을 추가하였다. 따라서, 이 코드 등도 당연히 추가가 되어야 한다.
    • 이 때에는 복사 붙여넣기로 대체 하도록 한다.

상황 2. ssh keygen의 필요성

  • 필자는 새로운 맥에어 m1을 구입하였기 때문에, SSH Key값을 만들어야 한다.
  • 검색을 통해서 쉽게 구할 수 있기 때문에, 자세한 내용은 메뉴얼을 참고한다. +
  • 코드로 구현하면 아래와 같다.
$ cd ~/.ssh
$ ssh-keygen -t ed25519 -C "your_email@example.com"
> Generating public/private ed25519 key pair.
> Enter a file in which to save the key (/Users/you/.ssh/id_ed25519): [Press enter]
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
$ cat ~/.ssh/id_ras.pub
  • 이때, 출력값 전체(이메일 포함)하여 복사 한후, 깃허브 계정에서 [Settings]-[SSH and GPG Keys]-[New SSH Key]를 클릭하며 붙여 넣기 한 후 저장한다.
  • 그런데, 하나 주의해야 하는 것은, 이대로 끝내면, 블로그를 업데이트 할 때마다, 계속 비밀버호를 입력하라고 한다. 매우 귀찮기 때문에, 아래와 같은 코드를 실행한다.
$ ssh-add ~/.ssh/id_rsa
$ eval $(ssh-agent)

상황 3. 버전 문제

  • 모두에게 해당 사항이 안될 수도 있다.
    • 현재 필자가 겪는 에러이다.
$ WARN 2020/10/12 13:40:31 Failed to get translated string for language "en" and ID "authorbox_name": template: :1:9: executing "" at <.Count>: can't evaluate field Count in type string

블로그 옮기기 성공

  • 이 글을 보고 있다면, m1에서 처음 작성하여 성공적으로 올린 글을 보게 되는 것이다.
  • 즉, 필자는 성공하였다.
    • hugo의 가장 큰 어려움은 사실 한글자료가 많지 않다.
    • 이 글을 보는 hugo 사용자에게 작은 도움이 되기를 바란다.