데이터 전처리
누락 데이터 처리
중복 데이터 처리
데이터 표준화
범주형 데이터 처리
정규화
시계열 데이터
누락 데이터 처리
In [1]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import seaborn as sns # seaborn 은 그래프화 해주는 라이브러리. 얘가 dataset을 제공을 해준다.
#titanic 데이터셋 가져오기 titanic_df = sns.load_dataset('titanic') display(titanic_df.head(3)) print(titanic_df.shape) # 891행, 15열 display(titanic_df.isnull().sum()) # null이 각각 몇개인지 display(titanic_df.info()) print(type(titanic_df)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
survived |
pclass |
sex |
age |
sibsp |
parch |
fare |
embarked |
class |
who |
adult_male |
deck |
embark_town |
alive |
alone |
0 |
0 |
3 |
male |
22.0 |
1 |
0 |
7.2500 |
S |
Third |
man |
True |
NaN |
Southampton |
no |
False |
1 |
1 |
1 |
female |
38.0 |
1 |
0 |
71.2833 |
C |
First |
woman |
False |
C |
Cherbourg |
yes |
False |
2 |
1 |
3 |
female |
26.0 |
0 |
0 |
7.9250 |
S |
Third |
woman |
False |
NaN |
Southampton |
yes |
True |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
(891, 15)
survived 0 pclass 0 sex 0 age 177 sibsp 0 parch 0 fare 0 embarked 2 class 0 who 0 adult_male 0 deck 688 embark_town 2 alive 0 alone 0 dtype: int64
<class 'pandas.core.frame.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 survived 891 non-null int64 1 pclass 891 non-null int64 2 sex 891 non-null object 3 age 714 non-null float64 4 sibsp 891 non-null int64 5 parch 891 non-null int64 6 fare 891 non-null float64 7 embarked 889 non-null object 8 class 891 non-null category 9 who 891 non-null object 10 adult_male 891 non-null bool 11 deck 203 non-null category 12 embark_town 889 non-null object 13 alive 891 non-null object 14 alone 891 non-null bool dtypes: bool(2), category(2), float64(2), int64(4), object(5) memory usage: 80.6+ KB
None
<class 'pandas.core.frame.DataFrame'>
In [2]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# value_counts titanic_df.survived.value_counts() #0 : 사망, 1 : 생존 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[2]:
0 549 1 342 Name: survived, dtype: int64
Q. deck열의 NaN 갯수를 계산하세요.
In [3]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# deck 열의 NaN 개수 계산하기 nan_deck = titanic_df['deck'].value_counts(dropna=False) #NaN 값도 볼거기 때문에 dropna = False 한다. # nan_deck = df['deck'].value_counts() display(nan_deck) display(titanic_df['deck'].isnull().head()) display(titanic_df['deck'].isnull().sum(axis=0)) # axis=0 행방향 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
NaN 688 C 59 B 47 D 33 E 32 A 15 F 13 G 4 Name: deck, dtype: int64
0 True 1 False 2 True 3 False 4 True Name: deck, dtype: bool
688
Q. titanic_df의 처음 5개 행에서 null값을 찾아 출력하세요. (True, False 로)
In [4]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# isnull() 메서드로 누락 데이터 찾기 display(titanic_df.head().isnull().head(2)) display(titanic_df.head().notnull().head(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열 다음에 열 추가
- 12열 선택12열 다음에 열 추가
- 13열 선택13열 다음에 열 추가
- 14열 선택14열 다음에 열 추가
- 15열 선택15열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
열 너비 조절
행 높이 조절
|
survived |
pclass |
sex |
age |
sibsp |
parch |
fare |
embarked |
class |
who |
adult_male |
deck |
embark_town |
alive |
alone |
0 |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
True |
False |
False |
False |
1 |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
False |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
survived |
pclass |
sex |
age |
sibsp |
parch |
fare |
embarked |
class |
who |
adult_male |
deck |
embark_town |
alive |
alone |
0 |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
False |
True |
True |
True |
1 |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
True |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. titanic_df의 'deck' 칼럼의 null 의 갯수를 구하세요.
In [36]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# isnull() 메서드로 누락 데이터 개수 구하기 display(titanic_df['deck'].isnull().sum(axis=0)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
688
In [6]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 각 칼럼별 null 개수 print(titanic_df.isnull().sum()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
survived 0 pclass 0 sex 0 age 177 sibsp 0 parch 0 fare 0 embarked 2 class 0 who 0 adult_male 0 deck 688 embark_town 2 alive 0 alone 0 dtype: int64
In [7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# columns 확인 print(titanic_df.columns) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Index(['survived', 'pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked', 'class', 'who', 'adult_male', 'deck', 'embark_town', 'alive', 'alone'], dtype='object')
In [8]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# thresh = 500 : NaN 값이 500개 이상인 열을 모두 삭제 - deck 열(891개 중 688개의 NaN 값) # how = 'any' : NaN값이 하나라도 있으면 삭제 # how = 'all' : 모든 데이터가 NaN 값일 경우에만 삭제 df_thresh = titanic_df.dropna(axis=1, thresh=500) print(df_thresh.columns) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Index(['survived', 'pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked', 'class', 'who', 'adult_male', 'embark_town', 'alive', 'alone'], dtype='object')
Q. embark_town 열의 NaN 값을 바로 앞에 있는 828행의 값으로 변경한 후 출력하세요.
In [9]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# embark_town 열의 NaN값을 바로 앞에 있는 828행의 값으로 변경하기 import seaborn as sns titanic_df = sns.load_dataset('titanic') titanic_df.embark_town.isnull().sum() #print(titanic_df['embark_town'][827:831]) print(titanic_df.embark_town.iloc[827:831],'\n') titanic_df['embark_town'].fillna(method='ffill', inplace=True) # method = front fill(앞에꺼로 대체), 뒤에꺼로 대체 back fill(bfill) print(titanic_df['embark_town'][827:831]) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
827 Cherbourg 828 Queenstown 829 NaN 830 Cherbourg Name: embark_town, dtype: object 827 Cherbourg 828 Queenstown 829 Queenstown 830 Cherbourg Name: embark_town, dtype: object
중복 데이터 처리
In [10]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 중복 데이터를 갖는 데이터프레임 만들기 import pandas as pd df = pd.DataFrame({'c1':['a','a','b','a','b'], 'c2':[1,1,1,2,2,], 'c3':[1,1,2,2,2]}) print(df) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
c1 c2 c3 0 a 1 1 1 a 1 1 2 b 1 2 3 a 2 2 4 b 2 2
In [11]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
#데이터 프레임 전체 행 데이터 중에서 중복값 찾기 df_dup = df.duplicated() print(df_dup) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
0 False 1 True 2 False 3 False 4 False dtype: bool
In [12]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 데이터프레임의 특정 열 데이터에서 중복값 찾기 col_dup_sum = df['c2'].duplicated().sum() col_dup = df['c2'].duplicated() print(col_dup_sum,'\n') # c2에서 중복되는 값이 몇개인지 확인 print(col_dup) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
3 0 False 1 True 2 True 3 False 4 True Name: c2, dtype: bool
Q. df에서 중복 행을 제거한 후 df2에 저장하고 출력하세요.
In [37]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 데이터프레임에서 중복 행을 제거 : drop_duplicates() display(df) print() df2 = df.drop_duplicates() display(df2) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
c1 |
c2 |
c3 |
0 |
a |
1 |
1 |
1 |
a |
1 |
1 |
2 |
b |
1 |
2 |
3 |
a |
2 |
2 |
4 |
b |
2 |
2 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
c1 |
c2 |
c3 |
0 |
a |
1 |
1 |
2 |
b |
1 |
2 |
3 |
a |
2 |
2 |
4 |
b |
2 |
2 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. df에서 c2, c3열을 기준으로 중복 행을 제거한 후 df3에 저장하고 출력하세요
In [14]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df3=df.drop_duplicates(subset=['c2','c3']) display(df3) # [1, 1]이 하나의 묶음 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
열 너비 조절
행 높이 조절
|
c1 |
c2 |
c3 |
0 |
a |
1 |
1 |
2 |
b |
1 |
2 |
3 |
a |
2 |
2 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
데이터 단위 변경
In [15]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# read_csv() 함수로 df 생성 import pandas as pd auto_df = pd.read_csv('auto-mpg.csv') # mile per gallon auto_df.head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[15]:
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
18.0 |
8 |
307.0 |
130.0 |
3504. |
12.0 |
70 |
1 |
chevrolet chevelle malibu |
0 |
15.0 |
8 |
350.0 |
165.0 |
3693.0 |
11.5 |
70 |
1 |
buick skylark 320 |
1 |
18.0 |
8 |
318.0 |
150.0 |
3436.0 |
11.0 |
70 |
1 |
plymouth satellite |
2 |
16.0 |
8 |
304.0 |
150.0 |
3433.0 |
12.0 |
70 |
1 |
amc rebel sst |
3 |
17.0 |
8 |
302.0 |
140.0 |
3449.0 |
10.5 |
70 |
1 |
ford torino |
4 |
15.0 |
8 |
429.0 |
198.0 |
4341.0 |
10.0 |
70 |
1 |
ford galaxie 500 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [16]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# mpg(mile per gallon)를 kpl(kilometer per liter) 로 변환(mpg_to_kpl = 0.425) mpg_to_kpl = 1.60934 / 3.78541 print(mpg_to_kpl) #변환하는 방법 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
0.42514285110463595
Q.'mpg'를 'kpl'로 환산하여 새로운 열을 생성하고 처음 3개 행을 소수점 아래 둘째자리에서 반올림하여 출력하세요.
In [17]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd
# read_csv() 함수로 df 생성 auto_df = pd.read_csv('auto-mpg.csv', header=None)
# 열 이름을 지정 auto_df.columns = ['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name']
display(auto_df.head(3))
auto_df['kpl'] = round((auto_df['mpg'] * mpg_to_kpl),2) display(auto_df.head(3)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
displacement |
horsepower |
weight |
acceleration |
model year |
origin |
name |
0 |
18.0 |
8 |
307.0 |
130.0 |
3504.0 |
12.0 |
70 |
1 |
chevrolet chevelle malibu |
1 |
15.0 |
8 |
350.0 |
165.0 |
3693.0 |
11.5 |
70 |
1 |
buick skylark 320 |
2 |
18.0 |
8 |
318.0 |
150.0 |
3436.0 |
11.0 |
70 |
1 |
plymouth satellite |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
displacement |
horsepower |
weight |
acceleration |
model year |
origin |
name |
kpl |
0 |
18.0 |
8 |
307.0 |
130.0 |
3504.0 |
12.0 |
70 |
1 |
chevrolet chevelle malibu |
7.65 |
1 |
15.0 |
8 |
350.0 |
165.0 |
3693.0 |
11.5 |
70 |
1 |
buick skylark 320 |
6.38 |
2 |
18.0 |
8 |
318.0 |
150.0 |
3436.0 |
11.0 |
70 |
1 |
plymouth satellite |
7.65 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [18]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 각 열의 자료형 확인 print(auto_df.dtypes) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
mpg float64 cylinders int64 displacement float64 horsepower object weight float64 acceleration float64 model year int64 origin int64 name object kpl float64 dtype: object
Q. horsepower 열의 고유값을 출력하세요.
In [19]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
print(auto_df['horsepower'].unique()) # '?' 때문에 문자(string=object)로 바뀐 것임 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
['130.0' '165.0' '150.0' '140.0' '198.0' '220.0' '215.0' '225.0' '190.0' '170.0' '160.0' '95.00' '97.00' '85.00' '88.00' '46.00' '87.00' '90.00' '113.0' '200.0' '210.0' '193.0' '?' '100.0' '105.0' '175.0' '153.0' '180.0' '110.0' '72.00' '86.00' '70.00' '76.00' '65.00' '69.00' '60.00' '80.00' '54.00' '208.0' '155.0' '112.0' '92.00' '145.0' '137.0' '158.0' '167.0' '94.00' '107.0' '230.0' '49.00' '75.00' '91.00' '122.0' '67.00' '83.00' '78.00' '52.00' '61.00' '93.00' '148.0' '129.0' '96.00' '71.00' '98.00' '115.0' '53.00' '81.00' '79.00' '120.0' '152.0' '102.0' '108.0' '68.00' '58.00' '149.0' '89.00' '63.00' '48.00' '66.00' '139.0' '103.0' '125.0' '133.0' '138.0' '135.0' '142.0' '77.00' '62.00' '132.0' '84.00' '64.00' '74.00' '116.0' '82.00']
Q. horsepower 열의 누락 데이터'?'을 삭제한 후 NaN값의 갯수를 출력하세요.
In [20]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 누락데이터 ('?') 삭제 import numpy as np auto_df['horsepower'].replace('?', np.nan, inplace=True) #'?'을 np.nan으로 변경 auto_df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락데이터 행을 제거
print(auto_df['horsepower'].isnull().sum()) print(auto_df.horsepower.dtypes) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
0 object
Q. horsepower 문자열을 실수형으로 변환한 후 자료형을 확인하세요.
In [21]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
auto_df['horsepower'] = auto_df['horsepower'].astype('float') print(auto_df['horsepower'].dtypes) display(auto_df.head(3)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
float64
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
displacement |
horsepower |
weight |
acceleration |
model year |
origin |
name |
kpl |
0 |
18.0 |
8 |
307.0 |
130.0 |
3504.0 |
12.0 |
70 |
1 |
chevrolet chevelle malibu |
7.65 |
1 |
15.0 |
8 |
350.0 |
165.0 |
3693.0 |
11.5 |
70 |
1 |
buick skylark 320 |
6.38 |
2 |
18.0 |
8 |
318.0 |
150.0 |
3436.0 |
11.0 |
70 |
1 |
plymouth satellite |
7.65 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. 아래 사항을 처리하세요.
In [22]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# origin 열의 고유값 확인 print(auto_df['origin'].unique())
# 정수형 데이터를 문자형 데이터로 변환 auto_df['origin'].replace({1:'USA',2:'EU',3:'JAPAN'},inplace=True)
print(auto_df['origin'].unique()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
[1 3 2] ['USA' 'JAPAN' 'EU']
Q. origin 열의 자료형을 확인하고 범주형으로 변환하여 출력하세요.
In [23]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# origin 열의 자료형 확인 print(auto_df['origin'].dtypes) # origin은 제조국을 지칭 -> 범주형 데이터 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
object
In [24]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# origin 열의 문자열 자료형을 범주형으로 변환 auto_df['origin'] = auto_df['origin'].astype('category') print(auto_df['origin'].dtypes) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
category
Q. origin 열을 범주형에서 문자열로 변환한 후 자료형을 출력하세요.
In [25]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 범주형을 문자열로 변환 auto_df['origin'] = auto_df['origin'].astype('object') # object = str 둘 다 명시해도 변환 가능 print(auto_df['origin'].dtypes) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
object
Q. model_year 열의 정수형을 범주형으로 변환한 후 출력하세요
In [26]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# auto_df['model year'].unique() : [70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82] display(auto_df['model year'].sample(3)) auto_df['model year'] = auto_df['model year'].astype('category') display(auto_df['model year'].sample(3)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
286 79 42 71 326 80 Name: model year, dtype: int64
202 76 230 77 341 81 Name: model year, dtype: category Categories (13, int64): [70, 71, 72, 73, ..., 79, 80, 81, 82]
범주형(카테고리) 데이터 처리
In [27]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
auto_df['horsepower'].replace('?', np.nan, inplace=True) # ? 로 저장되어있는 데이터를 NaN 값으로 대체 auto_df.dropna(subset=['horsepower'], axis=0, inplace=True) # horsepower 컬럼에 결측치(NaN)가 있는 경우 삭제 auto_df['horsepower'] = auto_df['horsepower'].astype('float') # horsepower 열의 타입을 float64로 변경 후 대입 auto_df['hp'] = auto_df['horsepower'].astype('int') # horsepower 열의 타입을 int 로 변경 후 hp열을 추가하여 삽입 print() auto_df.info() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.frame.DataFrame'> Int64Index: 392 entries, 0 to 397 Data columns (total 11 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 mpg 392 non-null float64 1 cylinders 392 non-null int64 2 displacement 392 non-null float64 3 horsepower 392 non-null float64 4 weight 392 non-null float64 5 acceleration 392 non-null float64 6 model year 392 non-null category 7 origin 392 non-null object 8 name 392 non-null object 9 kpl 392 non-null float64 10 hp 392 non-null int32 dtypes: category(1), float64(6), int32(1), int64(1), object(2) memory usage: 33.3+ KB
In [43]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# np.histogram 함수로 3개의 bin으로 나누는 경계값의 리스트 구하기 count, bin_dividers = np.histogram(auto_df['horsepower'], bins=3) # 3개로 나누기 때문에 bins=3 (나누는 구간은 자동으로 정렬된다.) print(count) # 각 구간별로 들어있는 데이터 수 display(bin_dividers) # [ 46. , 107.33333333, 168.66666667, 230.] : 46 ~ 107, 107 ~ 168, 168 ~ 230 총 3개 구간 확인 가능 print()
# 3개의 bin에 이름 지정 bin_names = ['저출력', '보통출력', '고출력'] # 3개로 나누었기 때문에 구간도 3개의 종류로 들어가야 한다.
# pd.cut 함수로 각 데이터를 3개의 bin에 할당 auto_df['hp_bin'] = pd.cut(x=auto_df['horsepower'], # 데이터 배열, 컬럼 추가하여 삽입 bins=bin_dividers, # 경계 값 리스트 labels=bin_names, # bin 이름 include_lowest=True) # 첫 경계값 포함 # include_lowest는 객체의 가장 작은 값을 포함 여부를 지정하는 것으로 기본값은 False로서 포함하지 않는다.
# horsepower 열, hp_bin 열의 첫 5행을 출력 display(auto_df[['horsepower', 'hp_bin']].head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
[257 103 32]
array([0. , 0.33333333, 0.66666667, 1. ])
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
horsepower |
hp_bin |
0 |
0.456522 |
보통출력 |
1 |
0.646739 |
보통출력 |
2 |
0.565217 |
보통출력 |
3 |
0.565217 |
보통출력 |
4 |
0.510870 |
보통출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
더미 변수
카테고리를 나타내는 범주형 데이터를 회귀분석 등 ml 알고리즘에 바로 사용할 수 없는 경우
컴퓨터가 인식 가능한 입력값으로 변환 -> 숫자 0 또는 1로 표현되는 더미 변수 사용.
0, 1은 크고 작음과 상관없고 어떤 특성 여부만 표시(존재1, 비존재0) -> one-hot-encoding(one hot vector로 변환한다는 의미)
In [29]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# hp_bin 열의 범주형 데이터를 더미 변수로 변환 horsepower_dummies = pd.get_dummies(auto_df['hp_bin']) horsepower_dummies.head(15) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[29]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 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 |
0 |
1 |
0 |
1 |
0 |
2 |
0 |
1 |
0 |
3 |
0 |
1 |
0 |
4 |
0 |
1 |
0 |
5 |
0 |
0 |
1 |
6 |
0 |
0 |
1 |
7 |
0 |
0 |
1 |
8 |
0 |
0 |
1 |
9 |
0 |
0 |
1 |
10 |
0 |
0 |
1 |
11 |
0 |
1 |
0 |
12 |
0 |
1 |
0 |
13 |
0 |
0 |
1 |
14 |
1 |
0 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [47]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# sklearn 라이브러리 불러오기 from sklearn import preprocessing
# 전처리를 위한 encoder 객체 만들기 label_encoder = preprocessing.LabelEncoder() onehot_encoder = preprocessing.OneHotEncoder()
display(auto_df.head())
# label encoder로 문자열 범주를 숫자형 범주로 변환 onehot_labeled = label_encoder.fit_transform(auto_df['hp_bin'].head(15)) display(onehot_labeled) print(type(onehot_labeled)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 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행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
displacement |
horsepower |
weight |
acceleration |
model year |
origin |
name |
hp_bin |
0 |
18.0 |
8 |
307.0 |
0.456522 |
3504.0 |
12.0 |
70 |
1 |
chevrolet chevelle malibu |
보통출력 |
1 |
15.0 |
8 |
350.0 |
0.646739 |
3693.0 |
11.5 |
70 |
1 |
buick skylark 320 |
보통출력 |
2 |
18.0 |
8 |
318.0 |
0.565217 |
3436.0 |
11.0 |
70 |
1 |
plymouth satellite |
보통출력 |
3 |
16.0 |
8 |
304.0 |
0.565217 |
3433.0 |
12.0 |
70 |
1 |
amc rebel sst |
보통출력 |
4 |
17.0 |
8 |
302.0 |
0.510870 |
3449.0 |
10.5 |
70 |
1 |
ford torino |
보통출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2])
<class 'numpy.ndarray'>
In [31]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 2차원 행렬로 형태 변경 onehot_reshaped = onehot_labeled.reshape(len(onehot_labeled),1) print(onehot_reshaped) print(type(onehot_reshaped)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
[[1] [1] [1] [1] [1] [0] [0] [0] [0] [0] [0] [1] [1] [0] [2]] <class 'numpy.ndarray'>
In [32]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 희소행렬로 변환 onehot_fitted = onehot_encoder.fit_transform(onehot_reshaped) # fit_transform : 희소행렬로 변환(fit을 먼저하고 transform 을 하기도 함) print(onehot_fitted) print(type(onehot_fitted)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
(0, 1) 1.0 (1, 1) 1.0 (2, 1) 1.0 (3, 1) 1.0 (4, 1) 1.0 (5, 0) 1.0 (6, 0) 1.0 (7, 0) 1.0 (8, 0) 1.0 (9, 0) 1.0 (10, 0) 1.0 (11, 1) 1.0 (12, 1) 1.0 (13, 0) 1.0 (14, 2) 1.0 <class 'scipy.sparse.csr.csr_matrix'>
정규화
각 변수의 숫자 데이터의 상대적 크기 차이 때문에 ml 분석 결과가 달라질 수 있음.(a 변수 1 ~ 1000, b변수 0~1)
숫자 데이터의 상대적 크기 차이를 제거할 필요가 있으며 각 열(변수)에 속하는 데이터 값을 동일한 크기 기준으로 나누어 정규화 함
정규화 결과 데이터의 범위는 0 ~ 1 또는 -1 ~ 1(음수값이 있는 경우).
각 열의 값 / 최대값 or (각 열의 값 - 최소값) / (해당 열의 최대값 - 최소값)
표준화
평균이 0 이고 분산(or 표준편차) 이 1인 가우시안 표준 정규분포를 가진 값으로 변환하는 것
In [33]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# horsepower 열의 누락 데이터('?') 삭제하고 실수형으로 변환 auto_df = pd.read_csv('auto-mpg.csv', header=None) auto_df.columns = ['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name'] auto_df['horsepower'].replace('?', np.nan, inplace=True) #'?'을 np.nan으로 변경 auto_df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락데이터 행을 제거 auto_df['horsepower'] = auto_df['horsepower'].astype('float') # 문자열을 실수형으로 변경
#horsepower 열의 통계 요약정보로 최대값(max)을 확인 print(auto_df.horsepower.describe()) print()
# horsepower 열의 최대값의 절대값으로 모든 데이터를 나눠서 저장
auto_df.horsepower = auto_df.horsepower / abs(auto_df.horsepower.max())
print(auto_df.horsepower.head()) print() print(auto_df.horsepower.describe()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
count 392.000000 mean 104.469388 std 38.491160 min 46.000000 25% 75.000000 50% 93.500000 75% 126.000000 max 230.000000 Name: horsepower, dtype: float64 0 0.565217 1 0.717391 2 0.652174 3 0.652174 4 0.608696 Name: horsepower, dtype: float64 count 392.000000 mean 0.454215 std 0.167353 min 0.200000 25% 0.326087 50% 0.406522 75% 0.547826 max 1.000000 Name: horsepower, dtype: float64
In [34]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# read_csv() 함수로 df 생성 auto_df = pd.read_csv('auto-mpg.csv', header=None) auto_df.columns = ['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name']
#horsepower 열의 누락 데이터('?') 삭제하고 실수형으로 변환 auto_df['horsepower'].replace('?', np.nan, inplace=True) #'?'을 np.nan으로 변경 auto_df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락데이터 행을 제거 auto_df['horsepower'] = auto_df['horsepower'].astype('float') # 문자열을 실수형으로 변환
# horsepower 열의 통계 요약정보로 최대값 (max)과 최소값(min)을 확인 print(auto_df.horsepower.describe()) print()
# horsepower 각 열 데이터에서 해당 열의 최소값을 뺀 값을 분자, 해당 열의 최대값 - 최소값을 분모 # 가장 큰 값은 역시 1
min_x = auto_df.horsepower - auto_df.horsepower.min() min_max = auto_df.horsepower.max() - auto_df.horsepower.min() auto_df.horsepower = min_x / min_max
print(auto_df.horsepower.head()) print() print(auto_df.horsepower.describe()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
count 392.000000 mean 104.469388 std 38.491160 min 46.000000 25% 75.000000 50% 93.500000 75% 126.000000 max 230.000000 Name: horsepower, dtype: float64 0 0.456522 1 0.646739 2 0.565217 3 0.565217 4 0.510870 Name: horsepower, dtype: float64 count 392.000000 mean 0.317768 std 0.209191 min 0.000000 25% 0.157609 50% 0.258152 75% 0.434783 max 1.000000 Name: horsepower, dtype: float64
추가문제
Q. titanic_df의 각 칼럼별 null의 갯수를 for 반복문을 사용해서 구한 후 출력하세요.
(missing_count는 예외처리 하고 처리 방식은 0 을 출력함)¶
In [1]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import seaborn as sns import pandas as pd import numpy as np
titanic_df = sns.load_dataset('titanic') try: for column in titanic_df.columns : print(column,titanic_df[column].isnull().sum(axis=0)) except IndexError as e: print('인덱스에러',e) # 1번 방법
# 2번 방법 # for i in range(len(titanic_df)): # print(titanic_df.iloc[:,i].isnull().sum()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
survived 0 pclass 0 sex 0 age 177 sibsp 0 parch 0 fare 0 embarked 2 class 0 who 0 adult_male 0 deck 688 embark_town 2 alive 0 alone 0
데이터 소스 : titanic_df = sns.load_dataset('titanic')
Q. embark_town 열의 829행의 NaN 데이터의 앞, 뒤를 포함하는 3개행을 출력하세요.
In [2]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import seaborn as sns import pandas as pd import numpy as np titanic_df = sns.load_dataset('titanic') display(titanic_df.head(3)) print(titanic_df.embark_town.iloc[828:831],'\n') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
survived |
pclass |
sex |
age |
sibsp |
parch |
fare |
embarked |
class |
who |
adult_male |
deck |
embark_town |
alive |
alone |
0 |
0 |
3 |
male |
22.0 |
1 |
0 |
7.2500 |
S |
Third |
man |
True |
NaN |
Southampton |
no |
False |
1 |
1 |
1 |
female |
38.0 |
1 |
0 |
71.2833 |
C |
First |
woman |
False |
C |
Cherbourg |
yes |
False |
2 |
1 |
3 |
female |
26.0 |
0 |
0 |
7.9250 |
S |
Third |
woman |
False |
NaN |
Southampton |
yes |
True |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
828 Queenstown 829 NaN 830 Cherbourg Name: embark_town, dtype: object
Q. embark_town 열의 NaN값을 승선도시 중에서 가장 많이 출현한 값으로 대체하세요.
In [3]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
nan_embark_town = titanic_df['embark_town'].value_counts(dropna=False) display(nan_embark_town) # 가장 많이 출현한 값 : Southampton
titanic_df['embark_town'].replace(np.nan, 'Southampton', inplace=True) titanic_df.dropna(subset=['embark_town'], axis=0, inplace=True) titanic_df.embark_town.value_counts() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Southampton 644 Cherbourg 168 Queenstown 77 NaN 2 Name: embark_town, dtype: int64
Out[3]:
Southampton 646 Cherbourg 168 Queenstown 77 Name: embark_town, dtype: int64
Q. titanic_df에서 'age' 열에 나이 데이터가 없는 모든 행을 삭제 후 df_age 이름으로 저장하고 행의 갯수를 구하세요. 데이터 소스 : titanic_df = sns.load_dataset('titanic')
In [4]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
titanic_df = sns.load_dataset('titanic') display(titanic_df['age'].isnull().sum()) # 나이데이터에 NaN 수 df_age = titanic_df.dropna(how='any',subset=['age']) df_age.shape # 행의 갯수 714개 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
177
Out[4]:
(714, 15)
Q. age 열의 NaN값을 다른 나이 데이터의 평균으로 변경한 후 'age' 열의 첫 10개 데이터만 정수로 출력하세요.
In [5]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
print('평균값:',titanic_df['age'].mean()) titanic_df['age'].replace(np.nan, titanic_df['age'].mean(), inplace=True) titanic_df['age'].head(10).astype('int') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
평균값: 29.69911764705882
Out[5]:
0 22 1 38 2 26 3 35 4 35 5 29 6 54 7 2 8 27 9 14 Name: age, dtype: int32
Q. 1 ~ 2사이의 정수로 (5,3) 2차원 배열을 랜덤하게 만든 후 DataFrame으로 불러와 df에 저장하고 df에서 중복 행을 제거한 후 df2에 저장 후 출력하세요.(columns = ['a','b','c'])
In [6]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df = pd.DataFrame(np.random.randint(1,2,size=(5,3)), columns=['a','b','c']) display(df) df2 = df.drop_duplicates() display(df2) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
a |
b |
c |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
2 |
1 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
1 |
1 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
열 너비 조절
행 높이 조절
|
a |
b |
c |
0 |
1 |
1 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. df에서 b, c열을 기준으로 중복 행을 제거한 후 df3에 저장하고 출력하세요.
In [7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df3=df.drop_duplicates(subset=['b','c']) df3 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
열 너비 조절
행 높이 조절
|
a |
b |
c |
0 |
1 |
1 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. titanic_df embark_town 열의 NaN값을 바로 앞에 있는 830행의 값으로 변경한 후 출력하세요.
In [8]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
titanic_df = sns.load_dataset('titanic') display(titanic_df.embark_town.iloc[828:831]) titanic_df['embark_town'].fillna(method='bfill', inplace=True) display(titanic_df.embark_town.iloc[828:831]) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
828 Queenstown 829 NaN 830 Cherbourg Name: embark_town, dtype: object
828 Queenstown 829 Cherbourg 830 Cherbourg Name: embark_town, dtype: object
In [9]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 데이터 프레임 생성 import pandas as pd auto_df = pd.read_csv('auto-mpg.csv', header=None) auto_df.columns = ['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name']
auto_df.head(3) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[9]:
셀 전체 선택
- 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행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
displacement |
horsepower |
weight |
acceleration |
model year |
origin |
name |
0 |
18.0 |
8 |
307.0 |
130.0 |
3504.0 |
12.0 |
70 |
1 |
chevrolet chevelle malibu |
1 |
15.0 |
8 |
350.0 |
165.0 |
3693.0 |
11.5 |
70 |
1 |
buick skylark 320 |
2 |
18.0 |
8 |
318.0 |
150.0 |
3436.0 |
11.0 |
70 |
1 |
plymouth satellite |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. horsepower 열의 누락 데이터 '?'을 삭제한 후 NaN 값의 갯수를 출력하세요.
In [10]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
auto_df['horsepower'].replace('?', np.nan, inplace=True) # ?값을 NaN 으로 대체 auto_df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락된 데이터 삭제 auto_df['horsepower'].isnull().sum() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[10]:
0
Q. horsepower 열의 누락 데이터('?') 삭제하고 실수형으로 변환하세요.
In [11]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
auto_df['horsepower'] = auto_df['horsepower'].astype('float') auto_df['horsepower'].head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[11]:
0 130.0 1 165.0 2 150.0 3 150.0 4 140.0 Name: horsepower, dtype: float64
Q. Titanic 가공한 내역을 정리하고 이를 쉽게 재사용할 후 있도록 종합 전처리 함수를 만드세요.(def transform_features(df):)
In [23]:
셀 전체 선택
- 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
# 앞에서 설정한 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[23]:
셀 전체 선택
- 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 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
'PYTHON' 카테고리의 다른 글
20200321 - 파이썬(미래 예측 머신러닝 모델(삼성전자, 이더리움)) (1) | 2020.03.21 |
---|---|
20200320 - 파이썬(타이타닉 생존자 예측 데이터 전처리) (0) | 2020.03.20 |
20200318 - 파이썬, 데이터프레임, 타이타닉, 분석 기초, 데이터 전처리 (0) | 2020.03.18 |
20200317 - 파이썬 Series(시리즈), 종속변수, 행렬, 행렬연산, 전치 (0) | 2020.03.17 |
20200316 - Numpy, Pandas 기초 설명 및 연습(랜덤, 데이터셋, 데이터프레임, 시리즈) (0) | 2020.03.16 |
댓글