# Day3. 파이썬 활용

## 예외 처리

코딩을 하다보면 생각하지 못한 여러가지 오류가 발생할 것입니다.

이런 상황에서 에러를 핸들링 하기 위해 파이썬에서 "try", "except문"을 사용 할 수 있습니다.

### try, except 문

```python
try:
    ...
except :
    ...
```

위 경우 에러 종류에 상관없이 에러가 발생하면 except 블록을 수행합니다.

```python
try:
    ...
except 발생오류:
    ...
```

이 경우에는 정해 놓은 오류와 동일한 오류가 발생 했을 때만 except 블록을 수행하게 됩니다.

```python
try:
    4 / 0
except ZeroDivisionError as e:
    print(e)

# division by zero
```

위 경우는 오류의 내용까지 알고 싶을때 쓰는 방법 입니다.

에러가 발생하면 "e" 라는 변수에 해당 에러의 종류가 저장되고 이것을 "print()"를 이용해서 출력할 수 있게 만들어 주는 것 입니다.

## 외부 라이브러리 작업(NumPy, Pandas)

### Numpy?

#### 📚 Numpy는 C언어로 구현된 파이썬 라이브러리로써, 고성능의 수치 계산을 위해 제작되었습니다. Numpy는 벡터 및 행렬 연산에 있어서 매우 편리한 기능을 제공합니다.

```python
import numpy as np

# 1차원 배열
vec = np.array([1, 2, 3, 4, 5])
print(vec)

################
[1 2 3 4 5]
################

# 2차원 배열
mat = np.array([[10, 20, 30], [ 60, 70, 80]]) 
print(mat)

################
[[10 20 30]
 [60 70 80]]
################

# 1씩 증가하는 1차원 배열(시작이 0부터)

print(np.arange(10)) 

################ 
[0 1 2 3 4 5 6 7 8 9]
################

# 1씩 증가하는 1차원 배열(시작이 5부터)

print(np.arange(5, 10)) 

################
[5 6 7 8 9]
################

# 영행렬 생성

print(np.zeros((2,2)))  

################
 [[0. 0.]
  [0. 0.]]
################

# 유닛행렬

print(np.ones((2,3)))  

################
 [[1. 1. 1.]
  [1. 1. 1.]]
################

# 모든 원소가 5인 2*3행렬

print(np.full((2,3), 5)) 

################
 [[5 5 5]
  [5 5 5]]
################

# 단위행렬

print(np.eye(3)) 

################
 [[1. 0. 0.]
  [0. 1. 0.]
  [0. 0. 1.]]
################
```

### Pandas?

#### 📚 데이터 처리와 분석을 위한 파이썬 라이브러리로, 대용량의 데이터들을 처리하는데 매우 편리한 특징을 가지고 있습니다

행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있습니다.

Pandas는 총 세가지 데이터 구조를 사용됩니다.

* Series
* DataFrame
* Panel

이 중에서 가장 많이 사용되는 데이터 프레임을 보겠습니다.

### **DataFrame**

* 데이터 프레임은 2차원 리스트를 매개변수로 전달합니다. 2차원이므로 행방향 인덱스(index)와 열방향 인덱스(column)가 존재합니다. 즉 행과 열을 가지는 자료구조입니다.

```python
values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
index = ['one', 'two', 'three']
columns = ['A', 'B', 'C']

df = pd.DataFrame(values, index=index, columns=columns)

print('데이터프레임 출력 :')

print(df)

데이터프레임 출력 :
A  B  C
one    1  2  3
two    4  5  6
three  7  8  9
```

**외부 데이터를 가지고 데이터 프레임 생성하고 조회하기**

"example.csv"의 모습 예시

![](https://3402779428-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTLirNrcoAGymWQdO0PHK%2Fuploads%2FBXcNOc56w6xES0gwgPK9%2Fimage.png?alt=media\&token=c0bee144-959c-4906-b3f8-e6cfe9da4f1a)

```python
df = pd.read_csv('example.csv')
print(df)

######################################

   student id      name  score
0        1000     Steve  90.72
1        1001     James  78.09
2        1002    Doyeon  98.43
3        1003      Jane  64.19
4        1004  Pilwoong  81.30
5        1005      Tony  99.14

# 위의 경우 인덱스가 자동으로 부여 됩니다.

print(df.index)

RangeIndex(start=0,stop=6,step=1)

### 데이터 프레임 조회 하기 ###

#앞 부분 2개까지 보기
print(df.head(2))

#########################
   student id      name  score
0        1000     Steve  90.72
1        1001     James  78.09
#########################

# 뒷 부분 4개 까지 보기
print(df.tail(4))

#########################
   student id      name  score
2        1002    Doyeon  98.43
3        1003      Jane  64.19
4        1004  Pilwoong  81.30
5        1005      Tony  99.14
#########################

# 'name'에 해당하는 열을 보기
print(df['name'])

#########################

0    Steve
1    James
2    Doyeon 
3    Jane
4    Pilwoong 
5    Tony 
Name: name, dtype: object
#########################
```

#### Flask를 사용한 웹 개발 소개

#### 💡 Flask는 웹사이트의 백엔드 개발을 위해 사용돼요 Flask의 **가볍고 , 빠른 속도, 편리한 사용성** 때문에 소셜미디어, 온라인 마켓플레이스, 교육 기관에 이르기까지 다양하게 사용 되고 있습니다.

**Flask로 구축된 웹사이트**

<figure><img src="https://3402779428-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTLirNrcoAGymWQdO0PHK%2Fuploads%2Fxo0SedUudi3A1ExVsy4h%2Fimage.png?alt=media&#x26;token=027b372c-d3bc-4422-9fb9-39ccd57c6172" alt=""><figcaption></figcaption></figure>

**Flask를 사용하고 있는 대기업**

<figure><img src="https://3402779428-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTLirNrcoAGymWQdO0PHK%2Fuploads%2FSjaLrKHIbuHIhJDhACW2%2Fimage.png?alt=media&#x26;token=3d40d317-2376-4f47-af0d-e164b62bd59b" alt=""><figcaption></figcaption></figure>

### Python 개발 모범 사례(PEP 8)

💡 **PEP 8은 "Style Guide for Python Code"로 파이썬 코드를 어떻게 구상해야할 지 알려주는 스타일 가이드입니다.**

#### 네이밍 스타일 \[ 중요!!!! ]

| 타입       | 네이밍 컨밴션                                                                             | 예시                                           |
| -------- | ----------------------------------------------------------------------------------- | -------------------------------------------- |
| Function | <p>소문자 단어를 사용하십시오.<br>가독성을 높이기 위해 단어를 밑줄로 구분합니다.<br>snake case 라고 합니다.</p>          | function, my\_function                       |
| Variable | <p>소문자 단일 문자, 단어 또는 단어를 사용하세요!<br>가독성을 높이기 위해 단어를 밑줄로 구분합니다.</p>                    | x, var, my\_variable                         |
| Class    | <p>각 단어는 대문자로 시작합니다.<br>밑줄로 단어를 구분하지 마십시오.<br>pascal case 또는 camel case라고 합니다 .</p> | Model, MyClass                               |
| Method   | <p>소문자 단어를 사용합니다.<br>가독성을 높이기 위해 단어를 밑줄로 구분합니다.</p>                                 | class\_method, method                        |
| Constant | <p>대문자 단일 문자, 단어 또는 단어를 사용합니다.<br>가독성을 높이기 위해 단어를 밑줄로 구분합니다.</p>                    | CONSTANT, MY\_CONSTANT, MY\_LONG\_CONSTANT   |
| Module   | <p>짧은 소문자 단어를 사용 합니다.<br>가독성을 높이기 위해 단어를 밑줄로 구분합니다.</p>                             | [module.py](http://module.py), my\_module.py |
| Package  | <p>짧은 소문자 단어를 사용합니다<br>밑줄로 단어를 구분하지 마십시오.</p>                                       | package, mypackage                           |

PEP 8에 대한 내용은 많기 때문에 이 문서를 참고해서 사용 하시는게 좋습니다.

[PEP 8 - Style Guide for Python Code](https://peps.python.org/pep-0008/)

**Black 을 사용하여 코드 스타일 통일하기**

📚 *Black은* PEP 8을 준수하는 독창적인 포맷터입니다.

<https://pypi.org/project/black/>
