본문 바로가기
PYTHON

20200320 - 파이썬(타이타닉 생존자 예측 데이터 전처리)

by 낫싱 2020. 3. 20.
728x90
반응형

hw_pandas03_0319호지수(선생님 문제풀이).pdf
0.37MB
20200320-1 - Jupyter Notebook.pdf
0.40MB
20200320-2 - Jupyter Notebook.pdf
0.38MB
ml_타이타닉 생존자 예측_호지수 - Jupyter Notebook.pdf
0.21MB
20200320-1.ipynb
0.05MB
20200320-2.ipynb
0.06MB
ml_타이타닉 생존자 예측_호지수.ipynb
0.02MB
titanic_data_ENG.pdf
0.07MB
타이타닉 데이터 셋(한글).pdf
0.27MB

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

titanic_df = pd.read_csv('train_df.csv')

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [2]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

titanic_df.drop(['PassengerId', 'Name', 'Ticket'], axis=1, inplace=True)

print(titanic_df.columns.values) # 컬럼 보기 : 1번 방법

print(titanic_df.columns) # 컬럼 보기 : 2번 방법

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

['Survived' 'Pclass' 'Sex' 'Age' 'SibSp' 'Parch' 'Fare' 'Cabin' 'Embarked'] Index(['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Cabin', 'Embarked'], dtype='object')

In [3]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

display(titanic_df.Age)

display(titanic_df.Age.isnull().sum())

display(titanic_df.Age.mean())

titanic_df.Age.fillna(titanic_df.Age.mean(), inplace=True)

display(titanic_df.Age.isnull().sum())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 ... 886 27.0 887 19.0 888 NaN 889 26.0 890 32.0 Name: Age, Length: 891, dtype: float64

177

29.69911764705882

0

In [4]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

display(titanic_df.Cabin)

display(titanic_df.Cabin.isnull().sum())

titanic_df.Cabin.fillna('N', inplace=True)

display(titanic_df.Cabin.isnull().sum())

display(titanic_df.Cabin.value_counts())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 NaN 1 C85 2 NaN 3 C123 4 NaN ... 886 NaN 887 B42 888 NaN 889 C148 890 NaN Name: Cabin, Length: 891, dtype: object

687

0

N 687 C23 C25 C27 4 B96 B98 4 G6 4 D 3 ... C85 1 A16 1 C101 1 B73 1 B86 1 Name: Cabin, Length: 148, dtype: int64

In [5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

display(titanic_df.Embarked)

display(titanic_df.Embarked.isnull().sum())

titanic_df.Embarked.fillna('N', inplace=True)

display(titanic_df.Embarked.isnull().sum())

display(titanic_df.Embarked.value_counts())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 S 1 C 2 S 3 S 4 S .. 886 S 887 S 888 S 889 C 890 Q Name: Embarked, Length: 891, dtype: object

2

0

S 644 C 168 Q 77 N 2 Name: Embarked, dtype: int64

In [6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

from sklearn.preprocessing import LabelEncoder

titanic_df.Cabin = titanic_df.Cabin.str[:1] # 첫 번째 글자만 추출(0번째 글자만 추출)

 

le = LabelEncoder() # 레이블인코더를 써서 인코딩, 객체 생성

titanic_df.Cabin = le.fit_transform(titanic_df.Cabin) # fit_transform 으로 값을 숫자로 변경시킨다.

print(titanic_df.Cabin)

 

titanic_df.Sex = le.fit_transform(titanic_df.Sex)

print(titanic_df.Sex)

 

titanic_df.Embarked = le.fit_transform(titanic_df.Embarked)

print(titanic_df.Embarked)

 

titanic_df.head()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 7 1 2 2 7 3 2 4 7 .. 886 7 887 1 888 7 889 2 890 7 Name: Cabin, Length: 891, dtype: int32 0 1 1 0 2 0 3 0 4 1 .. 886 1 887 0 888 0 889 1 890 1 Name: Sex, Length: 891, dtype: int32 0 3 1 0 2 3 3 3 4 3 .. 886 3 887 3 888 3 889 0 890 2 Name: Embarked, Length: 891, dtype: int32

Out[6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Survived

Pclass

Sex

Age

SibSp

Parch

Fare

Cabin

Embarked

0

0

3

1

22.0

1

0

7.2500

7

3

1

1

1

0

38.0

1

0

71.2833

2

0

2

1

3

0

26.0

0

0

7.9250

7

3

3

1

1

0

35.0

1

0

53.1000

2

3

4

0

3

1

35.0

0

0

8.0500

7

3

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# titanic_df = sns.load_dataset('titanic')

# 앞에서 설정한 Data Preprocessing 함수 호출

 

from sklearn.preprocessing import LabelEncoder

import numpy as np

import pandas as pd

import seaborn as sns

import warnings

warnings.filterwarnings('ignore')

 

# Null 처리 함수

def fillna(df):

df['Age'].fillna(df['Age'].mean(), inplace=True)

df['Cabin'].fillna('N', inplace=True)

df['Embarked'].fillna('N', inplace=True)

return df

 

# 머신러닝 알고리즘에 불필요한 속성 제거(PassengerId, Name, Ticket)

def drop_features(df):

df.drop(['PassengerId','Name','Ticket'], axis=1, inplace=True)

return df

 

# 레이블 인코딩

def format_features(df):

df['Cabin'] = df['Cabin'].str[:1]

features = ['Cabin','Sex','Embarked']

for feature in features:

le = LabelEncoder()

# le = le.fit(df[feature])

df[feature] = le.fit_transform(df[feature])

return df

 

#format_features(df) 메소드 처리 과정

# titanic_df.Cabin = titanic_df.Cabin.str[:1] # 첫 번째 글자만 추출(0번째 글자만 추출)

 

# le = LabelEncoder() # 레이블인코더를 써서 인코딩, 객체 생성

# titanic_df.Cabin = le.fit_transform(titanic_df.Cabin) # fit_transform 으로 값을 숫자로 변경시킨다.

# print(titanic_df.Cabin)

 

# titanic_df.Sex = le.fit_transform(titanic_df.Sex)

# print(titanic_df.Sex)

 

# titanic_df.Embarked = le.fit_transform(titanic_df.Embarked)

# print(titanic_df.Embarked)

 

 

# 앞에서 설정한 Data Preprocessing 함수 호출

def transform_features(df):

df = fillna(df)

df = drop_features(df)

df = format_features(df)

return df

 

titanic_df = pd.read_csv('train_df.csv')

transform_features(titanic_df.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Survived

Pclass

Sex

Age

SibSp

Parch

Fare

Cabin

Embarked

0

0

3

1

22.0

1

0

7.2500

1

1

1

1

1

0

38.0

1

0

71.2833

0

0

2

1

3

0

26.0

0

0

7.9250

1

1

3

1

1

0

35.0

1

0

53.1000

0

1

4

0

3

1

35.0

0

0

8.0500

1

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

시계열 데이터

df의 행인덱스로 사용하면 시간으로 기록된 데이터를 분석하는 것이 매우 유용.

특정 시점을 기록하는 Timestamp와 두 시점 사이의 일정한 기간을 나타내는 Period가 있음.

문자열 또는 숫자로 저장되어 있는 시간 데이터를 시계열 객체인 TImestamp로 변환하는 함수를 제공

판다스 to_datetime() 함수를 사용하면 문자열 등 다른 자료형을 판다스 Timestamp를 나타내는 datetime64 자료형으로 변환 가능

In [8]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 라이브러리 불러오기

import pandas as pd

 

# read_csv() 함수로 CSV파일을 가져와서 df로 변환

df = pd.read_csv('stock-data.csv')

 

#데이터 내용 및 자료형 확인

display(df.head())

print('\n')

display(df.info())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

0

2018-07-02

10100

10850

10900

10000

137977

1

2018-06-29

10700

10550

10900

9990

170253

2

2018-06-28

10400

10900

10950

10150

155769

3

2018-06-27

10900

10800

11050

10500

133548

4

2018-06-26

10800

10900

11000

10700

63039

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'> RangeIndex: 20 entries, 0 to 19 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 20 non-null object 1 Close 20 non-null int64 2 Start 20 non-null int64 3 High 20 non-null int64 4 Low 20 non-null int64 5 Volume 20 non-null int64 dtypes: int64(5), object(1) memory usage: 1.1+ KB

None

In [9]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 문자열 데이터 (시리즈 객체)를 판다스 Timestamp로 변환

df['new_Date'] = pd.to_datetime(df['Date']) # df에 새로운 열 추가

 

# 데이터 내용 및 자료형 확인

display(df.head())

print('\n')

print(df.info())

print('\n')

print(type(df['new_Date'][0]))

print(df['new_Date'][0])

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

0

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

1

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

2

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

3

2018-06-27

10900

10800

11050

10500

133548

2018-06-27

4

2018-06-26

10800

10900

11000

10700

63039

2018-06-26

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'> RangeIndex: 20 entries, 0 to 19 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 20 non-null object 1 Close 20 non-null int64 2 Start 20 non-null int64 3 High 20 non-null int64 4 Low 20 non-null int64 5 Volume 20 non-null int64 6 new_Date 20 non-null datetime64[ns] dtypes: datetime64[ns](1), int64(5), object(1) memory usage: 1.2+ KB None <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2018-07-02 00:00:00

In [10]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 시계열 값으로 변환된 열을 새로운 행 인덱스로 지정. 기존 날짜 열은 삭제

df.set_index('new_Date', inplace=True)

df.drop('Date', axis=1, inplace=True)

 

# 데이터 내용 및 자료형 확인

display(df.head())

print('\n')

print(df.info())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Close

Start

High

Low

Volume

new_Date

 

 

 

 

 

2018-07-02

10100

10850

10900

10000

137977

2018-06-29

10700

10550

10900

9990

170253

2018-06-28

10400

10900

10950

10150

155769

2018-06-27

10900

10800

11050

10500

133548

2018-06-26

10800

10900

11000

10700

63039

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 20 entries, 2018-07-02 to 2018-06-01 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Close 20 non-null int64 1 Start 20 non-null int64 2 High 20 non-null int64 3 Low 20 non-null int64 4 Volume 20 non-null int64 dtypes: int64(5) memory usage: 960.0 bytes None

In [11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 라이브러리 불러오기

import pandas as pd

 

# 날짜 형식의 문자열로 구성되는 리스트 정의

dates = ['2019-01-01', '2020-03-01', '2021-06-01']

 

# 문자열 데이터(시리즈 객체)를 판다스 TImestamp 로 변환

ts_dates = pd.to_datetime(dates)

print(ts_dates)

print('\n')

 

# Timestamp를 Period로 변환

pr_day = ts_dates.to_period(freq='D')

print(pr_day)

pr_month = ts_dates.to_period(freq='M')

print(pr_month)

pr_year = ts_dates.to_period(freq='A')

print(pr_year)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

DatetimeIndex(['2019-01-01', '2020-03-01', '2021-06-01'], dtype='datetime64[ns]', freq=None) PeriodIndex(['2019-01-01', '2020-03-01', '2021-06-01'], dtype='period[D]', freq='D') PeriodIndex(['2019-01', '2020-03', '2021-06'], dtype='period[M]', freq='M') PeriodIndex(['2019', '2020', '2021'], dtype='period[A-DEC]', freq='A-DEC')

In [12]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 시계열 데이터 만들기

import pandas as pd

 

# Timestamp의 배열 만들기 - 월 간격, 월의 시작일 기준

ts_ms = pd.date_range(start = '2019-01-01', #날짜 범위의 시작

end=None, #날짜 범위의 끝

periods=6, # 생성할 timestamp 개수

freq='MS', # 시간 간격(MS : 월의 시작일, M : 월말, 3M : 3개월 간격)

tz='Asia/Seoul') # 시간대(timezone)

print(ts_ms)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

DatetimeIndex(['2019-01-01 00:00:00+09:00', '2019-02-01 00:00:00+09:00', '2019-03-01 00:00:00+09:00', '2019-04-01 00:00:00+09:00', '2019-05-01 00:00:00+09:00', '2019-06-01 00:00:00+09:00'], dtype='datetime64[ns, Asia/Seoul]', freq='MS')

In [13]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 월 간격, 월의 마지막 날 기준

ts_me = pd.date_range('2019-01-01', periods=6, freq='M', tz='Asia/Seoul')

print(ts_me)

print('\n')

 

# 분기(3개월) 간격, 월의 마지막 날 기준

ts_3m = pd.date_range('2019-01-01', periods=6, freq='3M', tz='Asia/Seoul')

print(ts_3m)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

DatetimeIndex(['2019-01-31 00:00:00+09:00', '2019-02-28 00:00:00+09:00', '2019-03-31 00:00:00+09:00', '2019-04-30 00:00:00+09:00', '2019-05-31 00:00:00+09:00', '2019-06-30 00:00:00+09:00'], dtype='datetime64[ns, Asia/Seoul]', freq='M') DatetimeIndex(['2019-01-31 00:00:00+09:00', '2019-04-30 00:00:00+09:00', '2019-07-31 00:00:00+09:00', '2019-10-31 00:00:00+09:00', '2020-01-31 00:00:00+09:00', '2020-04-30 00:00:00+09:00'], dtype='datetime64[ns, Asia/Seoul]', freq='3M')

In [14]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# Period 배열

 

# Period 배열 만들기 - 1개월 길이

pr_m = pd.period_range(start='2019-01-01',

end = None,

periods=3,

freq='M')

print(pr_m)

print('\n')

 

# Period 배열 만들기 - 1시간 길이

pr_h = pd.period_range(start='2019-01-01',

end = None,

periods=3,

freq='H') # 기간의 길이( H : 시간 )

print(pr_h)

print('\n')

 

# Period 배열 만들기 - 2시간 길이

pr_2h = pd.period_range(start='2019-01-01',

end = None,

periods=3,

freq='2H')

print(pr_2h)

print('\n')

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

PeriodIndex(['2019-01', '2019-02', '2019-03'], dtype='period[M]', freq='M') PeriodIndex(['2019-01-01 00:00', '2019-01-01 01:00', '2019-01-01 02:00'], dtype='period[H]', freq='H') PeriodIndex(['2019-01-01 00:00', '2019-01-01 02:00', '2019-01-01 04:00'], dtype='period[2H]', freq='2H')

In [15]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 날짜 데이터 분리

import pandas as pd

 

# read_csv() 함수로 파일 읽어와서 df로 변환

df = pd.read_csv('stock-data.csv')

 

# 문자열인 날짜 데이터를 판다스 Timestamp 로 변환

df['new_Date'] = pd.to_datetime(df['Date']) # df에 새로운 열로 추가

display(df.head(3))

print('\n')

 

# dt 속성을 이용하여 new_Date 열의 년월일 정보를 년, 월, 일로 구분

df['Year'] = df['new_Date'].dt.year

df['Month'] = df['new_Date'].dt.month

df['Day'] = df['new_Date'].dt.day

display(df.head(3))

print('\n')

 

# Timestamp를 Period로 변환하여 년월일 표기 변경하기

df['Date_yr'] = df['new_Date'].dt.to_period(freq='A')

df['Date_m'] = df['new_Date'].dt.to_period(freq='M')

df['Date_d'] = df['new_Date'].dt.to_period(freq='D')

display(df.head(3))

print('\n')

 

# 원하는 열을 새로운 행 인덱스로 지정

df.set_index('Date_m', inplace=True)

display(df.head(3))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

0

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

1

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

2

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

Year

Month

Day

0

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

2018

7

2

1

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

2018

6

29

2

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

2018

6

28

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 11열 선택11열 다음에 열 추가
  • 12열 선택12열 다음에 열 추가
  • 13열 선택13열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

Year

Month

Day

Date_yr

Date_m

Date_d

0

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

2018

7

2

2018

2018-07

2018-07-02

1

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

2018

6

29

2018

2018-06

2018-06-29

2

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

2018

6

28

2018

2018-06

2018-06-28

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 11열 선택11열 다음에 열 추가
  • 12열 선택12열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

Year

Month

Day

Date_yr

Date_d

Date_m

 

 

 

 

 

 

 

 

 

 

 

 

2018-07

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

2018

7

2

2018

2018-07-02

2018-06

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

2018

6

29

2018

2018-06-29

2018-06

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

2018

6

28

2018

2018-06-28

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [16]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 날짜 인덱스 활용

# 연 - 월 - 일 중에서 필요로 하는 레벨을 선택적으로 인덱싱 할 수 있음

import pandas as pd

 

# read_csv() 함수로 파일 읽어와서 df로 변환

df = pd.read_csv('stock-data.csv')

 

# 문자열인 날짜 데이터를 판다스 Timestamp로 변환

df['new_Date'] = pd.to_datetime(df['Date']) # 새로운 열에 추가

df.set_index('new_Date', inplace=True)

 

display(df.head(3))

print('\n')

display(df.index)

print('\n')

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

 

 

 

 

 

 

2018-07-02

2018-07-02

10100

10850

10900

10000

137977

2018-06-29

2018-06-29

10700

10550

10900

9990

170253

2018-06-28

2018-06-28

10400

10900

10950

10150

155769

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

DatetimeIndex(['2018-07-02', '2018-06-29', '2018-06-28', '2018-06-27', '2018-06-26', '2018-06-25', '2018-06-22', '2018-06-21', '2018-06-20', '2018-06-19', '2018-06-18', '2018-06-15', '2018-06-14', '2018-06-12', '2018-06-11', '2018-06-08', '2018-06-07', '2018-06-05', '2018-06-04', '2018-06-01'], dtype='datetime64[ns]', name='new_Date', freq=None)

In [17]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 시간 간격 계산, 최근 180일 ~ 189일 사이의 값들만 선택하기

today = pd.to_datetime('2018-12-25') #기준일 생성

 

df.drop('Date',axis=1, inplace=True) # object 형태로 구성된 열 제거

 

df['time_delta'] = today - df.index #날짜 차이 계산

df.set_index('time_delta', inplace=True) # 행 인덱스로 지정

df_180 = df['130 days':'189 days']

display(df_180)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Close

Start

High

Low

Volume

time_delta

 

 

 

 

 

176 days

10100

10850

10900

10000

137977

179 days

10700

10550

10900

9990

170253

180 days

10400

10900

10950

10150

155769

181 days

10900

10800

11050

10500

133548

182 days

10800

10900

11000

10700

63039

183 days

11150

11400

11450

11000

55519

186 days

11300

11250

11450

10750

134805

187 days

11200

11350

11750

11200

133002

188 days

11550

11200

11600

10900

308596

189 days

11300

11850

11950

11300

180656

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

 

 

Q. titanic 데이터셋에서 age, fare 2개 열을 선택하여 데이터프레임 df를 만드세요

In [1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

import seaborn as sns

 

titanic = sns.load_dataset('titanic')

#display(titanic.head())

df = titanic.loc[:,['age','fare']]

display(df.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

0

22.0

7.2500

1

38.0

71.2833

2

26.0

7.9250

3

35.0

53.1000

4

35.0

8.0500

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. 10을 더하는 함수 add_10과 두 객체의 합 add_two_obj 함수를 정의한 후 결과값이 각각 20과 20이 나오도록 출력하세요.

In [2]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

def add_10(df):

df = df + 10

return df

 

def add_two_obj(a,b):

return a+b

 

display(add_10(10))

display(add_two_obj(10,10))

print()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

20

20

Q. 10을 곱하는 사용자 함수와 두 객체의 나눗셈을 수행하는 사용자 함수를 정의한 후 결과값이 각각 200과 10이 되도록 출력하세요

In [3]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

def mul_10(a):

return a*10

 

def div(a,b):

try:

return a/b

except ZeroDivisionError as e:

print('0으로 나뉨')

 

print(mul_10(20))

print(div(200,1))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

200 200.0

In [4]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df_age = df['age']

display(df_age)

 

sr1 = df_age.apply(add_10)

display(sr1.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 ... 886 27.0 887 19.0 888 NaN 889 26.0 890 32.0 Name: age, Length: 891, dtype: float64

0 32.0 1 48.0 2 36.0 3 45.0 4 45.0 Name: age, dtype: float64

Q. 시리즈객체 + 숫자를 연산하는 방식으로 df.age에 10을 더한 후 sr2에 저장하고 출력하세요.

In [5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

# 시리즈 원소에 함수 매핑

def add_two_obj(a,b):

return a+b

sr2 = df.age.apply(add_two_obj, b=10) # 이렇게 하면 df.age 가 매개변수 a가 되는 것. b는 10으로 설정

sr2

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[5]:

0 32.0 1 48.0 2 36.0 3 45.0 4 45.0 ... 886 37.0 887 29.0 888 NaN 889 36.0 890 42.0 Name: age, Length: 891, dtype: float64

Q. 람다 함수를 활용해서 위와 같은 연산을 수행하고 결과를 sr3로 출력하세요.

In [6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

display(df.age.head(3)) #원본값

sr3 = df.age.apply(lambda x : add_10(x)) #df.age에 있는 원소 하나씩 순차적으로 add_10 메소드로 실행해서 적용

# sr4 = df.age.apply(lambda a,b:a+b,b=10)

# display(sr4)

sr3 #10 더한 값

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 22.0 1 38.0 2 26.0 Name: age, dtype: float64

Out[6]:

0 32.0 1 48.0 2 36.0 3 45.0 4 45.0 ... 886 37.0 887 29.0 888 NaN 889 36.0 890 42.0 Name: age, Length: 891, dtype: float64

Q. df의 'age', 'fare' 칼럼에 10을 사칙연산하는 사용자 함수를 정의하고 applymap()으로 각 사용자 함수를 매핑한 후 출력하세요

In [55]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

# 데이터프레임의 원소에 applymap() 적용

# 데이터프레임의 개별원소에 특정 함수를 매핑하려면 applymap() 메소드 활용

 

import pandas as pd

 

df_map = df.applymap(add_10)

display(df.head(3)) # 원본 데이터

display(df_map.head(3)) # applymap 으로 매핑한 데이터

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

0

22.0

7.2500

1

38.0

71.2833

2

26.0

7.9250

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

0

32.0

17.2500

1

48.0

81.2833

2

36.0

17.9250

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q.df_map의 [0,0]을 NaN으로 변경한 후 missing_value 함수를 적용해서 불린 시리즈를 반환하세요.

In [57]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import numpy as np

 

def missing_value(series):

return series.isnull()

 

display(df_map.iloc[0,0], '원래 있던 값')

df_map.iloc[0,0] = np.nan

display(df_map.head())

 

result = df_map.apply(missing_value, axis=0)

display(result.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

0

True

False

1

False

False

2

False

False

3

False

False

4

False

False

...

...

...

886

False

False

887

False

False

888

True

False

889

False

False

890

False

False

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

891 rows × 2 columns

nan

'원래 있던 값'

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

0

NaN

17.2500

1

48.0

81.2833

2

36.0

17.9250

3

45.0

63.1000

4

45.0

18.0500

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

0

True

False

1

False

False

2

False

False

3

False

False

4

False

False

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. titanic 데이터셋을 seaborn에서 로딩한 후 불린 인덱싱을 이용하여 아래 사항들을 수행하세요

나이가 10대(10~19세)인 승객만 따로 선택

나이가 10세 미만(0~9세)이고 여성인 승객만 따로 선택

나이가 10세 미만(0~9세) 또는 60세 이상인 승객의 age, sex, alone열만 선택

In [66]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import seaborn as sns

import warnings

warnings.filterwarnings('ignore')

 

tt_df = sns.load_dataset('titanic')

 

mask1 = (tt_df.age >= 10) & (tt_df.age < 20) # 관측치가 10대인거 선택

df_teen = tt_df.loc[mask1,:] # 관측치를 선택해서 조건이 들어간것들(행), 전부(열)

display(df_teen.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 11열 선택11열 다음에 열 추가
  • 12열 선택12열 다음에 열 추가
  • 13열 선택13열 다음에 열 추가
  • 14열 선택14열 다음에 열 추가
  • 15열 선택15열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

survived

pclass

sex

age

sibsp

parch

fare

embarked

class

who

adult_male

deck

embark_town

alive

alone

9

1

2

female

14.0

1

0

30.0708

C

Second

child

False

NaN

Cherbourg

yes

False

14

0

3

female

14.0

0

0

7.8542

S

Third

child

False

NaN

Southampton

no

True

22

1

3

female

15.0

0

0

8.0292

Q

Third

child

False

NaN

Queenstown

yes

True

27

0

1

male

19.0

3

2

263.0000

S

First

man

True

C

Southampton

no

False

38

0

3

female

18.0

2

0

18.0000

S

Third

woman

False

NaN

Southampton

no

False

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [67]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

mask2 = (tt_df.age < 10 ) & (tt_df.sex =='female')

df_female_under10 = tt_df.loc[mask2, :]

display(df_female_under10.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 11열 선택11열 다음에 열 추가
  • 12열 선택12열 다음에 열 추가
  • 13열 선택13열 다음에 열 추가
  • 14열 선택14열 다음에 열 추가
  • 15열 선택15열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

survived

pclass

sex

age

sibsp

parch

fare

embarked

class

who

adult_male

deck

embark_town

alive

alone

10

1

3

female

4.0

1

1

16.7000

S

Third

child

False

G

Southampton

yes

False

24

0

3

female

8.0

3

1

21.0750

S

Third

child

False

NaN

Southampton

no

False

43

1

2

female

3.0

1

2

41.5792

C

Second

child

False

NaN

Cherbourg

yes

False

58

1

2

female

5.0

1

2

27.7500

S

Second

child

False

NaN

Southampton

yes

False

119

0

3

female

2.0

4

2

31.2750

S

Third

child

False

NaN

Southampton

no

False

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [69]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

mask3 = (tt_df.age < 10 ) | (tt_df.age >= 60)

df_under10_than60 = tt_df.loc[mask3, ['age','sex','alone']]

display(df_under10_than60.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

alone

7

2.0

male

False

10

4.0

female

False

16

2.0

male

False

24

8.0

female

False

33

66.0

male

True

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. 최대값 - 최소값을 반환하는 사용자 함수를 min max로 정의하고 age, fare열로 구성되는 타이타닉 데이터프레임df에 적용하여 결과와 자료형을 출력하세요.

source : titanic = sns.load_dataset('titanic')

In [79]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import seaborn as sns

import pandas as pd

titanic = sns.load_dataset('titanic')

df=titanic.loc[:,['age','fare']]

df.to_pickle('af_df.pkl') #피클로 바꿀건데 바꿀 이름이 af_df.pkl 이 된다.

 

df = pd.read_pickle('af_df.pkl')

 

def min_max(a):

return a.max() - a.min()

 

#데이터 프레임의 각 열을 인수로 전달하면 시리즈를 반환

result = df.apply(min_max) #기본값 axis=0

display(result, type(result))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

age 79.5800 fare 512.3292 dtype: float64

pandas.core.series.Series

Q. 타이타닉 df의 열 순서를 아래와 같이 재구성하고 출력하세요.

열 선택 : ['pclass', 'sex', 'age', 'survived']

열 이름의 리스트 만들기

열 이름을 알파벳순으로 정렬하기

열 이름을 기존 순서의 정반대 역순으로 정렬하기

열 이름을 사용자가 정의한 임의의 순서로 재배치하기

In [85]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import seaborn as sns

titanic = sns.load_dataset('titanic')

df = titanic.loc[0:4, 'survived':'age'] #행쪽은 0~4, 열쪽은 서바이브드~에이지(loc로 할땐 선택된 것 까지(선택된 것 전까지가 아님))

 

#열 이름의 리스트 만들기

columns = list(df.columns.values) #기존 열 이름

display(columns)

 

#열 이름을 알파벳 순으로 정렬하기

columns_sorted = sorted(columns) #알파벳 순으로 정렬

df_sorted = df[columns_sorted]

display(df_sorted)

 

#열 이름을 기존 순서의 정반대 역순으로 정렬하기

columns_reversed = list(reversed(columns))

df_reversed = df[columns_reversed]

display(df_reversed)

 

#열 이름을 사용자가 정의한 임의의 순서로 재배치하기

columns_customed = ['pclass', 'sex', 'age', 'survived']

df_customed = df[columns_customed]

display(df_customed)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

['survived', 'pclass', 'sex', 'age']

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

pclass

sex

survived

0

22.0

3

male

0

1

38.0

1

female

1

2

26.0

3

female

1

3

35.0

1

female

1

4

35.0

3

male

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

pclass

survived

0

22.0

male

3

0

1

38.0

female

1

1

2

26.0

female

3

1

3

35.0

female

1

1

4

35.0

male

3

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

sex

age

survived

0

3

male

22.0

0

1

1

female

38.0

1

2

3

female

26.0

1

3

1

female

35.0

1

4

3

male

35.0

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

데이터프레임 연결

서로 다른 데이터프레임의 구성 형태와 속성이 균일하다면 행 또는 열 중에 어느 한 방향으로 붙여도 데이터의 일관성 유지

기존 데이터프레임의 형태를 유지하면서 이어 붙이는 개념으로 판다스 Concat() 함수를 활용

In [92]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import numpy as np

import pandas as pd

 

a = np.arange(start=0, stop=12)

a

a1 = a.reshape(4,3)

a1

df1 = pd.DataFrame(a1, columns=['a','b','c'])

display(df1)

print()

b= np.arange(start=0, stop=16)

b

b1 = b.reshape(4,4)

b1

df2 = pd.DataFrame(b1, columns=['a','b','c','d'])

display(df2)

 

df3=pd.concat([df1,df2],axis=0)

display(df3,'행으로 붙이기')

df4=pd.concat([df1,df2],axis=1)

display(df4,'열로 붙이기')

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

a

b

c

0

0

1

2

1

3

4

5

2

6

7

8

3

9

10

11

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

a

b

c

d

0

0

1

2

3

1

4

5

6

7

2

8

9

10

11

3

12

13

14

15

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

a

b

c

d

0

0

1

2

NaN

1

3

4

5

NaN

2

6

7

8

NaN

3

9

10

11

NaN

0

0

1

2

3.0

1

4

5

6

7.0

2

8

9

10

11.0

3

12

13

14

15.0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'행으로 붙이기'

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

a

b

c

a

b

c

d

0

0

1

2

0

1

2

3

1

3

4

5

4

5

6

7

2

6

7

8

8

9

10

11

3

9

10

11

12

13

14

15

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'열로 붙이기'

In [97]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

result1 = pd.concat([df1,df2], ignore_index=True) #행방향으로 붙일 때, 인덱스번호를 순서대로 넣는 방법

display(result1)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

a

b

c

d

0

0

1

2

NaN

1

3

4

5

NaN

2

6

7

8

NaN

3

9

10

11

NaN

4

0

1

2

3.0

5

4

5

6

7.0

6

8

9

10

11.0

7

12

13

14

15.0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [98]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 2개의 데이터프레임을 좌우 열 방향으로 이어 붙이듯 연결하기

result2 = pd.concat([df1, df2], axis=1)

display(result2)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

a

b

c

a

b

c

d

0

0

1

2

0

1

2

3

1

3

4

5

4

5

6

7

2

6

7

8

8

9

10

11

3

9

10

11

12

13

14

15

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

머신러닝 프로젝트

타이타닉 생존자 예측모델 개발

데이터 :

제공 데이터 파일 : titanic3.csv

훈련/검증용 데이터 : 평가 데이터 = 8 : 2

훈련/검증용 데이터로 모델 학습 및 검증하고 평가 데이터는 최종 평가에만 사용

모델 개발 방법 :

데이터 전처리 및 탐색적 분석을 통하여 파생변수 최소 1개 이상 개발

알고리즘은 최소한 3개 이상 적용(Decision Tree, Random Forest, Logistic Regression은 필수)

훈련 및 평가 방법 :

GridSearchCV API를 활용하여 교차검증 및 최적 하이퍼파라미터 찾아서 학습 및 검증 수행

결과물 제출 : 이메일

In [56]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

from sklearn.preprocessing import LabelEncoder

import pandas as pd

import numpy as np

import seaborn as sns

import warnings

warnings.filterwarnings("ignore") # , category=FutureWarning 생략

 

# 데이터 정보

# Pclass Passenger Class (1 = 1st; 2 = 2nd; 3 = 3rd)

# survival Survival (0 = No; 1 = Yes)

# name Name

# sex Sex

# age Age

# sibsp Number of Siblings/Spouses Aboard

# parch Number of Parents/Children Aboard

# ticket Ticket Number

# fare Passenger Fare (British pound)

# cabin Cabin

# embarked Port of Embarkation (C = Cherbourg; Q = Queenstown; S = Southampton)

# boat Lifeboat

# body Body Identification Number

# home.dest Home/Destination

 

titanic_df = pd.read_csv('titanic3.csv')

 

display(titanic_df.head(),'상단 표 : 기본데이터')

# display(titanic_df.info(),'INFORMATION')

def fillna(df):

df['age'].fillna(df['age'].mean(), inplace=True)

df['cabin'].fillna('N', inplace=True)

df['fare'].fillna(df['fare'].mean(), inplace=True)

df['embarked'].fillna('N', inplace=True)

return df

 

def drop_features(df):

df.drop(['home.dest','boat','body','name','ticket'], axis=1, inplace=True)

return df

 

def format_features(df):

df['cabin'] = df['cabin'].str[:1]

features = ['cabin','sex','embarked']

for feature in features:

le = LabelEncoder()

df[feature] = le.fit_transform(df[feature])

return df

 

def transform_features(df):

df = fillna(df)

df = drop_features(df)

df = format_features(df)

return df

 

 

tt_feat = transform_features(titanic_df) # 메소드 호출 및 실행

tt_feat['total_family'] = tt_feat['sibsp'] + tt_feat['parch'] # total 가족 수 계산

tt_feat.drop(['sibsp','parch'], axis=1, inplace=True) # 나뉘어진 가족 열 제거

 

display(tt_feat)

 

f_plot=sns.countplot(x='total_family',hue='survived', data=titanic_df)

 

display(f_plot)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 11열 선택11열 다음에 열 추가
  • 12열 선택12열 다음에 열 추가
  • 13열 선택13열 다음에 열 추가
  • 14열 선택14열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

survived

name

sex

age

sibsp

parch

ticket

fare

cabin

embarked

boat

body

home.dest

0

1

1

Allen, Miss. Elisabeth Walton

female

29.00

0

0

24160

211.3375

B5

S

2

NaN

St Louis, MO

1

1

1

Allison, Master. Hudson Trevor

male

0.92

1

2

113781

151.5500

C22 C26

S

11

NaN

Montreal, PQ / Chesterville, ON

2

1

0

Allison, Miss. Helen Loraine

female

2.00

1

2

113781

151.5500

C22 C26

S

NaN

NaN

Montreal, PQ / Chesterville, ON

3

1

0

Allison, Mr. Hudson Joshua Creighton

male

30.00

1

2

113781

151.5500

C22 C26

S

NaN

135.0

Montreal, PQ / Chesterville, ON

4

1

0

Allison, Mrs. Hudson J C (Bessie Waldo Daniels)

female

25.00

1

2

113781

151.5500

C22 C26

S

NaN

NaN

Montreal, PQ / Chesterville, ON

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'상단 표 : 기본데이터'

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

survived

sex

age

fare

cabin

embarked

total_family

0

1

1

0

29.000000

211.3375

1

3

0

1

1

1

1

0.920000

151.5500

2

3

3

2

1

0

0

2.000000

151.5500

2

3

3

3

1

0

1

30.000000

151.5500

2

3

3

4

1

0

0

25.000000

151.5500

2

3

3

...

...

...

...

...

...

...

...

...

1304

3

0

0

14.500000

14.4542

7

0

1

1305

3

0

0

29.881138

14.4542

7

0

1

1306

3

0

1

26.500000

7.2250

7

0

0

1307

3

0

1

27.000000

7.2250

7

0

0

1308

3

0

1

29.000000

7.8750

7

3

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

1309 rows × 8 columns

<matplotlib.axes._subplots.AxesSubplot at 0x2033c28d8c8>

 

 

전송중...

사진 설명을 입력하세요.

 

 

728x90
반응형

댓글