728x90
반응형
In [2]:
import pandas as pd
file_path = 'C:\\users\\jihoon\\bigdata\\6장데이터\\bicycle.csv'
df=pd.read_csv(file_path, engine='python')
In [3]:
df
Out[3]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.0 | 7.0 | 1420.0 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.0 | 10.0 | NaN |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | NaN | 10.0 | 1380.0 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | NaN | 5.0 | NaN |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 |
420 rows × 11 columns
1. 데이터 백업¶
In [10]:
#data 폴더에 저장
df.to_excel('C:\\bigdata\\bicycle.xlsx')
In [18]:
#저장 파일 확인
file_path='C:\\bigdata\\bicycle.xlsx'
In [19]:
df2=pd.read_excel(file_path)
In [20]:
print(df2)
Unnamed: 0 자전거번호 대여일시 대여소번호 대여소명 대여거치대 \
0 0 SPB-23220 2019-11-01 8:48 646 장한평역 1번출구 (국민은행앞) 3.0
1 1 SPB-16216 2019-11-04 8:38 646 장한평역 1번출구 (국민은행앞) 2.0
2 2 SPB-21097 2019-11-04 8:46 646 장한평역 1번출구 (국민은행앞) 1.0
3 3 SPB-22292 2019-11-05 8:34 646 장한평역 1번출구 (국민은행앞) 1.0
4 4 SPB-07935 2019-11-05 12:29 512 뚝섬역 1번 출구 옆 11.0
.. ... ... ... ... ... ...
415 415 SPB-12116 2019-11-15 4:22 112 극동방송국 앞 5.0
416 416 SPB-17768 2019-11-15 9:31 103 망원역 2번출구 앞 14.0
417 417 SPB-18841 2019-11-15 20:40 113 홍대입구역 2번출구 앞 24.0
418 418 SPB-24467 2019-11-15 21:55 152 마포구민체육센터 앞 18.0
419 419 SPB-17570 2019-11-15 22:16 391 정동길입구 7.0
반납일시 반납대여소번호 반납대여소명 반납거치대 이용시간 이용거리
0 2019-11-01 9:01 3 중랑센터 7.0 12.0 1100.0
1 2019-11-04 8:56 3 중랑센터 2.0 7.0 1420.0
2 2019-11-04 8:57 3 중랑센터 7.0 10.0 NaN
3 2019-11-05 8:45 3 중랑센터 NaN 10.0 1380.0
4 2019-11-05 12:39 3 중랑센터 7.0 10.0 1650.0
.. ... ... ... ... ... ...
415 2019-11-15 4:33 101 (구)합정동 주민센터 1.0 11.0 2200.0
416 2019-11-15 9:37 101 (구)합정동 주민센터 NaN 5.0 NaN
417 2019-11-15 20:53 101 (구)합정동 주민센터 1.0 12.0 2280.0
418 2019-11-15 22:05 101 (구)합정동 주민센터 1.0 10.0 1180.0
419 2019-11-15 23:04 101 (구)합정동 주민센터 5.0 48.0 8100.0
[420 rows x 12 columns]
In [21]:
#결측 데이터 확인
df2
Out[21]:
Unnamed: 0 | 자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 |
1 | 1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.0 | 7.0 | 1420.0 |
2 | 2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.0 | 10.0 | NaN |
3 | 3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | NaN | 10.0 | 1380.0 |
4 | 4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | 415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 |
416 | 416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | NaN | 5.0 | NaN |
417 | 417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 |
418 | 418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 |
419 | 419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 |
420 rows × 12 columns
결측 데이터 확인¶
In [24]:
df2.isnull()
Out[24]:
Unnamed: 0 | 자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | False | False | False | False | False | False | False | False | False | False | False | False |
1 | False | False | False | False | False | False | False | False | False | False | False | False |
2 | False | False | False | False | False | False | False | False | False | False | False | True |
3 | False | False | False | False | False | False | False | False | False | True | False | False |
4 | False | False | False | False | False | False | False | False | False | False | False | False |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | False | False | False | False | False | False | False | False | False | False | False | False |
416 | False | False | False | False | False | False | False | False | False | True | False | True |
417 | False | False | False | False | False | False | False | False | False | False | False | False |
418 | False | False | False | False | False | False | False | False | False | False | False | False |
419 | False | False | False | False | False | False | False | False | False | False | False | False |
420 rows × 12 columns
In [23]:
df2.notnull()
Out[23]:
Unnamed: 0 | 자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | True | True | True | True | True | True | True | True | True | True | True | True |
1 | True | True | True | True | True | True | True | True | True | True | True | True |
2 | True | True | True | True | True | True | True | True | True | True | True | False |
3 | True | True | True | True | True | True | True | True | True | False | True | True |
4 | True | True | True | True | True | True | True | True | True | True | True | True |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | True | True | True | True | True | True | True | True | True | True | True | True |
416 | True | True | True | True | True | True | True | True | True | False | True | False |
417 | True | True | True | True | True | True | True | True | True | True | True | True |
418 | True | True | True | True | True | True | True | True | True | True | True | True |
419 | True | True | True | True | True | True | True | True | True | True | True | True |
420 rows × 12 columns
결측 데이터 개수 확인¶
In [25]:
#결측값 개수
df2.isnull().sum()
Out[25]:
Unnamed: 0 0
자전거번호 0
대여일시 0
대여소번호 0
대여소명 0
대여거치대 24
반납일시 0
반납대여소번호 0
반납대여소명 0
반납거치대 11
이용시간 15
이용거리 16
dtype: int64
In [29]:
#행 단위 결측값 개수
df2.isnull().sum(1)
Out[29]:
0 0
1 0
2 1
3 1
4 0
..
415 0
416 2
417 0
418 0
419 0
Length: 420, dtype: int64
In [30]:
#행 단위 실젯값 개수
df2.notnull().sum(1)
Out[30]:
0 12
1 12
2 11
3 11
4 12
..
415 12
416 10
417 12
418 12
419 12
Length: 420, dtype: int64
결측 데이터 제거¶
In [31]:
#결측 데이터가 있는 전체 행 제거
df_drop_allrow=df.dropna(axis=0)
In [32]:
df_drop_allrow
Out[32]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.0 | 7.0 | 1420.0 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 |
5 | SPB-18401 | 2019-11-06 8:52 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-06 9:09 | 3 | 중랑센터 | 7.0 | 11.0 | 1350.0 |
6 | SPB-18350 | 2019-11-06 8:35 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-06 9:10 | 3 | 중랑센터 | 2.0 | 9.0 | 1390.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
414 | SPB-24515 | 2019-11-15 3:58 | 112 | 극동방송국 앞 | 1.0 | 2019-11-15 4:08 | 101 | (구)합정동 주민센터 | 1.0 | 9.0 | 1620.0 |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 |
358 rows × 11 columns
In [33]:
#결측 데이터가 있는 전체 열 제거
df_drop_allcolumn=df.dropna(axis=1)
In [34]:
df_drop_allcolumn
Out[34]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 반납일시 | 반납대여소번호 | 반납대여소명 | |
---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 2019-11-01 9:01 | 3 | 중랑센터 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2019-11-04 8:56 | 3 | 중랑센터 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 2019-11-04 8:57 | 3 | 중랑센터 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 2019-11-05 8:45 | 3 | 중랑센터 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 2019-11-05 12:39 | 3 | 중랑센터 |
... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 |
420 rows × 7 columns
In [36]:
#특정 행 또는 열 결측치 제거, 대여소번호 컬럼 제거(비교 확인)
df['대여소번호'].dropna()
Out[36]:
0 646
1 646
2 646
3 646
4 512
...
415 112
416 103
417 113
418 152
419 391
Name: 대여소번호, Length: 420, dtype: int64
In [37]:
#결측값이 들어있는 행 전체 삭제
In [38]:
df[['대여소번호','대여거치대','이용시간']].dropna()
Out[38]:
대여소번호 | 대여거치대 | 이용시간 | |
---|---|---|---|
0 | 646 | 3.0 | 12.0 |
1 | 646 | 2.0 | 7.0 |
2 | 646 | 1.0 | 10.0 |
3 | 646 | 1.0 | 10.0 |
4 | 512 | 11.0 | 10.0 |
... | ... | ... | ... |
415 | 112 | 5.0 | 11.0 |
416 | 103 | 14.0 | 5.0 |
417 | 113 | 24.0 | 12.0 |
418 | 152 | 18.0 | 10.0 |
419 | 391 | 7.0 | 48.0 |
382 rows × 3 columns
In [39]:
df[['대여소번호','대여거치대','이용시간']].dropna(axis=0)
Out[39]:
대여소번호 | 대여거치대 | 이용시간 | |
---|---|---|---|
0 | 646 | 3.0 | 12.0 |
1 | 646 | 2.0 | 7.0 |
2 | 646 | 1.0 | 10.0 |
3 | 646 | 1.0 | 10.0 |
4 | 512 | 11.0 | 10.0 |
... | ... | ... | ... |
415 | 112 | 5.0 | 11.0 |
416 | 103 | 14.0 | 5.0 |
417 | 113 | 24.0 | 12.0 |
418 | 152 | 18.0 | 10.0 |
419 | 391 | 7.0 | 48.0 |
382 rows × 3 columns
In [40]:
#결측값이 들어있는 열 전체 삭제
df[['대여소번호', '대여거치대', '이용시간']].dropna(axis=1)
Out[40]:
대여소번호 | |
---|---|
0 | 646 |
1 | 646 |
2 | 646 |
3 | 646 |
4 | 512 |
... | ... |
415 | 112 |
416 | 103 |
417 | 113 |
418 | 152 |
419 | 391 |
420 rows × 1 columns
결측 데이터 대체 [평균값으로 대체 必]¶
In [42]:
#결측값을 특정값으로 대체
df_1=df.fillna(0)
In [43]:
df_1
Out[43]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.0 | 7.0 | 1420.0 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.0 | 10.0 | 0.0 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | 0.0 | 10.0 | 1380.0 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | 0.0 | 5.0 | 0.0 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 |
420 rows × 11 columns
In [44]:
#특정 컬럼 결측값을 특정 값으로 대체
df_2=df.대여소번호.fillna(0)
In [45]:
df_2
Out[45]:
0 646
1 646
2 646
3 646
4 512
...
415 112
416 103
417 113
418 152
419 391
Name: 대여소번호, Length: 420, dtype: int64
In [46]:
#결측값을 문자열로 대체
df_3=df.fillna('missing')
In [47]:
df_3
Out[47]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3 | 2019-11-01 9:01 | 3 | 중랑센터 | 7 | 12 | 1100 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2 | 2019-11-04 8:56 | 3 | 중랑센터 | 2 | 7 | 1420 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1 | 2019-11-04 8:57 | 3 | 중랑센터 | 7 | 10 | missing |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1 | 2019-11-05 8:45 | 3 | 중랑센터 | missing | 10 | 1380 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11 | 2019-11-05 12:39 | 3 | 중랑센터 | 7 | 10 | 1650 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1 | 11 | 2200 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | missing | 5 | missing |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1 | 12 | 2280 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1 | 10 | 1180 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5 | 48 | 8100 |
420 rows × 11 columns
In [48]:
#각 컬럼의 평균을 구해서 대응하는 컬럼의 결측값을 대체하는 방법으로 가장 많이 사용합니다.
In [49]:
df_4=df.fillna(df.mean())
In [50]:
df_4
Out[50]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.000000 | 12.0 | 1100.000000 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.000000 | 7.0 | 1420.000000 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.000000 | 10.0 | 2679.678218 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | 2.831296 | 10.0 | 1380.000000 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.000000 | 10.0 | 1650.000000 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.000000 | 11.0 | 2200.000000 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | 2.831296 | 5.0 | 2679.678218 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.000000 | 12.0 | 2280.000000 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.000000 | 10.0 | 1180.000000 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.000000 | 48.0 | 8100.000000 |
420 rows × 11 columns
In [51]:
#특정 항목 평균 구하기(이용거리 평균)
df_5=df.mean()['이용거리']
In [52]:
df_5
Out[52]:
2679.6782178217823
In [53]:
#특정 항목 평균으로 대체
df_6=df.fillna(df.mean()['이용거리'])
In [54]:
df_6
Out[54]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.000000 | 12.0 | 1100.000000 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.000000 | 7.0 | 1420.000000 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.000000 | 10.0 | 2679.678218 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | 2679.678218 | 10.0 | 1380.000000 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.000000 | 10.0 | 1650.000000 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.000000 | 11.0 | 2200.000000 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | 2679.678218 | 5.0 | 2679.678218 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.000000 | 12.0 | 2280.000000 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.000000 | 10.0 | 1180.000000 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.000000 | 48.0 | 8100.000000 |
420 rows × 11 columns
In [55]:
##특정 항목 평균으로 대체
df_7=df.이용거리.fillna(df.mean()['이용거리'])
In [56]:
df_7
Out[56]:
0 1100.000000
1 1420.000000
2 2679.678218
3 1380.000000
4 1650.000000
...
415 2200.000000
416 2679.678218
417 2280.000000
418 1180.000000
419 8100.000000
Name: 이용거리, Length: 420, dtype: float64
이상 데이터¶
이상 데이터 확인¶
In [57]:
#파일경로를 찾고 변수 file_path에 저장
In [64]:
file_path='C:\\users\\jihoon\\bigdata\\6장데이터\\bicycle_out.csv'
In [65]:
#read csv() 함수로 데이터프레임 변환
df= pd.read_csv(file_path, engine='python')
In [66]:
#이상값이 있는 4번째 행 제거
df1=df.drop(4,0)
In [67]:
df1
Out[67]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | 나이 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 | 50 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.0 | 7.0 | 1420.0 | 31 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.0 | 10.0 | NaN | 32 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | NaN | 10.0 | 1380.0 | 21 |
5 | SPB-18401 | 2019-11-06 8:52 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-06 9:09 | 3 | 중랑센터 | 7.0 | 11.0 | 1350.0 | 30 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 | 22 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | NaN | 5.0 | NaN | 22 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 | 37 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 | 27 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 | 28 |
419 rows × 12 columns
이상 데이터 시각화¶
In [70]:
#고급 시각화 박스플롯 참조
#이용시간 이상치 시각화
import matplotlib as mpl
import matplotlib.pylab as plt
In [71]:
plt.boxplot(df['나이'])
Out[71]:
{'whiskers': [<matplotlib.lines.Line2D at 0x230b6b4ea90>,
<matplotlib.lines.Line2D at 0x230b6b4edf0>],
'caps': [<matplotlib.lines.Line2D at 0x230b6db6190>,
<matplotlib.lines.Line2D at 0x230b6db64f0>],
'boxes': [<matplotlib.lines.Line2D at 0x230b6b4e730>],
'medians': [<matplotlib.lines.Line2D at 0x230b6db6850>],
'fliers': [<matplotlib.lines.Line2D at 0x230b6db6bb0>],
'means': []}
In [72]:
plt.show()
이상 데이터 처리 방법¶
- 단순 삭제
- 다른 값으로 대체
- 변수화
- 리샘플링
- 케이스 분리 분석
In [80]:
import pandas as pd
file_path='C:\\Users\\jihoon\\bigdata\\6장데이터\\bicycle_dup.csv'
In [84]:
df=pd.read_csv(file_path,encoding="euc_kr")
In [86]:
df
Out[86]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | 나이 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 | 50 |
1 | SPB-16216 | 2019-11-04 8:38 | 646 | 장한평역 1번출구 (국민은행앞) | 2.0 | 2019-11-04 8:56 | 3 | 중랑센터 | 2.0 | 7.0 | 1100.0 | 50 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.0 | 10.0 | NaN | 32 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | NaN | 10.0 | 1380.0 | 21 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 | 120 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 | 22 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | NaN | 5.0 | NaN | 22 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 | 37 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 | 27 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 | 28 |
420 rows × 12 columns
In [89]:
#duplicated() 메소드로 중복 데이터 찾기
#dataFrame.duplicated()는 True, False의 boolean 형태의 series 반환
df.duplicated(['이용거리'])
Out[89]:
0 False
1 True
2 False
3 False
4 False
...
415 False
416 True
417 True
418 True
419 False
Length: 420, dtype: bool
In [88]:
df.duplicated(['이용거리','나이'])
Out[88]:
0 False
1 True
2 False
3 False
4 False
...
415 False
416 True
417 False
418 False
419 False
Length: 420, dtype: bool
중복 시작과 끝 확인¶
In [90]:
#중복이 있으면 처음이나 끝에 무엇을 남길지 확인
#keep='first'가 default 값
#중복 첫 값을 False로 반환, 나머지 중복 값 True 반환
#keep='last'는 중복 첫 값 :True로 반환, 나머지 중복 값 False 반환
df.duplicated(['이용거리'],keep='last')
Out[90]:
0 True
1 True
2 True
3 True
4 False
...
415 False
416 False
417 False
418 False
419 False
Length: 420, dtype: bool
In [92]:
#keep=False는 처음과 끝 값 여부 고려하지 않고 중복일때 True 반환
df.duplicated(['이용거리'], keep=False)
Out[92]:
0 True
1 True
2 True
3 True
4 False
...
415 False
416 True
417 True
418 True
419 False
Length: 420, dtype: bool
중복 데이터 제거¶
In [94]:
#유일한 1개의 key 값만 남기고 나머지 중복 제거
df.drop_duplicates(['이용거리'], keep='first')
Out[94]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | 나이 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | SPB-23220 | 2019-11-01 8:48 | 646 | 장한평역 1번출구 (국민은행앞) | 3.0 | 2019-11-01 9:01 | 3 | 중랑센터 | 7.0 | 12.0 | 1100.0 | 50 |
2 | SPB-21097 | 2019-11-04 8:46 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-04 8:57 | 3 | 중랑센터 | 7.0 | 10.0 | NaN | 32 |
3 | SPB-22292 | 2019-11-05 8:34 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-05 8:45 | 3 | 중랑센터 | NaN | 10.0 | 1380.0 | 21 |
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 | 120 |
5 | SPB-18401 | 2019-11-06 8:52 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-06 9:09 | 3 | 중랑센터 | 7.0 | 11.0 | 1350.0 | 30 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
410 | SPB-18614 | 2019-11-14 23:07 | 391 | 정동길입구 | 5.0 | 2019-11-14 23:49 | 101 | (구)합정동 주민센터 | 3.0 | 40.0 | 7510.0 | 28 |
413 | SPB-25161 | 2019-11-15 3:13 | 106 | 합정역 7번출구 앞 | 6.0 | 2019-11-15 3:18 | 101 | (구)합정동 주민센터 | 1.0 | 3.0 | 640.0 | 21 |
414 | SPB-24515 | 2019-11-15 3:58 | 112 | 극동방송국 앞 | 1.0 | 2019-11-15 4:08 | 101 | (구)합정동 주민센터 | 1.0 | 9.0 | 1620.0 | 21 |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 | 22 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 | 28 |
257 rows × 12 columns
In [97]:
df.drop_duplicates(['이용거리'], keep='last')
Out[97]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | 나이 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 | 120 |
11 | SPB-20145 | 2019-11-13 8:30 | 646 | 장한평역 1번출구 (국민은행앞) | 9.0 | 2019-11-13 8:38 | 3 | 중랑센터 | 2.0 | NaN | 1300.0 | 30 |
15 | SPB-13973 | 2019-11-15 8:42 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-15 8:50 | 3 | 중랑센터 | 2.0 | 6.0 | 1370.0 | 32 |
20 | SPB-21925 | 2019-11-22 8:49 | 529 | 장한평역 8번 출구 앞 | 5.0 | 2019-11-22 9:04 | 3 | 중랑센터 | 7.0 | 13.0 | 1330.0 | 32 |
22 | SPB-05857 | 2019-11-26 8:40 | 646 | 장한평역 1번출구 (국민은행앞) | 6.0 | 2019-11-26 8:48 | 3 | 중랑센터 | 2.0 | NaN | 1380.0 | 41 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 | 22 |
416 | SPB-17768 | 2019-11-15 9:31 | 103 | 망원역 2번출구 앞 | 14.0 | 2019-11-15 9:37 | 101 | (구)합정동 주민센터 | NaN | 5.0 | NaN | 22 |
417 | SPB-18841 | 2019-11-15 20:40 | 113 | 홍대입구역 2번출구 앞 | 24.0 | 2019-11-15 20:53 | 101 | (구)합정동 주민센터 | 1.0 | 12.0 | 2280.0 | 37 |
418 | SPB-24467 | 2019-11-15 21:55 | 152 | 마포구민체육센터 앞 | 18.0 | 2019-11-15 22:05 | 101 | (구)합정동 주민센터 | 1.0 | 10.0 | 1180.0 | 27 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 | 28 |
257 rows × 12 columns
In [98]:
df.drop_duplicates(['이용거리'], keep=False)
Out[98]:
자전거번호 | 대여일시 | 대여소번호 | 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간 | 이용거리 | 나이 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | SPB-07935 | 2019-11-05 12:29 | 512 | 뚝섬역 1번 출구 옆 | 11.0 | 2019-11-05 12:39 | 3 | 중랑센터 | 7.0 | 10.0 | 1650.0 | 120 |
15 | SPB-13973 | 2019-11-15 8:42 | 646 | 장한평역 1번출구 (국민은행앞) | 1.0 | 2019-11-15 8:50 | 3 | 중랑센터 | 2.0 | 6.0 | 1370.0 | 32 |
26 | SPB-15211 | 2019-11-15 8:42 | 419 | 홈플러스 앞 | 18.0 | 2019-11-15 9:16 | 5 | 상암센터 정비실 | 5.0 | 33.0 | 550.0 | 43 |
27 | SPB-24468 | 2019-11-22 8:36 | 911 | 은평평화공원(역촌역4번출구) | 10.0 | 2019-11-22 8:58 | 5 | 상암센터 정비실 | 6.0 | 20.0 | 5170.0 | 22 |
28 | SPB-09287 | 2019-11-26 8:36 | 911 | 은평평화공원(역촌역4번출구) | 4.0 | 2019-11-26 9:21 | 5 | 상암센터 정비실 | 6.0 | 42.0 | 5800.0 | 57 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
410 | SPB-18614 | 2019-11-14 23:07 | 391 | 정동길입구 | 5.0 | 2019-11-14 23:49 | 101 | (구)합정동 주민센터 | 3.0 | 40.0 | 7510.0 | 28 |
413 | SPB-25161 | 2019-11-15 3:13 | 106 | 합정역 7번출구 앞 | 6.0 | 2019-11-15 3:18 | 101 | (구)합정동 주민센터 | 1.0 | 3.0 | 640.0 | 21 |
414 | SPB-24515 | 2019-11-15 3:58 | 112 | 극동방송국 앞 | 1.0 | 2019-11-15 4:08 | 101 | (구)합정동 주민센터 | 1.0 | 9.0 | 1620.0 | 21 |
415 | SPB-12116 | 2019-11-15 4:22 | 112 | 극동방송국 앞 | 5.0 | 2019-11-15 4:33 | 101 | (구)합정동 주민센터 | 1.0 | 11.0 | 2200.0 | 22 |
419 | SPB-17570 | 2019-11-15 22:16 | 391 | 정동길입구 | 7.0 | 2019-11-15 23:04 | 101 | (구)합정동 주민센터 | 5.0 | 48.0 | 8100.0 | 28 |
176 rows × 12 columns
728x90
반응형
'Computer Engineering > Big Data Analytics Using Python' 카테고리의 다른 글
[빅데이터 분석] 10minutes pandas (1) (0) | 2021.04.17 |
---|---|
[빅데이터 분석] 6장. 데이터 탐색 (0) | 2021.04.13 |
[에러잡기] UnicodeDecodeError가 뜰 때 (0) | 2021.04.06 |
[빅데이터 분석 프로젝트] 마크다운으로 팁 데이터 분석 보고서 작성하기 -Part 1 (0) | 2021.04.06 |
[빅데이터 분석 프로젝트] 마크다운으로 타이타닉 탑승객의 생존률 보고서 작성하기 -Part 1 (0) | 2021.03.16 |