앎을 경계하기

[가짜연구소3기] Data Engineer 58

[가짜연구소 3기] 데이터 엔지니어링 48 - Downloading Data on the Command Line

주제 curl과 wget을 사용해서 터미널 명령을 통해 데이터를 다운로드 할 수 있는 방법에 대해 배웠다. curl 사용하기 Client for URLs의 줄임말 Unix 명령어 도구 서버와 데이터를 송수신하기 위해 사용된다. HTTP, FTP 서버에서 데이터를 다운로드하는 데 사용된다. curl 문법 curl [option flags] [URL] HTTP, HTTPS, FTP, SFTP를 지원한다. curl -O https://websitename.com/datafilename.txt 만약 다른 이름으로 바꾸고 싶다면 -o 를 사용한다. curl -o renameddatafilename.txt https://websitename.com/datafilename.txt 와일드 카드를 사용하여 여러 개의 파..

[가짜연구소 3기] 데이터 엔지니어링 47 - More on Decorators

주제좀 더 유용한 데코레이터를 작성하는 방법에 대해 배웠다.예제 살펴보기import time def timer(func): """함수 수행 시간 출력하는 데코레이터 Args: func (callable): 데코레이팅 된 함수 Returns: callable: 데코레이팅 된 함수 """ def wrapper(*args, **kwargs): t_start = time.time() result = func(*args, **kwargs) t_total = time.time() - t_start print('{} took {}s'.format(func.__name__, t_total)) return result return wrapper@timer def sleep_n_seconds(n): time.sleep(n..

[가짜연구소3기] 데이터 엔지니어링 - 46 Decorators

주제 데코레이터에 대해 배웠다. 데코레이터 데코레이터를 배우기 전에 짚고 넘어갈 개념 : 중첩함수, nonlocal 변수, 클로저 파이썬은 모든 것을 객체라고 생각한다! 함수도 list, string, dictionary 등등 모든 것들이 다 객체의 개념임! 함수도 변수에 저장할 수 있고 list, dict 등 자료구조의 요소로도 저장 가능하다. 물론 함수를 함수의 인자로도 사용할 수 있다. 함수는 중첩으로 선언하는 것도 가능하다. def create_math_function(func_name): if func_name == 'add': def add(a, b): return a + b return add elif func_name == 'subtract': # Define the subtract() f..

[가짜연구소 3기] 데이터 엔지니어링 45 - Context managers

주제 컨텍스트 매니저에 대해 배웠다. Context managers 사용하기 Context managers? 컨텍스트를 설정한다. 코드를 실행시킨다. 컨텍스트를 제거한다. 출장 뷔페로 예를 들면, 행사 시작 전, 직원들이 음식 세팅을한다. 행사 진행 행사 끝나면 음식 정리한다. 코드에서 예를 들면, with open('my_file.txt') as my_file: text = my_file.read() length = len(text) print('The file is {} characters long'.format(length)) 여기서 open() 이 컨텍스트 관리자다. 파일을 열어 사용할 수 있도록 설정한다. 파일을 읽고 길이를 변수에 저장하는 작업을 수행한다. 파일이 닫혔는지 확인한다. with가..

[가짜연구소 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..