[Python] 사용자 정의 함수를 사용할 때의 주의 사항 사용자 정의 함수를 작성할 때, 코드의 가독성과 안정성을 향상 시키기 위해 주의해야 할 점을 정리해보고자 한다. 명확한 역할 함수는 한 가지 명확한 역할을 수행하도록 작성해야 한다. 함수가 너무 많은 일을 하거나 다양한 동작을 수행하면 가독성과 유지보수성이 저하된다. 부작용 최소화 함수는 입력에 대해 예측가능한 결과를 반환해야 한다. 부작용(ex. 전역 변수 변경, 파일 시스템 수정 등)을 최소화하여 함수의 예측 가능성을 높인다. 명확한 이름 함수명은 해당 함수가 하는 일을 명확히 설명해야 한다. 의미 있는 이름을 선택하여 함수의 역할을 명확히 전달한다. 매개변수 개수 함수의 매개변수 개수를 적절히 제한해야한다. 많은 매개변수를 가진 함수는 이해..
[Pandas] 업데이트 (update) pandas의 내장 함수인 update는 다른 데이터 프레임의 NA 가 아닌 값을 사용하여 데이터프레임의 값을 수정한다. 업데이트는 인덱스를 기준으로 정렬하며, 반환값이 없다. DataFrame.update(other, join='left', overwrite=True, filter_func=None, errors='ignore') update 함수는 위와 같이 사용이 가능하며, 파라미터에 대한 설명은 다음과 같다. other : 데이터 프레임에 덮어씌울 객체를 말한다. join : 기준이 될 인덱스다. left만 선택이 가능하므로 제외 가능하다. overwrite : 덮어씌울 방식이다. True면 데이터프레임의 모든 데이터에 other을 덮어씌우며, False면..
[Python] index 찾기 문자열에서 인덱스 찾기 문자열의 위치 값을 앞에서부터 몇번째 위치에 있는지 알아내는 방법엔 find와 index가 있다. 문자열.find(찾을 문자열, start_index) 문자열.index(찾을 문자열) let = 'abcde' >>> let.find('a') 0 >>> let.index('b') 1 두 함수의 차이점은 find는 찾는 값이 없을 경우 -1을 반환하고 index는 오류를 반환한다. >>> let.find('f') -1 >>> let.index('f') ValueError: substring not found rfind, rindex 뒤에서 부터 찾고싶을때는 rfind, rindex를 사용하면 된다. let = 'abcdea' >>> let.rfind('..
[Python] 인덱싱, 슬라이싱 문자열과 리스트의 인덱싱과 슬라이싱 방법이 헷갈려서 정리, 계속 추가 예정 뒤에서 부터 자르기 let = 'abcdefg' >>> let = let[:-2] 'abcde' 문자열 역순 출력 let = 'abcdefg' >>> let[::-1] 'gfedcba' >>> let[1:3][::-1] 'dcb' 리스트 개수로 자르기 arr = [1,2,3,4,5,6] n = 2 >>> [arr[i:i+n] for i in range(0, len(arr), n)] [[1,2],[3,4],[5,6]] 이중 리스트 인덱스 접근하기 arr = [[10,20], [30,40], [50,60]] for i in range(len(arr)): for j in range(len(arr[i])..
[Python] Zip() 파이썬의 내장함수인 zip()은 여러 개의 iterable 객체를 인자로 받고, 각 객체가 담고있는 원소를 튜플 형태로 차례로 접근할 수있는 iterator를 반환한다. zip() 아래와 같이 num 리스트와 let 리스트를 zip() 함수에 인자로 넘겨서 호출이 가능하다. num = [1, 2, 3] let = ['a','b','c'] for zipper in zip(num, let) print(zipper) (1, 'a') (2, 'b') (3, 'c') ** zip() 함수로 넘기는 인자의 길이가 다를 땐 짧은 인자를 기준으로 데이터가 엮이고 나머지는 버려지기 때문에 주의해야한다. unzip zip() 함수로 엮어놓은 데이터를 다시 해체하고 싶을 땐 unpacking 연산..
[etc] 옵시디언(obsidian) 무료로 퍼블리시 하기 옵시디언은 마크다운 형식 으로 작성 할 수 있는 노트 앱이다. 원래 노트 앱으로 노션을 사용하고 있었는데, 사내망에선 노션이 접근이 안됐다. 원노트는 너무 불편하고, 대체제를 찾다보니 옵시디언이라는 소프트웨어를 선택했다. 옵시디언은 노션과 달리 로컬 환경에 저장이되어 오프라인 환경에서도 접근이 가능했다. 마크다운 형식으로 작성하기 편하고 다양한 플러그인이 많아 좋았지만, 내가 생각한 옵시디언의 단점은 노션에 비해 다른 사람에게 공유하기가 어렵다는 점이였다. 옵시디언을 퍼블리시 하려면 유료 기능을 사용했어야 했는데 무료로 퍼블리싱하는 여러가지 방법들이 있었다. 그 중 나는 my digital garden이라는 플러그인으로 퍼블리싱을 해보기로 했다...
[Python] ImportError: cannot import name 'JSONDecodeError' from 'requests.exceptions' python3.7 --> 3.10 으로 버전 업그레이드 이후 conda 명령어 사용 시 해당 에러가 발생하면서 conda 명령어가 실행되지 않았다. 알고보니 requests 라이브러리의 2.27.0 버전 이후 부터 JSONDecodeError 예외가 추가되어서, 버전이 낮아 실행이 되지 않는 것이였다. 2.27.0 이상 버전으로 재설치를 하면 해결이 된다. pip install requests==2.28.2 참고 https://community.streamsets.com/community-articles-and-got-a-question-7/import..
[Python] JSON 파일 파싱하기 데이터 교환 형식으로 JSON을 많이 사용하고 있는데, Python에서 이를 파싱하여 데이터를 처리하는 방법을 알아보고자 한다. 먼저 json 라이브러리를 import 해준다. import json 다음과 같은 JSON 데이터가 있다고 가정해보자. { "person": { "name": "John Doe", "age": 30, "address": { "city": "New York", "zipcode": "10001" }, "contacts": [ { "type": "email", "value": "john@example.com" }, { "type": "phone", "value": "555-1234" } ] } } 단일 값 파싱 하나의 값에 접근하는 방법은 다음..
[Python] Requests requests는 파이썬에서 HTTP 요청을 다루는 강력하고 사용자 친화적인 라이브러리다. 주로 웹 개발이나 API 통신과 관련된 프로젝트를 진행하는 경우 거의 필수적으로 사용된다. 간단하고 직관적인 API로 HTTP 요청을 처리하는 데 도움을 준다. request 모듈 설치 아래 명령어를 통해 간단하게 설치가 가능하다. pip install requests GET request 모듈을 사용하여 간단한 GET 요청을 보내는 방법이다. import requests url = "https://api.example.com/data" response = requests.get(url) print(response.status_code) # HTTP 상태 코드 출력 print(res..
[Python] With문 파이썬의 with 문은 자원 관리를 효과적으로 처리하기 위해 사용된다. with문을 사용하면 코드를 빠져나갈 때 자원이 자동으로 정리되기 때문에, 자원 누수를 방지하고 메모리나 파일과 같은 리소스를 효과적으로 관리 할 수 있다. 또한 예외가 발생하더라도 자원을 올바르게 해제하며, with 블록을 빠져나갈때 자원이 자동으로 정리된다. 기본적으로 파일을 열때 아래와 같이 작업을 한다면 file = open('example.txt', 'r') data = file.read() print(data) file.close() With문을 사용하면 close()를 호출 할 필요 없이 자동으로 파일이 닫힌다. with open('example.txt', 'r') as file: data = ..
[Python] 주피터 랩 설치 (JupyterLab) 주피터 랩 (JupyterLab) 이란? 코드를 블록 단위로 실행하는 주피터 노트북은, 많은 파이썬 개발자들이 사용하고 있다. 이 주피터 노트북을 개선한 형태가 바로 주피터 랩인데, 주피터 노트북처럼 데이터 사이언스, 데이터 시각화, 머신 러닝 개발 환경에 특화된 웹 형 개발 인터페이스다. 주피터 랩은 기존 주피터 노트북에 다중 탭 지원, UI, 다양한 확장 기능을 추가하여 만든 웹 애플리케이션이다. 주피터 노트북은 비교적 가볍고 간단한 인터페이스를 가지고 있으며, 사용자가 직관적이고 이해하기 쉽다. 주피터랩은 기능이 풍부한 인터페이스를 제공하며, 동시 작업과 서드파티 확장 기능과의 통합도 가능하여, 대규모 프로젝트에 적합하다. 개인의 선호도 및 프..
[Python] 주말 판별하기 파이썬에서 특정 날짜가 주말인지 평일인지 판별을 하는 방법은 다음과 같다. weekday() datatime 또는 date 객체에서 weekday() 함수를 호출하면 요일을 숫자로 리턴한다. from datetime import datetime, date today = datetime.now() # 2024-01-18 today.weekday() >> 3 요일 정보는 다음과 같다. 요일 숫자 월 0 화 1 수 2 목 3 금 4 토 5 일 6 다음과 같이 5이상이면 주말인 것을 판별할 수 있다. today = datetime(2024, 1, 20) today.weekday() >> 5 today = datetime(2024, 1, 21) today.weekday() >> 6 ..