오픈소스기반데이터분석 5강 - 데이터 저장
수집한 데이터를 지속적으로 활용하기 위한 파일과 데이터베이스 저장 방식을 이해한다. 이어서 Pandas DataFrame의 구조와 인덱스, 다양한 데이터 소스로부터의 생성, CSV·JSON·Excel·데이터베이스 등으로 저장하는 방법과 공공데이터 API 활용 흐름을 정리한다.
제1장 데이터 저장의 필요성과 선택 기준
1. 데이터를 영구적으로 관리하는 과정
데이터 저장은 수집한 데이터를 한 번 사용하고 버리는 것이 아니라 이후에도 분석, 공유, 재현에 활용할 수 있도록 적절하게 관리하는 과정이다. 데이터 분석 결과의 신뢰성을 유지하려면 원본 데이터와 가공 결과를 목적에 맞는 형식으로 보관해야 한다.
모든 데이터에 하나의 저장 방식이 적합한 것은 아니다. 데이터의 크기, 형태, 접근 빈도, 분석 목적에 따라 파일, 관계형 데이터베이스, 비관계형 데이터베이스 가운데 알맞은 방식을 선택한다. 저장 구조와 접근 방법뿐 아니라 호환성, 처리 성능, 무결성, 보안, 공유 가능성도 함께 고려해야 한다.
2. 분석 과정에서 저장이 필요한 시점
데이터는 수집 직후의 원시 형태, 정제와 변환을 거친 분석용 형태, 분석 결과와 보고용 형태로 나뉠 수 있다. 각 단계의 결과를 적절히 저장하면 같은 수집과 전처리를 반복하지 않고 후속 분석에 재사용할 수 있으며, 다른 시스템이나 분석자와 결과를 공유하기도 쉽다.
제2장 파일 기반 데이터 저장
1. 파일 저장의 특징
파일 저장은 운영체제의 파일 시스템에서 데이터를 독립적인 단위로 보관하는 방식이다. 텍스트, CSV, JSON, Excel 등 다양한 형태를 사용할 수 있고 여러 운영체제와 프로그램에서 읽고 쓸 수 있어 호환성이 높다. 데이터 전달과 간단한 분석 결과 공유에도 적합하다.
반면 데이터가 매우 커지거나 여러 사용자가 동시에 접근하는 상황에서는 파일 탐색과 갱신이 비효율적일 수 있다. 데이터 사이의 관계와 제약을 체계적으로 관리하기 어렵고, 데이터 무결성과 접근 통제 등 보안 측면도 데이터베이스보다 취약할 수 있다.
| 구분 | 파일 저장 |
|---|---|
| 장점 | 구조가 단순하고 호환성이 높으며 전송과 공유가 쉬움 |
| 형식 | 텍스트, CSV, JSON, Excel 등 |
| 한계 | 대규모 처리, 동시 접근, 무결성 관리와 보안에 불리할 수 있음 |
| 적합한 상황 | 작거나 중간 규모의 데이터 교환과 분석 결과 보관 |
2. CSV 형식
CSV는 각 행을 줄로 구분하고 열 값을 쉼표 같은 구분자로 나열하는 표 형태의 텍스트 형식이다. Microsoft Excel, Google 스프레드시트, 데이터베이스와 다양한 분석 도구가 지원하므로 데이터 교환이 쉽다.
DataFrame도 행과 열을 가진 2차원 구조이므로 CSV와 구조적으로 잘 대응한다. 학생 번호, 데이터베이스 점수, 클라우드컴퓨팅 점수, 파이썬 점수, 학습률 같은 열을 가진 DataFrame을 CSV로 저장하면 한 행이 한 학생의 관측값이 된다.
student_id,database_score,cloudcomputing_score,python_score,watch_rate
101,85,78,92,0.95
102,76,82,78,0.87
103,92,95,85,0.99
3. JSON 형식
JSON은 키와 값, 객체와 배열을 이용해 계층 구조를 표현하는 텍스트 형식이다. 단순한 행과 열만이 아니라 이름, 나이, 거주지, 여러 관심사처럼 중첩되거나 반복되는 데이터를 저장하는 데 유용하다. Python의 json 라이브러리 또는 Pandas를 이용해 JSON 파일이나 문자열로 저장할 수 있다.
{
"이름": "홍길동",
"나이": 25,
"거주지": "서울",
"관심사": ["프로그래밍", "데이터 분석", "여행"]
}
제3장 데이터베이스 저장
1. 체계적인 저장과 신속한 활용
데이터베이스는 수집한 정보를 효율적으로 보관하고 필요할 때 신속하게 검색·활용하기 위한 체계적인 저장 시스템이다. 데이터가 계속 발생하고 검색, 추가, 수정, 삭제가 반복되는 서비스에서는 단순 파일보다 데이터베이스가 적합할 수 있다.
2. 관계형 데이터베이스
RDBMS는 데이터를 행과 열로 구성된 테이블 형태로 저장한다. SQL을 이용하여 생성, 조회, 수정, 삭제에 해당하는 CRUD 작업을 수행한다. 정형 데이터와 테이블 사이의 관계, 무결성 규칙을 체계적으로 관리하는 데 적합하다.
3. 비관계형 데이터베이스
비RDBMS는 문서, 키-값 쌍, 그래프 등 다양한 유연한 저장 구조를 지원하며 유사 SQL이나 전용 API로 데이터를 조작한다. MongoDB, Cassandra, Redis, Elasticsearch가 대표적인 비관계형 데이터베이스이다.
| 구분 | RDBMS | 비RDBMS |
|---|---|---|
| 주요 구조 | 행과 열의 테이블 | 문서, 키-값, 그래프 등 |
| 조작 방식 | SQL과 CRUD | 유사 SQL 또는 API |
| 특징 | 정형 구조와 관계 관리 | 유연한 데이터 모델 |
| 예 | 관계형 데이터베이스 관리 시스템 | MongoDB, Cassandra, Redis, Elasticsearch |
제4장 Pandas DataFrame의 구조
1. 2차원 테이블 자료구조
DataFrame은 Pandas가 제공하는 2차원 테이블 형태의 자료구조이다. 단순히 표를 표시하는 데 그치지 않고 데이터를 효율적으로 처리하고 분석하도록 설계되었다. 행과 열이 교차하는 위치에는 요소 또는 엔트리라고 부르는 값이 들어간다.
열에는 컬럼 이름과 컬럼 인덱스가 있고, 행에는 행 인덱스가 있다. 열은 학생 번호, 점수, 시청률처럼 같은 의미의 값을 묶으며, 행은 한 학생이나 한 관측 대상에 대한 레코드를 나타낸다.
2. 인덱스의 역할
DataFrame을 생성하면 기본적으로 0부터 시작하는 정수형 인덱스가 자동으로 부여된다. set_index()를 사용하면 학생 번호, 문자열, 날짜 등 특정 열을 행 인덱스로 설정할 수 있다. 인덱스는 특정 행을 빠르게 찾고 데이터를 선택·정렬·조작하는 기준이 된다.
DataFrame 내부의 데이터는 NumPy 배열 형태로 저장되어 효율적인 저장과 빠른 수치 연산을 지원한다. index, columns, values 속성을 확인하면 행 인덱스, 열 이름, 내부 값의 구조를 각각 파악할 수 있다.
제5장 DataFrame 생성과 구조 확인
1. 딕셔너리에서 생성
Python 딕셔너리로 DataFrame을 만들 때 키는 열 이름, 각 키에 연결된 리스트는 열 데이터가 된다. 모든 열의 데이터 길이가 같아야 각 위치의 값들이 하나의 행을 이룬다.
import pandas as pd
data = {
"이름": ["김철수", "이영희", "박민수", "최지훈"],
"학년": [1, 2, 3, 4],
"학점": [4.2, 3.8, 4.5, 3.9],
"학과": ["컴퓨터학", "경영학", "농학", "교육학"],
"동아리": ["프로그래밍", "독서", "로봇", "봉사"]
}
df = pd.DataFrame(data)
df.index는 행 인덱스, df.columns는 열 이름, df.values는 NumPy 배열 형태의 값들을 보여 준다. df.values.tolist()를 사용하면 행별 값을 중첩 리스트로 변환할 수 있다.
2. 다양한 원시 데이터로부터 생성
DataFrame은 딕셔너리, 레코드 시퀀스, CSV, JSON, Excel, HTML 테이블, 클립보드, 관계형 데이터베이스 등 다양한 원시 데이터로부터 만들 수 있다. 입력 형태에 맞는 생성 또는 읽기 함수를 선택해야 한다.
| 데이터 유형 | 대표 메서드 | 기능 |
|---|---|---|
| 딕셔너리 | from_dict() | 키를 열 이름, 값을 열 데이터로 변환 |
| 레코드 시퀀스 | from_records() | 리스트·튜플·딕셔너리 레코드를 변환 |
| CSV | read_csv() | CSV 파일에서 생성 |
| JSON | read_json() | JSON 파일 또는 문자열에서 생성 |
| Excel | read_excel() | Excel 파일에서 생성 |
| HTML·클립보드·SQL | 해당 입력용 함수 | 표, 복사 데이터, SQL 결과를 변환 |
제6장 DataFrame 저장 메서드
1. 분석 결과의 보관과 공유
데이터를 수집하고 분석한 뒤에는 결과를 적절한 형태로 저장하여 보관하거나 다른 시스템과 공유해야 한다. DataFrame은 내부 데이터를 여러 파일 형식과 데이터 구조로 변환하는 메서드를 제공한다. 저장 메서드는 주로 to_로 시작한다.
형식을 선택할 때는 사람이 읽기 쉬운지, 다른 도구와 연동되는지, 계층 구조가 필요한지, 서식이 필요한지, 데이터베이스에 적재할 것인지 등을 고려한다.
2. 주요 저장·변환 메서드
| 메서드 | 저장 또는 변환 결과 |
|---|---|
to_csv() | CSV 파일 |
to_json() | JSON 파일 또는 JSON 문자열 |
to_excel() | Excel 파일(.xlsx) |
to_html() | HTML 테이블 |
to_sql() | 관계형 데이터베이스의 SQL 테이블 |
to_clipboard() | 클립보드에 복사 |
to_dict() | Python 딕셔너리 |
to_string() | 문자열 출력 형태 |
to_markdown() | Markdown 표 문자열 |
제7장 공공데이터 API 활용 실습
1. 공공데이터포털과 대기오염 정보
개념 정리 실습에서는 공공데이터포털의 API를 이용해 대기오염 정보를 수집하고 분석 가능한 형태로 가공한다. 공공데이터포털은 공공기관이 보유한 교통, 환경, 보건, 문화 등 다양한 분야의 데이터를 통합 제공하는 플랫폼이다.
2. API 사용 준비
먼저 공공데이터포털에 가입하고 필요한 대기오염 정보 API의 사용을 신청한 뒤 인증키를 발급받는다. API 키는 외부 서버에 접근할 권한을 확인하는 고유한 인증 문자열이며, 일반적으로 데이터 수집 API 호출에 필요하다.
3. 데이터 수집·변환·저장 흐름
requests라이브러리로 API를 호출한다.- 서버가 반환한 JSON 데이터를 수신한다.
- Pandas로 필요한 항목을 정리하여 DataFrame으로 변환한다.
- 분석 목적에 맞게 CSV, JSON, Excel 등으로 저장한다.
| 단계 | 주요 내용 | 도구 |
|---|---|---|
| API 준비 | 회원가입, API 신청, 인증키 발급 | data.go.kr |
| 수집 | API 호출과 JSON 수신 | requests |
| 변환 | 분석 가능한 테이블 구성 | Pandas DataFrame |
| 저장 | CSV, JSON, Excel 출력 | DataFrame 저장 메서드 |
4. API 키 보안
API 키는 외부에 노출되지 않도록 철저히 관리해야 한다. 다른 사람이 키를 사용하면 할당량을 초과하거나 비용·서비스 제한 문제가 생길 수 있다. 사용량을 모니터링하고 적절한 수준에서 관리하며 GitHub와 같은 공개 저장소에 키를 업로드하지 않는다.
핵심 개념 정리
- 수집 데이터는 크기, 형태, 접근 빈도와 분석 목적에 맞는 형식으로 저장해야 한다.
- 파일은 호환성과 공유성이 높지만 대규모 처리, 무결성 관리와 보안에 한계가 있다.
- CSV는 평면 표 데이터, JSON은 계층 구조 데이터를 저장하는 데 유용하다.
- RDBMS는 행과 열의 테이블과 SQL을 사용하고 비RDBMS는 문서·키-값·그래프 등 유연한 구조를 지원한다.
- DataFrame은 행, 열, 인덱스와 값으로 구성된 Pandas의 2차원 분석 자료구조이다.
- DataFrame은 딕셔너리, 레코드, CSV, JSON, Excel, 데이터베이스 등 다양한 소스에서 생성할 수 있다.
to_csv(),to_json(),to_excel(),to_sql()등으로 분석 결과를 저장·변환한다.- 공공데이터 API는 인증키 발급, 호출, JSON 수신, DataFrame 변환, 결과 저장의 흐름으로 활용한다.
- API 키는 공개 저장소에 올리지 않고 사용량과 호출 제한을 관리한다.
데이터 저장은 분석의 마지막 단계만이 아니라 수집과 전처리, 공유와 재사용을 연결하는 핵심 과정이다. 저장 형식을 선택할 때는 데이터 구조와 규모, 사용할 도구와 목적을 함께 고려해야 한다. Pandas DataFrame은 다양한 입력을 통합하고 여러 출력 형식으로 변환하는 중심 역할을 하며, 외부 API를 사용할 때는 데이터 처리뿐 아니라 인증키 보안까지 관리해야 한다.
예상문제 20선
1. 데이터 저장 방식을 선택할 때 고려할 요소로 가장 적절한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
데이터 특성과 활용 목적에 따라 필요한 성능, 구조, 호환성과 보안이 달라지므로 여러 기준을 종합해야 한다.
2. 파일 기반 저장의 장점은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
CSV와 JSON 같은 파일은 여러 운영체제와 프로그램에서 지원되어 데이터 교환과 공유가 쉽다.
3. CSV 형식에 가장 적합한 데이터는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
CSV는 각 행과 열 값을 구분자로 표현하므로 DataFrame 같은 2차원 표 구조와 잘 대응한다.
4. 계층 구조의 데이터를 저장하는 데 유용한 형식은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
JSON은 객체와 배열을 중첩해 계층적인 데이터 구조를 표현할 수 있다.
5. 관계형 데이터베이스의 특징은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
RDBMS는 정형 테이블 구조와 SQL을 중심으로 데이터를 생성, 조회, 수정, 삭제한다.
6. 비관계형 데이터베이스의 예가 아닌 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
DataFrame은 Pandas의 분석 자료구조이며 MongoDB, Redis, Elasticsearch는 비관계형 데이터 저장 시스템이다.
7. Pandas DataFrame에 대한 설명으로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
DataFrame은 행, 열, 인덱스와 엔트리를 가진 표 형태의 2차원 자료구조이다.
8. DataFrame을 생성할 때 기본적으로 부여되는 행 인덱스는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
별도의 인덱스를 지정하지 않으면 0부터 증가하는 기본 정수 인덱스가 자동 생성된다.
9. 특정 열을 DataFrame의 행 인덱스로 지정하는 메서드는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①set_index()로 학생 번호, 날짜, 문자열 같은 특정 열을 행 식별 기준으로 바꿀 수 있다.
10. DataFrame 내부 데이터를 NumPy 배열 형태로 확인하는 속성은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④values는 DataFrame의 값들을 NumPy 배열 형태로 제공한다.
11. CSV 파일을 DataFrame으로 읽는 대표 함수는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②read_csv()는 CSV 파일을 읽어 DataFrame을 만들고 to_csv()는 반대로 저장한다.
12. 딕셔너리로 DataFrame을 만들 때의 연결로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
딕셔너리의 각 키가 컬럼 이름이 되고 해당 리스트 값들이 그 컬럼의 행 값이 된다.
13. DataFrame을 JSON 파일 또는 문자열로 저장하는 메서드는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③to_json()은 DataFrame 내용을 JSON 파일이나 JSON 문자열로 변환한다.
14. DataFrame을 관계형 데이터베이스 테이블로 저장하는 메서드는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②to_sql()은 DataFrame을 관계형 데이터베이스의 SQL 테이블로 저장하는 데 사용한다.
15. DataFrame을 Markdown 표 문자열로 변환하는 메서드는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①to_markdown()은 DataFrame을 Markdown 형식의 표 문자열로 변환한다.
16. 공공데이터 API 활용의 올바른 흐름은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
인증 준비 후 데이터를 호출하고 응답을 분석 구조로 변환한 다음 목적에 맞는 형식으로 저장한다.
17. HTTP API 호출에 사용하는 Python 라이브러리로 강의에서 제시한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②requests로 외부 API를 호출하고 받은 JSON을 Pandas로 변환하는 흐름을 사용한다.
18. API 키 관리 방법으로 옳지 않은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
API 키는 접근 권한을 나타내므로 공개 저장소에 올리면 도용과 할당량 초과 위험이 있다.
19. 분석 결과를 다른 스프레드시트 사용자와 공유하면서 서식 활용도 고려할 때 적합한 저장 메서드는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①to_excel()은 DataFrame을 .xlsx 형식으로 저장하여 스프레드시트 도구에서 활용하게 한다.
20. 파일과 데이터베이스 저장 방식의 관계를 가장 잘 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
파일과 데이터베이스는 장단점과 적합한 상황이 다르므로 데이터 특성과 활용 목적을 기준으로 선택한다.
댓글
댓글 쓰기