실제 파일 입출력 시 발생할 수 있는 오류나 예외를 실습 기반으로 자연스럽게 마주하면서 해결할 수 있었다는 점이 좋았다.
단순히 코드 결과만 보는 게 아니라 왜 그렇게 동작하는지를 계속 고민해보면서 원리를 알게 된 느낌이었다.
연습 문제들을 많이 주셔서 스스로 학습해볼 수 있는 시간이 생겨 좋았다.
넘파이
arr[[i, j], [k, l]]은 팬시인덱싱으로 작동해 특정 위치만 추출함np.diff() 로 비교하는 방식과 슬라이싱으로 비교하는 방식 (arr[1:] > arr[:-1])NaN은 float 배열에서만 가능하므로 astype(float) 처리가 필요함!판다스
index.name으로 인덱스에 이름을 지정할 수 있음.index = [...])np.argmax(..., axis=1) 결과를 요일 이름으로 변환하는 방법 (리스트 매핑)CSV 파일 입출력의 정확한 방식을 배웠다. csv.reader로 읽으면 빈 줄이 나올 수 있는데 그 이유는 파일을 저장할 때 newline=''를 지정하지 않았기 때문이라는 걸 처음 알았다.
pickle을 이용한 직렬화/역직렬화의 개념과 목적을 확실히 이해했다. 데이터를 파일로 저장하거나 네트워크로 전송할 때 왜 바이너리 형태가 필요한지 그리고 왜 'wb'와 'rb' 모드를 써야 하는지도 명확해졌다.
Pandas에서의 컬럼 정렬 (알파벳 순) 과 값 정렬 (예: age 오름차순) 방법을 익혔다. df.columns.sort_values()는 컬럼 이름만 정렬된 리스트를 반환하고 실제 DataFrame을 바꾸지는 않는다는 것도 헷갈렸는데 df = df[sorted(df.columns)]처럼 적용해야 한다는 걸 배웠다.
CSV 파일을 열었을 때 Unnamed: 0 열이 왜 생기는지 처음엔 잘 몰랐고 index=False 설정의 중요성을 간과했던 것 같다.
df.loc[range(5), range(5)]처럼 NumPy 스타일을 Pandas에서 쓰려다 에러가 나기도 했는데loc/iloc 차이를 좀 더 체계적으로 복습할 필요가 있다고 느꼈다.
CSV, JSON, Pickle 같은 직렬화 포맷들의 차이점과 언제 어떤 걸 써야 하는지 실제 예시와 함께 더 정리해보고 싶다.
Pandas 정렬을 하면서 결측치가 있을 경우의 처리 그리고 정렬 후 인덱스 리셋 여부 같은 실무에서 자주 마주칠 수 있는 세세한 부분도 더 익히고 싶다.
시리즈나 데이터프레임을 만들 때 인덱스와 열을 실수 없이 관리하는 법을 더 연습하고 싶다
넘파이에서 조건에 따라 데이터를 바꾸거나 요약하는 방법들을 연습해보고 싶다
데이터프레임을 만들고 나서 행이나 열을 추가/삭제하거나 정렬하는 기본적인 조작들도 앞으로 더 익혀보고 싶다
기능을 익히는 데 그치지 않고 내가 왜 이걸 쓰는지, 왜 이런 결과가 나오는지를 계속 확인하며 실험하려고 노력했다.
단순한 결과에 만족하지 않고 그 과정을 스스로 납득하며 가는 연습을 통해 데이터 전처리와 시각화에 대한 자신감이 조금씩 생겼으면 한다.