앎을 경계하기

전체 글 356

[가짜연구소 3기] 데이터 엔지니어링 44 - Best Practices

주제 파이썬의 효율적인 코드 작성과 관련된 개념들에 대해 배웠다. 독스트링(Docstring) 개발을 하다보면 다른 사람의 코드를 많이 보고, 다른 사람이 만든 함수를 써야하는 경우가 많다. 복잡한 함수를 사용하고자 할 때, 함수에 대한 정보를 코드와 함께 제공한다면 사용자에게 큰 도움이 될 것이다. 그래서 우리가 많이 사용하는 것이 주석(comment)이다. 주석과 독스트링의 차이는 뭐지..? 독스트링은 함수 블럭 맨 첫줄에서 여러 줄로 작성된다. 파이썬에서 한 줄 코멘트는 # 을 사용하였고 여러 줄은 """ 을 사용한다는 것을 배웠을 것이다. 주석과 독스트링은 함수가 실행되고 출력하는데 영향을 주지 않는다. 독스트링은 주석과 달리 help(), __doc__ 속성에 저장되어 사용자가 확인할 수 있다...

[가짜연구소 3기] 데이터 엔지니어링 43 - Basic pandas optimizations

주제 Pandas 데이터프레임을 반복의 최적의 방법에 대해 배웠다. 판다스 데이터프레임을 다루는 최적의 방법에 대해 배우기 위해 야구 샘플을 사용한다. 각 팀에 대한 연도, 시즌 별 특정 통계 데이터이다. import pandas as pd baseball_df = pd.read_csv('baseball_stats.tsv', sep=',') baseball_df.head() 승리 횟수인 W 컬럼과 게임 횟수 G 컬럼을 이용하여 팀의 승률 통계를 구해보자. import numpy as np def calc_win_perc(wins, games_played): win_perc = wins / games_played return np.round(win_perc,2) 각 팀 별로 승률을 구하기위해 무식하게 반복..

[가짜연구소 3기] 데이터 엔지니어링 42 - Gaining efficiencies

주제 객체를 효율적으로 결합, 계산, 반복하는 방법은 무엇일까 예시를 통해 방법을 알아보자. 포켓몬 데이터셋 포켓몬을 수집하려는 트레이너를 중심으로 게임이 진행된다. 트레이너는 포켓몬을 포획하여 컬렉션에 추가하고자 한다. 포획에 성공하면 포켓덱스에 정보를 추가하게 된다. 각 포켓몬들은 고유의 메타데이터를 가지고 있다. 포켓몬 이름과 체력이 저장된 목록 두 개가 있다. 두 목록을 하나로 결합할 수 있는 방법은 앞서 배웠던 enumerate 를 사용하는 것이다. names = ['이상해씨', '파이리', '꼬부기'] hps = [45, 39, 44] combined = [] for i, pokemon in enumerate(names): combined.append((pokemon, hps[i])) prin..

[가짜연구소 3기] 데이터 엔지니어링 41 - Timing and profiling code

이 강의에서는...코드 수행에 걸리는 시간과 할당되는 메모리를 프로파일링 하는 방법에 대해 배운다.런타임은 효율성 고려 시 중요한 사항이다.코드가 빠르다 == 더 효율적이다매직커맨드% 를 접두어로 사용하는 커맨드IPython(인터랙티브 파이썬)같은 Jupyter notebook에서 사용가능하다.%timeitimport numpy as np %timeit rand_nums = np.random.rand(1000)7.64 µs ± 135 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)평균 표준편차, 이 값을 얻기 위해 실행된 실행 및 루프 생성횟수를 확인할 수 있다.실행 횟수는 -r, 루프 횟수는 -n 으로 지정해서 %timeit을 수행할 수 있다...

[가짜연구소 3기] 데이터 엔지니어링 40 - Foundations for efficiencies

이 과정에서는...깨끗하고 빠르고 효율적인 파이썬 코드를 작성하는 방법을 배운다.병목 현상을 찾기위해 코드 프로파일링 방법을 배운다.병목 현상과 안 좋은 코드 패턴을 제거하는 방법을 배운다.Python, Numpy, Pandas를 사용한다.효율적인 코드?효율적인 코드는 빠르고 실행 시간이 짧다.즉, 실행부터 결과 반환까지 대기 시간이 짧다.리소스를 효율적으로 할당하고 메모리 오버헤드가 크지 않다.즉, 리소스 사용을 최소화한다.오버헤드? 처리를 위해 직접적으로 필요한 자원보다 간접적으로 사용되는 자원이 더 많은 경우→ 배보다 배꼽이 더 크다파이써닉하게 코드를 짜보자Python의 핵심은 가독성파이썬 코드 작성의 모범 사례를 따라 작성된 코드를 Pythonic하다고 표현함.# 파이써닉하지 않은 코드 doubl..

[가짜연구소 3기] 데이터 엔지니어링 39 - Combining multiple datasets

주제 데이터프레임 합치는 방법에 대해 배웠다. 여러 개의 데이터프레임 합치기 append()함수를 사용해서 두 데이터프레임을 합칠 수 있다. 인덱스의 중복 문제를 해결하기 위해 ignore_index=True 를 설정하여 다시 인덱스를 매기도록 한다. params = {'term' : 'bookstore', 'location' : 'San Francisco'} first_results = requests.get(api_url, headers=headerws, params=params).json() first_20_bookstores = json_normalize(first_results['businesses'],sep='_') print(first_20_bookstores.shape) (20, 24) Y..

[가짜연구소 3기] 데이터 엔지니어링 38 - Working with nested JSONs

주제 중첩 JSON 데이터를 다루는 방법에 대해 배웠다. 중첩된 JSON JSON은 키 : 값 쌍으로 된 데이터 구조를 가지고 있다. 값으로 객체를 가질 수 있기 때문에 JSON은 중첩된 구조를 갖기도 한다. pandas.io.json 을 사용해서 JSON의 중첩을 다룰 수 있다. json_normalize() : JSON 정규화를 사용하여 중첩된 데이터를 평면화하여 데이터 프레임으로 반환한다. 중첩된 속성 이름은 attribute.nestedattribute로 확인할 수 있다. 예제 import pandas as pd import requests from pandas.io.json import json_normalize #requests.get으로 데이터 가져오기 api_url = 'https://ap..

[가짜연구소 3기] 데이터 엔지니어링 37 - Introduction to APIs

주제 Requests를 사용하여 웹사이트의 데이터를 추출하는 방법과 json으로 응답받아 데이터프레임으로 로드하는 방법을 배웠다. Application Programming Interfaces(API) 흔히들 "API 문서 참고해라" 이런 말을 하는데, API가 정확히 무엇일까? 응용 프로그램 끼리 통신할 수 있도록 정의된 방법이다. 프로그래머가 API를 통해 응용프로그램에서 데이터를 가져올 수 있다. Requests 파이썬에서 requests 라이브러리를 사용하여 모든 URL에서 데이터를 주고 받을 수 있다. requests.get()으로 URL에서 데이터를 가져온다. requests.get() requests.get(url주소) 형태로 사용하며 유용한 파라미터를 사용할 수 있다. params : 매개..

[가짜연구소 3기] 데이터 엔지니어링 36 - Introduction to JSON

주제 JSON 파일에 대한 개념과 Pandas로 읽는 방법에 대해 배웠다. JSON JSON은 웹에서 데이터 전송을 하는 일반적인 형식이다. 테이블 형태가 아니라서 데이터를 더 유연하게 저장할 수 있다. 파이썬의 dictionary 타입처럼 속성-값 쌍을 포함한다. JSON 읽기 read_json() 으로 읽을 수 있다. dtype으로 구체적인 타입을 설정할 수 있다. JSON 데이터는 테이블 형태가 아니라서 다양하게 배치될 수 있기 때문에 orient키워드를 사용해서 레이아웃 플래그를 지정할 수 있다. 다양한 방향으로 JSON 읽기 import pandas as pd death_causes = pd.read_json('nyc_death_causes.json', orient = 'split') print..

[가짜연구소 3기] 데이터 엔지니어링 35 - Loading multiple tables with joins

주제 키를 통해 테이블을 결합하는 조인에 대해 배웠다. 테이블 결합하기 Key는 데이터베이스 레코드를 식별할 수 있는 고유한 값으로 이뤄진 것을 말한다. 키를 이용하여 여러 개의 테이블을 결합할 수 있다. 테이블 결합 예제 SELECT * FROM hpd311calls JOIN weather ON hpd311calls.created_date = weather.date; 위 예제는 hpd311calls의 created_date와 weather의 date 를 통해 두 테이블을 연결한다. 두 테이블을 연결할 키는 동일한 타입이어야 한다. 결합 방법은 아래의 그림을 보면 더 이해하기 쉽다. 결합과 집계 함께 사용하기 SELECT hpd311calls.borough, COUNT(*), boro_census.tot..