Settings

PostgreSQL 기초 1

개요

  • psql shell 명령어를 간단히 배우도록 한다.
  • Database, Schema, Table를 생성하도록 한다.
  • 데이터타입에 대해 배우도록 한다.

psql Shell 명령어

명령어 설명
\q psql을 종료한다.
\l 데이터베이스를 조회한다.
\c 입력한 DB로 이동한다.
\e 외부편집기로 sql 쿼리 입력 가능
\dt 현재 DB에서 테이블을 확인할 수 있음.
  • 자주 사용하는 명령어이기 때문에 확인한다.

DB 및 Table 다루기

  • 콘솔창에서 book 이름의 DB를 생성한다.
evan=# CREATE DATABASE book;
CREATE DATABASE
  • 그 후, book에 접속한다.
evan=# \c book
You are now connected to database "book" as user "evan".
book=#
  • 이번에는 DROP DATABASE 구문을 통해 book 삭제한다.
evan=# DROP DATABASE book;
DROP DATABASE

SCHEMA 생성

postgres=# CREATE SCHEMA ann_simmons;
CREATE SCHEMA

postgres=# CREATE SCHEMA ty_beck;
CREATE SCHEMA

postgres=# CREATE SCHEMA production;
CREATE SCHEMA

Two Table 생성

  • 두개의 테이블을 생성한다.
CREATE TABLE customers ();
CREATE TABLE orders ();
  • 커밋을 항상 진행한다.
  • psql 터미널에서 \dt를 실행하여 출력값이 잘 나오는지 확인한다.
postgres=# \dt
         List of relations
 Schema |   Name    | Type  | Owner 
--------+-----------+-------+-------
 public | customers | table | evan
 public | orders    | table | evan
(2 rows)

Primary Key 생성

  • 이번에는 Primary Key 생성하는 것을 준비한다.
  • 이제 이 두개의 Table를 생성하도록 합니다.
CREATE TABLE business_type (
	id serial PRIMARY KEY,
  	description TEXT NOT NULL
);

CREATE TABLE applicant (
	id serial PRIMARY KEY,
  	name TEXT NOT NULL,
  	zip_code CHAR(5) NOT NULL,
  	business_type_id INTEGER references business_type(id)
);

CREATE TABLE users (
  id serial PRIMARY KEY,
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  email TEXT NOT NULL,
  hashed_password CHAR(72) NOT NULL
);

schema.table 생성

  • temp schema를 생성한 후, temp.users table를 작성한다.
CREATE TABLE temp.users (
  id serial PRIMARY KEY,
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  email TEXT NOT NULL,
  hashed_password CHAR(72) NOT NULL
);

Data Types

  • 크게 Text, NUMERIC, BOOLEAN 형태로 구성이 됩니다.
-- Create the project table
CREATE TABLE project (
	-- Primary Key
	id SERIAL PRIMARY KEY,
    -- franchise 기회
	is_franchise BOOLEAN DEFAULT FALSE,
	-- Franchise 이름
    franchise_name TEXT DEFAULT NULL,
    -- Project 시도
    project_state TEXT,
    -- Project 시군
    project_county TEXT,
    -- Project로 발생한 Job 수
    jobs_supported NUMERIC
);

다양한 Text Data Types

CREATE TABLE book (
  isbn CHAR(13) NOT NULL, 
  author_first_name VARCHAR(50) NOT NULL, 
  author_last_name VARCHAR(50) NOT NULL, 
  content TEXT NOT NULL
);
  • Text data 타입은: TEXT, VARCHAR(N), CHAR(N) 크게 3가지 형태로 구성이 된다.
  • TEXT
    • 길이를 알 수 없는 텍스트 데이터에 적합
  • VARCHAR(N)
    • N은 최대 길이가 N자인 문자열만 저장하도록 열을 제한함.
    • N보다 글자수가 큰 값이 입력이 되면 error가 발생이 됨
    • 만약 N을 지정하지 않으면 TEXT와 동일하게 됨
  • CHAR(N)
    • 정확하게 N 숫자만큼 글자만 들어가게 됨
    • isbn은 주로 출판사에서 볼 수 있는 문자열임

Numeric Data

CREATE TABLE employee (
  id SERIAL PRIMARY KEY, 
  first_name VARCHAR(10) NOT NULL, 
  last_name VARCHAR(10) NOT NULL, 
  num_sales INTEGER
)

-- Create the client table
CREATE TABLE client (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50),
  site_url VARCHAR(50),
  num_employees SMALLINT,
  num_customers INTEGER
);

-- Create the campaign table
CREATE TABLE campaign (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50),
  budget NUMERIC(7, 2),
  num_days SMALLINT DEFAULT 30,
  goal_amount INTEGER DEFAULT 100,
  num_applications INTEGER DEFAULT 0
);
  • Integer Types

PostgreSQL 테이블 생성 예제

테이블 생성 및 수정 삭제

  • pgAdmin4을 활용한 테이블 수정 삭제
  • Schemas에서 public-Table 마우스 오른쪽 버튼을 누른 뒤 Query Tool을 선택합니다.

  • developers 테이블을 별도로 생성합니다.
CREATE TABLE developers (
	book_id INTEGER, 
	date DATE,
	name VARCHAR(80)
)
CREATE TABLE
Query returned successfully in 65 msec.
  • 이번에는 값을 입력하도록 합니다.
INSERT INTO developers VALUES(1, '2019-12-17', '"자바"')
  • 그런데, 작은 따옴표(’)를 넣고 싶을 때는 큰 따옴표(")로 깜사면, 에러가 발생이 됩니다.
INSERT INTO developers VALUES(2, '2019-12-17', "'자바'")
ERROR: 오류:  "'자바'" 이름의 칼럼은 없습니다
LINE 1: INSERT INTO developers VALUES(1, '2019-12-17', "'자바'")
                                                       ^
SQL state: 42703
Character: 48
  • 이런 경우에는 작은 따옴표를 두번 입혀서 깜사도록 합니다.
INSERT INTO developers VALUES(2, '2019-12-17', '''자바''')
INSERT 0 1

Query returned successfully in 38 msec.
  • 이번에는 Python’s Programming을 입력하도록 합니다.
  • 입력하고자 하는 ‘주위로 각각 두번 ’’ 입력하도록 합니다.
INSERT INTO developers VALUES(3, '2019-12-17', 'Python''s Programming');
INSERT 0 1

Query returned successfully in 32 msec.

테이블 조회

  • 일단 먼저 잘 조회가 되는지 확인 하도록 합니다.
SELECT * FROM developers;

pgAdmin4 GUI installation on MacOS M1

pgAdmin 설치 및 서버 연결 (MacOS)

  • GUI 프로그램을 설치해본다.
  • Windows는 자동으로 설치가 되기 때문에 생략을 한다.
  • 먼저 해당 싸이트에 접속을 합니다.

  • macOS를 클릭한 뒤 다음 화면에서 pgAdmin 4 v5.3 최신버전을 다운로드 받도록 합니다.

  • 프로그램을 설치하면 첫 화면에서 Password를 입력하도록 합니다.

  • 새로운 서버를 생성하여 서버를 등록하도록 합니다. 그 후에 이름은 LocalTest라고 정합니다.

  • 그 후에, username은 postgres를 username으로 입력하고 Postgresql을 설치할 때 설정한 password를 입력합니다.

  • 실제 서버에 연결 되었는지 확인하도록 합니다.

Postgre SQL Installation on Windows 10

Windows

  • 필자는 13.3 버전을 선택하였습니다.

  • 이번에는 프로그램을 클릭하여 설치를 진행합니다.

  • 모든 값은 default로 진행합니다.

  • 비밀번호는 작성 후, 반드시 기억하시기를 바랍니다.

    • 필자는 temp라고 명명하였습니다.

  • 포트는 5432를 확인합니다.

  • 언어는 한국어로 선택하도록 합니다.

  • 몇번의 Next를 더 누르시면서, 설치를 진행합니다.

  • 설치가 완료되면 Stack Builder 체크 박스는 제 후 완료를 합니다. 해

  • 프로그램을 검색하여 PostgreSQL이 잘 설정되는지 확인을 하도록 합니다.

환경변수 추가

  • CMD에서 활용하려면 환경변수를 설정하도록 합니다.
  • 먼저 경로를 복사합니다.

Postgre SQL Installation on MacOS M1

1줄 요약

  • MacOS M1에서 PostgreSQL 설치에서 중요한 건 환경변수만 추가한다.

M1의 구조

  • M1애서는 Intel, Silicon, Universal 3개의 시스템을 지원한다.
    • 그런데, PostgreSQL 프로그램은 기본적으로 Intel 기반으로 작동을 한다.

Postgre SQL 다운로드

  • 해당 웹 페이지로 간다. (URL: https://postgresapp.com/)

  • 다운로드 받은 후 Postgres-2.4.3-13.dmg (2021.5.31일 기준) 설치 파일을 클릭한 후, 아래 화면이 나오면, 설치를 진행합니다.

  • 설치 진행이 완료가 되면 아래 화면에서 Initialize 또는 Start 버튼을 클릭하면 설치는 끝이 납니다.

환경변수 설정

  • 그런데, 환경변수 설정을 하지 않으면 터미널에서 실행이 되지 않습니다.
$ psql
-bash: psql: command not found

R Path Setting on MacOS

1줄 요약

  • 터미널에서 R 실행이 안된다면 PATH를 설정한다.

문제 상황

  • MacOS 터미널에서 R을 실행하고 싶은데, 가끔 아래와 같은 에러 메시지가 나올때가 있다.
$ R 
bash: R: command not found

문제 해결

  • 이는 환경설정 문제이다. 즉, 이러한 경우에는 여러 솔루션이 있다.

  • 그 중에서 필자는 Fourth Solution: 선택하였다.

$ export PATH="/Library/Frameworks/R.framework/Resources:$PATH"
  • 그 후에 terminal에서 which R을 실행해본다. 아래와 같이 정상적으로 출력이 된다면, 환경설정은 잘 된 것이다.
$ which R
/Library/Frameworks/R.framework/Resources/R

Happy To Code

Google Colab에서 Kaggle API 쉽게 사용하는 방법

한줄 요약

  • 귀찮지만 한 2개의 Cell은 입력후 실행하자.

개요

  • Google Colab에서 Kaggle을 사용하려면 보통 다음과 같은 과정을 거칩니다.
  • 패키지 설치는 필수입니다.
!pip install kaggle
Requirement already satisfied: kaggle in /usr/local/lib/python3.7/dist-packages (1.5.10)
Requirement already satisfied: python-dateutil in /usr/local/lib/python3.7/dist-packages (from kaggle) (2.8.1)
Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.7/dist-packages (from kaggle) (1.15.0)
Requirement already satisfied: urllib3 in /usr/local/lib/python3.7/dist-packages (from kaggle) (1.24.3)
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from kaggle) (2.23.0)
Requirement already satisfied: tqdm in /usr/local/lib/python3.7/dist-packages (from kaggle) (4.41.1)
Requirement already satisfied: certifi in /usr/local/lib/python3.7/dist-packages (from kaggle) (2020.12.5)
Requirement already satisfied: python-slugify in /usr/local/lib/python3.7/dist-packages (from kaggle) (4.0.1)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->kaggle) (3.0.4)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->kaggle) (2.10)
Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.7/dist-packages (from python-slugify->kaggle) (1.3)

문제점

  • 아래 코드를 봅시다.
from google.colab import files

uploaded = files.upload()

for fn in uploaded.keys():
  print('User uploaded file "{name}" with length {length} bytes'.format(
      name=fn, length=len(uploaded[fn])))
  
# Then move kaggle.json into the folder where the API expects to find it.
!mkdir -p ~/.kaggle/ && mv kaggle.json ~/.kaggle/ && chmod 600 ~/.kaggle/kaggle.json
  • 문제는 kaggle.json 파일을 매번 업로드 해줘야 하는데, 매우 번거롭습니다. 간혹 파일이 삭제되기도 합니다.

해결방법

  • 이럴 때 간편한 방법은 위 방법 대신에 아래와 같이 입력을 하는 것입니다.
  • key값은 kaggle.json 파일에 있습니다. 메모장 같은 텍스트 에디터나 파이참 같은 통합개발환경툴을 사용하면 바로 확인이 가능합니다.
!mkdir ~/.kaggle
!echo '{"username":"your_name","key":"your_key"}' > ~/.kaggle/kaggle.json
!chmod 600 ~/.kaggle/kaggle.json
mkdir: cannot create directory ‘/root/.kaggle’: File exists
  • 실제 잘 되는지 확인해 봅니다.
!kaggle competitions list
Warning: Looks like you're using an outdated API Version, please consider updating (server 1.5.12 / client 1.5.4)
ref                                            deadline             category            reward  teamCount  userHasEntered  
---------------------------------------------  -------------------  ---------------  ---------  ---------  --------------  
contradictory-my-dear-watson                   2030-07-01 23:59:00  Getting Started     Prizes        102           False  
gan-getting-started                            2030-07-01 23:59:00  Getting Started     Prizes        209           False  
tpu-getting-started                            2030-06-03 23:59:00  Getting Started  Knowledge        493           False  
digit-recognizer                               2030-01-01 00:00:00  Getting Started  Knowledge       3394           False  
titanic                                        2030-01-01 00:00:00  Getting Started  Knowledge      27213            True  
house-prices-advanced-regression-techniques    2030-01-01 00:00:00  Getting Started  Knowledge       6963            True  
connectx                                       2030-01-01 00:00:00  Getting Started  Knowledge        595           False  
nlp-getting-started                            2030-01-01 00:00:00  Getting Started  Knowledge       1723            True  
competitive-data-science-predict-future-sales  2022-12-31 23:59:00  Playground           Kudos      10797            True  
jane-street-market-prediction                  2021-08-23 23:59:00  Featured          $100,000       4245            True  
hungry-geese                                   2021-07-26 23:59:00  Playground          Prizes        423           False  
coleridgeinitiative-show-us-the-data           2021-06-22 23:59:00  Featured           $90,000        188           False  
bms-molecular-translation                      2021-06-02 23:59:00  Featured           $50,000        350           False  
iwildcam2021-fgvc8                             2021-05-26 23:59:00  Research         Knowledge         11           False  
herbarium-2021-fgvc8                           2021-05-26 23:59:00  Research         Knowledge         30           False  
plant-pathology-2021-fgvc8                     2021-05-26 23:59:00  Research         Knowledge        121           False  
hotel-id-2021-fgvc8                            2021-05-26 23:59:00  Research         Knowledge         26           False  
hashcode-2021-oqr-extension                    2021-05-25 23:59:00  Playground       Knowledge        101           False  
indoor-location-navigation                     2021-05-17 23:59:00  Research           $10,000        734           False  
hpa-single-cell-image-classification           2021-05-11 23:59:00  Featured           $25,000        432           False  
  • 만약, kaggle json 파일을 새로 받았다면? 당연한 말이지만, 위 key값도 새로 입력해줘야 합니다.
  • 아래 코드를 확인해본다.

귀찮지만, 두개의 Cell은 실행합시다. 작은 도움이 되기를 바랍니다. Happy to Code

왜 Git 그래프가 채워지지 않는가?

1줄 요약

  • 이메일을 확인하자.

개요

  • 필자는 강의를 위해 깃헙 계정이 여러개가 존재함
  • 강사용 PC에서 지속적으로 Commit을 진행했으나 Github 그래프가 출력이 되지 않는 오류 발생을 해결하는 과정에서 확인

Github 질의

왜? 공통 이유 중의 하나는 이메일

  • 이 때, 가장 중요한 것은 이메일입니다.
    • 사실, 해당 내용에도 나오지만, 가장 흔한 이유 중의 하나라고 합니다.

Your local Git commit email isn’t connected to your account Commits must be made with an email address that is connected to your account on GitHub, or the GitHub-provided noreply email address provided to you in your email settings, in order to appear on your contributions graph. For more information about noreply email addresses, see “Setting your commit email address.”

Windows 10 KoNLP 설치

한줄 요약

  • KoNLP는 여기에서 무조건 해결한다.

KoNLP 이슈

  • R에서 텍스트 마이닝을 진행할 때에는 반드시 한번쯤은 패키지 설치로 인해 어려움을 겪는다. - R 입문자 분들이 초반에 호기롭게 시작하였다가 대부분 포기하려고 하는 지점이기도 하다.
  • 사실, 조금 더 간편한 방법이 나오기를 기대한다.

1단계 Java 설치 및 환경 변수 설정

  • 주의: 윈도우 10 64비트

  • 여러 좋은 자료들이 많아서 같이 참고하기를 바란다.

Linux 기본 명령어

개요

  • 기본 문법을 다뤄봅니다. (추가적으로 올리고 싶을 때마다 정리해서 올릴 예정입니다.)

unzip

  • 만약에 여러개의 zip 파일을 받는다면 어떻게 해야할까?
  • 다음과 같이 할 수도 있다.
$ unzip a.zip b.zip c.zip d.zip
  • 코드가 조금 길어지는 것 같다. 간단하게 하면 다음과 같이 할 수도 있다.
  • 캐글 대회 데이터를 직접 응용하도록 한다.
$ kaggle competitions download -c sf-crime
Warning: Looks like you're using an outdated API Version, please consider updating (server 1.5.10 / client 1.5.4)
Downloading test.csv.zip to /content
 48% 9.00M/18.7M [00:00<00:00, 52.3MB/s]
100% 18.7M/18.7M [00:00<00:00, 74.0MB/s]
Downloading sampleSubmission.csv.zip to /content
  0% 0.00/2.35M [00:00<?, ?B/s]
100% 2.35M/2.35M [00:00<00:00, 157MB/s]
Downloading train.csv.zip to /content
 41% 9.00M/22.1M [00:00<00:00, 33.6MB/s]
100% 22.1M/22.1M [00:00<00:00, 63.4MB/s]
  • 이번에는 목록을 확인한다.
$ ls
sampleSubmission.csv.zip  test.csv.zip  train.csv.zip
  • 이제 .zip 파일을 해제하도록 한다.
$ unzip '*.zip'
Archive:  train.csv.zip
  inflating: train.csv               

Archive:  test.csv.zip
  inflating: test.csv                

Archive:  sampleSubmission.csv.zip
  inflating: sampleSubmission.csv    

3 archives were successfully processed.
  • 실제 파이썬 코드를 확인해서 데이터 크기를 확인한다.
import os 
DATA_PATH = "./"
for file in os.listdir(DATA_PATH):
  if 'csv' in file and 'zip' not in file:
    print(file.ljust(30) + str(round(os.path.getsize(file) / 1000000, 2)) + 'MB')
test.csv                      91.0MB
sampleSubmission.csv          75.05MB
train.csv                     127.43MB

pwd

  • pwd는 Print Working Directory의 약자로써, 현재 작업중인 경로의 정보를 출력하는 명령어이다.
$ pwd
/Users/username

Reference

Chris Jean, Unzip Multiple Files from Linux Command Line Retrieved from https://chrisjean.com/unzip-multiple-files-from-linux-command-line/