import pandas as pd
#pandas 라이브러리를 pd라는 이름으로 불러와요.
#pandas는 데이터를 분석하고 조작하는 데 사용되는 강력한 라이브러리에요.
train = pd.read_csv("kaggle/train/train.csv")
#pd.read_csv() 함수는 CSV 파일을 읽어와서 데이터 프레임으로 변환해요.
#CSV는 "Comma-Separated Values"의 약자로, 데이터 값을 쉼표(,)로 구분하여 저장하는 파일 형식이에요. 이 파일 형식은 일반적으로 스프레드시트나 데이터베이스와 같은 테이블 형식의 데이터를 저장하고 교환하는 데 사용되요.
#"kaggle/train/train.csv"는 읽어올 CSV 파일의 경로에요. 이 경로에서 CSV 파일을 읽어와 train이라는 데이터 프레임에 저장해요.
train.head()
#train.head() 함수는 데이터 프레임의 처음 5개 행을 출력해요.
# Age_Group 열 추가
train['Age_Group'] = train['Age'].apply(lambda x: 'Young' if x <= 30 else ('Middle-Aged' if x <= 50 else 'Senior'))
#train['Age']는 'Age' 열의 모든 값을 가져와요.
#train'은 데이터 프레임 객체
#데이터 확인
#train.head(): 데이터 프레임의 첫 몇 행을 확인해요.
#train.tail(): 데이터 프레임의 마지막 몇 행을 확인해요.
#train.info(): 데이터 프레임의 전체적인 정보를 확인해요. 열의 이름, 데이터 타입, 결측값 개수 등을 보여줘요.
#train.describe(): 숫자형 데이터의 기초 통계량(평균, 표준편차, 최소값, 최대값 등)을 확인해요.
#데이터 선택
#train['ColumnName']: 특정 열을 선택해요. 예를 들어, train['Age']는 'Age' 열의 데이터를 가져와요.
#train[['Column1', 'Column2']]: 여러 열을 선택해요. 예를 들어, train[['Age', 'Fare']]는 'Age'와 'Fare' 열의 데이터를 가져와요.
#train.iloc[row_index]: 특정 행을 선택해요. 예를 들어, train.iloc[0]는 첫 번째 행의 데이터를 가져와요.
#train.loc[row_index, 'ColumnName']: 특정 행과 열을 선택해요. 예를 들어, train.loc[0, 'Age']는 첫 번째 행의 'Age' 값을 가져와요.
#데이터 필터링
#조건을 사용해 데이터를 필터링 train[train['Age'] > 30]는 'Age'가 30보다 큰 행을 모두 가져와요.
#데이터 변형 :새로운 열을 추가하거나 기존 열을 변경할 수 있어요.
#train['NewColumn'] = value: 새로운 열을 추가해. 예를 들어, train['Age_Group'] = train['Age'].apply(lambda x: 'Young' if x <= 30 else 'Old')는 'Age_Group'이라는 새로운 열을 추가해요.
#apply 함수는 각 값을 순서대로 처리하는 데 사용해요.
#lambda x: 'Young' if x <= 30 else ('Middle-Aged' if x <= 50 else 'Senior')는 익명 함수로, 각 나이 값에 대해 다음과 같이 분류해요:
#나이가 30 이하이면 'Young'
#나이가 31에서 50 사이이면 'Middle-Aged'
#나이가 51 이상이면 'Senior'
#결과적으로 새로운 열 'Age_Group'이 추가돼요.
# 데이터 프레임 출력하기
train.head()
train.groupby('Gender')['Annual_Premium'].mean()
#train.groupby('Gender'): groupby 메서드는 데이터 프레임을 특정 열(Gender)을 기준으로 그룹화해. 이 경우, 'Gender' 열의 값에 따라 데이터가 그룹으로 나뉘어져요.
#['Annual_Premium']: 그룹화된 데이터 프레임에서 'Annual_Premium' 열을 선택해. 이 단계에서는 'Annual_Premium' 열의 값만 사용하게 되요.
#.mean(): 각 그룹별로 'Annual_Premium' 열의 평균 값을 계산해요. 결과는 각 'Gender' 값에 대한 'Annual_Premium'의 평균 값을 포함하는 시리즈(Series) 형태로 반환되요.
#groupby 메서드를 사용하면 데이터 프레임을 지정한 열(가로)을 기준으로 그룹화할 수 있어요. 여기서는 'Gender' 열(가로)을 기준으로 그룹화했어요.
#['Annual_Premium']로 특정 열을 선택하고, mean() 메서드를 사용하여 각 그룹의 평균 값을 계산했어요.
#결과는 각 그룹('Male', 'Female')에 대한 'Annual_Premium' 열의 평균 값을 보여줘요.
train.loc[(train['Gender'] == 'Male') & (train['Previously_Insured'] == 0) & (train['Vehicle_Age'] == '< 1 Year'), :].reset_index(drop=True)
#loc는 조건에 맞는 행들을 선택하고, 모든 열을 선택(:)해요.
#여기서 loc은 조건을 만족하는 행들만을 포함하는 새로운 데이터 프레임을 반환해요.
#train['Gender'] == 'Male': 'Gender' 열의 값이 'Male'인 행들을 선택해요.
#train['Previously_Insured'] == 0: 'Previously_Insured' 열의 값이 0인 행들을 선택해요.
#train['Vehicle_Age'] == '< 1 Year': 'Vehicle_Age' 열의 값이 '< 1 Year'인 행들을 선택해요.
#& and
#drop=True는 기존 인덱스를 버리고 새로운 인덱스를 생성하는 옵션이에요.
train.loc[train['Policy_Sales_Channel'].isin([7.0, 152.0]), :].reset_index(drop=True)
#train['Policy_Sales_Channel'].isin([7.0, 152.0])
#train['Policy_Sales_Channel']: 'Policy_Sales_Channel' 열의 모든 값을 선택해요.
#.isin([7.0, 152.0]): 'Policy_Sales_Channel' 열의 값이 7.0 또는 152.0인 행들을 선택해요.
#train.loc[train['Policy_Sales_Channel'].isin([7.0, 152.0]), :]
#loc는 조건에 맞는 행들을 선택 / :는 모든 열을 선택하라는 의미. 즉, 행 조건에 맞는 모든 열을 선택
#여기서 loc은 조건을 만족하는 행들만을 포함하는 새로운 데이터 프레임을 반환해요.
# 계층 샘플링 수행
#train.groupby('Response')로 'Response' 값을 기준으로 그룹화해요.
#apply(lambda x: x.sample(frac=0.001))로 각 그룹에서 0.1%의 데이터를 무작위로 샘플링해요.
#.reset_index(drop=True)로 인덱스를 재설정해요.
stratified_sample = train.groupby('Response').apply(
lambda x: x.sample(frac=0.001)
)
# 샘플링된 데이터 저장
#stratified_sample 데이터 프레임을 "kaggle_test.csv" 파일로 저장해요.
#index=False는 인덱스를 파일에 포함하지 않도록 설정해요.
stratified_sample.to_csv("kaggle_test.csv", index=False)
print(stratified_sample)
#train 데이터 프레임에서 각 그룹(Response 값)에 대해 계층 샘플링을 수행한 후, 샘플링된 데이터를 CSV 파일로 저장하는 작업을 수행
2024.07.05 / Pandas - 기본 문법, 시각화 / 문제 분석 (5) (2) | 2024.07.05 |
---|---|
2024.07.04 / Pandas - 시각화 / 문제 분석 (4) (0) | 2024.07.04 |
2024.07.03 / Pandas - apply, lambda / 문제 분석 (2) (0) | 2024.07.03 |
2024.07.02 / Pandas / 문제 분석 (1) (1) | 2024.07.02 |
[K-Digital Training] 한국경제신문 with toss bank 4일차 (2) | 2024.06.27 |