Today I Learned — DS — 8일차
여기 여기 붙어라!
# 교집합, #합집합, #Join
오늘 한일:
오늘은 데이터를 병합시키는 방법에 대해서 배웠다. Concatenate는 공통된 분모 없이 하나의 데이터를 다른 데이터로 그냥 가져다 붙이는 것을 의미한다. 주의할 점은 이때, 붙이려는 부분에서 붙일 부분과 같은 형태(행 또는 열의 크기)를 가져야 한다는 것이다.
반대로 merge라는 개념은 두 개의 다른 데이터를 공통된 데이터를 기준으로 병합하는 것이다. 공통의 분모가 있어야 하기 때문에 두 데이터 사이에 반드시 공통된 이름과 공통된 타입의 데이터가 존재해야 한다. (inner join)
위의 두 가지 방법을 잘 다루는 것이 중요한 이유는, 데이터 사이언티스트는 실제로 수백만에서 수천만개의 데이터를 다루어야 하는데, 그 데이터가 하나의 데이터가 아닌 다수일 수 있기 때문이라는 것이다. 그렇게되면, 서로 다른 데이터들 사이의 상관관계를 찾아서 서로 묶을 수 있어야 하기 때문이다. 조금 놀랐던 점은, 이 데이터를 병합하는 과정에서 상당한 메모리의 소모가 발생할 수 있다는 것이었다. 그래서 주어진 환경에서, 데이터를 얼마나 메모리 효율적으로 처리하느냐도 중요하다는 것을 깨달았다. (비록 Python은 메모리 효율이 높지 않기로 유명하지만)
또한, 오늘 데이터를 tidy 데이터에서 wide로, 다시 tidy에서 wide로 변환하는 법을 배웠다. Tidy는 말 그대로 최대한 정돈된 형태의 데이터를 의미하며, wide 는 데이터를 최대한 넓게 벌리는 의미이다. 두 가지 모두 자신이 처한 상황에서 어떠한 기법으로 데이터 분석을 하느냐에 따라 효율적으로 쓰일 수 있다. 이 것을 잘 익혀두면, 내가 원하는 데이터를 원하는 형태로 조작하는 것이 가능해 질 것이라는 생각이들어, 이 기술을 잘 터득하는 것도 중요하다는 생각이 들었다.
내일 할일:
오늘은 추가 과제를 하려다가, 메모리 문제에 막혀버렸는데, 이는 사실 나의 코딩 실력의 부족 때문이다. 데이터 사이언티스트에게 가장 효율적인 방법으로 문제를, 특히 코딩을 하라는 임무는 자주 주어지지 않는다고 하지만, 내가 학습하는 환경에서는 사용할 수 있는 RAM의 양이 무한하지 만은 않기 때문에, 조금더 효율적으로 코딩을 짜는 법 역시 공부해 봐야 겠다는 느낌이 들었다. 그렇게 할 수 있어야 내가 하고 싶은 join이나 데이터 변형 작업을 훨씬 더 자유자재로 할 수 있지 않을까? 물론, 오늘 배운 것들을 계속해서 연습해나가야겠다는 생각은 매일 드는 것 같다.
참조:
(1) Join image