본문 바로가기

Python59

[Feature Selection] BorutaPy & SHAP BorutaPy의 주요 특징랜덤 포레스트 기반 부트 스트랩 표본 사용 : 원래 데이터셋에서 무작위로 샘플링하여 모델을 여러번 학습하고 평균 중요도를 계산변수 중요도 평가 : 특정 특성의 중요도와 랜덤하게 생성된 그룹의 중요도를 평가변수 선택 : 모델에 가장 적합한 특성 세트를 찾을 수 있음 사용 과정1. 데이터 준비, 특성과 타겟 변수를 정의 : 실제 특성과 쉐도우 특성 생성📍 쉐도우 특성(shadow feature)이란?- 원본 데이터셋의 특성과 비슷한 특성을 생성하는 것👉 데이터의 무작위성을 유지하기 위해 원본 특성들과 동일한 분포를 가지도록 생성됨👉 원본 특성과 동일한 수의 특성이지만, 실제 데이터와는 무관하게 무작위로 생성됨- 만약 원본 특성이 예측에 중요하다면, boruta 알고리즘은 쉐도.. 2024. 5. 26.
01. 데이터 확인하기(행과 열, 변수 자료형) 🧐 잘 모르는 분야의 데이터를 처음 받아들었다면? 👉 데이터에 얼마나 익숙한지와 무관하게 일정한 루틴에 따라 데이터를 이해하는 것이 중요하다 데이터의 행이 어떻게 고유하게 식별되는가? (분석단위가 무엇인가?) 데이터셋의 행과 열은 몇 개인가 주요 범주형 변수(categorical variable)는 무엇이고 값의 빈도는 어떠한가? 중요한 연속변수(continuous variable)가 어떻게 분포하는가? 변수들은 서로 어떻게 연관되는가? 이상치와 누락값은 어떻게 분포하는가? 데이터 불러오고 확인하기 # 인덱스 설정(행의 고유값) df.set_index('personid', inplace = True) df.head() # 행과 열 크기 확인 df.shape # 인덱스 고유값 개수 확인 df.index.n.. 2023. 12. 15.
[pandas] 기상 데이터(시계열) 결측치 선형 보간 시계열 데이터의 결측치 처리 단순히 평균/중앙값/최빈값으로 결측치 처리하는 것은 바람직하지 않음 시계열 데이터의 비정상성 때문에 시간의 흐름에 따라 평균과 분산이 변하므로 시계열 imputation은 다르게 해야함 👉 imputation : 불완전한 데이터를 표준이나 대표성이 있는 다른 데이터를 활용하여 대체하는 과정 ▶︎ 시계열 결측치 처리 방법 (1) Last observation carried forward(LOCF) : 직전 관측치 값으로 결측치를 대체 Next observation carried backward(NOCB) : 직후 관측치 값으로 결측치를 대체 Moving Average / Median : 직전 N의 time window의 평균치 / 중앙값으로 결측치를 대체 모델링(결측치를 맞추는.. 2023. 11. 16.
[Spark] Spark에서 사용자 정의 함수를 적용 & When 사용 👉 Spark에서 사용자 정의 함수를 작성하고 적용하기 (파이썬에서의 함수 정의 및 적용과 비슷한 듯 다른 부분이 있음) 👉  SQL의 case when 과 유사한 When 을 사용해서 함수와 유사한 결과를 만들기 👉 SQL의 case when 문을 그대로 적용해보기 1. 파이썬 함수 작성하기 먼저 일반 python용 함수를 작성한다. 이때, 반드시 입력 값과 반환 값을 설정 & 값이 None일 경우 처리 방식도 설정 # 일반 python용 UDF를 작성 def get_category(age): cat = '' # age 값이 None일 경우는 NA를 Return if age == None: return 'NA' if age 2023. 10. 25.
[Spark] 레코드와 컬럼 삭제 / 결측치 확인 및 처리 단일 칼럼 삭제 drop() 메서드 인자로 단일 칼럼명 문자열, 또는 칼럼명 칼럼형을 입력 drop 할 컬럼이 원본 데이터프레임에 존재하지 않아도 오류가 발생하지 않음! 유의! # 단일 컬럼 삭제 titanic_sdf_copied = titanic_sdf_copied.drop('Name') titanic_sdf_copied = titanic_sdf_copied.drop(col('Sex')) 여러 개 칼럼 삭제 pandas와 달리, list가 아니라 단일 칼럼명들을 각각 인자로 넣어줘야 한다. 이때, 컬럼형 인자가 아닌 문자형 칼럼명으로 인자 넣어주기 >> 칼럼형 인자 나열은 오류남 titanic_sdf_copied.drop('Age', 'SibSp').limit(10).show() 또는 아래와 같이 삭제.. 2023. 10. 25.
[Spark] 컬럼 생성/업데이트를 위한 withColumn() , substring(), split() spark DataFrame의 신규 컬럼 추가 withColumn() 은 일종의 업데이트/추가 기능이라고 생각하면 된다. 구현할 때 입력값의 형식을 어떻게 해야하는지 유의하여 코드를 작성한다. withColumn('신규/update 되는 컬럼명', '신규/Update 되는 값') >> 신규 컬럼은 문자열로, 기존 컬럼은 반드시 컬럼형으로 기입(col('컬럼명')) (예시) titanic_sdf_copied = titanic_sdf_copied.withColumn('Extra_Fare', col('Fare') * 10) # 기존 컬럼 값 update titanic_sdf_copied = titanic_sdf_copied.withColumn('Fare', col('Fare') + 20) # 컬럼 타입 변경 .. 2023. 10. 24.
[Spark] spark DataFrame의 orderBy( )와 aggregation OrderBy( ) 정렬 컬럼은 문자열, 또는 컬럼 형태로 입력 정렬 컬럼이 여러개라면 개별 컬럼을 넣거나, list로 넣어도 됨 정렬 컬럼별로 서로 다른 정렬 옵션을 적용할 때는 ascending=[True, False]와 같은 형태로 입력 아래 예시를 보려면 display() 안에 넣어주기! # Pclass와 Name 컬럼으로 내림차순 정렬 titanic_pdf.sort_values(by=['Pclass', 'Name'], ascending=False) # Pclass는 오름차순, Name은 내림차순 정렬 titanic_pdf.sort_values(by=['Pclass', 'Name'], ascending=[True, False]) from pyspark.sql.functions import col .. 2023. 10. 24.
[Spark] select() 와 filter() 메서드 데이터 프레임 생성하기 spark.createDataFrame() dict_01 = {'Name': ['Chulmin', 'Wansoo','Myunghyun','Hyunjoo', 'Chulman'], 'Year': [2011, 2016, 2015, 2015, 2011], 'Gender': ['Male', 'Male', 'Male', 'Female', 'Male'] } # 딕셔너리를 DataFrame으로 변환 data_pdf = pd.DataFrame(dict_01) # pandas DataFrame은 spark DataFrame으로 변환 data_sdf = spark.createDataFrame(data_pdf) 특정 컬럼 선택(select)하기 select() 로 하나 이상의 컬럼을 인자로 넣으면 데이.. 2023. 10. 24.
[Spark] databrick으로 데이터 로드하고, 기술통계량 확인하기 데이터 업로드하기 메인화면 > Data > Create Table Notebook에서 데이터 확인하기 위 이미지의 형광펜이 데이터 경로이다 spark.read.csv(경로.csv) 를 입력하여 데이터를 불러온다. 참고로, /FileStore는 DBFS 파일 시스템으로 Spark외에는 접근 불가하다. titanic_sdf = spark.read.csv('/FileStore/tables/titanic_train-1.csv', header=True, inferSchema=True) print('titanic sdf type:', type(titanic_sdf)) # databrick에서 데이터를 formatting 된 형식으로 확인하기 display(titanic_sdf) 데이터 형식이 pyspark의 dat.. 2023. 10. 23.
728x90