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 |