Uploaded avatar of iHiD

Analytical April이 시작됐어요!

@iHiD
3년 초과 전
동영상

안녕하세요, 여러분! Functional February와 Mechanical March를 지나왔어요. 이제 Analytical April 차례예요. 이번 달에는 데이터 과학에 아주 적합한 언어들에 집중할 거예요.

지난 몇 달 동안 익숙해지셨겠지만, 이 영상에서 Erik과 제가 이번 달이 무엇에 관한 것인지, 그리고 우리가 살펴볼 여러 언어가 무엇인지 간단히 소개해 드릴게요.

그럼 평소처럼 Erik이 잠시 후 언어들을 하나씩 설명해 줄 거고, 저는 이번 달에 대한 실용적인 내용부터 몇 가지 말씀드릴게요.

먼저 이번 달의 주요 언어예요. 이번 달에는 딱 세 가지예요: Julia, Python, R. 세 언어는 서로 꽤 다르고, Python이 아주 다목적 언어라는 건 당연하지만, 이번 달에는 이 언어들을 데이터 과학의 관점으로 써 보시길 권해요.

Analytical April 배지를 받으려면 이 언어들 중 하나로 연습 문제 다섯 개를 완료해야 해요. 세 언어의 차이는 곧 살펴보기로 하고, Exercism 기준으로 우리 Python 트랙에는 아주 훌륭한 실라버스가 있으니 꼭 해보시길 추천해요. 이번 달 안에 Julia 실라버스를 선보이길 바라고 있는데, 작업은 대부분 끝났고 다듬기만 하면 돼요. R에는 실라버스가 없지만 가지고 놀기 좋은 흥미로운 연습 문제가 많아요.

우리가 해볼 다섯 가지 주요 연습 문제가 있어요:

  • etl: 데이터를 다른 형식으로 바꾸는 방법을 살펴볼 수 있어요
  • largest-series-product: 숫자 문자열에서 패턴을 찾는 효율적인 방법을 연습할 수 있어요
  • saddle-points: 다차원 배열/행렬을 다루는 법을 살펴봐요
  • sum-of-multiples: 숫자 시퀀스를 필터링하고 합산하는 연습을 해요
  • word-count: 문자열을 단어로 나누고 개수를 세요

Analytical April 배지 말고도, 일 년 내내 받을 수 있는 #12in23 배지가 있다는 것도 알려드려요. 이 배지는 한 해 중 언제든지 여러 주요 연습 문제를 풀면 받을 수 있어요. 그러니 그 배지를 받으려면 올해 안에 Python, R, Julia 중 하나로 그 다섯 문제를 풀어야 해요! 전체 연습 문제 목록은 Analytical April 페이지에 링크된 포럼 게시글에서 볼 수 있어요.

마지막으로, 언어들을 자세히 살펴보기 전에 알려드릴 게 있어요. 3월에 우리의 새 Discord 서버를 열었어요. 거기에 재미있는 활동이 아주 많았으니 꼭 확인해 보세요. 링크는 아래 설명에 있어요!

자, 이제 언어들을 살펴볼까요. 각 언어를 간단히 훑어본 뒤, 특징과 활용 사례를 자세히 파고들어 볼게요. Python부터 시작해요.

Python

  • 1980년대 후반에 Guido van Rossum이 ABC 프로그래밍 언어의 후속으로 구상하고 개발했어요. 1991년에 처음 공개됐어요.
  • 네덜란드의 정부 지원 연구소인 Centrum Wiskunde & Informatica (CWI)에서 개발됐어요. 이곳은 Edsger Dijkstra가 대부분의 연구를 한 곳으로 유명해요.
  • Guido는 C와 셸 스크립트로 프로그래밍했지만 둘 다 단점이 있었어요. Python은 그 단점 없이 두 세계의 장점을 모두 얻는 걸 목표로 해요.
  • Python Software Foundation이 관리하고, 언어 변경은 RFC에 해당하는 Python Enhancement Proposals (PEP)를 통해 이루어져요.

R

  • 오클랜드 대학의 Ross Ihaka와 Robert Gentleman이 만들었어요. R은 S 언어의 또 다른 구현으로 볼 수 있는데(비교적 사소한 차이만 있어요), S는 상용(비공개) 구현인 S-plus로 이어졌어요. R은 대부분의 문법을 S와 공유하지만, 의미론은 Scheme에서 영감을 받았어요.
  • 목표: 통계 컴퓨팅과 그래픽에 더 적합하고, 컴퓨터 과학자들이 설계한 비슷한 소프트웨어보다 사용하기 쉬운 언어를 만드는 것

Julia

  • Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman이 공개적으로 개발했고, 현재 기여자가 천 명이 넘어요
  • 목표: C의 속도, Ruby의 역동성, LISP의 메타프로그래밍, Python의 범용성, R의 통계 지원, MatLab의 선형 대수 지원, Perl의 문자열 처리 능력을 갖추면서 대규모 병렬 실행까지 지원하는 자유로운 고수준 언어를 만드는 것
  • 과학 계산에 뛰어나지만 범용 언어이기도 해요(웹 앱을 위한 Genie 프레임워크)

다른 많은 언어들처럼, 이 세 언어도 모두 불만에서 탄생했어요 :)

좋아요. 그럼 활용 사례 측면에서, 각 언어는 언제 다른 언어 대신 쓸까요?

Python

  • 진정한 범용 언어예요(웹사이트, 스크립트, 과학 계산)
  • 아주 다양한 용도로 쓸 수 있어요: AI(TensorFlow), 과학 계산(NumPy) 스크립트, 웹사이트(Django), 임베디드 시스템(micro python), 하드웨어 연동(예: 라즈베리 파이), 게임(EVE online), 심지어 Python은 화성까지 갔어요
  • 프로그래밍을 배우기에 좋아요: 풍부한 자료와 거대한 커뮤니티가 있어요. Python다운 코드(pythonic code), 즉 관용적인 Python 코드를 쓰는 법과 예시에 대한 안내가 많고, "명시적인 것이 암시적인 것보다 낫다", "가독성이 중요하다"는 원칙이 있어요. 대부분의 운영체제에 기본으로 설치되어 있어요.
  • 현재 가장 많이 쓰이는 언어 중 하나라서 문서와 라이브러리가 많고 커뮤니티도 커요

R

  • R은 아주 다양한 곳에서 쓰여요. 연구자들이 실험 데이터를 분석할 때, 대학에서 통계와 데이터 분석을 가르칠 때, 통계가 핵심인 금융 분야(예: 보험), 유통 분야(Amazon은 데이터 분석에 R을 써요)와 제조 분야(John Deere는 생산할 예비 부품 수를 추정해요), National Weather Service가 날씨와 재난을 예측할 때, 데이터 저널리즘(실제 데이터를 분석하고 이해하는 작업, 주로 시각화와 함께), 의료 분야에서도 많이 쓰여요(예: 전임상 시험을 바탕으로 약의 안전성을 판단).
  • Julia:
  • 과학 계산, 데이터 마이닝, 머신러닝, 선형 대수, 분산 컴퓨팅에 뛰어나요. 표기가 수학 표기와 비슷하게 느껴져서 수식을 코드로 옮기기가 비교적 쉬워요
  • 분산 컴퓨팅: 태스크(=코루틴)와 채널을 통해 코드를 병렬로 실행하면서 서로 통신할 수 있고, 메시지 전달을 이용한 다중 프로세스 지원이 있어요(고성능 컴퓨팅에 좋아요)
  • Celeste 프로젝트(178테라바이트의 천문 데이터를 분석하기 위해 Julia 코드를 실행하는 슈퍼컴퓨터)에 쓰였어요. 그 결과 Julia는 페타플롭 클럽의 일원이 됐는데, 당시 그 클럽에는 C, C++, Fortran만 있었고, Julia는 초당 1,000조 번(1 뒤에 0이 15개)의 부동소수점 연산을 해내는 최초의 동적 언어였어요. Clima(기후 모델링 연합)에서는 Caltech, MIT, NASA의 Jet Propulsion Laboratory 사람들이 기후 예측 모델을 개발하고 있고, CERN과 ASML도 Julia를 활용해요.

그럼 프로그래밍 관점에서는 어떻게 다를까요? 함수형인가요, 객체 지향인가요, 아니면 다른가요?

Python:

  • 동적 타입이면서 강타입이에요
  • 다중 패러다임 지원: 명령형, 함수형이지만 사실상 객체 지향 언어예요(모든 것이 객체예요)
  • 기본 인터프리터인 CPython은 바이트코드로 컴파일한 다음 가상 머신에서 해석해요. PyPy는 CPython을 대체하며 기계어로 JIT 컴파일해요

R:

  • 동적 타입이면서 강타입이에요
  • 다중 패러다임으로, 함수형이 핵심이지만 절차적이나 객체 지향 스타일도 지원해요

Julia:

  • 동적 타입이면서 강타입이고, JIT 컴파일돼요
  • 다중 패러다임 지원: 명령형, 객체 지향(다중 디스패치를 통한 오버로딩), 함수형(고차 함수, 부분 적용, 파이프 연산자)
  • 코드는 런타임에 미리 JIT 컴파일돼요

계속 프로그래밍 관점에서 살펴보면, 이 언어들에 특별히 눈에 띄는 기능이 있나요?

Python:

  • 기분 좋은 문법: 공백에 민감해서 스코프를 보기 쉽게 해줘요. 코드는 대개 읽기 쉬워요. 예를 들어 사람이 읽기 쉬운 불리언 조건(and/or)이 그래요
  • 표현력이 풍부해요: 비교적 적은 코드로 많은 걸 해요(리스트 컴프리헨션, 제너레이터, 데코레이터)
  • 다양한 용도로 쓸 수 있는 방대한 라이브러리가 있어요
  • 앞서 말했듯이 아주 다양한 상황에서 쓸 수 있는 진정한 범용 언어예요

Julia

  • 다중 디스패치. 모든 인자의 타입을 기준으로 어떤 함수를 호출할지 결정해요(함수 오버로딩처럼요)
  • 동적이지만 성능이 뛰어나요. Julia의 성능은 Fortran에 맞먹고 C에 가까워요. "평범한" 코드도 대개 성능이 좋아요(엄청난 꼼수가 필요 없고, 오히려 작은 함수가 권장돼요). GPU에서 코드를 실행하도록 지원하는 라이브러리도 있어요
  • 분산 컴퓨팅: 태스크(=코루틴)와 채널을 통해 코드를 병렬로 실행하면서 서로 통신할 수 있고, 메시지 전달을 이용한 다중 프로세스 지원이 있어요(고성능 컴퓨팅에 좋아요)
  • 과학 계산, 데이터 마이닝, 머신러닝, 선형 대수, 분산 컴퓨팅에 뛰어나요. 표기가 수학 표기와 비슷하게 느껴져서 수식을 코드로 옮기기가 비교적 쉬워요

R:

  • 유연한 데이터 타입: 벡터가 핵심 타입이고, 스칼라조차 벡터예요. 벡터에는 메타데이터를 붙일 수 있어요(예: 각 원소의 이름). 배열은 이종(heterogeneous)이라 서로 다른 타입의 원소를 담을 수 있어요. 같은 길이의 벡터들을 모아 놓기 위한 특별한 데이터프레임 타입도 있어요.
  • 벡터화 연산 덕분에 벡터를 간결하고 효율적이며 읽기 쉽게 갱신할 수 있어요
  • R은 데이터 조작, 계산, 그래픽 표시를 위한 소프트웨어 기능이 통합된 모음이에요. RStudio를 통해 데이터를 쉽게 탐색하고 시각화하고 조작할 수 있어요. 데이터 마이닝에 뛰어나요.
  • 훌륭하고 친근하며 다양한 커뮤니티가 있어요. R for Data Science Online Learning Community는 모든 실력 수준의 R 학습자들이 함께 실력을 키우는 커뮤니티예요. 멤버들이 서로 연락하고 문제를 도우며 지낼 수 있는 공개 Slack 그룹도 있어요.

4월에 무엇을 해볼지 고민된다면, 어떻게 결정하면 좋을지 추천해 줄 수 있나요?

IT의 모든 일이 그렇듯이, 경우에 따라 달라요! 이 경우에는 주로 목표와 개인적인 경험에 달려 있다고 말하고 싶어요.

프로그래밍이 비교적 처음이거나, AI나 머신러닝에 관심이 있거나, 여러 가지로 활용할 수 있는 언어를 배우고 싶다면 Python부터 시작하시길 추천해요: Python 관련 자료는 어마어마하게 많고, 무료 온라인 강의도 많이 포함돼 있어요 Python은 AI와 머신러닝 분야에서 널리 쓰여요 Python은 아주 많은 용도로 쓸 수 있어요 Python 트랙은 학습 모드가 켜져 있어서, 언어의 핵심 개념을 재미있게 배우는 데 도움이 돼요

통계 작업에 관심이 있거나, 데이터를 탐색하고 시각화하고 싶거나, 데이터를 다루는 색다른 방법이 궁금하다면 R이 아주 좋은 선택이에요: R의 데이터 타입은 데이터 모음(벡터/배열)을 기반으로 하고, 모음에 연산을 손쉽게 적용할 수 있어요(루프를 돌릴 필요가 없어요) RStudio IDE는 데이터를 탐색하고 시각화하기에 좋아요 R은 통계 분석 지원이 뛰어나요 R은 데이터를 쉽게 그래프로 그릴 수 있어요

과학 계산에 관심이 있거나, 코드를 동시에 실행하고 싶거나, 성능을 정말 중요하게 생각하거나, 대부분의 다른 언어와는 다른 무언가를 제공하는 현대적이고 우아한 언어를 배우고 싶다면 Julia를 추천해요:

  • 다중 디스패치는 많은 사람에게 새로울 텐데, 놀랄 만큼 강력해요
  • Julia는 과학 계산에 뛰어나요
  • Julia의 타입 시스템은 유연하고 표현력이 좋아요
  • Julia는 성능이 뛰어나요
  • Julia는 동시 실행에 뛰어나요

물론 시간이 있다면 세 언어를 모두 해보시길 추천해요! 직접 해보기 전에는 어떤 언어를 좋아하게 될지 정말 알 수 없으니까요.

2023년 04월 01일 · 유용했나요?