1. 파이썬 소개 Last updated: 2023-10-17 10:20:47

1.1 파이썬의 인기

파이썬은 배우기 쉽고 표준화된 문법 표현 방식으로 사용자 친화적이면서도, 웹 개발이나 애플리케이션을 위한 백엔드 서버 및 API서버, 데이터 분석과 UI 애플리케이션을 개발하는 등 손에 꼽을 수 없이 다양한 개발 업무에 사용할 수 있는 강력한 언어이다.

파이썬 문법은 간결하면서도 사용자 편의적인 언어로 코드 가독성이 좋다. 이는 다른 사람이 작성한 코드를 읽고 이해하기 좋고 코드를 참고해 업무를 이어갈 때도 상당히 편하다는 의미이다. 간단한 테스트 코드에서, 상당히 복잡한 기업의 상업용 서비스까지 다양한 곳에서 사용되고 있다.

또한, 최근 학교의 소프트웨어 교육에서도 C/C++와 더불어 파이썬 언어도 많이 활용되는 추세이다. 특히 최근 인공지능과 데이터 분석 분야에서 Scikit-learn, Numpy, TensorFlow, PyTorch와 같은 파이썬 패키지 덕분에 이 분야에서 파이썬이 매우 중요한 언어로 자리 잡고 있다.

다방면에 활용되며 특히 미래 중요한 먹거리인 데이터를 다루기 위해서 파이썬 개발 역량은 필수가 되고 있다. 다음은 구글이나 위키의 평점을 근거로 개발 언어의 순위를 매기는 TIOBE Index를 보여주고 있다. 파이썬 언어가 22년에 이어 1위를 달리는 것을 볼 수 있다.


image

[그림 1-1-1] TIOBE Index 2023 (출처: https://www.tiobe.com/tiobe-index/)


다음은 파이썬 언어 평점의 변화이다. 2018년을 기점으로 큰 상상을 보이고 있다.


image

[그림 1-1-2] TIOBE INDEX for Pyton (출처: https://www.tiobe.com/tiobe-index/python/)



1.2 파이썬 언어 활용

파이썬 언어는 다재다능한 언어이다. 다른 언어들과 융합이 잘 되며, 구현이 쉽기 때문에 기능 확장 또한 용이하다. 따라서, 파이썬 언어는 다양한 목적으로 활용되고 있다. 다음은 파이썬 언어가 활용되는 영역을 나타내는 것이다.


1.2.1 데이터 분석

파이썬은 데이터 분석을 하는데 많이 활용된다. 셀(cell) 단위로 코드를 작성할 수 있는 Jupyter Notebook을 활용하면 단위 코드를 작성하고 테스트하고 변경하는데 매우 용이하다. 컴파일 과정도 없기 때문에 수정된 코드만 다시 실행하면 되기 때문에 탐색적 데이터 분석(EDA: Exploratory Data Analysis)가 매우 용이하다. 탐색적 데이터 분석에서 주로 데이터를 읽어오고, 읽어온 데이터를 관찰하여 특성과 통계, 품질을 분석하고 패턴을 찾아낸다. 값의 범위와 이상치를 찾아내고, 변수들 간의 상관 분석을 진행한다. 그리고 시각화를 통해 데이터 특성을 파악한다. 통계적 기법이나 혹은 머신러닝 알고리즘을 통해 목적하는 결과를 테스트해 보기도 한다. 이러한 탐색적 분석을 위해 기존에는 R 프로그램을 많이 사용하였으나 R 프로그램의 문법이 독특하고, 실제 운영 단계로 전환하려고 할 때는 R 서버를 구축해야 하는 등 제한이 있어 최근에는 파이썬 언어가 이를 대체하고 있다. 또한 파이썬에서는 Numpy나 Scikit-learn과 같이 데이터를 관리하고 다양한 통계적 알고리즘을 적용해 볼 수 있는 매우 훌륭한 패키지가 존재하고, matplotlib이나 seaborn과 같은 시각화 도구 등이 존재하고, 또한 무궁무진한 패키지를 무료로 사용할 수 있기 때문에 더욱 활용성이 높아지고 있다. 또한 파이썬에서는 배열 형식의 데이터를 쉽게 다룰 수 있는 방법들을 제공한다. 배열 데이터에서 지정한 범위의 데이터를 쉽게 접근할 수 있는 슬라이싱(slicing) 기능, 배열에서 조건에 따라 새로운 배열을 한번에 생성할 수 있는 컴프리헨션(comprehension) 기능, for 반복문의 범위를 쉽게 생성할 수 있는 range 기능 등 보다 간단한 코드로 데이터를 쉽게 다를 수 있도록 여러가지 기능을 제공하고 있어 데이터 분석에 유리한 언어이다.


1.2.2 인공지능

최근 딥러닝에 대한 관심이 증가 되면서 파이썬 언어도 함께 인기가 급상승 하고 있다. 그 이유는 최근 가장 인기 있는 딥러닝 프레임워크인 PyTorch와 TensorFlow가 파이썬을 지원하기 때문이다. PyTorch는 과거 루아(Lua) 프로그램 언어로 개발되었던 Torch를 파이썬 언어를 지원하도록 다시 개발된 언어로, 초기부터 파이썬 언어의 특성에 따라 개발되어 파이썬 개발자들에게 많은 관심을 받고있다. TensorFlow는 구글에서 딥러닝을 위해 개발하여 제공한 프레임워크로 현재 가장 인기가 높은 딥러닝 프레임워크로 파이썬과 C++를 지원하고 있다. 이와 같이 대표적인 딥러닝 프레임워크가 파이썬을 지원하므로 파이썬 언어가 최근 인공지능의 인기와 함께 같이 높아지고 있다.

[표 1] 파이토치와 텐서플로 비교


파이토치

텐서플로

목적

연구용

산업용

호횐 언어

C++, Python

C++, Python, Javascript, Swift, Keras

개발 회사

Facebook

Google

출시 년도

2017

2015

커뮤니티

크지 않음

비교적 큼

특징

동적 그래프 방식

Define with Run

정적 그래프 방식

Define and Run

난이도

다음의 그림은 2018년부터 최근(2022년 4월)까지 구글 트렌드에서 TensorFlow와 PyTorch의 검색량을 비교한 차트이다. 관심도에서 최근 PyTorch의 인기가 TensorFlow를 뛰어넘은 것을 확인할 수 있다. 이는 최근에 PyTorch를 이용한 논문 인용 빈도가 많아진 것과도 연관이 있을 것 같다.


image

[그림 1-2-1] 텐서플로와 파이토치에 대한 구글 트렌드

(참조: https://trends.google.co.kr/trends/explore?date=today 5-y&q=tensorflow,pytorch&hl=ko)



1.2.3 웹 서버 개발

파이썬은 물론 웹 개발에서도 활용되고 있다. 대표적인 파이썬 기반 웹 개발 프레임워크는 장고(Django)와 플라스크(Flask)이다. 두 프레임워크 중에 어떤 것이 좋다고 말하기는 어렵다. 서로 장단점이 있고 버전이 올라가면서 장단점도 바뀌고 있다. 처음에는 장고 프레임워크가 웹 개발을 위해 많은 기능을 기본으로 제공하여 개발자들이 선호 했었다. 그러다 오히려 너무 무거워져서 보다 가벼운 플라스크를 찾기 시작했다. 하지만 기본 제공하는 기능이 부족하여 추가하다 보니 현재는 플라스크도 무거워 졌다는 말들이 나온다. 그래서 플라스크보다도 더 가벼운 프레임워크를 찾아 사용하기도 한다. 어쨌든 파이썬 언어를 이용해 웹 서버를 개발하는 가장 대표적인 두 프레임워크가 장고(Django)와 플라스크임(Flask)에는 틀림 없다.


1.2.4 UI 프로그램

Python 프로그램으로 윈도우 혹은 리눅스 데스크탑에서 실행하는 UI 애플리케이션을 개발할 수도 있다. PyQt5나 PySide2를 이용하면 Qt5를 이용해 화면 창과 버튼, 리스트, 입력창 등이 포함된 앱을 개발할 수 있다. Qt는 C++로 구현된 GUI 프레임워크로 다양한 플랫폼에서 동작 가능하도록 지원하기 위해 개발된 클로스플랫폼 프레임워크이다. 다시말해 One Source Multi Platform Use를 위해 개발된 플랫폼이고, 이러한 Qt를 파이썬에서 사용할 수 있도록 개발한 것이 PyQt5와 PySide2이다. PyQt5는 Riverbank Computing社에서 개발하여 제공하는 오픈소스이고, PySide2는 Qt 제공사에서 공식적으로 제공하는 오픈소스이다. 두 패키지의 문법이 유사하므로 둘 중에 하나를 선택해 사용하면 된다.

위키독스 : PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램

Riverbank Computing사 제공 PyQt5 Document

Riverbank Computing사 제공 PyQt6 Document

위키독스 : 공학자를 위한 PySide2



1.2.5 데이터 수집

Big Data를 위해 외부의 데이터를 수집하는 일들이 많아졌다. 웹크롤링(Web Crawling) 혹은 웹 스크래핑(Web Scraping)이라는 주제로 웹페이지의 데이터를 수집하는 일들이 있다. 특정 사이트에서 주식이나 경제 인덱스 정보 등을 수집해 데이터 분석에 사용하거나, 뉴스를 수집해 자연어 처리를 하여 트랜드 분석을 하는데 사용하기도 한다. 웹 크롤링은 말 그대로 특정 주소의 웹페이지를 조회하고, html 파일의 tag 정보를 파악해 원하는 정보를 추출한다. 이때 주로 웹 요청을 위한 라이브러리를 사용한다. 주소 정보만 명확하다면 해당 html 파일을 요청한 후 tag parser를 이용해 구조 정보를 찾아내는 것이다. 웹 스크래핑도 큰 의미에서는 웹 크롤링과 유사하나 경우에 따라 단순히 웹페이지를 url만으로 조회가 안되는 경우 사람이 웹 브라우저를 통해 입력과 제어를 하듯이 브라우저를 프로그램으로 제어하는 방법을 통해 원하는 웹페이지 정보를 추출할 수 있다. 이렇게 브라우저를 제어하기 위해 사용하는 모듈이 셀레늄(Selenium)이다. 셀레늄은 실제로는 PC에 설치된 웹 브라우저를 제어하는 기능을 제공하여, 페이지 로딩, 값 입력, 버튼 클릭과 같은 동작을 실행할 수 있게 한다. 이렇게 다운받은 html 파일을 구성하는 , 등과 같은 태그 구조를 트리 형태로 찾거나 태그 이름이나 속성 등 조건을 이용해 태그를 검색하게 된다. 이러한 기능을 제공하는 라이브러리가 BeautifulSoup이다.

image

[그림 1-2-2] 데이터 수집 단계


위 그림에서 ①은 HTTP 통신을 처리해주는 Request 라이브러리를 통해 특정 url의 html 정보를 웹 서버에서 조회한 후 HTML 파일을 BeautifulSoup을 통해 파싱하고 데이터를 추출하는 방식이고, ②은 Selenium을 통해 PC상의 웹브라우저를 제어하고 브라우저에서 로딩한 html 파일 획득하고, 이후에는 앞의 방식과 동일하게 BeautifulSoup을 이용해 파싱을 진행한다. 보통 위와 같은 과정은 반복적으로 정해진 시간에 진행하는 경우가 많으므로 AirFlow와 같은 데이터 파이프라인 관리 프로그램에 스케줄을 등록하여 작업하게 된다.



1.3 파이썬 관련 홈페이지

다음은 파이썬과 관련된 홈페이지이다. 학습과 프로그래밍에 도움이 되기 바란다.

• 파이썬 공식 홈페이지 (다운로드) : https://www.python.org/downloads/

• 파이썬 자습서 (한글) : https://docs.python.org/ko/3/tutorial/index.html

• Pandas 공식 홈페이지: https://pandas.pydata.org/