DataFrame에서 컬럼명을 수정하는 방법은 몇 개가 존재한다.

아래와 같은 DataFrame 샘플이 존재한다고 할 때

import pandas as pd
df = pd.DataFrame( {'c1':[1, 2, 3]
                   ,'c2':[3, 4, 5]
                   ,'c3':[6, 7, 8]})

	c1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8

 

□ 특정 컬럼명 수정

아래 세 가지 방법으로 컬럼명 수정이 가능하다.

df.rename( {'c1':'A1'}, axis='columns', inplace=True)
# 이때 inplace=False이면 원본 데이터(df) 값 자체는 변경하지 않는다. default는 False이다.

	A1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={'c1':'B1'}, inplace=True)  

	B1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={df.columns[0]:'C1'}, inplace=True)

	C1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.columns.values[0] = 'D1'

	D1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8

- inplace option

DataFrame에서 inplace option은 원본 데이터(source) 자체를 변경하는가, 하지 않는가를 지정한다.

inplace=False인 경우에는 원본 데이터 자체는 변경하지 않고 형상만 변경한다. 이때 해당 형상은 return 값을 통해서 받을 수 있다.

 

temp = df.rename( {'c1', 'A1'}, axis='columns', inplace=False) 

 

의 경우 원본 데이터인 df의 첫 번째 컬럼명은 A1으로 변경되지 않는다.

반면 temp는 컬럼명이 A1으로 변경된 데이터를 가지게 된다. 

 

같은 원리로

df.rename( {'c1', 'A1'}, axis='columns', inplace=True) 은

df = df.rename( {'c1', 'A1'}, axis='columns', inplace=False)  과 동일한 결과를 가진다.

 

 

□ 컬럼명 전체 변경

아래 방법으로 컬럼명 전체 수정이 가능하다.

df.rename( {'c1':'A1', 'c2':'A2', 'c3':'A3'}, axis='columns', inplace=True)

	A1	A2	A3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={'c1':'B1', 'c2':'B2', 'c3':'B3'}, inplace=True)

	B1	B2	B3
0	1	3	6
1	2	4	7
2	3	5	8


df.columns = ['C1', 'C2', 'C3']

	C1	C2	C3
0	1	3	6
1	2	4	7
2	3	5	8

 

반응형

□ DataFrame.loc 사용법

구분

기본 사용법

다른 형태

row name

df.loc[ "row1" ]

 

row name list

df.loc[ "row1", "row2", "row3" ]

 

row name list slicing

df.loc[ "row1" : "row5" ]

df[ "row1" : "row5" ]

column name

df.loc[ :, "col1" ]

df[ "col1" ]

column name list

df.loc[ :, [ "col1", "col2", "col3" ] ]

df[ [ "col1", "col2", "col3" ] ]

column name list slicing

df.loc[ :, "col1" : "col5" ]

 

 

□ DataFrame.iloc 사용법

구분

기본 사용법

다른 형태

row

df.iloc[ 1 ]

 

row list

df.iloc[ [ 1, 2, 3 ] ]

 

row list slicing

df.iloc[ 1 : 5 ]

df[ 1 : 5 ]

column

df.iloc[ :, 1 ]

 

column list

df.iloc[ :, [ 1, 2, 3 ] ]

 

column list slicing

df.iloc[ :, 1 : 5 ]

 

 

반응형

visdom은 facebook에서 데이터 시각화를 위해 제공하는 기능이다.

딥러닝을 위해 pytorch를 사용한다면 기본적으로 설치해 두는 것이 좋다.

 

□ visdom 설치

pip install visdom

 

□ visdom 실행

python -m visdom.server

 

visdom은 웹 상에서 호출이 가능하고 visdom server가 정상적으로 수행되면 기본적으로 제공하는 포트는 8097이다.

ex) http://127.0.0.1:8097

 

이때 포트 번호는 변경할 필요가 종종 있다. 한 예로 , docker 환경에서 사용할 경우에는 8097 포트를 미리 docker 외부 연결이 가능하도록 지정하지 않았다면 docker에서 지정해 놓은 포트로 변경해야 사용이 가능하다.

포트 변경을 위해서는 -port 옵션을 사용한다.

 

□ visdom port 변경

python -m visdom.server -port [port number]

 

만약 docker 지정 포트가 9002 라면 visdom server 실행 시 -port 옵션에 9002를 기재한다. 

ex) python -m visdom.server -port 9002

 

 

□ python에서 visdom 실행

python에서는 아래처럼 간단히 호출이 가능하며 default port로 8097을 사용하여 통신한다.

import visdom
vis = visdom.Visdom()

따라서 visdom port를 변경하고 그대로 호출하면 아래와 같은 오류가 발생한다.

□ python에서 변경된 port로 visdom 실행

import visdom
vis = visdom.Visdom(port='9002')

사용 예) 변경된 port가 9002일 경우, 아래와 같이 오류없이 잘 실행된다.

웹 상에서 확인하면 Hello 문구가 잘 출력된 것을 볼 수 있다.

 

 

반응형

파이썬 print문에서 format 메소드 사용 시 서식 지정방법은 아래와 같다.

 

□ 형식

① 소수점을 포함한 전체 길이 지정

② 소수점 이하 길이 지정, 반올림 처리

③ 서식지정자

 

□ 출력 방식

소수점을 포함하여 전체 길이를 출력한다. 한 예로 6.2f는 소수점 이상 3자리, 소수점, 소수점 이하 2자리로 출력한다.

소수점은 반올림 처리된다.

소수점 이상 자리수가 소수점을 포함한 전체 길이보다 클 경우는 전체 길이 지정은 무시된다.

소수점 이하 길이가 우선순위가 높다. 소수점 이하 길이를 먼저 처리한 후 나머지 자리수를 맞춘다.

전체 길이 지정이 클 경우 숫자 앞에 공백이 남은 길이만큼 추가된다.

소수점 길이가 클 경우 뒤에 0으로 채워진다.

 

예1) 소수점 이상 3자리, 소수점, 소수점 이하 2자리로 총 6자 길이로 출력된다.

print( "{:6.2f}".format( 123.456 ))
123.46

예2) 소수점은 반올림 처리된다.

print( "{:6.2f}".format( 123.456 ))	# 소수점 3자리에서 반올림
123.46
print( "{:6.2f}".format( 123.451 ))	# 소수점 3자리에서 반올림
123.45

예3) 소수점 이상 자리수가 소수점을 포함한 전체 길이보다 클 경우는 전체 길이 지정은 무시된다.

print( '{:4.2f}'.format( 123.456))	# 전체 길이 4에 맞추어 3.46 또는 123.(4글자)이 출력되는 것이 아니다.
123.46

 예4) 소수점 이하 길이 지정에 대한 우선순위가 높다.

print( '{:1.2f}'.format( 123.456))	# 소수점 2자리를 지정하고 전체길이 1은 무시된다.
123.46

예5) 전체 길이 지정이 클 경우 숫자 앞에 공백이 남은 길이만큼 추가된다.

print( '{:6.2f}'.format( 123.456))
print( '{:7.2f}'.format( 123.456))
print( '{:8.2f}'.format( 123.456))
print( '{:9.2f}'.format( 123.456))
123.46
 123.46
  123.46
   123.46

예6) 소수점 길이가 클 경우 뒤에 0으로 채워진다.

print( '{:6.2f}'.format( 123.456))
print( '{:6.3f}'.format( 123.456))
print( '{:6.4f}'.format( 123.456))
print( '{:6.5f}'.format( 123.456))
print( '{:6.6f}'.format( 123.456))
123.46
123.456
123.4560
123.45600
123.456000
반응형

일반적인 경우 아래 세 개 command로 pytorch에서 GPU를 사용가능한지 확인이 가능하다.

import torch

torch.cuda.is_available()

torch.cuda.get_device_name(0)

torch.cuda.device_count()

 

각각의 command를 설명하면 다음과 같다.

# GPU를 사용할 수 있는 지 알 수 있다.

torch.cuda.is_available()

→ True

 

# GPU 정보를 반환한다. 아래는 0번 GPU 정보를 반환한다.

torch.cuda.get_device_name(0)

'GeForce GTX 1080 Ti'

 

# 사용가능한 GPU 개수를 반환한다. 아래 예제는 2개의 GPU가 있다는 것을 알 수 있다.

torch.cuda.device_count()

→ 2


# 만약 os 세팅을 통해서 GPU 개수를 줄인다면

# 터미널에서 아래와 같이 환경변수 CUDA_VISIBLE_DEVICES를 0으로 설정한 후 python 실행

CUDA_VISIBLE_DEVICES=0 python                 # python 실행

 

# 환경 변수에 의해서 사용가능한 GPU가 0번만 지정되어 1개로 나타난다.

torch.cuda.device_count()

→ 1

 

# 아래와 같이 사용하는 것은 tourch.cuda.device_count() 결과에 영향을 주지 않는다.

CUDA_VISIBLE_DEVICES=0 python                 # python 실행

 

import os

os.environ['CUDA_VISIBLE_DEVICES]  = "0"

torch.cuda.device_count()

→ 2

 

이외 아래와 같은 명령어들이 있다.

# 항상 0을 return

torch.cuda.current_device()

→ 0

 

# device 정보 반환

torch.cuda.device(0)

 

반응형

python용 opencv를 어렵게 설치하고 샘플을 수행했을 때 오류가 나오면 정말 허탈하죠.

이중 아래와 같은 오류는 빈번하게 발생합니다.


python 실행 시 import cv2에서 아래와 같은 오류가 발생할 때


ImportError: /usr/local/lib/libopencv_freetype.so.3.2: undefined symbol: hb_shape


해당 오류에 대한 trackback은 아래와 같으며


trackback URL → https://github.com/opencv/opencv_contrib/issues/919


위 글의 중간 쯤에 "Kumataro"란 유저가 해결방법을 남겼습니다. ( Kumataro commented on Dec 27, 2016 • edited )

아래는 Kumataro 해결법에 대한 연결경로입니다. 아래로 직접 가셔도 되요.

연결 URL → https://github.com/Kumataro/opencv_contrib/commit/cf8c1aad2771c325b8ffffd71f31fcdc84166b68


지금 쓰고 있는 글도 위를 토대로 제가 당한 문제를 해결하고 나서 작성한 것입니다.


□ 해결방법

참고) 저의 환경은 python 2.7 - opencv 3.2.0 입니다. opencv 설치 문제이므로 python은 2.7이든 3.X든 동일한 문제가 납니다.


아래 파일을 오픈합니다.

~/opencv/opencv_contrib-3.2.0/modules/freetype/CMakeLists.txt


해당 파일의 22번째 줄을 주석처리하고 아래 파란색 명령을 추가합니다.

즉,  freetype2_LIBRARIES와 harfbuzz_LIBRARIES이 제대로된 경로를 못찾아주어서 발생하는 오류입니다.


if( FREETYPE_FOUND AND HARFBUZZ_FOUND )

#  ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${freetype2_LIBRARIES} ${harfbuzz_LIBRARIES} WRAP python)

   ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES} WRAP python)

   ocv_include_directories( ${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS}     

)


이후, ~/opencv/opencv-3.2.0/build 디렉토리에서 

cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D WITH_TBB=OFF \

-D WITH_IPP=OFF \

-D WITH_1394=OFF \

-D BUILD_WITH_DEBUG_INFO=OFF \

-D BUILD_DOCS=OFF \

-D INSTALL_C_EXAMPLES=ON \

-D INSTALL_PYTHON_EXAMPLES=ON \

-D BUILD_EXAMPLES=OFF \

-D BUILD_TESTS=OFF \

-D BUILD_PERF_TESTS=OFF \

-D ENABLE_NEON=ON \

-D WITH_QT=ON \

-D WITH_OPENGL=ON \

-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules \

-D WITH_V4L=ON  \

-D WITH_FFMPEG=ON \

-D WITH_XINE=ON \

-D BUILD_NEW_PYTHON_SUPPORT=ON \

../ 

를 다시 수행시켜 주세요. 문제가 있던 opencv를 uninstall하실 필요는 없습니다.

대부분 이미 설정이 완료되어 있으므로 금방 끝납니다. 


-- Configuring done
-- Generating done
-- Build files have been written to: /home/webnautes/opencv/opencv-3.2.0/build


이와 같은 문구를 빠르게 보게 될 겁니다.


이제 다시 컴파일을 합니다.

 ~/opencv/opencv-3.2.0/build$ time make -j12


제 컴퓨터는 CPU 코어수가 12개라 -j12입니다. 컴파일 전에 본인의 CPU 코어수를 확인해야할 필요가 있죠.

다음과 같은 명령으로 쉽게 확인이 가능합니다.

 cat /proc/cpuinfo | grep processor | wc -l 


컴파일도 대부분 이미 완료되었으므로 빠르게 끝납니다.

이제 마지막 재설치 작업만 남았군요. 별건 없고 아래 명령으로 끝~

 ~/opencv/opencv-3.2.0/build$ sudo make install


문제가 된 python 소스를 실행 시켜보시면 잘 실행 될 것입니다.

그래도 해결이 안된다면... 건투를 빕니다. 당신은 꼭 해결방법을 찾을 것입니다. 그때 다시 오셔서 지식을 나눠주세요. 


반응형

Anaconda3 Python3  환경에서 OpenCV3 설치할 때 참고하면 좋은 사이트입니다.


본문 내용 중 


Python3 OpenCV3 설치 - Anaconda3

Python 3.5 설치 후, OpenCV3 를 설치하는 과정이 쉽지만은 않습니다.


기본적으로 설치 파일에는 Python 3 버전을 지원하지 않기 때문에 입니다. 소스를 다운받아 컴파일 해야하는데 여러가지 환경문제로 컴파일도 쉽지 않습니다.

그래서, 여기서는 좀 더 쉽게 Anaconda를 이용하여 설치해 봅니다.


검색일자   2017.06.18

원문 URL   http://wandlab.blogspot.kr/2016/11/python3-opencv3-anaconda3.html

반응형


파이썬에서 Import 방법은 두 가지가 있습니다.


import 모듈

→ 해당 모듈 전체를 가져온다.

    사용하려면 항상 '모듈명.메소드' 와 같이 모듈명을 앞에 붙여주어야 한다.


from 모듈 import 메소드 / 변수

→ 해당 모듈 내에 있는 특정 메소드나 모듈 내 정의된 변수를 가져온다.

    가져온 메소드나 변수를 앞에 모듈명을 붙이지 않고 그대로 사용할 수 있다.

    다만, 이름이 같은 변수나 메소드가 존재할 경우 대체된다.

    

    from 모듈 import * 이라고 하면 import 모듈과 동일하다. (사용 시 모듈명 붙이는 것 빼고)


아래는 두 방식에 대해 잘 설명된 사이트입니다. 단, 파이썬 2.7 버전을 중심으로 설명하고 있습니다.


□ 원본 URL → https://wikidocs.net/77



반응형

Radix Sort 중 특히 큐를 이용한 구현 방식에 대해 설명이 좋은 사이트입니다.

 

원본 Url →  http://blog.naver.com/itperson/220846813778

반응형

'programming > 알고리즘' 카테고리의 다른 글

[펌] Counting Sort  (0) 2017.02.12
순열, 중복순열, 조합, 중복조합  (0) 2017.01.15
조합, 뤼카(Lucas) 정리  (0) 2016.12.29

카운팅 소트 관련 너무 쉽게 설명된 사이트입니다.

애니메이션을 통해 쉽게 확인이 가능합니다.

특히, 카운팅 소트 내에서 누적 배열 사용법이 잘 이해가 안될때 더욱 좋습니다.

 

원본 Url   http://www.cs.miami.edu/home/burt/learning/Csc517.091/workbook/countingsort.html

반응형

'programming > 알고리즘' 카테고리의 다른 글

[펌] Radix Sort  (0) 2017.02.12
순열, 중복순열, 조합, 중복조합  (0) 2017.01.15
조합, 뤼카(Lucas) 정리  (0) 2016.12.29

+ Recent posts