프로그래밍 언어/python 30

[win32com] python으로 pptx 파일 다루기(2) - PPT 요소에 있는 데이터 접근하기

pptx 파일에 문자열 데이터는 text box와 table 형태로 저장될 수 있다. 두 형태 모두 비슷한 경로로 접근해 데이터를 가져올 수 있다. Textbox 글 상자에 존재하는 데이터를 읽는 방법은 textbox shape object에 접근하고 그 안에 있는 TextFrame, TextRange 순으로 접근해 Text 내용을 불러올 수 있다. TextFrame은 text 데이터, text의 양식 property, 양식을 조작할 수 있는 method를 포함하는 object이고, TextRange는 text 데이터와 그 데이터를 조작할 수 있는 method를 포함하고 있는 object이다. slide 내에 text 데이터를 가진 shape의 구조는 아래와 같이 생각할 수 있다. # pptx 파일에서 ..

[win32com] 파이썬으로 pptx 파일 다루기 (1) pptx의 원하는 위치에 접근하기

win32com은 Microsoft Windows OS가 제공하는 API이다. 이를 사용해 MS word, Power Point, Excel, Outlook 등 microsoft office의 제품들 다룰 수 있다. excel, ppt 파일을 더 쉽게 다룰 수 있도록 만들어진 여러 라이브러리들이 있지만, 환경에 따라 사용할 수 없는 라이브러리들이 있는 것 같다. python-pptx를 이용해 사내에서 업무 자동화 프로그램을 개발하려고 했으나 저장되어있는 pptx 파일을 불러오지 못하는 오류가 있어 win32com를 사용하게 되었다. PPT에 있는 데이터에 접근하기 지금까지 필요한 기능들은 pptx 파일에 저장된 데이터를 읽어 활용하는 것이라 원하는 데이터를 어떻게 받아올 수 있을지에 대한 고민을 정리한다..

[xlwings] 파이썬으로 excel 파일 다루기 (2) 여러 개의 파일과 시트 다루기

엑셀 작업을 할 때 여러 개의 파일이나 시트의 정보를 참조 및 활용해야 하는 경우가 있다. 이번 포스팅에서 새로운 시트를 만들거나 지우고, 하나의 파일에 있는 데이터를 다른 파일이나 시트에 옮기는 예시를 작성해보려고 한다. 시트 생성과 제거 workbook을 생성하고 파이썬을 통해 값과 수식을 입력해 계산한 값을 새로운 시트를 생성해 그 곳에 저장하는 예시를 작성했다. line 7은 엑셀 프로그램을 실행하고 여러 개의 엑셀 파일을 효과적으로 다룰 수 있도록 해준다. 완성된 프로세스를 실제로 사용할 때 엑셀 창을 띄우지 않고 작업을 수행할 때는 반드시 필요하다. line 9의 코드가 새로운 시트를 생성하는 코드이다. add의 argument로 after나 before로 새로 생성 될 시트의 위치를 지정해준..

[xlwings] 파이썬으로 excel 파일 다루기 (1) quick start

xlwings는 python으로 excel 파일을 생성하거나 읽고, 데이터를 불러와 python의 pandas, numpy, matplotlib 등 라이브러리의 유용한 기능을 활용한 결과물을 다시 excel 파일에 작성할 수 있도록 하는 라이브러리이다. excel을 사용하는 단순 반복 작업을 위한 스크립트 뿐만 아니라 데이터를 다루는 과정에서 결과물을 엑셀 창에 띄우는 등 활용할 수 있는 방법은 무궁무진한 라이브러리이다. excel의 VBA를 python으로 대체할 수 있는 수단으로 활용할 수도 있다. xlwings는 excel이 설치 되어있는 상태에서 사용 가능하기 때문에 실습 및 활용을 위해선 excel이 설치 된 환경에서 가능하다. 따라서 아쉽지만 colab에서는 연습이 불가능하다. 1. 설치 파이..

[python] 객체 지향 프로그래밍 1 - Object oriented python

객체 지향 프로그래밍은 왜 쓸까? 파이썬 수업을 처음 들을 때 파이썬의 창시자가 크리스마스에 할 일이 없어 만든 언어라는 것과 함께 듣는 내용이 "python은 객체 지향 언어다" 라는 말이다. 그런데 python을 사용하다보면 object나 class를 사용하지 않아도 필요한 코드를 작성하는데 큰 문제가 없다. 그런데 만약 $^{1)}$다른 사람들과 협업을 하거나 $^{2)}$혼자라도 다루기 어려울 정도로 복잡한 프로그램을 작성하게 된다면 Object-oriented programming이 필요하게 될 것이다. object는 현실의 대상을 모델링해 class를 정의하고 한번 정의된 class를 재사용해 여러 개의 instance를 생성하기 때문에 코드 작정 중 실수를 줄이고 사람이 이해하기 쉬운 코드를..

numpy array broadcasting

Numpy를 활용한 배열 연산 numpy는 python에서 텐서 연산을 효율적으로 수행할 수 있도록 해주는 라이브러리 수학적으로 벡터의 요소별 연산을 할 때, 텐서의 shape이 일치하지 않으면 계산할 수 없음 예를 들어, $x = [1, 2, 3]$인 3차원 벡터의 각 요소에 1씩 더해주려면 x + np.array([1,1,1])처럼 계산 하지만 numpy에서는 배열의 형태가 달라도 의도한 계산을 할 수 있는 broadcasting을 지원하기 때문에 x + 1로 같은 결과를 얻음 2차원 배열에서도 다음과 같이 broadcasting이 적용된 연산을 할 수 있음. Broadcasting rule 위의 예시에서는 낮은 차원의 예시이기 때문에 쉽게 이해하고 적용할 수 있지만, 차원이 높아짐에 따라 규칙을 명..

short-circuit evaluation

short-circuit Evaluation and나 or로 boolean 값을 다룰 때 연산을 최소화하기 위한 방법and and는 두 값이 모두 참일때만 True를 반환하고 나머지 경우에는 False를 반환 (A and B)에서 A가 False $\to$ A가 거짓이면 B 연산 안함 A가 True면 B의 참, 거짓이 (A and B)의 참거짓을 결정 $\to$ B를 반환 or or은 두 값 모두 거짓일때만 False를 반환하고 나머지 경우에는 True를 반환 (A or B)는 둘 중 하나만 참이면 True $\to$ A가 참이면 B 연산 안함 마찬가지로 A가 False이면 B의 참, 거짓이 (A or B)의 참거짓을 결정 $\to$ B를 반환 Bitwise Operators boolean 연산의 두 o..

jupyter module autoreload

jupyter notebook의 module load jupyter lab이나 notebook을 사용할 때 가장 불편했던 점이 어느 정도 프로젝트가 진행 된 후 자주 사용되는 함수들을 모듈화 시켜 .py 파일로 저장했을 때, py 파일을 수정했을 때 kernel을 재시작해야 반영이 되는 점이었다. 노트북에 두 줄의 코드를 입력하는 것으로 커널을 매번 재시작하지 않고 모듈의 수정사항을 반영할 수 있다. Reference [1] ipython autoreload document

*args와 **kwargs 활용하기

open source 라이브러리를 사용하며 문서를 찾다 보면 *args와 **kwargs가 사용되는 것을 볼 수 있다. 두 키워드는 해당 함수에 여분의 argument를 전달해 줄 수 있는 방법이다. *는 필요한 parameter 이외에 추가로 전달되는 argument를 tuple로 전달하고, **는 dictionary 형태로 전달한다. 여기에서 중요한 부분은 *와 **로, *나 **뒤에는 args, kwargs 대신 어떤 단어를 사용해도 좋다. *와 **를 활용해 함수를 정의하는 것 뿐만 아니라 argument를 tuple이나 dictionary 형태로 함수에 전달할 수 있다. dictionary 형태로 argument를 전달하는 방식은 머신러닝 모델을 정의할 때 많이 사용하게 된다.

matplotlib 테마 설정하기

Matplotlib style matplotlib을 기본의 기본 설정을 사용하면 다소 투박한 배경에 그래프가 그려진다. 우연히 python에서 ggplot을 사용해 그린 그래프를 보고 아름답다고 생각을 해 다른 라이브러리를 공부해보려고 생각했다. 필요한 기능의 대부분을 matplotlib으로 해결을 할 수 있다보니 다른 라이브러리를 공부하는 것을 계속 미루던 참에 matplotlib의 style을 바꿀 수 있는 방법을 발견했다. Seaborn style 사용하기 matplotlib 외에 처음 알게 된 라이브러리는 seaborn이다. seaborn은 matplotlib에 기반해 좀 더 아름답고 효과적으로 데이터 시각화를 도와주는 라이브러리이다. seaborn은 5가지 기본 테마를 제공한다. sns.set_..