Home [오픈 소스 기반 데이터 분석] 5강 - 데이터 저장
Post
Cancel

[오픈 소스 기반 데이터 분석] 5강 - 데이터 저장

💡해당 게시글은 방송통신대학교 정재화 교수님의 '오픈 소스 기반 데이터 분석' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • 데이터 분석을 효과적으로 수행하려면 수집 된 데이터를 일시적으로 처리하는 데 그치지 않고 분석 목적에 맞게 적절한 형식으로 저장하고 재사용할 수 있도록 관리하는 과정이 필요함
  • 다양한 환경과 시스템에서 데이터를 공유하거나 연동하려면 범용적인 저장 형식을 선택하고 데이터의 구조와 특성에 맞게 저장 전략을 수립해야 함
  • 데이터 저장의 개념과 필요성을 이해하고, 파일 기반 저장(CSV, JSON, Excel 등)과 데이터베이스 기반 저장의 방식별 특징과 장단점을 비교 학습함
  • pandas 라이브러리의 핵심 객체인 DataFrame을 생성하고 저장하는 다양한 방법을 실습함
  • 공공 데이터 포털의 API를 활용한 실제 데이터 수집과 변환, 저장 사례를 통해, 외부 데이터와의 연계성과 저장 실습 경험을 통해 데이터 분석의 기본이 되는 수집 및 저장 기술을 체계적으로 학습함



학습 목표


  • Pandas의 DataFrame을 활용하여 수집한 데이터를 처리할 수 있음
  • DataFrame에 저장된 데이터를 다양한 형식으로 저장할 수 있음
  • 데이터 수집 과정에서 발생할 수 있는 문제점을 인식하고 이를 해결하는 방법을 적용할 수 있음



강의록


데이터 저장의 이해

데이터 저장의 필요성

  • 수집한 데이터를 영구적으로 사용할 수 있도록 적절하게 관리하는 과정
    • 저장 방식은 데이터의 크기, 형태, 접근 빈도, 분석 목적 등에 따라 상이
    • 저장 방식 별 특징, 장단점에 대해 구체적 이해 필요
  • 데이터 저장 방식: 파일
    • OS의 파일 시스템 상에서 데이터를 독립적인 단위로 저장
    • 텍스트 파일, CSV 파일, JSON 파일 등 다양한 형태 가능
    • 호환성이 뛰어나고 여러 환경에서 파일 읽기/쓰기 가능
    • 대규모 데이터 처리에 비효율적이고 데이터 무결성과 보안 측면에서 취약

CSV(Comma Separated Version)

  • MS 엑셀, 구글 스프레드시트, 데이터베이스 등 다양한 프로그램과 연동이 용이
  • DataFrame은 CSV와 구조적 유사성으로 CSV 파일로 변환하여 저장하는 방법을 제공

    image.png

JSON(JavaScript Object Notation)

  • 계층 구조를 가진 데이터를 저장하는데 유용
  • json 또는 pandas 라이브러리를 사용하여 데이터를 JSON 파일로 저장 가능

    class="highlight">
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      [
        {
          "이름": "홍길동",
          "나이": 25,
          "거주지": "서울",
          "관심사": [
            "프로그래밍",
            "데이터 분석",
            "여행"
          ]
        }
      ]
    

    데이터 저장 방식: 데이터베이스

    • 수집한 정보를 효율적으로 보관하고 필요할 때 신속하게 활용하기 위한 체계적인 저장 시스템

      image.png

    • 데이터베이스의 종류

      • RDBMS
        • 데이터를 행과 열로 구성된 테이블 형태로 저장 하고 SQL을 통해 데이터의 CRUD 수행
      • 비RDBMS
        • 문서, 키-값의 쌍, 그래프 등 다양한 유연한 방식의 저장 구조를 지원하고 유사 SQL 및 API를 통해 조작
        • MongoDB, Cassandra, Redis, Elasticsearch 등이 대표적인 비관계형 데이터베이스

    Pandas DataFrame의 이해

    DataFrame의 구조

    • 2차원 테이블 형태의 자료 구조
      • 표 형태 그 이상으로, 데이터를 효율적으로 처리하고 분석 할 수 있도록 설계

        image.png

    DataFrame의 인덱스

    | | student_id | database_score | cloudcomputing_score | python_score | watch_rate | | — | — | — | — | — | — | | 0 | 101 | 85 | 78 | 92 | 0.95 | | 1 | 102 | 76 | 82 | 78 | 0.87 | | 2 | 103 | 92 | 95 | 85 | 0.99 | | 3 | 104 | 63 | 70 | 75 | 0.80 | | 4 | 105 | 88 | 84 | 91 | 0.93 |

    • DataFrame 생성 시 정수형 인덱스가 자동 부여
      • set_index() 메소드를 사용하여 문자열, 날짜 등 특정 컬럼을 인덱스로 설정 가능
      • 특정 행을 빠르게 찾고, 데이터를 조작하는 데 사용
    • 데이터는 DataFrame 내부에 NumPy의 배열 형태로 저장
      • 데이터를 효율적으로 저장하고 고속의 수치 연산 수행

    DataFrame 활용 예

    class="highlight">
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    import pandas as pd
    
    data = {
        "이름": ["김철수", "이영희", "박민수", "최지훈"],
        "학년": [1, 2, 3, 4],
        "학점": [4.2, 3.8, 4.5, 3.9],
        "학과": ["컴퓨터학", "경영학", "농학", "교육학"],
        "동아리": ["프로그래밍", "독서", "로봇", "봉사"]
    }
    df = pd.DataFrame(data)
    
    print("index:\\n", df.index)
    print("\\ncolumns:\\n", df.columns)
    print("\\nvalues:\\n", df.values)
    print("\\nrows:\\n", df.values.tolist())
    

    DataFrame 생성 함수

    • 딕셔너리, JSON, CSV, 데이터베이스 등 다양한 형태의 원시 데이터(raw data)를 DataFrame으로 변환

      데이터 유형메소드명설명
      딕셔너리from_dict()딕셔너리를 변환. 키는 열 이름, 값은 열 데이터로 설정
      시퀀스(리스트, 튜플, 딕셔너리)from_records()레코드(리스트, 튜플, 딕셔너리)의 시퀀스를 변환
      CSVread_csv()CSV 파일에서 변환
      JSONread_json()JSON 파일/문자열에서 변환
      엑셀 파일read_excel()엑셀 파일에서 변환
      HTMLfrom_html()HTML 테이블 데이터를 변환
      클립 보드from_clipboard()클립보드(복사한 데이터)에서 변환
      관계형 DBfrom_sql()SQL 결과 또는 DB 테이블에서 변환

    DataFrame의 저장

    • 데이터 수집하고 데이터 분석 후
      • 데이터 분석 결과를 적절한 형태로 저장하여 보관
      • 다른 시스템과 공유하는 과정이 필요
    • DataFrame 객체는 저장된 데이터를 다양한 형식으로 저장하여 분석 결과를 활용하는 데 필요한 메소드 제공
      • to_로 시작하는 저장 메소드
      • DataFrame의 내용을 CSV, JSON, 엑셀, 데이터베이스 등 각기 다른 파일 형식이나 데이터 구조로 변환·저장
      • 파일 형식 별 특징과 장·단점 이해 요구

    DataFrame의 저장

    메소드설명
    to_csv()CSV 파일로 저장
    to_json()JSON 파일 또는 JSON 문자열로 저장
    to_excel()엑셀 파일(.xlsx)로 저장
    to_html()HTML 테이블 형식으로 변환
    to_sql()관계형 데이터베이스(SQL 테이블)로 저장
    to_clipboard()클립보드에 복사
    to_dict()파이썬 딕셔너리(dictionary)로 변환
    to_string()문자열로 변환하여 출력
    to_markdown()마크다운(markdown) 형식의 문자열로 변환

    개념 정리 실습

    • 공공 데이터 포털(data.go.kr)의 API를 활용하여 대기 오염 정보를 수집하고, 분석 가능한 형태로 가공하는 과정을 실습
      • 공공기관이 보유한 데이터를 제공하는 통합 플랫폼
      • 교통, 환경, 보건, 문화 등 광범위한 분야의 데이터를 쉽게 활용할 수 있도록 개방

      | 단계 | 주요 내용 | 사용 도구 / 방법 | | — | — | — | | 1. API 사용 준비 | - 공공 데이터 포털 가입

      • 대기오염정보 API 신청
      • 인증키 발급https://www.data.go.kr 
         2. 데이터 수집 및 변환- API 호출
      • JSON 데이터 수신
      • DataFrame 변환- requests 라이브러리
      • Pandas 라이브러리  
         3. 데이터 저장- CSV 형식 저장
      • JSON 형식 저장
      • Excel 형식 저장DataFrame 메서드

    개념 정리 실습-API 키

    • 외부 서비스와의 통신을 위해 제공되는 인증 수단으로, 일반적으로 데이터 수집을 위한 API 호출 시 필요
      • 외부 서버에 접근할 수 있도록 허가 받는 고유한 문자열
    • 주의 사항
      • 외부에 노출되지 않도록 철저히 관리(사용량 제한을 초과)
      • 사용량을 모니터링하고 적절한 수준에서 관리
      • 깃허브나 공개 저장소에 API 키를 업로드하지 않도록 주의



    연습 문제


    1. 데이터 저장의 가장 주된 목적은 무엇인가? a. 데이터를 영구적으로 보관하고 재사용하기 위해

    2. 다음 중 파일 형식에 따라 DataFrame을 저장하는 방식이 가장 적절하게 연결된 것은?

      a. Excel 파일 → to_excel()

    3. 다음 중 공공 데이터 포털 API 활용 시 일반적으로 필요한 작업이 아닌 것은?

      a. 이미지 압축 알고리즘 구현

      • 공공 데이터 포털 API 활용 시 일반적으로 필요한 작업
        • 인증키 발급
        • API 요청 주소 확인
        • JSON 응답 데이터 처리



    정리 하기


    • 수집한 데이터를 적절한 형태로 저장하여 보관하거나 공유해야 함
    • 데이터의 크기, 형태, 접근 빈도, 분석 목적에 따라 저장 방식이 달라짐
    • 파일은 CSV, JSON, Excel 등 다양한 형식으로 저장할 수 있는 범용적 저장 방식임
    • 파일은 대규모 데이터 처리에 비효율적이고 데이터 무결성과 보안 측면에서 취약함
    • Pandas는 데이터 분석을 위한 핵심 라이브러리로 DataFrame 객체를 제공함
    • DataFrame은 딕셔너리, 리스트, 파일 등 다양한 데이터 소스에서 생성할 수 있음
    • DataFrame은 데이터를 CSV, JSON, Excel 등 다양한 형식으로 저장할 수 있음
    Contents

    [클라우드 컴퓨팅] 4강 - 클라우드 컴퓨팅 서비스

    [클라우드 컴퓨팅] 5강 - 클라우드 이용 모델