파이썬하면 요즘 ML/DL, 데이터분석 등으로 엄청난 인기를 끌고 있는데요. 웹프로그래밍에서도 매우 많은 인기가 있습니다. 우리나라에서는 점유율이 많이 못미치지만, 해외에서 Django, FastAPI등은 매우 좋은 반응을 보이고 있습니다. 오늘 소개할 도구는 Django나 FastAPI와 같은 서버도구는 아닌, 파이썬으로 만들어진 정적사이트 생성기 펠리칸(Pelican)입니다.
1. 설치
우선 일반적인 파이썬 프로젝트 시작방법과 마찬가지로 가상환경을 만들어줍니다. (pycharm을 활용하면 쉽게 가상환경이 만들어집니다. VSCode로 진행하면 조금 까다로우니, 다른 포스팅을 참고하세요). 가상환경이 만들어지면 아래의 pip install ~ 로 pelican을 설치합니다.
pip install pelican
2. 추가 라이브러리 설치
github page 배포를 위한 라이브러리 및 마크다운 문서 표시를 위한 추가 라이브러리를 설치합니다.
pip install ghp-import markdown
3. 프로젝트 생성
본격적인 프로젝트를 생성합니다. 첫번째 물음에서 [.]으로 되어있으면 현재 사이트에 생성한다는 의미입니다.
pelican-quickstart
생성이 완료되면 아래와 같이 프로젝트 구성이 보입니다.
4. 샘플 페이지 작성
content 폴더에 Hello.md파일을 작성합니다.
# hello.md #
Title: Are ‘you’ just inside your skin or is your smartphone part of you?
Date: 2018-02-26
Category: Psychology
Slug: are-you-just-inside-your-skin-or-is-your-smartphone-part-of-you
In November 2017, a gunman entered a church in Sutherland Springs in Texas, where he killed 26 people and wounded 20 others. He escaped in his car, with police and residents in hot pursuit, before losing control of [...]
5. 빌드
pelican content
6. 실행
특이하게도 실행은 output폴더로 이동해서 수행해야합니다. 이점은 다른 SSG(Static Site Generator)에 비해 조금 불편하네요. 그리고 일반적인 파이썬 프로젝트와 달리 main.py에서 실행하는게 아니고 pelican.server로 실행해야 합니다. 스크립트를 만들면 되긴 할텐데, 파이썬 공부한지가 오래되어 잘 기억이 안나네요.
cd output
python -m pelican.server
<결과>
드디어 결과가 나왔습니다. 기본 구성 치고는 여러 요소들을 포함하고 있어 보이는데, 이뻐보이진 않습니다. 손대야 할 부분이 많아보이네요.
펠리칸(Pelican) 정적사이트 생성기
오늘은 간단히 파이썬 정적사이트 생성기인 펠리칸(pelican)에 대해 간단히 알아봤습니다. 파이썬을 좋아하시는 분들이라면 한번 시도해보셔도 좋을 것 같습니다.
파이썬으로 엑셀 파일을 불러오고 데이터 다루는 가장 기본적인 라이브러리인 openpyxl에 대해 알아보도록 하겠습니다.
[ 목차 ]
1. Openpyxl 설치
$ pip install openpyxl
2. 파일 생성
import openpyxl
# 새로운 엑셀 파일 생성
wb = openpyxl.Workbook()
# 새로운 시트 추가
sheet = wb.active
# 셀에 데이터 쓰기
sheet['A1'] = '가나다'
sheet['B1'] = '라마바사아'
# 엑셀 파일로 저장
wb.save('example.xlsx')
3. 파일 열기
import openpyxl
# 기존 파일 열기
wb=openpyxl.load_workbook('example.xlsx') #파일명 혹은 패스+파일명 입력
# sheet 선택하기
sheet = wb.get_sheet_by_name('Sheet1')
# 셀 값 가져오기 방법1
sheet['A1'].value
# 셀 값 가져오기 방법2
sheet.cell(row=1, column=1).value
4. 워크시트 추가
import openpyxl
wb = openpyxl.Workbook()
wb.create_sheet() # 기본값으로 시트 생성
wb.create_sheet(index=숫자, title=’시트명’) # 지정된 이름으로 시트 생성
5. 행/열 다루기
모든 행/열 출력
from openpyxl import load_workbook
import pandas as pd
wb = load_workbook('sample.xlsx')
ws = wb['sample']
all_values = []
for row in ws.rows:
for cell in row:
all_values.append(cell.value)
print(all_values)
6. Pandas Dataframe으로 데이터 변환
from openpyxl import load_workbook
import pandas as pd
wb = load_workbook('sample.xlsx')
ws = wb['sample']
data = ws.values
columns = next(data)[0:] #첫행을 칼럼으로 쓰고, 첫행은 data에서 지워짐
df = pd.DataFrame(data, columns=columns)
오랫만에 Python 관련 포스팅을 하나 할까 합니다. 최근에 Python보다 35,000배 빠른 언어가 나타났다는 기사를 봤습니다. 잉? 뭐지? 인터프리터 언어가 아닌건가? 속도로만 치면 빠른 언어는 많은데...무슨 소리지? 하는 궁금증이 들더군요. 오늘은 Python의 새로운 대안언어라는 타이틀을 들고 나온 "Mojo언어"에 대해 알아보도록 하겠습니다.
Mojo 언어는 Swift의 개발자로 잘 알려진 크리스 래트너(Chris Lattner)가 개발했습니다. Python의 장점은 다양한 라이브러리와 풍부한 문서화로 인해 데이터 분석 분야에 널리 쓰이고 있지만 치명적인 단점이 있습니다. 인터프린터 언어가 내재하고 있는 속도의 한계로 인해 대용량 데이터 처리나 실시간 처리를 하기에는 너무 느리다는 거였죠. LLVM과 Clang의 공동 개발자였던 크리스 래트너역시 본인이 세운 Machin Learning회사인 Modular Inc.에서 Python으로 수행하던 머신러닝 태스크를 돌리기 위해서는 C, C++을 빌리지 않을 수 없었는데요, 이런 불편함을 해소하고자 개발하게 된 것이 Mojo의 탄생 배경입니다.
2. 상세
Mojo는 Python의 한계를 극복하고자 만들어진 새로운 패러다임의 언어입니다. 기존의 python 문법을 그대로 유지하면서도 빠른 속도를 자랑합니다. 문법 뿐만 아니라 기존의 Python 라이브러리들을 사용할 수 있다고 하는데 아직 100% 호환이 되는지 밝혀지진 않았지만 이게 사실이라면 엄청난 장점이 아닐 수 없습니다. 또한 컴파일러 언어이기 때문에 단일 패키지로 배포도 가능합니다.
3. 빠른 속도
망델브로 집합 연산을 실시한 결과를 바탕으로 보면 Python 3.10.9버전과 비교하여 35,000배의 속도를 나타내고 있습니다. 이는 C++보다도 빠른 수준인데, 어떻게 이렇게 빠른 수행이 가능할까요?
Mojo언어는 JIT 컴파일러 방식을 채택하여 기존의 Python과 비교하여 높은 실행 속도를 자랑하고 있습니다. 하지만 단순히 JIT컴파일러 방식만으로는 충분치 않음이 최근 문제로 제기되었습니다. 이를 해소하고자 도입된 방법이 멀티쓰레드 기술과 MLIR 활용입니다.
기존의 Python은 싱글쓰레드로 동작하는데 반해 Mojo는 멀티스레드를 이용한 병렬처리가 가능합니다. 작성된 코드를 동시에 병렬 처리하게 되면 빠른 실행과 함께 효율적인 메모리 관리가 가능하여 대용량 데이터처리에 유리해집니다.
MLIR(Multi-level Intermediate Representation)는 Mojo언어를 중간코드로 변환하고 최적화하는 기술입니다. 이를 통해 최적화된 최종 코드를 생성할 수 있으며 성능을 더욱 개선하는데 큰 기여를 합니다.
4. 시작방법
아직은 초기 개발단계인 관계로 일반 유저들에게 Open되기 전입니다. 대신 waitlist를 받아 일부 개발자들에게 허용하고 있습니다. 아래의 사이트에서 신청하면 되고 아래의 사이트에서 이름, 메일주소 등을 입력하여 신청할 수 있습니다.
파이썬은 기계 학습 및 데이터 과학에서 가장 인기 있는 언어 중 하나로 부상했습니다. 다양한 기능을 제공하고 다양한 요구를 충족하는 풍부한 머신 러닝 라이브러리 생태계를 제공합니다....라고 하는데. 한번 시작해볼까 하다가도 라이브러리가 너무 많이 존재해서 뭐가뭔지 잘 모르겠네요. 그래서 그 중 가장 유명한 네 가지 파이썬 머신러닝 라이브러리인를 비교해보고자 합니다.
1. Scikit-learn:
Scikit-learn은 전통적인 기계 학습 작업에 널리 사용되는 라이브러리입니다. 데이터 전처리, 피쳐 추출, 모델 선택 및 평가를 위한 포괄적인 도구 세트를 제공합니다. Scikit-learn의 주요 기능은 다음과 같습니다: <장점>
- 간단하고 직관적인 API를 제공하므로 다양한 수준의 전문 지식을 가진 사용자가 접근 가능. 탄탄한 학습알고리즘.
- 광범위한 알고리즘 지원: 분류, 회귀, 클러스터링, 차원 축소 등을 포함한 광범위한 기계 학습 알고리즘을 제공
- NumPy 및 Pandas와 같은 인기 있는 Python 라이브러리와 원활하게 통합
<단점>
- 딥러닝이나 강화학습은 다루지 않음
2. 텐서플로(TensorFlow)
텐서플로는 구글이 개발한 오픈소스 라이브러리이며 머신러닝 / 딥러닝을 쉽게 사용할 수 있도록 다양한 기능을 제공합니다. 데이터 플로우 그래프(Data Flow Graph)구조를 사용하여 풍부한 표현이 가능한 프레임워크입니다.
<장점>
- 계산구조와 목표함수만 정의되면 자동으로 미분계산을 처리함
- 텐서보드를 통해 파라미터 변화양상 및 DNN 구조를 알 수 있음
- 이미지 인식, 반복 신경망 구성, 기계 번역, 필기 숫자 판별 등 각종 신경망 학습에 사용
- 대규모 예측 모델 구성이 뛰어나 테스트부터 실제 서비스까지 거의 모든 딥러닝 프로젝트에 범용적으로 활용 가능
<단점>
- 메모리를 효율적으로 사용하지 못하고 있음
- Symbolic Loop 기능이 유연하지 못하며, 함수가 있어도 텐서 타입으로만 적용해야 함
- 딥러닝 모델을 만드는데 기초 레벨부터 작업이 필요하여 초보자가 사용하기 어려움
3. 케라스(Keras)
케라스는 텐서플로의 문제를 해결하기 위한 보다 단순화된 인터페이스를 제공하기 위해 역시 구글에서 개발된 오픈소스 신경망 라이브러리입니다. 케라스에서 제공하는 시퀀스 모델로 원하는 레이어를 쉽게 쌓을 수도 있고, 더 복잡한 모델을 구성할 땐 케라스 함수 API를 활용하여 구성할 수도 있습니다.
<장점>
- 매우 쉽게 모델 구현 가능
<단점>
- 디테일한 모델링이 불가하며, 코드만 보고 딥러닝 구조를 이해하기 어려움
- 오류 발생시 케라스 자체의 문제인지, 백엔드 언어의 문제인지 특정하기 어려움
4. PyTorch:
PyTorch는 유연성과 동적 계산 그래프를 강조하며, 페이스북의 AI연구팀이 개발한 오픈소스 머신러닝 라이브러리입니다. 사용 편의성과 개발자 커뮤니티가 많아 큰 인기를 얻었습니다. <장점>
- 코드를 깔끔하고 직관적으로 작성 가능하며, 학습속도도 텐서플로보다 빠름
- 메모리에서 연산을 하면서도 신경망 사이즈를 최적으로 바꾸면서 동작시킬 수 있음
- Numpy를 대체하면서도 GPU를 이용한 연산이 가능
- 신속한 시제품 제작과 실험을 지원하기 때문에 연구계에서 선호하는 추세
<단점>
- 사용자층이 낮고 학습에 필요한 자료와 예제를 구하기 쉽지 않음
전체적인 비교를 하자면...
- 학습 곡선: Scikit-learn, Keras - 딥 러닝 지원: TensorFlow, Keras, PyTorch가 광범위한 신경망 아키텍처와 사전 훈련된 모델 지원 - 성능: TensorFlow 및 PyTorch는 GPU 가속을 활용하여 대규모 모델을 학습하는 데 매우 효율적. Scikit-learn은 CPU 기반이기 때문에 계산 집약적인 작업에 어려움. - 생태계 및 커뮤니티: Scikit-learn, TensorFlow, Pytorch?
진짜 머신러닝을 공부하게될지는 잘 모르겠지만, 우선 한다면 Tensorflow가 가장 적당해 보이네요. 시간될 때주가예측 한번 해보면 좋을 것 같습니다.