본문 바로가기

Programming/python67

폴더 내의 파일 검색하기 파이썬에서 폴더 안의 파일을 검색해서 처리해야 하는 일들이 종종 생긴다. 하지만 중첩된 폴더일 경우 이게 폴더도 있는 건지 파일만 있는 건지 확인도 해야하고, 생각외로 처리해야 할 것들이 많다. 간단하기 재귀로 폴더 안의 파일들을 검색하는 로직을 짜봤다. 처음 위치의 폴더 경로를 시작으로 해당 하위의 파일들을 찾아서 검색한 후, 만약에 파일이 아니고 폴더면 다시 함수를 호출해서 재귀적으로 폴더 내의 모든 파일을 찾는 함수이다. 위와 같은 방법으로 짤 수도 있지만 python에서는 더 좋은 함수를 제공해 주고 있다. os.walk를 사용하면 코드의 간결함 뿐만 아니라 처리 속도 향상도 얻을 수가 있다. (재귀는 좀 찝찝하기도 하고.. ) 2015. 7. 10.
[Python] Sqlalchemy ON DUPLICATE KEY UPDATE DB를 사용함에 있어 PK가 있는 경우에는 Update를, PK가 없는 경우에는 Insert를 써야 하는 경우가 많다. Django에서는 insert_or_update라는 함수를 따로 제공해 줘서 이 API를 이용했던 기억이 있는데, sqlalchemy 같은 경우에는 이러한 기능을 따로 제공하지 않는 것 같다. 찾아본 결과 sql 쿼리를 직접 날려서 insert_or_update를 처리하거나, select를 해서 pk 여부를 확인한 후 insert를 하는 방법 이렇게 두가지 방법을 확인하였으며, 두 번째 방법으로 insert_or_update 구현하기로 하였다.(사실 oracle처럼 merge란 방법을 쓰란 것도 있었는데, 이건 진짜 도통 모르겠어서 패쓰~) 간략하게 코드 설명을 하자면, 우선 연결되어 .. 2015. 6. 22.
[Pandas] 함수들 ABS 각 요소의 절대값을 나타내 준다. APPLY각 열이나 행 전체를 파라미터로 전달하고 결과를 리턴받는다. 위의 첫번째는 b,c,d 각각의 열을 파라미터로 받아 max - min을 진행하였고, 아래 그림은 apple, banana, egg, orange의 각 행을 파라미터로 받아 max - min을 진행한 결과이다. 열이나 행이 아니라 각 요소에 적용하고 싶다면 applymap을 이용한다. 정렬Pandas에서는 sort_index 함수를 이용하여 정렬을 한다. DataFrame, Series 모두 적용 가능하다. 기본적으로 sort_index를 하면 index에 대해 정렬이 되고, axis=1로 설정할 경우 column에 대해서 정렬이 된다.sort_index의 파라미터로 ascending=False.. 2015. 3. 23.
[Pandas] 산술 연산 DataFrame 간의 연산 DataFrame간 연산을 하려면 그냥 연산자와 함께 입력해주면 된다. 위의 그림에서 보면 ['apple','banana','orange'] 인덱스를 가진 dataframe과 ['apple','banana','orange','egg'] 인덱스를 가진dataframe 간의 덧셈 연산을 수행하였다.index가 존재하여 연산할 수 없을 경우에는 NaN으로 표시되는 것을 확인할 수 있다. 또한 Column이 존재하지 않을 때도 NaN표시가 나타난다. 덧셈 연산에 add라는 함수를 이용한 후, option으로 fill_value를 지정해 주면 NaN 대신 지정한 값이 표시된다. 위 그림에서 보면 fill_value를 0으로 지정해주었기 때문에 orange 같은 경우 0 + 33이 되기.. 2015. 3. 22.
[Python] pyenv 설치하기 Virtualenv를 잘 사용하고 있었는데, 어제 스터디를 갔다가 발표자 분께서 pyenv를 사용하고 계신 것을 우연히 보게 되었다. pyenv 모지??? 찾아보니, virtualenv가 python의 패키지 설치 등에 대해 가상환경을 제공하는 것이라면, pyenv는 다양한 python 버전 별로실행해 볼 수 있는 환경을 제공한다고 한다. 기존 virtualenv를 pip freeze 한 후 과감히 삭제..이제 pyenv를 깔아보자. pyenv를 apt-get이나 pip로는 받을 수 없고 git을 통해 받아야 하는 것 같다. $> sudo apt-get install curl git-core github에 있는 pyenv-installer를 받아서 실행시킨다. (반드시 root 권한에서 실행하자!) $>.. 2015. 3. 17.
[Pandas] row, column 처리 재색인 Pandas는 reindex라는 함수를 통해 기존 index를 새롭게 재배치 할 수가 있다. '어?? 분명 Series 공부할 때, obj.index = ['a','b','c','d'] 이런식으로 index를 다르게 줬었는데.. 이건 왜 필요하지??' 분명 이전에 obj.index = ['a','b','c','d'] 이런 식으로 index 명칭을 변경했었다. 하지만 이건 재색인이라기 보다는 그냥단지 index의 명칭을 기존 명칭에서 ['a','b','c','d']로 바꾼 것 뿐이다. reindex에 대한 예제 코드를 본다면 위의 기능과 크게 다른 것임을 느끼게 될 것이다. reindex를 통해 index에 해당하는 값들이 재배치된 것을 확인할 수 있을 것이다. 또한 index에 해당하는 값이 없다.. 2015. 3. 16.
[Pandas] 자료구조 Pandas란? 데이터 분석, 데이터 처리 등을 쉽게 하기 위해 만들어진 python package이다.보다 안정적으로 대용량 데이터들을 쉽게 처리할 수 있다고도 알려져 있다. SeriesSeries는 value와 index의 형태를 지니는 Pandas의 자료 구조이다.아래 그림과 같이 [1,3,5,7]의 값을 가지는 리스트를 Series로 생성하게 되면 (1,3,5,7)이라는 value와 (0,1,2,3)이라는 index가생성되어 Series라는 형태의 자료 구조를 만든다. index는 사용자가 직접 생성할 수 있으며, value에 대한 접근은 index를 사용하여 접근한다.Series의 색인은 사용자가 변경하고 싶을 경우 obj.index 값을 변경함으로써 언제든지 변경할 수 있다. 또한 dictio.. 2015. 3. 15.
[NumPy] ndarray 데이터 처리 where NumPy에서는 where을 이용한 조건 결과 찾기가 가능한다. 가령 아래와 같은 배열집합이 있다고 가정하자. arr1 = np.array([1, 3, 5, 7, 9])arr2 = np.array([2, 4, 6, 8, 10])cond = np.array([True, False, True, True, False]) cond의 원소가 True일 때 arr1의 값을 찾고, False일때는 arr2의 값을 찾아야 한다고 하면 아마 아래와 같이 작성할 것이다. result = [(x if c else y) for x, y, c in zip(arr1, arr2, cond)] where 함수를 사용하면 더 간단하게 작성할 수 있다. result = numpy.where(cond, arr1, arr2) w.. 2015. 3. 14.
[Numpy] ndarray 내장 함수 ndarray에는 다양한 내장 함수가 존재한다. 함 수 설 명 비고 abs, fabs 절대값을 리턴. 복소수가 아닌 경우에는 빠른 연산을 위해 fabs를 이용한다. numpy.abs(arr) sqrt 제곱근(루트)을 계산함. numpy.sqrt(arr) square 제곱을 계산함. numpy.square(arr) Exp 지수를 계산함. numpy.Exp(arr) Log 로그를 계산함. numpy.Log(arr) sign 각 원소의 부호를 계산함. 양수 : 1, 음수 : -1 numpy.sign(arr) ceil 소수를 올림으로 계산함. numpy.ceil(arr) floor 소수를 버림으로 계산함. numpy.floor(arr) rint 소수를 반올림한다. type은 유지된다. numpy.rint(arr.. 2015. 3. 13.