목차
1. 데이터 저장의 필요성
2. CSV 파일
3. Excel 파일
4. JSON 파일
5. 데이터 형식 비교
6. SQLite 데이터베이스
7. Python과 SQLite 연동
8. SQLite 데이터 처리 (CRUD)
1. 데이터 저장의 필요성
머신러닝과 딥러닝에서는 데이터를 저장하고 관리하는 과정이 매우 중요하다.
데이터는 다음과 같은 형태로 저장될 수 있다.
- CSV, Excel, JSON, 데이터베이스 등
이렇게 저장된 데이터는 데이터 분석, 전처리, 머신러닝 모델 학습 과정에서 활용된다.
2 CSV 파일
CSV(Comma-Separated Values)는 데이터를 쉼표(,)로 구분하여 저장하는 텍스트 기반 파일 형식이다.
특징
- 매우 가벼운 파일 형식
- 대부분의 데이터 분석 도구와 호환
- 대량 데이터 저장에 적합
Excel은 편리하지만 파일이 무거운 편이며, CSV는 가볍고 단순한 구조를 가지기 때문에 데이터 분석에서 많이 사용된다.
2-1 CSV 파일 읽기
CSV 파일은 pandas 라이브러리를 사용해 쉽게 읽을 수 있다.
import pandas as pd
data = pd.read_csv('file.csv')
print(data.head())
- read_csv(파일경로) : CSV 파일을 읽어 DataFrame 생성
- head() : 상위 데이터 확인
CSV 파일은 텍스트 파일이기 때문에 open()으로도 읽을 수 있다.
with open('data.csv', 'r') as file:
for line in file:
print(line.strip())
2-2 CSV 파일 쓰기
Python에서는 csv 모듈을 이용해 CSV 파일을 생성할 수 있다.
import csv
data = [
['name', 'age'],
['Tom', 20],
['Jane', 25]
]
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
writerows()는 2차원 리스트 데이터를 CSV로 저장할 때 자주 사용된다.
3. Excel 파일
Excel 파일은 표 형태의 데이터를 저장하고 시각화하는 데 강력한 도구이다.
특징
- 여러 시트 사용 가능
- 데이터 시각화 가능
- 보고서 작성에 유용
하지만, 파일 용량이 큰 편이며, 대규모 데이터 처리에는 비효율적이다.
3-1 Excel 파일 읽기
Excel 파일은 pandas를 사용하여 읽을 수 있다.
import pandas as pd
data = pd.read_excel('file.xlsx')
- read_excel(파일 경로) : 엑셀 파일 읽기
또는, openpyxl 라이브러리를 사용하기도 한다.
3-2 Excel 파일 쓰기
(설명 추가)
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df= pd.DataFrame(data)
df.to_excel('data.xlsx', index=False)
print("Excel 파일이 저장되었습니다!")
- to_excel() : DataFrame 데이터를 Excel 파일(.xlsx) 형식으로 저장하는 함수
- index=False : DataFrame의 인덱스를 Excel 파일에 함께 저장하지 않도록 설정
4. JSON 파일
JSON(JavaScript Object Notation)은 웹에서 데이터를 교환하기 위해 많이 사용되는 형식이다.
키-값 쌍으로 데이터를 저장하며, 계층적 데이터 구조를 표현할 수 있어, XML 대안으로 자주 사용된다.
특징
- 계층 구조 데이터 표현 가능
- API 데이터 교환에 적합
예
{
"name": "Tom",
"age": 20
}
4-1 JSON 파일 읽기
Python에서는 json 모듈을 사용한다.
import json
with open('data.json') as f:
data = json.load(f)
print(data)
- json.load() : JSON 데이터를 Python 딕셔너리로 변환한다.
4-2 JSON 파일 쓰기
(설명 추가)
import json
data = {
'people': [
{'name': 'Alice', 'age': 30, 'city': 'New York'},
{'name': 'Bob', 'age': 25, 'city': 'Los Angeles'},
{'name': 'Charlie', 'age': 35, 'city': 'Chicago'}
]
}
with open('data.json', mode='w', encoding='utf-8') as file:
json.dump(data, file, indent=4)
print("JSON 파일이 저장되었습니다!")
- json.dump() : 데이터를 JSON 형식으로 저장
- indent=4 : 사람이 읽기 쉽게 데이터를 정렬
5. 데이터 형식 비교
| 형식 | 장점 | 단점 |
| CSV | 간단하고 가벼움, 호환성 좋음 | 계층적 데이터 저장 불가 |
| Excel | 시각화, 다중 시트 지원, 구조화된 데이터 관리 | 무겁고, 대규모 데이터 교환에 부적합 |
| JSON | 계층적 데이터 저장 가능, API 데이터 교환에 적합 | 사람이 직접 읽기 어렵고, 편집 도구가 필요함 |
활용 팁
- CSV → 대량 데이터 저장 및 분석 초기 단계
- Excel → 데이터 보고서 및 분석
- JSON → API 데이터 교환
6. SQLite 데이터베이스
SQLite는 가볍고 파일 기반의 관계형 데이터베이스(RDBMS)이다.
특징
- 서버 설치 필요 없음
- 파일 기반 데이터베이스
- Python에서 기본 제공
대표적인 관계형 데이터베이스
- MySQL
- MariaDB
- PostgreSQL
SQLite도 같은 RDBMS 구조를 가진다.
7. Python과 SQLite 연동
Python에서는 sqlite3 모듈을 사용한다.
import sqlite3
connection = sqlite3.connect("example.db")
print("데이터베이스 연결 성공")
connection.close()
- connect() : 데이터베이스 연결
- close() : 연결 종료
데이터베이스는 사용 후 반드시 연결을 종료해야 한다.
8. SQLite 데이터 처리 (CRUD)
관계형 데이터베이스(RDBMS)는 데이터를 테이블(table) 구조로 저장하며, 각 테이블은 행(row)과 열(column)로 구성된다.
행(row)은 하나의 데이터 레코드를 의미하고, 열(column)은 데이터의 속성을 의미한다.
SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터를 생성, 조회, 수정, 삭제하기 위해 사용하는 질의 언어이다.
대표적인 SQL 명령어는 다음과 같으며, 이러한 데이터 처리 작업을 보통 CRUD라고 한다.
| SQL | 작업 | 의미 |
| INSERT | CREATE | 데이터 생성 |
| SELECT | READ | 데이터 조회 |
| UPDATE | UPDATE | 데이터 수정 |
| DELETE | DELETE | 데이터 삭제 |
8-1 테이블 생성
Syntax
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
import sqlite3
sql_create = '''
create table user (
id integer primary key autoincrement,
name text not null,
age integer,
city text
)
'''
conn = sqlite3.connect('first.db')
cursor = conn.cursor()
cursor.execute(sql_create)
conn.close()
- cursor() : SQL 명령을 실행하기 위한 객체를 생성하는 함수
- execute() : SQL 문을 실제 데이터베이스에 실행하는 함수
- close() : 데이터베이스 연결을 종료하는 함수
- PRIMARY KEY : 테이블의 각 행을 고유하게 식별하는 값 (중복 불가, NULL 불가)
- AUTOINCREMENT : 새로운 행이 추가될 때 자동으로 증가하는 숫자를 생성
- NOT NULL : 해당 컬럼에 반드시 값이 존재해야 하는 제약 조건
설명 추가해야됨
8-2 데이터 삽입
Syntax1
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Syntax2
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
sql_insert = '''
insert into user (name, age, city) values (?, ?, ?)
'''
conn = sqlite3.connect('first.db')
cursor = conn.cursor()
cursor.execute(sql_insert, ('cool', 20, 'seoul'))
conn.commit()
conn.close()
- ? : SQL Injection 공격을 방지하기 위한 자리표시자
- SQL Injection은 공격자가 입력값에 SQL 코드를 삽입하여 데이터베이스를 조작하는 공격 기법이다.
SQLite에서는 ? 자리표시자를 사용하여, 사용자 입력을 SQL 문과 분리함으로써 이러한 공격을 방지할 수 있다.
- SQL Injection은 공격자가 입력값에 SQL 코드를 삽입하여 데이터베이스를 조작하는 공격 기법이다.
- execute() : SQL 명령을 실행하는 함수
- commit() : 데이터 변경 사항을 데이터베이스에 실제로 반영하는 명령
- close() : 데이터베이스 연결 종료
8-3 데이터 조회
Syntax
SELECT column1, column2, ...
FROM table_name;
sql_select = 'select * from user'
cursor.execute(sql_select)
rows = cursor.fetchall()
for row in rows:
print(row)
- execute() : SQL 명령을 실행하는 함수
- fetchall() : 조회된 모든 행(row)을 리스트 형태로 반환
- fetchone() : 조회된 결과 중 한 행만 반환
8-4 데이터 조건 검색/칼럼 선택 조회
# 검색(질의) : 행단위 검색
sql_select_where = 'select * from user where id > 2'
sql_select_where_col = 'select name, city from user where id > 2'
# 1. 데이터베이스 연결
conn = sqlite3.connect('first.db')
print('데이터베이스 연결 성공')
# 2. SQL 실행 객체 생성
cursor = conn.cursor()
# 3. SQL 실행
cursor.execute(sql_select_where)
rows = cursor.fetchall()
for row in rows:
print(row)
# 4. 연결 종료
conn.close()
- WHERE : 특정 조건에 맞는 데이터만 조회할 때 사용하는 SQL 키워드
- 예시 : id > 2 : id 값이 2보다 큰 데이터 조회
8-5 데이터 수정
Syntax
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
sql_update = 'update user set age=?, name=? where id=?'
cursor.execute(sql_update, (40, 'king', 1))
conn.commit()
- execute() : SQL 명령을 실행하는 함수
- commit() : 데이터 변경 사항을 데이터베이스에 실제로 반영하는 명령
8-6 데이터 삭제
WHERE 조건을 지정하지 않으면 모든 데이터가 삭제될 수 있으므로 주의해야 한다.
Syntax
DELETE FROM table_name WHERE condition;
sql_delete = 'delete from user where id=?'
cursor.execute(sql_delete, (1,))
conn.commit()
- execute() : SQL 명령을 실행하는 함수
- commit() : 데이터 변경 사항을 데이터베이스에 실제로 반영하는 명령
튜플 형태 (1,) 은 Python에서 하나의 값만 가진 튜플을 의미한다.
SQL 실행 시 파라미터를 전달할 때는 단일 값이라도 튜플 형태로 전달해야 한다.
참고 - SQL 명령어 분류
| 분류 | 의미 | 대표 명령어 |
| DDL | 데이터 구조 정의 | CREATE ALTER DROP TRUNCATE |
| DML | 데이터 조작 | SELECT INSERT UPDATE DELETE |
| DCL | 권한 제어 | GRANT REVOKE |
| TCL | 트랜잭션 제어 | COMMIT ROLLBACK |
'머신러닝&딥러닝' 카테고리의 다른 글
| 머신러닝 & 딥러닝 기초 7편 | 데이터 정제(결측치, 이상치 처리 등) (1) | 2026.03.12 |
|---|---|
| 머신러닝 & 딥러닝 기초 6편 | 데이터 전처리 (0) | 2026.03.12 |
| 머신러닝 & 딥러닝 기초 4편 | API를 활용한 데이터 수집 (REST API) (1) | 2026.03.11 |
| 머신러닝 & 딥러닝 기초 3편 | 웹 스크래핑 기초: HTML, BeautifulSoup (0) | 2026.03.11 |
| 머신러닝 & 딥러닝 기초 2편 | 데이터 수집과 HTTP 요청 이해 (0) | 2026.03.11 |