알고리즘 공부를 고민하는 데이터 분석가들에게

알고리즘 공부, 아직 망설이고 계신가요? 현직 데이터 분석가가 말하는 알고리즘 배우면 좋은 이유를 들어보세요.
Feb 21, 2024
알고리즘 공부를 고민하는 데이터 분석가들에게
 
데이터 분석을 공부하면서 개발 알고리즘을 배워야 할지 고민한 경험이 있으실 거예요. 다 배우려니 부담이 되기도 하고요. 내일배움캠프에서는 수강생들이 궁금해 하는 주제나 필요한 마인드셋을 갖추는 데 도움이 되는 특강을 틈틈이 열고 있는데요. 오늘 특강은 5년 차 데이터 분석가 임정 튜터님이 실무에서 느낀 데이터 분석가가 알고리즘을 배워야 하는 이유와 관련 개념들을 설명해주셨습니다. 알고리즘 특강으로 고민은 덜고 분석력은 200% 올려봅시다.
 
 

알고리즘으로 일 잘하는 데이터 분석가 되기

개발자의 알고리즘이란, 자료 구조와 논리를 이용하여 조건, 반복문 등으로 이루어진 일련의 절차나 방법을 의미합니다. 주로 데이터 전처리 과정에 해당되는데요. 이는 모델링과 방법론으로 이루어진 데이터 분석 관점의 알고리즘과는 차이가 있습니다.
 
그렇다면 왜 튜터님은 개발자가 배우는 알고리즘을 추천하셨을까요? 가장 큰 이유는 실무에서 빈번히 발생하는 업무 효율 문제입니다. 개발자들은 아주 바쁩니다. 적재되지 않은 데이터가 간단한 처리만을 요하더라도 개발자 입장에서 급한 일이 아니라면 차일피일 미뤄질 수 있습니다. 이는 나의 업무에 공백이 생길 수 있다는 말이죠. 이러한 이유로 일부 대기업에서는 SQL과 함께 기본 알고리즘 코딩 테스트를 보는 경우도 있습니다.
 
데이터 분석의 전체 프로세스를 파악할 수 있다는 것도 큰 장점입니다. 데이터는 생성-수집, 가공-저장-분석-시각화의 과정을 거치는데요. 여기에서 분석가가 SQL로 다룰 수 있는 부분은 분석, 즉 데이터 웨어 하우스의 관계형 데이터 베이스(RDB)에서 데이터를 추출하는 일에 한합니다. 하지만 프로그래밍을 알고 있다면 전체적으로 일정 부분 관여할 수 있어 업무 이해도가 달라집니다. 예컨대 데이터 엔지니어가 만들어준 소스의 코드를 보고 데이터 흐름을 이해하거나, 관계형 데이터 베이스가 아닌 데이터 베이스(NoSQL)도 자료 구조로 일부 이해할 수 있는 것이죠. 프로그래밍 능력으로 전체를 보는 데이터 분석가, 여러분이 생각해도 매력적이지 않으신가요?
 
 

얼마나 공부해야 할까?

튜터님은 기본적인 알고리즘을 익히고 파이썬 라이브러리가 지원하는 함수와 메소드를 이해한 후 이를 토대로 코딩 테스트의 기본 문제를 풀 수 있을 정도를 말씀하셨어요. 혹은 기본 알고리즘으로 데이터 엔지니어링 부분을 확장(API로 데이터 수집하기, Airflow로 자동화하기)하거나 분석모델링(선형회귀, 군집화 등)을 활용할 정도면 좋을 것 같다고 하셨습니다.
 
단, 데이터 분석의 본질은 문제를 인식하고 근거 기반으로 판단하는 방법이 목적입니다. 알고리즘은 추가 스택이라는 사실을 잊지 마시고 본인의 도메인에 맞춰 우선순위를 설정하여 공부해보세요.
 
 

자료구조와 알고리즘 접근하기

튜터님은 핵심 자료구조와 알고리즘을 배우고 이를 프로그래밍 코드에 비추어 적용한다면 실무에서 역량을 충분히 발휘할 수 있다고 하셨어요. 자료 구조와 알고리즘이 무엇인지 개념적으로 접근하고, 공부법의 예시로 해당되는 유형을 각각 하나씩 정리해 보겠습니다.
 

자료 구조 (Data Set)

자료 구조는 말 그대로 자료(data)를 담는 구조입니다. 자료형의 특징에 맞춰 효율적으로 담을 수 있는 그릇을 맞춘다고 생각하시면 됩니다. 자료구조가 어떤 형태인지에 따라 데이터를 쉽게 찾을 수 있는 알고리즘이 거의 정해지기 때문에 자료구조를 정하는 것은 곧 알고리즘을 정하는 것과 비슷합니다. 자료의 연속성에 따라 크게 선형 구조와 비선형 구조로 나눌 수 있는데요. 선형 구조 중 가장 많이 쓰이는 배열을 알아봅시다.
 
  • 배열 (Array)
자료 구조 중 하나로 연속된 메모리 공간에 순차적으로 저장된 데이터 모음입니다. 정형데이터 분석에 사용하는 자료는 배열이 대부분이며, 매우 직관적인 자료입니다. 많이 쓰이는 Numpy의 array자료형, Pandas의 Series 자료형 모두 배열의 추상화 개념을 상속한 것이기도 하고요. 배열을 구성하는 각각의 값을 요소(element), 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 합니다.
 
장점
  • 인덱스로 모든 요소에 빠르게 접근할 수 있습니다.
  • 간단하고 사용하기 쉽습니다.
단점
  • 배열을 선언한 후에는 크기를 변경할 수 없습니다.
  • 중간에 특정 요소를 삽입하거나 삭제하는 경우에는 모든 요소들을 이동시켜야 합니다.
적합한 경우
  • 데이터가 순차적이며 값보다는 순서가 중요한 데이터
  • 사이즈가 자주 바뀌지 않는 데이터
  • 어떤 특정 요소를 빠르게 읽어야 할 때
 
이외에도 연결리스트, 해시테이블, 스택, 그래프, 트리 등 다양한 자료 구조가 있으니 다른 개념도 배열처럼 정리해 보시기를 추천드립니다.
 

알고리즘 (Algorithm)

앞서 말한 것처럼 알고리즘은 문제를 해결하기 위해 필요한 계산 절차나 처리 과정의 순서입니다. 정확성과 효율성을 평가한 후에 최적의 알고리즘을 선택하면 됩니다. 소개해주신 알고리즘 개념 중 그리디 알고리즘이라는 개념을 소개해드립니다.
 
  • 그리디 알고리즘(Greedy Algorithm)
한글로는 ‘탐욕 알고리즘’으로, 이름처럼 미래를 고려하지 않고 오직 현재 시점에 가장 좋은 선택을 하는 알고리즘을 의미합니다. 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택하는 방식으로 작동되는데요. 모든 경우의 수를 고려하는 완전 탐색이나 다이내믹 프로그래밍의 단점을 보완하기 위해 탄생한 방법입니다. 앞의 선택이 이후의 선택에 영향을 주지 않을 때 사용하므로 ‘근사 알고리즘’이라고 불리기도 합니다.
주요 특징
  • 어느 정도 최적에 근사한 값을 빠르게 도출할 수 있기 때문에 근사치를 도출해도 무방한 문제에 사용합니다.
  • 언제나 최적의 해를 구할 수 있는 문제에서 실용적으로 활용할 수 있습니다.
활용 예시
  • 거스름돈의 동전 개수를 줄이기 위해 비싼 동전(500)부터 거슬러주는 경우
  • 서울과 대전을 가는 경로의 수가 대전과 대구를 가는 경로의 수에 영향을 미치지 않는 경우
완전 탐색, 이진탐색, 재귀와 같은 다른 알고리즘들도 특징과 활용되는 경우를 이해하고 코드를 구현하는 데까지 나아가시는 게 가장 좋습니다.
 

시간복잡도

자료구조와 알고리즘의 효율성을 이해하기 위해서는 시간 복잡도의 개념을 아셔야 합니다. 시간복잡도란 알고리즘의 성능을 설명하는 기준으로, 수치가 낮을수록 효율적인 알고리즘을 의미합니다. 빅오 표기법(표기 방식: O(n))으로 작성하고 n에는 명령어의 실행 횟수가 계산됩니다. n에는 상수, 로그, 지수 등 다양한 수가 들어갈 수 있는데요. O(1)이 가장 효율적이고 O(n!)이 가장 비효율적인 알고리즘입니다. 각각의 자료구조마다 다른 시간 복잡도를 가지고 있어서, 자료의 특성에 따라 어떤 자료 구조를 사용해야 할지 생각해야 합니다.
 
그렇다면 시간 복잡도를 모두 고려해서 코드를 작성해야 할지 의문이 드실 텐데요. 실무에서는 아래와 같은 우선순위를 따라서 업무 해보세요.
STEP 1. 검색: 관련 라이브러리가 있는지 먼저 찾아봐야 합니다.
STEP 2. 적용: 있다면 어떤 함수 혹은 어떤 자료형을 사용해야 하는지 찾아봅니다.
STEP 3. 생성: 없지만 자주 사용할 것 같다면 사용자 정의 함수로 만들어주세요
STEP 4. 최적화: 대용량 데이터에 자주 사용할 것 같다면 성능을 고려한 코드를 작성합니다.
🍯꿀팁. 3단계를 거치고 나서 개발자에게 최적화를 요청해 보세요. ‘일잘러’라는 칭찬을 들으실 수 있을 거예요.
 
 

데이터 분석가 취업 준비가 막막하다면?

데이터 분석 중 알고리즘 공부를 고민하신다면 데이터 분석가 취업에 도전하고 계실텐데요. 취업 준비가 막막하다면 내일배움캠프에서 제공하는 취업 3종 패키지 무료로 받고 고민 해결해보세요! 카카오톡 플러스친구 추가하시면 데이터 분석가 로드맵, 포트폴리오 구성 방법, 이력서 작성 꿀팁과 탬플릿까지 무료로 다운받으실 수 있습니다.
 
 

실무형 분석가로 거듭나는 내일배움캠프

오늘 정리한 내용처럼 먼저 각각의 개념과 장, 단점을 파악한 후 실습해 보세요. 개발자와 원활히 소통하고 전체의 맥락을 고려하는 데 큰 도움이 될 거예요.
 
데이터 분석에는 절대 도구가 없습니다. 원하는 목적과 가설에 맞게 도구를 잘 활용해서 더 나은 의사 결정을 돕는 일이 궁극적인 목표인데요. 알고리즘 공부도 현업에 바로 적용할 수 있는 도구를 획득하는 일이라고 생각해 보세요. 내일배움캠프에서는 현직 전문가가 직무 교육과 더불어 애매한 부분까지 알려주는 현실 밀착형 교육을 하고 있습니다. 내일배움캠프에서 직무 고민을 모두 해소하고 바로 현업에 뛰어들 수 있는 주니어로 거듭나보세요.
 
 
 
CREDIT 글 | 정효재 팀스파르타 에디터
Share article
Subscribe Newsletter
Stay connected for the latest news and insights.
RSSPowered by inblog