Introduction to flat files

Data Frame

  • pandas - 2차원의 구조 (행, 열)

Flat Files

  • 간단하고 만들기 쉬움
  • 색상이나 볼드체 서식이 없는 일반 텍스트
  • 한 라인마다 하나의 행을 의미
  • delimiter로 필드가 구분됨
  • 일반적으로 delimiter는 콤마,( csv)
  • pandas는 delimiter와 상관없이 모든 플랫 파일을 불러올 수 있다.
import pandas as pd

tax_data = pd.read_csv('us-tax-data-2016.csv')
tax_data.head(5)

Loading other flat files

  • delimiter를 sep= 인자에 넣어준다.
import pandas as pd
tax_data = pd.read_csv('us_tax_data_2016.tsv', sep='\t')

Modifying flat file imports

Limiting Columns

  • usecols 인자를 이용해 로드할 열을 선택한다.
  • 모든 열 이름이나 열 번호의 리스트를 사용할 수 있다.
col_names = ['STATEFIPS', 'STATE', 'zipcode', 'agi_stub', 'N1']
col_nums = [0, 1, 2, 3, 4]

# choose columns to load by name
tax_data_v1 = pd.read_csv('us_tax_data_2016.csv', usecols=col_names)

tax_data_v1 = pd.read_csv('us_tax_data_2016.csv', usecols=col_nums)

Limiting Rows

  • nrows 인자를 이용해서 불러올 행의 수를 제한한다.
  • skiprows 인자는 건너뛸 행의 수를 선택한다. 이 경우 header=None으로 설정해야 한다.

Assigning Columns Names

  • names 인자 사용
  • 모든 열의 이름의 리스트가 있어야 함
  • 일부 열만 바꾸려면 불러온 후에 수행해야 함
col_names = list(tax_data_first1000)

tax_data_next500 = pd.read_csv('us_tax_data_2016.csv', nrows=500, skiprows=1000, header=None, names=col_names)

Handing errors and missing data

Common Flat File import issue

  • 열 데이터 타입이 잘못됨
  • 값이 누락됨
  • pandas가 읽을 수 없는 값

Specifying data types

  • pandas는 자동으로 열의 데이터 타입을 유추한다.
  • 데이터 타입을 특정해주기 위해 dtype 인자를 사용한다. 각 키는 열 이름이고 값은 데이터 타입이 들어 있는 딕셔너리를 받는다.

Customizing Missing Data values

  • pandas는 자동적으로 결측치를 해석한다
  • na_value 인자를 이용해 missing values를 커스텀할 수 있다.
  • single value, list, dictionary가 들어갈 수 있다.
tax_data = pd.read_csv('us_tax_data_2016.csv', na_values={'zipcode':0})

Lines with errors

  • pandas가 읽을 수 없는 레코드
  • error_bad_lines=False인자를 추가하면 pandas는 에러가 나는 행을 건너 뛴다.
  • warn_bad_lines=True 인자를 추가하면 파싱할 수 없는 줄을 건너뛸 때, 메시지를 표시하게 된다.

Introduction to spreadsheets

spreadsheet

  • excel
  • 행과 열이 있는 데이터 셀이 있는 테이블에 데이터가 저장됨
  • 플랫 파일과 달리 자동으로 업데이트 되는 공식이 있을 수 있음
  • 여러 시트가 있을 수 있음

Loading spreadsheet

  • read_excel()
  • usecols'A:P'와 같은 excel 열문자의 범위 문자열도 허용함
survey_data = pd.read_excel('fcc_survey_with_headers.xlsx',
                           skiprows=2, 
                           usecols='W:AB, AR')

Getting data from multiple worksheets

Selecting sheet to Load

  • read_excel()는 기본으로 첫번째 sheet만 가져온다
  • sheet_name인자를 사용해서 달느 시트를 가져올 수 있다.
  • 시트의 이름이나 인덱스 넘버를 받는다(zero index).
  • read_excel()에 들어간 인자는 모든 시트에 적용된다.

Loading All sheet

  • sheet name에 None을 전달한다
  • OrderedDict 리턴

Putting It All Together

all_responses = pd.DataFrame()

# Key는 시트이름, value는 프레임
for sheet_name, frame in survey_responses.items():
    frame['Year'] = sheet_name
    all_responses = all_responses.append(frame)

Modifying imports: true/false type

Boolean Data

  • True/False
  • pandas는 True/False column을 float 데이터로 로드한다.
  • read_excel()dtype 인자로 어떤 column을 bool 타입으로 만들어 줄지 정할 수 있다.
  • 오직 True와 False 값만 가져야 하므로 N/A 값은 True로 인코딩된다.
  • 'Yes', 'No' 같이 0과 1이 아니고 값이 다를 경우 true_value 인자를 사용한다.
bool_data = pd.read_excel('fcc_survey_boolean.xlsx',
                         dtype={'AttendedBootcamp': bool,
                               ...},
                         true_values=['Yes'],
                         false_values=['No'])

Modifying imports: parding date

Date and Time Data

  • python의 datetime 데이터타입으로 저장된다.
  • pandas는 날짜/시간 데이터를 객체로 불러온다.
  • timespan을 계산하려면 datetime 데이터 타입을 이용해야 한다.
  • dtype이 아닌 parse_dates 인자를 사용한다!
# 시간 데이터가 여러 열에 분산되어 있을 경우 중첩 리스트 넣기
date_cols = ['Part1StartTime', 'Part1EndTime', [['Part2StartDate', 'Part2StartTime']]]

survey_df = pd.read_excel('fcc_survey.xlsx',
                         parse_dates=date_cols)

# 컬럼의 이름을 지정해주고 싶으면 dict
date_cols = {'Part1Start': 'Part1StartTime',
            'Part1End': 'Part1EndTime',
            'Part2Start':['Part2StartDate',
                         'Part2StartTime']}

Non-Standard Dates

  • parse_date는 pandas가 이해할 수 있는 형식에만 작동함
  • to_datetime() 인자를 이용
  • 데이터 프레임과 column을 format 형식을 이용해 datetime format으로 바꿔줌
  • strftime.org
format_string = '%m%d%Y %H:%M:%S'
survey_df['Part2EndTime'] = pd.to_datetime(survey_df['Part2EndTime'],
                                          format=format_string)

Introduction to databases

Relational Databases

  • table로 정리된 데이터
  • row와 column으로 이루어짐
  • primary key를 이용해 테이블들이 연결될 수 있음
  • 스프레드 시트나 플랫파일보다 더 많은 데이터를 처리하고 더 많은 동시 사용자를 지원함
  • SQL을 통해 데이터베이스와 인터페이스

Common realational databases

  • SQLite
    • 컴퓨터 파일로 저장되는 데이터 베이스

Connecting to Databases

  • 데이터 베이스로 연결할 수 있는 way를 만든다
  • database를 쿼리한다.

Creating a Database Engine

  • SQLAlchemy
    • create_engine()은 데이터베이스 커넥션을 다룰 수 있게 해준다.
      • database에 대한 문자열 URL이 필요함
      • sqlite:///filename.db

Quering Database

  • 데이터 베이스에서 데이터를 로드하기 위해pd.read_sql(query, engine) 사용

Refining imports with SQL queries

SELECTing Columns

  • SELECT [column names] FROM [table name];
  • WHERE을 이용해 필터링
    • 표준 연산자
      • =, >, >=, <, <=, <>
    • 문자열 필터링
    • AND, OR과 사용 가능

More complex SQL queries

  • Get unique values for one or more columns with SELECT DISTINCT
  • Aggregate function
    • sum, avg, max, min
    • count
    • group by

Loading multiple tables with join

  • database records는 unique한 identifier가 있다.
  • JOIN ON을 이용해 서로 다른 테이블을 identifier로 조인할 수 있다.
  • SQL 키워드의 순서
    • SELECT
    • FROM
    • JOIN
    • WHERE
    • GROUP BY

Introduction to JSON

  • common web data format(자바스크립트)
  • 테이블 형식이 아님
  • record가 모두 동일한 컬럼을 가질 필요가 없음
  • 속성-값 쌍을 가진 collection(dictiㅐnary와 비슷)
  • 중첩 가능

Reading JSON Data

  • read_json()
    • json 파일 경로나 json 문자열을 넣을 수 있음
    • dtype 인자로 데이터타입 명시
    • orient 인자로 레코드들이 어떻게 정렬될 것인지 정한다.(record oriented or column oriented)

Introduction to APIs

API

  • 어플리케이션이 다른 프로그램들과 어떻게 소통할지 정의한다.
  • 데이터베이스 구조를 몰라도 api를 통해 데이터를 얻을 수 있다.

request

  • request.get(url_string):url에서 데이터 가져오기
    • params: 딕셔너리를 받아 api에 값을 전달한다.
    • header: 딕셔너리를 받아 사용자 인증키를 전달한다.
  • response 객체를 리턴하며 response.json()메소드를 사용해야 결과값만 가져올 수 있다.

Working with nested JSONs

Nested JSONs

  • value 자체가 객체인 경우 JSON이 중첩된다.
  • pandas.io.json
    • JSON을 읽고 쓰기 위한 판다스의 서브모듈
    • json_normalize(): 딕셔너리나 딕셔너리의 리스트를 받아 데이터 프레임을 반환한다.
      • record_path인자는 파일경로에 폴더를 나열하는 것과 같이 중첩 데이터에 대한 속성 문자열 또는 문자열 목록을 사용한다.
      • meta: 속성의 리스트를 받아 어떤 속성을 로드할 것인지 결정
      • meta_prefix: 속성의 출처를 명확히하고 열 이름이 중복되지 않기 위해서 접두사 사용

Combining multiple datasets

  • appending: 데이터 프레임을 다른 데이터프레임에 row로 추가한다. (df1.append(df2, ignore_index=True))
  • merging: dataset을 column을 더해 합친다. merge()는 SQL의 조인과 같은 메소드다.
    • df.merge()
      • on
      • left_on, right-on

'Data Science > [DSF] Data engineering' 카테고리의 다른 글

What is Data Engineering?  (0) 2022.05.15
Data engineering for everyone  (0) 2022.04.10

+ Recent posts