2023. 7. 6. 18:10ㆍIT 라이프/패캠 데이터분석 부트캠프 9기
이전에 배웠던 내용과 겹치는 내용은 빼고 정리했다.
1. python 고급기능
⌘ list comprehension
- list comprehension은 for문보다 속도가 빠름
- 사용 방법 예시
# 홀수만 출력
new_list = [elem for elem in range(30) if (elem % 2) == 1]
⌘ 예외처리
- try, except문 사용
- try : 우선적으로 실행할 구문
- except : 오류 발생시 실행할 구문
- 오류 무시하기
- pass를 사용해 모든 오류를 무시
- 치명적인 에러까지 무시하기 때문에 추천하지는 않음
- 바람직한 방향
- 예상되는 예외만을 지정해서 처리
- 모든 예외를 무시하는 습관을 가지다 보면, 다른 프로그램과 충돌이 났을 때 원인 파악이 힘듦
# 모든 오류를 무시하도록 하는 방법-비추
def error_function(input):
for i in range(10):
try:
rst = input / i
print(rst)
except:
pass # 모든 종류의 에러를 무시하고 다시 for문이 돌게 됨
# 예상되는 에러(ZeroDivisionError)만 예외처리
def error_function(input):
for i in range(10):
try:
rst = input / i
print(rst)
except ZeroDivisionError: # 0으로 나누었을 때 발생하는 에러만 무시
pass # 에러 무시하고 다시 for문이 돌게 됨
2. 프로그램 모듈화
⌘ 프로그램 모듈화
- 모듈화란? 우리가 작성한 python 코드를 실제 동작할 수 있는 프로그램처럼 만드는 방법
- 모듈화가 이뤄진 코드는 다른 외부 장치에서도 import하고 실행할 수 있음
- python 기본 모듈화 과정
- 프로그램 내용이 담긴 main()함수 만들기
- if __name__ == '__main__': 구문을 코드 가장 하단에 추가
- main()함수를 추가된 구문에 들여쓰기를 맞춰서 실행될 수 있게 함
- .py 파일을 만들고, 프로그램 내용 붙여넣기
- .py 파일 실행
- colab에서 실습
# 함수 작성
def main():
item = input("what's your favorite? : ")
print(f'I like {item}, too.')
if __name__ == '__main__':
main()
- colab에서 코드 작성/실행 중이라면 드라이브 마운트를 해야 파일을 인식할 수 있음
# 드라이브 마운트 : 먼저 안해주면 해당 경로의 파일이나 디렉토리를 인식 못해서 에러남
from google.colab import drive
drive.mount('/content/drive')
# 미리 만들어둔 함수를 저장한 python 파일을 실행
!python /content/module_sample.py
3. numpy
⌘ matrix 연산
- 덧셈, 뺄셈
- 연산하려는 두 array의 행렬의 차원이 서로 같아야 함
- 예시) 둘 다 2x3 일 때 각 위치끼리 연산(Element-wise 연산)한 값을 2x3 array로 그대로 반환
- 연산하려는 두 array의 행렬의 차원이 서로 같아야 함
- numpy 곱 연산의 종류
- 설명이 너무 부족해서 참고한 포스팅
- 선형대수에서 배우는 행렬의 곱 : 행렬곱(@)
- 내적(dot product)
- 스칼라 곱 : 별연산(*)
- 곱셈(행렬곱 @), 나눗셈
- 두 array의 행렬의 차원이 서로 같은 경우 : 같은 위치끼리 연산(Element-wise 연산)
- 사실상 2차원 공간인 행렬에서는 내적과 같은 역할을 하는 행렬곱
정리
numpy는 진짜 안쓰고 이렇게 설명만 3번째 들어서는 엄청나게 헷갈리는 게 많다.
전에도 말했던 것처럼 축(axis)을 쓰는 것도 그렇고, 곱연산은 곱셈 하나일 줄 알았는데 무려 3 가지나 있다. 내적(dot product)가 곱연산 카테고리로 묶여 있다는 것도 처음 알았다. 내적은 어디서 왜 쓰게 되는 것인지도 궁금하지만 우선 진도를 빨리 빼서 기초적인 내용을 이해하고 어서 넘어가서 실제 예제에서 여러 번 써봐야 빨리 익힐 수 있을 듯하다.
그리고 numpy array에는 data type이 1가지로 통일되도록 설계해서 broadcasting도 가능하게 만들었다는 점에서 numpy의 용도가 매우 확실하다는 것도 알았다. 하지만 중첩된 리스트 모양을 보고 있자면 눈이 아프고 하나씩 따져보게 되어 몹시 피곤하다.
실무에서 numpy,pandas 쓸 때는 print()를 백만번 찍어가며 내가 원하는 모양을 얻었고 대충대충 안 채로 넘어가다보니 지식에 구멍이 많은 만큼 이해를 정확히 못해서 어렵고 헷갈렸던 부분이 많지 않았을까 싶었다.
이번 학습 중 새로 알게 된 것도 그 중 하나인데, arr[[0,3],:] 같은 걸 볼 때면 이건 어째서 리스트 속에 또 리스트를 쓰는지 이해를 못했었다. 어떨 때는 arr[5,2]이런 식으로 쓰고 어떨 때는 중첩리스트 마냥 사용하는 느낌을 받았던 것 같다. array는 콤마 기준 행, 열, 간격 세 가지 인데, 그 중 첫 번째 자리가 행이니까 행에서 띄엄띄엄 있는 행을 가져오려먼 리스트로 묶어서 인덱스로 표현해줬을 뿐이다. 멀리서 흐릿하게 보면 뭐가 뭔지 대충 보고 이해 못한 채 넘어가겠지만 이젠 흐린 눈으로 보지 않을 수 있겠단 생각도 들었다.
'IT 라이프 > 패캠 데이터분석 부트캠프 9기' 카테고리의 다른 글
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(7) (0) | 2023.07.10 |
---|---|
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(6) (0) | 2023.07.08 |
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(4) (0) | 2023.07.05 |
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(3) (0) | 2023.07.04 |
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(2) (0) | 2023.07.03 |