0. 로컬 추가 설정
# postsql 데이터 유지를 위한 마운트 디렉토리
mkdir /postgresql_v
1. 도커 파일
# Base image
FROM postgres:latest
# 환경 변수 설정
ENV POSTGRES_USER=root
ENV POSTGRES_PASSWORD=!nds1101
ENV POSTGRES_DB=textmin
# 로컬 초기화 스크립트 복사
COPY init-db.sh /docker-entrypoint-initdb.d/
# 포트 열기
EXPOSE 5432
1-1. init-db.sh
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username root --dbname textmin <<-EOSQL
CREATE TABLE example_table (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
EOSQL
2. 도커 이미지 build, 컨테이너 실행
# 이미지 빌드
docker build -t postsql_image .
# 컨테이너 실행
docker run --name postsql -v /postgresql_v:/var/lib/postgresql/data -p 5432:5432 -d postsql_image
# 접속 테스트
docker exec -it postsql psql -U root -d textmin
3. 메일 데이터 저장을 위한 테이블 생성
CREATE TABLE IF NOT EXISTS text_data (
id SERIAL PRIMARY KEY,
v1 VARCHAR(255),
v2 TEXT
);
4. CSV 파일 기본 전처리 >> insert to postsql
4-1. make_csv.py
#!/usr/bin/env python3
import pandas as pd
import urllib.request
import subprocess
# 데이터 파일 다운로드
url = "https://raw.githubusercontent.com/ukairia777/tensorflow-nlp-tutorial/main/10.%20RNN%20Text%20Classification/dataset/spam.csv"
filename = "spam.csv"
urllib.request.urlretrieve(url, filename)
# 데이터 읽기 및 필요한 컬럼만 추출
data = pd.read_csv('spam.csv', encoding='latin1')
data = data[['v1', 'v2']]
data['v1'] = data['v1'].replace(['ham','spam'],[0,1])
data.drop_duplicates(subset=['v2'], inplace=True)
# CSV 파일로 저장
data.to_csv('change_spam.csv', sep='\t',index=False)
# 캐리지 리턴 문자 치환
subprocess.run(["sed", "-i", "s/\r//g", "/work/change_spam.csv"])
4-2. insert_postsql.py
#!/usr/bin/env python3
import psycopg2
from psycopg2 import sql
# PostgreSQL 연결 정보 설정
conn_params = {
'dbname': 'textmin',
'user': 'root',
'password': '!nds1101',
'host': '169.254.226.50',
'port': 5432
}
# 데이터베이스 연결
conn = psycopg2.connect(**conn_params)
cur = conn.cursor()
# 데이터 삽입 sql 쿼리
insert_query = """
INSERT INTO text_data (label, text) VALUES (%s, %s);
"""
# csv파일 데이터 읽기 >> postsql insert
with open('/work/change_spam.csv', 'r') as f:
next(f) # 첫 번째 라인은 헤더이므로 건너뜁니다.
for line in f:
label, text = line.split('\t') # CSV 파일에서 label과 text를 읽어옵니다.
cur.execute(insert_query, (label, text)) # 데이터 삽입 쿼리 실행
# 변경 내용 커밋
conn.commit()
# 연결 종료
cur.close()
conn.close()
'데이터 엔지니어( 실습 정리 )' 카테고리의 다른 글
| 하둡 클러스터 운영( hive 컨테이너 ) 실습[hive] (0) | 2024.06.13 |
|---|---|
| docker 폐쇄망 설치(우분투 22.04) (0) | 2024.06.13 |
| 하둡 클러스터 운영( 도커 컨테이너 ) 실습[하둡] (0) | 2024.05.21 |
| 하둡 클러스터 운영( 도커 컨테이너 ) 실습[주키퍼] (0) | 2024.05.08 |
| 우분투 22.04 config 자동 설정 파이프라인 (0) | 2024.05.01 |