Day08_Python_1‐4 핵심 - bonniekwon0721/Dataanalytics-study GitHub Wiki
17/FEB/2024
01 Getting & Knowing Data
1. 데이터 로드:
- Q1:
pd.read_csv()함수를 사용하여 CSV 파일을 DataFrame으로 로드합니다. - 코드 예:
df = pd.read_csv("경로/파일명.csv")
2. 데이터 확인:
- Q2:
.head()메서드로 데이터의 상위 5개 행을 확인합니다. - 코드 예:
df.head() - Q10:
.tail()메서드로 데이터의 하위 3개 행을 확인합니다. - 코드 예:
df.tail(3)
3. 데이터 로딩 및 확인
- 데이터 로드(Q11): **
pd.read_csv()**를 사용하여 데이터를 로드하고,encoding='euc_kr'옵션을 통해 한글 인코딩 문제를 해결합니다. 이 과정은 한글 데이터를 포함하는 파일을 올바르게 읽어들이기 위해 필요합니다.
4. 데이터 탐색 및 확인
- 데이터 탐색(Q12-Q14): 데이터의 기본적인 구조를 파악하기 위해
.head(),.tail(),.info(),.describe()등의 함수를 사용합니다. 이러한 함수들은 데이터의 상위 및 하위 행을 미리 보고, 각 컬럼의 데이터 타입과 결측치 정보, 수치형 변수의 기초 통계량을 제공하여 데이터에 대한 이해를 돕습니다. - 컬럼 및 데이터 타입 확인(Q13, Q14):
.columns, **.dtypes**를 사용하여 데이터프레임의 컬럼 이름과 각 컬럼의 데이터 타입을 확인합니다. 이는 데이터 처리 및 분석 과정에서 적절한 함수와 방법을 선택하는 데 도움을 줍니다.
5. 데이터 구조 파악:
- Q3:
.shape속성으로 데이터의 행과 열의 개수를 확인합니다. - 코드 예:
print(df.shape) - Q4:
.columns속성으로 모든 열의 이름을 확인합니다. - 코드 예:
df.columns
6. 특정 데이터 접근:
- Q5: 인덱스를 사용해 특정 열의 이름을 얻습니다.
- 코드 예:
df.columns[5] - Q6:
.dtype속성으로 특정 열의 데이터 타입을 확인합니다. - 코드 예:
df.iloc[:,5].dtype - Q7:
.index속성으로 데이터프레임의 인덱스 구조를 확인합니다. - 코드 예:
df.index - Q8: **
.iloc**을 사용해 특정 위치의 데이터 값을 얻습니다. - 코드 예:
df.iloc[2,5]
7. 데이터 선택 및 필터링
- 특정 컬럼 값 선택(Q15-Q19): 데이터프레임에서 특정 컬럼을 선택하고, 그 컬럼의 특정 값이나 조건을 만족하는 데이터를 필터링합니다. 예를 들어,
.loc[], **.iloc[]**을 사용하여 특정 행이나 열을 선택하고, 조건부 필터링을 통해 데이터를 추출합니다.
8. 한글 데이터 처리:
- Q9: 한글이 포함된 파일을 올바른 인코딩(
euc-kr)으로 로드합니다. - 코드 예:
df = pd.read_csv("파일_경로", encoding="euc-kr")
9. 데이터 조작 및 변환
- 조건부 새 컬럼 생성(Q17):
lambda함수나 조건식을 사용하여 특정 조건을 만족하는 새로운 컬럼을 생성합니다. 이는 데이터 분석 시 특정 기준에 따른 새로운 정보를 도출하기 위해 필요합니다. - 데이터 변환 및 결측치 처리(Q18, Q19): 데이터의 변환(예: 문자열에서 숫자로의 변환)이나 결측치 처리(예: 특정 값으로의 대체)를 수행합니다. 이 과정은 분석을 위해 데이터를 정제하고 준비하는 데 중요한 단계입니다.
02 Filtering & Sorting
1. 데이터 필터링:
- Q20: 데이터 로드.
pd.read_csv()함수로 특정한 데이터 세트를 로드합니다.- 코드 예:
df = pd.read_csv(download_URL, encoding = 'euc_kr')
- 코드 예:
- Q21 & Q22: 조건에 따른 데이터 필터링. **
.loc**와 조건을 사용해 특정 조건을 만족하는 데이터를 필터링하고, **.reset_index()**로 인덱스를 재설정합니다.- 코드 예:
df.loc[df['quantity']==3].head().reset_index(drop=True)
- 코드 예:
- Q23: 특정 컬럼 선택. **
['column1', 'column2'](/bonniekwon0721/Dataanalytics-study/wiki/'column1',-'column2')**를 사용하여 특정 컬럼만을 포함하는 새로운 데이터프레임을 정의합니다.- 코드 예:
df['quantity', 'item_price'](/bonniekwon0721/Dataanalytics-study/wiki/'quantity',-'item_price')
- 코드 예:
- Q24 & Q25: 문자열 처리 및 조건부 필터링. 문자열 메서드와 조건을 활용해 데이터를 필터링하고 새로운 컬럼에 저장합니다.
- 코드 예:
df['new_price'] = df['item_price'].str[1:].astype('float')
- 코드 예:
2. 데이터 정렬:
- Q28: 데이터 정렬 및 인덱스 재설정.
.sort_values()메서드로 데이터를 특정 컬럼 기준으로 정렬하고, **.reset_index()**로 인덱스를 초기화합니다.- 코드 예:
df.sort_values('new_price').reset_index(drop=True)
- 코드 예:
3. 특정 조건에 따른 데이터 변환:
- Q36: 조건에 따른 값 변경. **
.loc**를 사용하여 특정 조건을 만족하는 데이터의 컬럼 값을 변경합니다.- 코드 예:
df.loc[df.item_name == 'Izze', 'item_name'] = 'Fizzy Lizzy'
- 코드 예:
- Q38: 결측치 대체. **
.loc**와 **.isnull()**을 활용해 결측치를 가진 데이터를 특정 값으로 대체합니다.- 코드 예:
df.loc[df.choice_description.isnull(), 'choice_description'] = 'NoData'
- 코드 예:
03 Grouping
1. 데이터 그룹화 및 집계:
- Q44: 데이터 로드 및 상위 5개 컬럼 출력. 데이터를 로드하고,
.head()메소드를 사용하여 상위 5개 행을 출력합니다. - Q45 & Q46:
host_name별로 데이터를 그룹화하고,.value_counts(),.groupby().size(),.sort_index(),.sort_values()등을 사용하여 그룹별 빈도수를 계산하고 정렬합니다. 이는 데이터셋 내에서 각 호스트가 가진 숙소의 수를 파악하는 데 사용됩니다. - Q49: **
groupby**를 사용하여 **neighbourhood_group**에 따른 **price**의 평균, 분산, 최대값, 최솟값을 계산합니다. 이는 각 지역 그룹별 숙박 비용의 분포를 이해하는 데 도움을 줍니다.- 코드 예:
df.groupby('neighbourhood_group')['price'].agg(['mean', 'var', 'max', 'min'])
- 코드 예:
- Q55: **
neighbourhood_group**에 따른 **room_type**의 분포를 계산하고, 각 그룹 내에서 **room_type**의 비율을 계산합니다. 이는 지역 그룹별로 제공되는 숙소 유형의 분포를 파악하는 데 사용됩니다.- 코드 예:
df['neighbourhood_group', 'room_type'](/bonniekwon0721/Dataanalytics-study/wiki/'neighbourhood_group',-'room_type').groupby(['neighbourhood_group', 'room_type']).size().unstack()
- 코드 예:
2. 조건부 로직 적용:
- Q56 & Q57:
Income_Category값을 새로운 카테고리 값으로 매핑합니다.map함수나apply메소드를 사용하여 각 소득 구간을 새로운 레이블로 변환합니다. 이는 데이터 내의 범주형 변수를 다루고, 새로운 의미를 부여하는 데 유용합니다. - Q59:
Customer_Age값을 사용하여 나이 구간을 정의하고,map함수를 사용하여 각 연령대를 계산합니다. 그 후, **.value_counts()**를 사용하여 각 연령대별 빈도수를 출력합니다. 이는 연령대별 고객 분포를 파악하는 데 도움을 줍니다.
04 Apply, Map
1. apply 메소드 사용:
- Q58: **
Income_Category**의 카테고리를 변경하여newIncome컬럼에 매핑합니다.apply함수를 사용하여 주어진 함수를 데이터프레임의 열에 적용합니다.- 예:
df['newIncome'] = df['Income_Category'].apply(changeCategory)
- 예:
- Q62: 결혼 상태(
Marital_Status)와 카드 카테고리(Card_Category)를 기준으로 새로운 상태(newState)를 정의합니다.apply메소드를 사용하여 여러 조건을 만족하는 경우 1, 그렇지 않으면 0을 반환하는 함수를 행 단위로 적용합니다.- 예:
df['newState'] = df.apply(check, axis=1)
- 예:
2. map 메소드 사용:
- Q57: **
Income_Category**의 값을 새로운 값으로 매핑하여newIncome컬럼에 저장합니다.map함수를 사용하여 사전에 정의된 매핑을 적용합니다.- 예:
df['newIncome'] = df['Income_Category'].map(lambda x: dic[x])
- 예:
- Q59: **
Customer_Age**를 사용하여 나이 구간을AgeState컬럼으로 정의합니다.map메소드를 사용하여 나이를 10년 단위로 구분하여 새로운 컬럼에 저장합니다.- 예:
df['AgeState'] = df['Customer_Age'].map(lambda x: x//10 * 10)
- 예:
3. 조건부 로직 적용:
- Q60 & Q61: 특정 조건을 만족하는 경우 1, 그렇지 않으면 0을 반환하는 새로운 컬럼(
newEduLevel,newLimit)을 생성합니다.map또는lambda함수를 사용하여 간단한 조건부 로직을 적용합니다.- 예:
df['newEduLevel'] = df['Education_Level'].map(lambda x: 1 if 'Graduate' in x else 0)
- 예:
05 Time_Series
1. 데이터 로딩 및 타입 변환
- 데이터 로딩 및 초기 탐색(Q64): **
pd.read_csv()**와 **df.info()**를 사용하여 데이터를 로드하고 각 열의 데이터 타입을 확인합니다. - Datetime 타입 변환(Q65): **
pd.to_datetime()**을 사용하여 "Yr_Mo_Dy" 열을 datetime64 타입으로 변환합니다. 이는 시계열 데이터를 효과적으로 다루기 위한 필수 변환 작업입니다.
2. 데이터 전처리
- 잘못된 년도 데이터 수정(Q67): 사용자 정의 함수 **
fix_century**를 통해 2061년 이상의 잘못된 년도 데이터를 수정합니다. - 결측치 처리(Q72): **
.fillna(method='ffill').fillna(method='bfill')**을 사용하여 모든 결측치를 컬럼 기준 직전의 값으로 대체한 후, 필요한 경우 뒤의 값으로 대체합니다.
3. 데이터 파악 및 분석
- 년도별 평균값 계산(Q68): **
.groupby().mean()**을 사용하여 년도별 각 컬럼의 평균값을 계산합니다. - 월별 평균값 계산(Q71): 각 달의 평균값을 계산하여 시계열 데이터의 월별 경향성을 파악합니다.
- 년도-월 기준 평균 및 최대값 계산(Q73, Q74): 년도-월을 기준으로 모든 컬럼의 평균값과 최대값을 계산합니다.
4. 요일 및 시간 분석
- 요일 정보 추출 및 분석(Q69, Q70, Q78): **
.dt.weekday**와 **.dt.day_name()**을 사용하여 요일 정보를 추출하고, 주말과 평일을 구분하는 "WeekCheck" 컬럼을 생성합니다. 이를 통해 요일별 데이터 분석을 수행합니다. - 시간대별 데이터 분석(Q80): **
.groupby(df['(년-월-일:시)'].dt.hour).mean()**을 사용하여 오전 10시와 오후 10시(22시)의 PM10의 평균값을 계산합니다.
5. 이동평균 및 시계열 데이터 인덱싱
- 이동평균 계산(Q75): **
.rolling(7).mean()**을 사용하여 "RPT"와 "VAL" 컬럼의 7일 이동평균을 계산합니다. 이는 데이터의 단기적 변동성을 줄이고, 장기적인 경향을 파악하기 위한 기법입니다. - 시계열 데이터 인덱싱(Q81): **
.set_index('(년-월-일:시)', inplace=True)**을 사용하여 날짜 컬럼을 DataFrame의 인덱스로 설정합니다. 이는 시계열 데이터를 더 효과적으로 다루기 위한 기본적인 작업입니다.
Studied from 제로베이스 데이터 분석 스쿨