카테고리 보관물: Python

Ubuntu 14.04에 Python 3.7 설치하기

오래된 Ubuntu 14.04에 Python 3.7을 설치할 때 필요한 간단한 절차입니다. 이 글을 쓰는 시점에서의 최신 Ubuntu 18.04이고 곧 20.04 버전이 나올 예정입니다.

그리고 현재 Python은 3.7.x가 최신 버전인데 Ubuntu 14.04에는 3.6.x가 설치되어 있고 14.04에 3.7.x는 그냥은 설치되지 않습니다.

3.6.x를 그냥 쓰면 되지 않겠냐고 하겠지만 3.6과 3.7은 마이너 버전 하나의 차이로 보이지만 실제로는 많은 부분에서 차이가 있습니다. 성능, 보안, 문법과 같은 것들입니다. 최신 패키지들도 3.6에서는 오작동하는 사례가 많습니다.
3.7을 설치해서 사용하는 것이 좋습니다.

sudo apt update  # 깨끗하게 한번 apt 정보 갱신
sudo apt install software-properties-common  # add-apt-repository 명령어를 설치하기 위한 것
sudo add-apt-repository ppa:deadsnakes/ppa  # 레파지토리를 등록합니다.
sudo apt update  # apt에 정보를 업데이트합니다.
sudo apt install python3.7  # python 3.7을 설치합니다.

data.frame melt 시키기

테이블의 컬럼들을 한 컬럼으로 내리고 값을 따로 빼는 것을 melt(melting)라고 합니다.그 반대로 값을 컬럼으로 올리는  작업을 cast (casting)라고 합니다.
이런 것을 엑셀이나 DB에서는 pivot(pivoting 추축) 이라고도 하고 또 transform이라고도 말합니다.

R과 python에서 melt하는 간단한 코드 스니펫을 올립니다.  Google에 검색을 하면 다 나오는 것이지만 순전히 제 편의를 위해서 올려둡니다.

R은 특히 ggplot2를 사용할 때 facet을 쓰려면 melt된 상태여야 하는 것이 있어서 연습이 필요합니다만 늘 까먹습니다. (전 바보인가봐요)

R코드입니다.
다른 방법도 많지만 R은 reshape2 패키지를 쓰는 것이 편합니다.

# install.packages("reshape2")
library(reshape2)  # 해들리 만세
iris  # 이렇게 생겼어요
iris.molten <- melt(iris, id.vars=c("Species"))  # Species 는 놔두고 모두 멜트
iris.molten  # melt한 data.frame

python코드입니다.
python은 당연히 Pandas에 melt 함수가 있습니다.

from sklearn import datasets  # iris data 때문에 로딩했어요
import pandas as pd  # 팬더스
import numpy as np  # 데이터 변환을 하는데 numpy가 필요할 뿐이었어요
iris = datasets.load_iris()  # 예제를 위해서 iris가 필요할 뿐
print(iris) # 이렇게 생겼는데
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names) # 일단 iris가 dataframe이 아니어서 바꿈
print(pd.melt(iris_df))  # 이렇게 바뀝니다

 

numpy windows용 64bit 버전

Windows를 비롯해서 numpy를 설치하는 것이 쉬운일이 아닌데요.
그래서 따로 패키징된 것을 제공하는 곳이 몇군데 있습니다.
그중 대표적인 곳이 scipy.org 입니다.
numpy는 scipy.org에서 패키징된 버전을 받을 수 있도록 링크를 추천하고 있는데
32bit 버전만 제공하고 있습니다.
32bit용 numpy를 64bit python에 설치하게 되면 python이 없다고 에러메세지가 나옵니다.

  • numpy는 python에서 수학/과학 계산을 위해서 사용하는 라이브러리입니다.
  • scipy를 사용하기 위해서는 numpy가 필요합니다.

아래 사이트에서 공유하고 있습니다.
접속해서 OS와 Python 버전에 맞는 것을 선택해서 다운로드해서 실행하면 쉽게 설치할 수 있습니다.

http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

사이트의 반응 속도 및 다운로드 속도가 조금 느립니다.

Python multi core 구동 코드

Python을 이용해서 ETL의 일부인 파싱이나 전처리 작업을 수행하는 경우가 많습니다.
빅데이터인 경우에도 데이터를 Hadoop이나 Hive 또는 Oracle과 같은 RDBMS에 로딩하기 전에 할 수 있는 것들은 최대한 전처리를 한 후에 사용하는 경우가 많이 있습니다.
물론 데이터량이 아주 많으면 Map/Reduce를 작성하는 것이 더 낫습니다만 그리 크지 않은 데이터는 한 대의 서버에서 자원을 풀가동해서 처리해 버리는 것이 작업속도를 줄일 수 있습니다.
Hadoop이 일반화되기 이전에는 이런 형태의 코드를 더 구체화해서 여러 대의 서버에서 동시에 구동되도록 (마치 맵리듀스처럼) 프로세스를 돌리고 결과를 취합하는 것을 만드는 것이 빈번했었습니다.

https://gist.github.com/euriion/5719443

코드를 수정하면 더 복잡한 것도 할 수 있습니다만 매우 복잡하다면 다른 구조를 생각해 보는 것이 좋습니다.

CSV포맷을 TSV포맷으로 바꾸는 간단한 스크립트

엑셀(Excel)에서 CSV 포맷으로 파일을 저장할 때 텍스트 컬럼을 Escaping처리하는 경우가 있습니다.
주로 쉼표(comma)와 따옴표(double quotation)을 그렇게 변환해 버리는데 Hadoop이나 이 포팻을 Hive에 업로드해서 사용하려면 Escaping을 빼야 합니다.
크기가 크지 않은 CSV는 간단하게 Python으로 변환코드를 작성해서 올려서 사용하는 것이 편한데 그럴때 사용했던 소스코드입니다.
R에서 데이터를 로딩할 때도 이 방법이 편합니다.
이런 간단한 작업도 넓은 의미에서는 데이터 먼징 (Data Munging) 포함됩니다.

https://gist.github.com/euriion/5720809