머신러닝 & AI 개발자 Tip & 강좌 게시판

Data Scientist와 개발자를 위한 머신러닝, AI 등 개발 Tip과 강좌 게시판 입니다. 일반적인 머신러닝은 물론 딥러닝(Tensorflow, Keras, PyTorch 등), 인공지능 관련 업무를 진행하면서 얻은 Tip이나 강좌, 새로운 소식을 적어 주시면 다른 개발자 분들에게 큰 도움이 됩니다.

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 머신러닝 강좌 - 14. NumPy와 Pandas를 진행토록 하겠습니다.

예제 노트북 파일 : 14. NumPy와 Pandas

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 강좌 내용을 단계별로 copy&paste해서 실행하시면 됩니다. 또는, Jupyter notebook을 실행하고 단계별로 실행하셔도 됩니다.

예를 들어, 14_numpy.ipynb를 생성하고 vscode에서 실행하면, Jupyter notebook이 실행됩니다.(vscode에서 실행도 가능하며, 웹브라우저에서도 실행 가능합니다.)

또는, github 리포지토리를 clone 하신 후, vscode나 Jupyter notebook에서, 위의 노트북 파일을 열면 됩니다. 
 

상세한 환경 구성이 필요 하시다면, 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 1. Python 개발 환경 구성 문서를 참조해 WSL, vscode, conda, jupyter notebook 설정을 모두 먼저 완료 하시길 권장해 드립니다.

 

Python 머신러닝 강좌 - 14. NumPy와 Pandas

numpy array에서 pandas DataFrames로 데이터 옮기기

지난 notebook에서 머신러닝 모델을 트레이닝하고 실제 label 결과와 predict 된 결과를 비교했습니다.

아마도, 일부 불분명한 부분은 이 작업을 수행했을 때 numpy array와 pandas DataFrame이라는 두 개의 다른 객체로 작업했던 부분일 것입니다.

 

더 자세히 알아보기 위해 이전 notebook의 코드를 다시 실행해 트레이닝된 모델을 만들고 테스트 데이터에 대한 예측 값을 가져 오겠습니다.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# CSV 파일에서 데이터를 로드
delays_df = pd.read_csv('Lots_of_flight_data.csv') 

# null값을 제거 - null값이 있으면 트레이닝 과정에서 문제를 유발할 수 있습니다.
delays_df.dropna(inplace=True)

# Feature column들을 X DataFrame으로 이동
X = delays_df.loc[:,['DISTANCE', 'CRS_ELAPSED_TIME']]

# Labe column을 y DataFrame으로 이동
y = delays_df.loc[:,['ARR_DELAY']] 

# 데이터를 트레이닝 데이터셋과 테스트 데이터셋으로 분리 
X_train, X_test, y_train, y_test = train_test_split(
                                                    X, 
                                                    y, 
                                                    test_size=0.3, 
                                                    random_state=42
                                                   )

regressor = LinearRegression()     # scikit learn LinearRegression 개체 생성
regressor.fit(X_train, y_train)    # fit 메서드를 사용해 모델 트레이닝 실행

y_pred = regressor.predict(X_test)

 

마지막 노트북에서 predict(예측된) 값의 내용을 y_pred에 로드하고, 실제(label) 값을 y_test에 로드 할 때 출력이 다르게 표시되는 것을 확인했을 수 있습니다.

y_pred

=== 결과 ===

array([[3.47739078],
       [5.89055919],
       [4.33288464],
       ...,
       [5.84678979],
       [6.05195889],
       [5.66255414]])

 

y_test

=== 결과 ===

  ARR_DELAY
291483 -5.0
98997 -12.0
23454 -9.0
110802 -14.0
49449 -20.0
... ...
209898 -20.0
22210 -9.0
165727 -6.0
260838 -33.0
192546 0.0

88750 rows × 1 columns

 

type()을 사용하여 객체의 데이터 유형을 확인할 수 있습니다.

type(y_pred)

=== 결과 ===

numpy.ndarray

 

type(y_test)

=== 결과 ===

pandas.core.frame.DataFrame

즉, 

  • y_pred는 numpy array입니다.
  • y_test는 pandas DataFrame입니다.

y_pred에서 head 메서드를 사용하는 경우에도 이 차이를 확인할 수 있습니다.

head는 DataFrame 클래스의 메서드이고, numpy 배열의 메서드가 아니므로 에러가 리턴됩니다.

 

y_pred.head()

=== 결과 ===
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-05146ec42336> in <module>
----> 1 y_pred.head()

AttributeError: 'numpy.ndarray' object has no attribute 'head'

 

 

1 차원 numpy array는 pandas의 series와 유사합니다.

import numpy as np

airports_array = np.array(['Pearson','Changi','Narita'])
print(airports_array)
print(airports_array[2])

=== 결과 ===

 

['Pearson' 'Changi' 'Narita']

Narita

 

airports_series = pd.Series(['Pearson','Changi','Narita'])
print(airports_series)
print(airports_series[2])

=== 결과 ===

0    Pearson
1     Changi
2     Narita
dtype: object
Narita

 

2 차원 numpy array는 pandas DataFrame과 유사합니다.

airports_array = np.array([
  ['YYZ','Pearson'],
  ['SIN','Changi'],
  ['NRT','Narita']])
print(airports_array)
print(airports_array[0,0])

=== 결과 ===

[['YYZ' 'Pearson']
 ['SIN' 'Changi']
 ['NRT' 'Narita']]
YYZ

 

airports_df = pd.DataFrame([['YYZ','Pearson'],['SIN','Changi'],['NRT','Narita']])
print(airports_df)
print(airports_df.iloc[0,0])

=== 결과 ===

     0        1
0  YYZ  Pearson
1  SIN   Changi
2  NRT   Narita
YYZ

 

DataFrame의 기능이 필요한 경우, 데이터를 numpy 개체에서 pandas 개체로 또는 그 반대로 변환할 수 있습니다.

 

아래 예제처럼, DataFrame 생성자를 사용하여 numpy 배열 y_pred의 내용을 predicted_df라는 DataFrame으로 로드합니다.

바로 이어서, DataFrame 개체의 함수들을 사용할 수 있습니다.

predicted_df = pd.DataFrame(y_pred)
predicted_df.head()

=== 결과 ===

  0
0 3.477391
1 5.890559
2 4.332885
3 3.447476
4 5.072394

 

수고하셨습니다. 다음은 마지막 머신러닝 강좌인 matplotlib을 이용한 시각화를 진행토록 하겠습니다.

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/even-more-python-for-beginners-data-tools/14 - NumPy vs Pandas at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

No. Subject Author Date Views
26 Form Recognizer로 문서에서 표 데이터 추출 file 코난(김대우) 2021.01.21 145
25 MLaaS - (1) 12가지의 머신러닝을 먼저 도입한 기업들의 고민 file 코난(김대우) 2021.01.15 288
24 Python 머신러닝 강좌 - 15. Matplotlib으로 데이터 시각화(visualization) file 코난(김대우) 2021.01.09 144
» Python 머신러닝 강좌 - 14. NumPy와 Pandas 코난(김대우) 2021.01.09 126
22 Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating) 코난(김대우) 2021.01.09 93
21 Python 머신러닝 강좌 - 12. 머신러닝 모델 테스트 코난(김대우) 2021.01.09 78
20 Python 머신러닝 강좌 - 11. scikit-learn으로 선형회기(linear regression) 모델 머신러닝 트레이닝 수행 코난(김대우) 2021.01.08 90
19 Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할 코난(김대우) 2021.01.08 47
18 Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리 코난(김대우) 2021.01.08 36
17 Python 머신러닝 강좌 - 8. Pandas DataFrame 컬럼(column) 분할(split)과 삭제(remove) 코난(김대우) 2021.01.08 46
16 Python 머신러닝 강좌 - 7. Pandas DataFrame으로 CSV 파일 읽고 쓰기 코난(김대우) 2021.01.08 24
15 Python 머신러닝 강좌 - 6. CSV 파일과 주피터 노트북 file 코난(김대우) 2021.01.08 38
14 Python 머신러닝 강좌 - 5. Pandas DataFrame에 질의(Query) 코난(김대우) 2021.01.07 36
13 Python 머신러닝 강좌 - 4. Pandas DataFrame file 코난(김대우) 2021.01.07 31
12 Python 머신러닝 강좌 - 3. Pandas 소개 file 코난(김대우) 2021.01.07 61
11 Python 머신러닝 강좌 - 2. Anaconda와 Conda 구성 file 코난(김대우) 2021.01.06 69
10 Jupyter notebook 단축키 등의 cheat sheet file 코난(김대우) 2021.01.06 60
9 Python 머신러닝 강좌 - 1. 주피터 노트북(Jupyter Notebook) 구성 file 코난(김대우) 2021.01.06 204
8 2021년 머신러닝과 인공지능(AI) 트렌드 - MLaaS (서비스로의 머신러닝) file 코난(김대우) 2020.12.29 188
7 머신러닝을 시작하는 개발자를 위한 - (4) 2021년의 ML Trend - MLaaS와 MLOps(Machine Learning + DevOps) 코난(김대우) 2020.12.28 154





XE Login