[오늘의 일지]
파이썬 온라인 녹화 강의 - Numpy와 Pandas 복습, Matplotlib과 Seaborn 수업 듣기
[상세 내용]
파이썬 EDA
Numpy, Pandas 복습
- 어제 배운 부분은 다시 생각하면서 복습했고 새롭게 나온 함수들만 정리해 봤습니다.
- Numpy의 집계함수 : 사실 이 부분은 판다스를 배울 때 나온 부분인데 넘파이에서 사용할 수 있는 함수이니 정리하겠습니다.
# .sum( ) : 모든 요소의 합
# .min( ) : 모든 요소 중 최소값
# .max( ) : 모든 요소 중 최대값
# .argmax( ) : 모든 요소 중 최대값의 인덱스
# .cumsum( ) : 모든 요소의 누적합
# a 배열 생성 & 출력
# 0부터 8미만까지 출력하고 (2,4) 크기로 재가공하고 제곱하여 출력
a = np.arange(8).reshape(2, 4)**2
print(a)
>>>
[[ 0 1 4 9]
[16 25 36 49]]
# 모든 요소의 합
print(a.sum())
>>>140
# 모든 요소 중 최소값
print(a.min())
>>>0
# 모든 요소 중 최대값
print(a.max())
>>>49
# 모든 요소 중 최대값의 인덱스
print(a.argmax())
>>>7
# 모든 요소의 누적합
# 14 = 0 + 1 + 4 + 9
print(a.cumsum())
>>>
[ 0 1 5 14 30 55 91 140]
# 정렬 함수
a = np.random.rand(3, 2)
print(a)
>>>
[[0.8460771 0.20811466]
[0.85729965 0.22188061]
[0.47487175 0.56778263]]
# 그냥 정렬 (오름차순 정렬만 지원합니다)
np.sort(a, axis=0) # 차이 ?
# 만약에 내림차순을 하겠다?
# np.sort(mat2, axis=0)[::-1]
>>>
array([[0.47487175, 0.20811466],
[0.8460771 , 0.22188061],
[0.85729965, 0.56778263]])
# index를 정렬
np.argsort(a, axis=0)
>>>
array([[2, 0],
[0, 1],
[1, 2]])
- 집계함수를 사용할 때 axis 값을 을 매개변수로 입력하면 행과 열만 각각 따로 적용할 수 있다
#.sum( ), .min( ), .max( ), .cumsum( )과 같은 연산에 axis 값을 입력하면, 축을 기준으로도 연산 가능
# axis = 0 (열 기준)
# axis = 1 (행 기준)
# b 배열 생성 & 출력
b = np.arange(12).reshape(3, 4)
print(b)
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
# axis = 0은 열 기준으로 연산
print(b.sum(axis=0))
>>>
[12 15 18 21]
# axis = 1은 행 기준으로 연산
print(b.sum(axis=1))
>>>
[ 6 22 38]
- Numpy 크기 변경
# .ravel : 1차원으로 변경
# .reshape : 지정한 차원으로 변경
# .T : 전치(Transpose) 변환
# a 배열 생성 & shape 출력
a = np.arange(12).reshape(3,4)
print(a)
print(a.shape)
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
(3, 4)
# .ravel : 모든 원소를 1차원으로 변경
print(a.ravel())
print(a.reshape(-1))
>>>
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
# .reshape : 지정한 차원으로 변경
# [3,4] => [2,6]로 변경
print(a.reshape(2,6))
>>>
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
# .T : [3,4]의 전치(transpose)변환으로 [4,3] 출력
print(a.T)
print(a.T.shape)
>>>
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
(4, 3)
- Numpy 데이터 합치기
# np.vstack() 와 np.hstack()를 통해 데이터를 합치기
# np.vstack(): axis=0(열) 기준으로 쌓음
# np.hstack(): axis=1(행) 기준으로 쌓음
# a 배열 생성 & 출력
a = np.array([1, 2, 3, 4]).reshape(2, 2)
print(a)
>>>
[[1 2]
[3 4]]
# b 배열 생성 & 출력
b = np.array([5, 6, 7, 8]).reshape(2, 2)
print(b)
>>>
[[5 6]
[7 8]]
# [2,2] => [4,2]
# np.vstack(): axis=0(열) 기준으로 쌓음
print(np.vstack((a,b)))
>>>
[[1 2]
[3 4]
[5 6]
[7 8]]
# [2,2] => [2,4]
# np.hstack(): axis=1(행) 기준으로 쌓음
print(np.hstack((a,b)))
>>>
[[1 2 5 6]
[3 4 7 8]]
- Numpy 데이터 쪼개기
# np.hsplit( )을 통해 숫자1개가 들어갈 경우, X개로 등분
# np.hsplit( )을 통해 리스트로 넣을 경우, axis=1 기준 인덱스로 데이터를 분할
# a 배열 생성 & 출력
a = np.arange(12).reshape(2, 6)
print(a)
>>>
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
# [2,6] => [2,2] 데이터 3개로 등분
print(np.hsplit(a, 3))
>>>
[array([[0, 1],
[6, 7]]),
array([[2, 3],
[8, 9]]),
array([[ 4, 5],
[10, 11]])]
# [2,6] => [:, :3], [:, 3:4], [:, 4:]로 분할
# a를 3번째 열 ~ 4번째 열 미만 기준으로 분할하여 3개의 array를 반환
print(a)
print(np.hsplit(a, (3,4)))
>>>
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
[array([[0, 1, 2],
[6, 7, 8]]),
array([[3],
[9]]),
array([[ 4, 5],
[10, 11]])]
- 참고 자료(범용함수)
- Pandas 불리언 인덱싱 +. isin()
# .isin( ) : 각각의 요소가 데이터프레임 또는 시리즈에 존재하는지 파악하여 True/False 값 반환#
# 불리언 인덱싱 + .isin( ) : 데이터의 특정 범위만 추출
# 데이터 내용 확인
titanic.head(2)
>>>
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
# .isin 함수는 각각의 요소가 데이터프레임 또는 시리즈에 존재하는지 파악하여 True/False 값 반환
# Pclass 변수의 값이 1일 경우, True/False 값 반환
titanic["Pclass"].isin([1])
>>>
0 False
1 True
2 False
3 True
4 False
...
886 False
887 True
888 False
889 True
890 False
Name: Pclass, Length: 891, dtype: bool
# .isna( ) : 결측 값은 True 반환, 그 외에는 False 반환
# .notna( ) : 결측 값은 False 반환, 그 외에는 True 반환
# 결측 값 파악을 위한 데이터 확인
passenger.head(7)
>>>
Sex Age
0 male 22.0
1 female 38.0
2 female 26.0
3 female 35.0
4 male 35.0
5 male NaN
6 male 54.0
# .isna( ) : 결측 값은 True 반환, 그 외에는 False 반환
# .isna 함수는 데이터프레임 내에 결측 값을 확인하기 위해 사용
# 5번째 행 True 출력
passenger["Age"].isna()[0:7]
>>>
0 False
1 False
2 False
3 False
4 False
5 True
6 False
Name: Age, dtype: bool
# .notna( ) : 결측 값은 False 반환, 그 외에는 True 반환
# .notna 함수는 누락되지 않은 값을 찾기 위해 사용
# 5번째 행 False 출력
passenger["Age"].notna()[0:7]
>>>
0 True
1 True
2 True
3 True
4 True
5 False
6 True
Name: Age, dtype: bool
- Pandas 결측치 제거
# .dropna( ) == .dropna(axis=0) : 결측 값이 들어있는 행 전체 삭제
# .dropna(axis=1) : 결측 값이 들어있는 열 전체 삭제
# .notna( ) : 결측 값은 False 반환, 그 외에는 True 반환
- Pandas 행과 열 추가와 삭제
# 행과 열 추가
# 행 추가 : DataFrame.loc[‘새로운 행 이름‘] = 데이터 값
# 열 추가 : DataFrame 객체[‘추가하려는 열 이름‘] = 데이터 값
# 행과 열 삭제
# 행 삭제 : DataFrame.drop(index, axis = 0)
# 열 삭제 : DataFrame.drop(변수명, axis = 1)
Matplotlib과 Seaborn의 정리는 양이 많아서 내일 정리해 보도록 하겠습니다.
[마무리]
EDA 파트를 배우기 시작하면서 처음으로 Maplotlib과 Seaborn이라는 라이브러리를 통해서 데이터를 시각화하는 과정을 배웠습니다. 이제는 진짜로 이 라이브러리들만 잘 활용한다면 데이터 사이언스라는 분야에서 여러 가지 일들을 수행할 수도 있는 능력을 키울 수 있겠다는 느낌을 받았습니다. 오늘은 비록 Numpy와 Pandas의 나머지 부분을 정리했지만 내일 정리할 Maplotlib과 Seaborn를 통해서 데이터의 시각화를 제대로 느낄 수 있을 것입니다.
반응형
'AI > 데이터 사이언스' 카테고리의 다른 글
[AI 부트캠프] DAY 26 - 파이썬 EDA 6 (2) | 2023.08.23 |
---|---|
[AI 부트캠프] DAY 25 - 파이썬 EDA 5 (0) | 2023.08.22 |
[AI 부트캠프] DAY 24 - 파이썬 EDA 4 (0) | 2023.08.19 |
[AI 부트캠프] DAY 23 - 파이썬 EDA 3 및 현직자 특강 (0) | 2023.08.18 |
[AI 부트캠프] DAY 21 - 파이썬 EDA 1 (0) | 2023.08.15 |
댓글