본문 바로가기

Python/▶ Python & Pandas

6주차 Seaborn

728x90

📝 실습코드 다시 쳐보면서 막혔거나 기억해야할 것 위주로 📝

 

💡모든 함수의 모든 기능과 아규먼트를 외울 수 없으니 문서 보는것(Shift + Tab)을 습관화하자 📝

1. 데이터 타입의 변경

 

'분양가격'  컬럼( 결측치 섞여있음 ) 

object => int or float

# 결측치가 섞여있으면 변환이 제대로 이루어지지 않음.

pd.to_numeric(df_last['분양가격'], errors = 'coerce' )

numeric의 docstring을 보니

errors  = coerce를 입력해주게 되면 유효하지 않은 문장분석은 전부 NaN(결측값)으로 전환

 

 

+

# df_last['분양가격'].replace('  ', np.nan).astype(float) 
#' ' 비어있는 값 있어서 숫자로 바꿔주지 못함

이 방법도 말씀해주셨는데  replace 부분에서 np.nan으로 해주는 이유를 잘 모르겠다.

 

df_last['분양가격'] = pd.to_numeric(df_last['분양가격'], errors = 'coerce' )
df_last['분양가격']

df_last['분양가격']에 나온 값 할당 해주기 . 하지 않으면 다시 리셋된 값(object) 나옴

 

 

2. Replace ❗❗❗

replace와 str.replace의 차이

# replace => 데이터프레임에만 사용가능
 (regex=True 를 지정하지 않으면 완전히 일치하는 데이터에 대해서면 변경)
# str.replace => 시리즈에만 사용가능
 (일부만 일치해도 변경)

❗ 메서드명이 같더라도 python string 의 메서드인지, pandas 의 데이터프레임의 메서드인지 등에 따라 다르게 동작

 

+unique

# 데이터를 수집할 때 텍스트가 많이 들어가게 되면 용량 그만큼 증가
# 공개되는 대용량 데이터 보면 텍스트데이터가 코드로 되어있는 경우가 많음.
# 데이터의 용량이 크면 로드도 오래걸리지만 전처리나 연산에서의 속도도 오래걸림.
# 관리,속도 이슈로 보통은 수치형태의 코드값으로 관리
# 규모구분의 unique 값 보기

df_last['규모구분'].unique()

코드를 텍스트 대신 수치로 하는 이유 ❗

✅데이터 전처리의 효율성 

✅연산에서의 속도

✅관리 및 유지보수 용이

=> 코드를 수치형태 값으로 관리

 

 

3. Pariplot

  •  pairplot => 여러개의 수치형 변수를 짝 지어 표현하기에 적합
  •  seaborn 서브플롯에서는 figure가 동작 X
# pairplot
# height =2.5, aspect = 1 로 상대값 지정해서 조정
# corner=True 하는 이유 :대각선으로 마주보는 값은 같은 값이기 때문에 대각선 위 제외하고 볼 수 있음
# hue : 데이터프레임내 컬럼명으로 지정. 플롯의 측면을 다른 색상으로 매핑하기 위함.
sns.pairplot(df_last, hue ='지역명',height=2.5, aspect=1)

출처 : 멋쟁이사자처럼 AI SCHOOL 박조은 강사님

 

 

4. 모든 컬럼이 출력되게 설정

  • pd.options.display.max_columns
pd.options.display.max_columns = None

# 컬럼이나 행이 너무 많은데 None으로 설정하면 display 하는데 시간 오래걸림
# 너무 큰 데이터에 이 기능 사용하면 노트북이 느려질 수 있기 때문에 주의 !

 

 

5. '연도', '월' 파생변수 생성

  • string Accessor
# string Accessor
df_first_melt['연도'] = df_first_melt['기간'].str.split('년',expand=True)[0].astype(int)
df_first_melt['월'] = df_first_melt['기간'].str.split('년',expand=True)[1].str.replace('월','').astype(int)
df_first_melt.head(2)

#expand = True => 분할된 문자열을 데이터프레임의 열(컬럼)로 확장

 

6. melt로 Tidy data 만들기

  • ✅  Tidy data: 깔끔한 데이터 (정리가 잘 되어 있는 것과는 다름❗ )
  • ✅                   깔끔하지 않은 데이터 (한 열에 하나의 변수 있는 게 아니라 다양한 열에 하나의 변수가 분포되어있음)
  • ✅ pd.melt() 열에 있던 데이터를 행으로 녹여내린다

출처 : Reshaping and pivot tables — pandas 1.5.3 documentation (pydata.org)

# pd.melt 를 사용하며, 녹인 데이터는 df_first_melt 변수에 담습니다. 
df_first_melt = pd.melt(df_first, id_vars='지역') #id_vars = 기준이 되는 컬럼
df_first_melt

 

7. df.groupby 와  pd.pivot_table

groupby : pivot_table은 groupby를 사용하기 쉽게 한 번 더 추상화 해놓은 함수

1. 기본적인 연산,평균, 분산, 표준편차, 최댓값, 최솟값, 중앙값 등의 값을 연산

=> groupby를 쓰든 pivot_table을 쓰든 상관 X 

2. 속도 : groupby > pivot_table

반환값 : pivot_table =>  데이터프레임

반환값 : groupby는 컬럼이 series 형태라면 series 로 반환

3. pivot 은 데이터의 형태를 바꿀 때 사용

pivot : 연산 X

pivot_table :연산 O

 

지역별 평당분양가격

# df.groupby(["인덱스로 사용할 컬럼명"])["계산할 컬럼 값"].연산()
df.groupby(['지역명'])['평당분양가격'].mean().sort_values().plot(kind='bar',rot=0)

지역, 연도별 평당분양가격

# 연도별, 지역별로 평당분양가격의 평균을 구합니다.
yprice = df.groupby(['연도','지역명'])['평당분양가격'].mean().unstack()
yprice.iloc[:5,:5]

출처 : Reshaping and pivot tables — pandas 1.5.3 documentation (pydata.org)

melt의 반대개념인듯

 

 

 pivot_table

 

지역별 평당분양가격

# region_price = pd.pivot_table(data = df, index='지역명', values='평당분양가격')

region_price = df.pivot_table(index='지역명',values = '평당분양가격')
region_price

 

지역,연도별 평당분양가격

# 연도를 인덱스로, 지역명을 컬럼으로 평당분양가격을 피봇테이블로 그려봅니다.
# yrprice = pd.pivot_table(data='df', index='연도', columns='지역명', values='평당분양가격')
yrprice = df.pivot_table(index='연도', columns='지역명', values='평당분양가격')
yrprice

 

8. sns(seaborn) Heatmap

# 바뀐 행과 열을 히트맵으로 표현해 봅니다.
plt.figure(figsize=(12, 6))
sns.heatmap(yrprice.T, cmap="Blues", annot=True, fmt=",.0f")
#fmt => format 을 의미합니다.
# .0f 는 float을 소숫점 0번째 자리까지 표기한다는 의미입니다.
# , 는 천단위로 , 로 구분해서 표기해 달라는 의미입니다.
# ,.0f 는 천단위로 ,를 찍고 소숫점 0번째 자리까지 표기해 달라는 의미입니다.

 

❗ replace와 str.replace

# replace => 데이터프레임에만 사용가능
 (regex=True 를 지정하지 않으면 완전히 일치하는 데이터에 대해서면 변경)
# str.replace => 시리즈에만 사용가능
 (일부만 일치해도 변경)

❗ groupby 와 pivot_table

groupby : pivot_table은 groupby를 사용하기 쉽게 한 번 더 추상화 해놓은 함수

1. 기본적인 연산,평균, 분산, 표준편차, 최댓값, 최솟값, 중앙값 등의 값을 연산

=> groupby를 쓰든 pivot_table을 쓰든 상관 X 

2. 속도 : groupby > pivot_table

반환값 : pivot_table =>  데이터프레임

반환값 : groupby는 컬럼이 series 형태라면 series 로 반환

3. pivot 은 데이터의 형태를 바꿀 때 사용

pivot : 연산 X

pivot_table :연산 O
pivot_table의 aggfunc 의 기본값은 평균(mean)

❗ Tidy data

변수가 열이 되고 행이 관측치가 되는 데이터

728x90

'Python > ▶ Python & Pandas' 카테고리의 다른 글

6주차 Burger 지수  (0) 2023.02.09
6주차 시각화(KOSIS의 산업별 통계)  (0) 2023.02.07
5주차 plotly  (1) 2023.02.05
5주차 TIL ( Pandas : 시각화 )  (0) 2023.01.31
4주차 WIL  (1) 2023.01.19