반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 강화학습 기초
- pandas
- 강화학습
- Ros
- 머신러닝
- 앱개발
- ReactNative
- FirebaseV9
- 크롤링
- redux
- kaggle
- Instagrame clone
- TeachagleMachine
- 정치인
- 리액트네이티브
- 딥러닝
- 클론코딩
- coding
- 카트폴
- 전국국밥
- selenium
- 데이터분석
- JavaScript
- clone coding
- expo
- python
- 사이드프로젝트
- 조코딩
- React
- App
Archives
- Today
- Total
qcoding
[데이터분석_정리_1]query() / sort_values() / assign() / groupby() / agg() / merge() / concat() 본문
Python 데이터분석
[데이터분석_정리_1]query() / sort_values() / assign() / groupby() / agg() / merge() / concat()
Qcoding 2022. 6. 21. 23:36반응형
## 데이터 분석 명령어 정리
1) 조건에 맞는 데이터만 추출하기 --> query()
# 숫자일때
df.query( 'english<=80' )
# 문자일때 ""안에 글자 사용
df.query('category == "suv" ')
2) 여러조건 동시 충족 --> query , is in , in
#여러 조건 동시 충족 (and)
df.query( 'nclass == 1 & math >= 50')
#여러 조건 한개만 충족 (or)
df.query( 'nclass ==1 | math >=50' )
df.query( 'nclass in [1,3,5]' )
df.query('manufacturer in ["chevrolet","ford", "honda"]')
# np where 조건 이 여러개 일 때로 아래와 같이 사용할 때
mpg['size']=np.where( (mpg['category'] == 'campact') |
(mpg['category'] == 'subcompact')
,'small','large')
# isin()을 사용하여 아래와 같이 코드를 변경할 수 있음.
mpg['size']=np.where( mpg['category'].isin(['compact','subcompact']) , 'small' , 'large' )
3) 필요한 변수만 추출하기
#한 변수추출
df['math']
#여러 변수 추출
df[['math' , 'english']]
#변수제거
df.drop(colmns = 'math')
df.drop( columns = ['math' , 'english'] )
4) pandas 명령어 조합하기
df.query('math >=50')[['id','math']].head()
5) 순서대로 정렬하기
df.sort_values('math', ascending = False)
6) 여러 변수 기준 정렬
df.sort_values(['nclass','math'], ascending=[True,False])
7) 파생변수 추가하기
# 파생변수
df.assign(
total=df['math'] + df['english']
)
8) assign()에 np.where() 적용하기
df.assign(
test=np.where(df['science']>=60,'pass','fail')
)
9) 추가한 변수를 pandas 코드에 활용 및 lambda
#앞에서 사용한 변수추가 lambda 사용하기
df.assign(
sum_fe=lambda x:x['cty']+x['hwy'],
avg_fe=lambda x:x['sum_fe']/2
).sort_values('avg_fe',ascending=False).head(3)
10) 집단별로 요약하기
--> agg() 와 사용되는 요약통계량 함수
함수 | 통계량 | agg() 사용시 |
mean() | 평균 | mean |
std() | 표준편차 | std |
sum() | 합계 | sum |
median() | 중앙값 | median |
min() | 최소값 | min |
max() | 최대값 | max |
count() | 빈도(개수) | count |
## 소수점 2째 자리서 반올림한다하면 끝에 round(2)를 붙여줌
df.groupby('nclass').agg(
mean_math = ('math','mean')
).round(2)
## groupy by를 쓰면 groupby를 한 변수로 index가 되는데 이를 없애려면
as_index = False 를 사용하면된다.
df.groupby('nclass' , as_index=False)
10) 각집단별로 다시 집단 나누기
df.groupby(['manufacturer','drv']).agg(
mean_cty=('cty','mean')
)
11) 데이터 합치기
## 가로로 합치기
pd.merge(test1, test2, how ='left' , on='id')
## 세로로 합치기
pd.concat([group_a, group_b] , ignore_index = True)
ignore_index = True 시 기존 index를 무시하고 새로 만든다.
* 세로로 합칠 때에는 변수의 이름이 같아야 된다.
같지않을 경우는 rename()을 사용한다.
df.rename(columns = {'기존':'변경이름','기존':'변경이름'},inplace=True)
12) 결측치 제거 --> 이상치를 결측치로 변경 np.where()
#이상치 처리
df['drv']=np.where(df['drv'].isin(['f','4','r']),df['drv'],np.nan)
#이상치 -> 결측치로 이상치 제거 확인
df['drv'].value_counts().sort_index()
13) 이상치제거 - IQR 방식
# 이상치 제거를 위해 qutile() 사용하기 IQR 을 통해 상/하한을 구함
# 1사분위 (0.25)
pct_25=df['cty'].quantile(0.25)
# 3사분위 (0.75)
pct_75=df['cty'].quantile(0.75)
print(f'1사분위 : {pct_25} , 3사분위 :{pct_75}')
#IQR 계산
iqr=pct_75-pct_25
print(f'iqr : {iqr}')
#상/하한 설정
upper=pct_75 + 1.5 * iqr
lower=pct_25 - 1.5 * iqr
print(f'상한 : {upper}, 하한 :{lower}')
#이상치 제거
df['cty']=np.where(
(df['cty'] > 26.5 ) | (df['cty'] < 6.5),
np.nan,
df['cty']
)
#이상치제거확인
sns.boxplot(data=df,y='cty')
14) 이상치를 np.nan()으로 변경 후 --> dropna(subset=[]) 을 통해 np.nan 제거
# 결측치 제거 후 drv별로 cty 평균확인
df.dropna(subset=['drv', 'cty']).groupby('drv').agg(
mean_cty=('cty','mean')
).sort_values('mean_cty',ascending=False)
*** 참고 np.where 입력 시 문자열과 np.nan을 같이 입력 시 실제 nan이 아닌 문자열 'nan'으로 읽히는 문제해결법
1) 결측치로 만들 값이 다른 문자부여
df['x2'].np.where(df['x1']==1 , 'a' , 'etc')
2) replace를 통해 np.nan으로 변경 후, dropna를 통해 제거
df['x2']=df['x2'].replace('etc',np.nan)
df.isna()로 nan 확인함
반응형
'Python 데이터분석' 카테고리의 다른 글
[데이터분석실습]텍스트 마이닝_대통령 연설문 분석 (0) | 2022.06.26 |
---|---|
[데이터분석정리_2] 그래프 그리기 (0) | 2022.06.24 |
[데이터분석실습]mpg 데이터를 통한 분석 (query 사용법 / query 변수 / query in) (0) | 2022.06.19 |
[데이터분석실습] 미국 동북중부_midwest 정보 확인 (np.where / value_counts / sort_index) (0) | 2022.06.19 |
[seaborn] titanic 그래프 그리기 && pydataset 활용 (0) | 2022.06.19 |
Comments