여유로움
[11.16 화] 빅데이터 분석기사 실기 - Pandas (1~5강) 본문
1. 라이브러리 가져오기
import pandas as pd |
2. 파일 읽어오기
엑셀파일 : pd.read_excel('파일이름', engine='openpyxl') #engine은 colab 환경에서 실행할 때 추가 CSV 파일 : pd.read_csv('파일이름', engine='openpyxl') #engine은 colab 환경에서 실행할 때 추가 |
# [1-1] youtube_rank.xlsx 파일을 DataFrame 으로 읽어 df라는 이름을 붙입니다
import pandas as pd
df = pd.read_excel('data_01/youtube_rank.xlsx', engine='openpyxl')
print(type(df))
# 원본을 복사하여 둡니다
original = df.copy()
temp = pd.read_csv('data_01/youtube_rank.csv')
print(type(temp))
|
3. 데이터 구조 확인
|
# [1-2] 읽어온 df 의 내용 중 첫 5개 행을 출력해 내용을 확인합니다
df.head()
df.tail(3)
# [1-3] df의 row의 개수 및 각 column의 정보 및 메모리 사용량을 확인합니다.
df.info()
[1-4] df의 행, 열의 수를 확인합니다. (shape 사용)
df.shape
|
4. DataFrame 구성요소
|
# [1-5] df의 index 구성요소 확인
df.index
# [1-6] df의 columns 구성요소 확인
df.columns
# [1-7] df의 values 구성요소 확인
# ndarray - numpy의 배열, df.values => 2차원
df.index.values[:10] # array (numpy의 ndarray)
df.columns.values
|
5. DataFrame의 한 개 Column은 Series이다
|
# [1-8] 데이터프레임의 'video' 컬럼의 내용 중 첫 5개 행을 출력합니다.
# dtype : 'object' -> 문자열
s = df['video']
s.head()
s = df[['video']] #첫번째 대괄호은 indexing, 내부 대괄호는 '목록'을 의미
s.head(3) #colab 환경이 아닐때는 print(s.head(3))
|
6. Series 구성요소
|
# [1-9] Series의 index 구성요소 확인
s.index
# [1-10] Series의 values 구성요소 확인
# 1차원 numpy array (ndarray)
s.values[:10]
# [1-11] 컬럼의 이름을 ['채널', '카테고리', '구독자', '조회', '영상']으로 변경합니다.
# 변경 후 상위 2개 행을 출력해 봅니다.
df.columns = ['채널', '카테고리', '구독자', '조회', '영상']
df.head(2)
|
[데이터 타입 변경]
7. 데이터 dtype 확인 방법
|
# [1-12] 원본(original)을 복사하여 df 이름을 부여합니다.
df = original.copy()
# [1-13] df의 내용 중 첫 5개 행을 출력합니다.
df.head(5)
# [1-14] df의 각 column 별 dtype을 확인합니다.
df.dtypes
# [1-15] df의 'subscriber' 컬럼의 데이터타입(dtype)을 확인해 봅니다.
print(df['subscriber'].dtype) #'o' : object 타입
# [1-16] df의 'subscriber'의 첫 3개 행을 출력해 내용을 확인합니다.
df['subscriber'].head(3)
|
8. 데이터 타입 변경 방법
|
# [1-17] df의 'subscriber'컬럼의 dtype을 'int64' 으로 변경하여 보자
# 오류 발생함 - 한글, 특수문자 등이 섞여 있으면 정수로 변경할 수 없음
df['subscriber'].astype('int64')
|
9. 데이터 값 변경 방법
|
# [1-18] df의 'subscriber' 컬럼에 대해 '만'을 '0000'으로 변경하는 코드를 작성합니다.
# replace는 기본적으로 값 전체를 대상으로 동작합니다.
# 일부 내용을 대상으로 하기 위해서는 regex=True 를 사용합니다.
# regex(=regular expression) - 문자열의 일부, 문자열 패턴을 사용하는 방법
df['subscriber'].replace('만','0000',regex=True).head(5)
#regex=True로 하면, '만'이 문자열 중간에 있어도 찾아서 변경
#replace 하면 새로운 데이터프레임이 생기므로, 저장해줘야 한다
# [1-19] df의 'subscriber' 컬럼에 대해 '만'을 '0000'으로 변경한 뒤, astype('int64')를 사용하여 dtype을 변경합니다.
df['subscriber'].replace('만','0000',regex=True).astype('int64')
# 변경할 내용이 여러 개 일 경우 두 개의 list 또는 dict 를 사용합니다.
df['view'].replace(['억', '만'],['00000000','0000'], regex=True).head(5)
df['view'].replace({'억':'00000000', '만':'0000'}, regex=True).head(5)
# [1-22] df의 'view' 컬럼에 대해 '억'에 대해서는 삭제, '만'에 대해서는 '0000'로 변경하는 작업을 수행한 뒤,
# astype('int64')를 사용하여 데이터 타입을 정수로 변경하고 처음 5개 데이터를 출력합니다.
df['view'].replace(['억', '만'],['','0000'], regex=True).astype('int64').head(5)
# [1-23] df의 'video' 컬럼의 첫 5개 데이터를 확인합니다.
df['video'].head(5)
# [1-24] df의 'video' 컬럼에서 '개'와 ','을 제거하는 작업을 수행한 뒤, 처음 5개 데이터를 출력합니다.
# 콤마(,)는 의미가 있는 문자이므로 \(역슬래쉬)를 함께 사용합니다.
# 메타문자 : , . + ? * ^ $ [ ] ... 등 , 메타문자의 기능을 없애기 위해 '\,' '\.'
df['video'].replace(['개', '\,'], ['',''], regex=True).head(5)
# [1-25] df의 'video' 컬럼에서 '개', ','을 제거하고, astype('int32')를 사용하여 는 작업을 수행한 뒤, 처음 5개 데이터를 출력합니다.
df['video'].replace(['개', '\,'], ['',''],regex=True).astype('int32').head(5)
|
10. 원본 데이터의 값 별 개수 확인
|
# [1-26] df의 열 중 'category' 컬럼에 대해 값 별 개수를 확인합니다.
df['category'].value_counts()
# [1-27] df의 'category'에 대해 첫글자와 마지막 글자인 '[', ']'을 제거합니다.
# replace를 사용하여 제거할 수 있지만, Accessor 중 str을 사용하여 보도록 합니다.
#df['category'].replace({'\[':'', '\]':''}, regex=True).head() # 첫글자, 마지막 글자가 아니라도 제거함
temp = df['category'].replace({'\[':'', '\]':''}, regex=True)
temp.value_counts()
# [1-28] df의 'category'에 대해 '[', ']'을 제거하고, astype('category') 를 사용하여 category 타입으로 변경합니다.
df['category'].replace(['\[','\]'], '', regex=True).astype('category') #인덱싱을 통해 메모리 용량이 줄어듬
df['category'].str[1:-1].astype('category')
# [1-29] 위의 replace 및 accessor-str을 사용한 작업을 요약해 보겠습니다.
df['subscriber'] = df['subscriber'].replace('만', '0000', regex=True).astype('int64')
df['view'] = df['view'].replace({'억':'', '만':'0000'}, regex=True).astype('int64')
df['video'] = df['video'].replace(['개', '\,'], '', regex=True).astype('int32')
df['category'] = df['category'].str[1:-1].astype('category')
df.info()
# [1-30] 'youtube_v1.xlsx' 엑셀 파일로 저장하기
df.to_excel('youtube_v1.xlsx', index=False)
# 다시 사용하기 위해서는 다운로드/업로드가 필요합니다. - 자동 삭제됨
temp = pd.read_excel('youtube_v1.xlsx', engine='openpyxl')
temp.info()
|
11. datetime, category 변경
|
temp = pd.DataFrame({'날짜_일반': ['2021/01/01', '2021/01/02', '2021/01/03', '2021/01/04', '2021/01/05'],
'날짜_시간': ['2021-01-01 1:12:10', '2021-01-02 1:13:45', '2021-01-03 2:50:10', '2021-01-04 3:12:30', '2021-01-05 5:40:20'],
'날짜_특수': ['21-01-01', '21-01-02', '21-01-03', '21-01-04', '21-01-05'],
'범주': ['금', '토', '일', '월', '화']})
print(temp)
import numpy as np
# Series.astype(np.datetime64) 을 사용하여 '날짜_일반'의 dtype을 변경해 보자
s1 = temp['날짜_일반'].astype(np.datetime64)
print(s1)
# pd.to_datetime(Series, format='형식')을 사용하여 '날짜_특수'의 dtype을 변경해 보자
s4 = pd.to_datetime(temp['날짜_특수'], format='%y-%m-%d')
print(s4)
# Series.astype('category')를 사용하여 '범주'의 dtype을 변경해 보자
s5 = temp['범주'].astype('category')
# 위에서 만들어진 '범주'를 정렬해 보자 (Series.sort_values() 사용)
s5.sort_values()
# pd.Categorical(Series, categories=카테고리목록, ordered=True)를 사용해 요일 순 범주를 만들어 보자
# 요일목록 => ['월', '화', '수', '목', '금', '토', '일']
s6= pd.Categorical(temp['범주'], categories=['월', '화', '수', '목', '금', '토', '일'], ordered=True)
print(s6)
# 위에서 만들어진 '범주'를 정렬해 보자 (Series.sort_values() 사용)
temp['범주'].sort_values()
출처 : 유튜브 강의 https://youtu.be/36RBSIP0t-8
'셀프스터디 > 빅데이터 분석기사' 카테고리의 다른 글
[11.24 수] 빅데이터 분석기사 실기 - Pandas (24~29강) (0) | 2021.11.24 |
---|---|
[11.23 화] 빅데이터 분석기사 실기 - Pandas (21~23강) (0) | 2021.11.23 |
[11.22 월] 빅데이터 분석기사 실기 - Pandas (17~20강) (0) | 2021.11.22 |
[11.21 일] 빅데이터 분석기사 실기 - Pandas (10~16강) (0) | 2021.11.21 |
[11.17 수] 빅데이터 분석기사 실기 - Pandas (6~9강) (0) | 2021.11.17 |