Today I Learned (TIL)/Python

[TIL] Python 베이직 - 6회차

신짜린 2024. 8. 6. 13:13

1. 기초 통계 분석

- describe

수치형 데이터 범주형 데이터
count 데이터 개수 count 데이터 개수
mean 평균 unique 고유 데이터 값 개수
std 표준편차 top 가장 많이 출현한 데이터 수
min 최솟값 freq 가장 많이 출현한 데이터 빈도
max 최대값    

 

- info

 각 컬럼변 데이터 타입 및 결측치 확인

df.info()

 

- 상관관계 분석

 변수간 선형 상관관계의 강도를 -1 ~ 1 사이의 값으로 계산해서 측정한다.

df_num.corr()
# 'pearson' (기본값): 표준 피어슨 상관 계수를 계산
# 선형관계(이상치가 적고 정규분포에 가까울때)가 있을때 유용
-----------------------------------------------------------------------------------------------
df_num.corr(method = 'kendall')
# 켄달 타우 계수를 계산
# 데이터셋의 크기가 작고 이상치가 많을때 사용
-----------------------------------------------------------------------------------------------
df_num.corr(method='spearman')
# 스피어만 순위 상관 계수를 계산
# 데이터셋의 크기가 작고 이상치가 많을때 사용
# 상관관계 시각화
sns.heatmap(df_num.corr(), 
               annot = True,      # 실제 값 화면에 나타내기
               cmap = 'RdYlBu_r',  # Red, Yellow, Blue 색상으로 표시
               vmin = -1, vmax = 1, #컬러차트 -1 ~ 1 범위로 표시
              )
-----------------------------------------------------------------------------------------------
# clustermap은 heatmap의 한단계 진화버전
# 데이터의 유사성 기반으로 행과 열 재비열해서 비슷한 특성의 변수끼리 서로 가깝게 배치
sns.clustermap(df_num.corr(), 
               annot = True,      # 실제 값 화면에 나타내기
               cmap = 'RdYlBu_r',  # Red, Yellow, Blue 색상으로 표시
               vmin = -1, vmax = 1, #컬러차트 -1 ~ 1 범위로 표시
              )

 

2. DataFrame 복사

 데이터 프레임을 카피하는 이유는 원본 데이터를 보존하면서 복사된 데이터에 대한 변경이 원본 데이터에 영향을 주지 않도록 하기 위함이다.

df_copy = df.copy()
# 원본과 카피본의 주소를 입력하면 다른 주소 값이 나오는 것을 알 수 있음
id(df), id(df_copy)

 

3. 결측치 처리하기

- 결측치 확인

df.isnull()
# True, False 값으로 반환
-----------------------------------------------------------------------------------------------
df.isnull().sum()

 

- bar plot으로 시각화

!pip install missingno
import missingno as msno
msno.bar(df)

 

- 결측치 삭제

# 결측치가 포함된 행 제거
df.dropna(axis = 0)
-----------------------------------------------------------------------------------------------
# 결측치가 포함된  열제거
df.dropna(axis = 1)

 

- 결측치 채우기

# 평균
mean = df1['age'].mean()
-----------------------------------------------------------------------------------------------
# 중간값
median = df1['age'].median()

 

4. Group by

- 기초 문법

# 평균(mean)
df_int = df[['total_bill', 'tip', 'size','day']]
df_int.groupby('day').mean()
-----------------------------------------------------------------------------------------------
# 분산(var)
df_int = df[['total_bill', 'tip', 'size','day']]
df_int.groupby('day').var()

 

- 다중 통계량

# 다중 통계량 구할때 agg 안에 list로 넣는다
df_int.groupby('day').agg(['mean', 'var'])
-----------------------------------------------------------------------------------------------
# 각기 다른 통계량을 구하고 싶을때 딕셔너리 형태로
df_int.groupby('day').agg({'total_bill': 'mean', 
                       'tip': ['sum', 'var'],
                       'size': 'median'
                      })

 

5. 기타

챗GPT 파이썬으로 사용하기(?)

!pip install openai
import openai
import pandas as pd

** 긍정 부정 분류 필요한 파일 read하기**

API_KEY = '본인 API 키 입력하기'
client = openai.OpenAI(api_key = API_KEY)

def make_review_pn(review):
    prompt = f'''
    아래 리뷰 읽고 긍정인지 부정인지 판단해서 긍정 또는 부정 만 말해줘
    리뷰: {review}
    '''
    response = client.chat.completions.create(
    model = "사용할 모델 이름 넣기 ex) gpt-4o-mini",
    messages = [{"role":"user", "content":prompt}])
    
    return response.choices[0].message['content'].strip()
    
df_review_10['긍정/부정'] = df_review_10['Review_text'].apply(make_review_pn)
df_review_10

'Today I Learned (TIL) > Python' 카테고리의 다른 글

[TIL] Python 챌린지 - 6회차  (0) 2024.08.08
[TIL] Python 챌린지 - 5회차  (0) 2024.08.07
[TIL] 통계학 기초 - 6주차  (0) 2024.08.05
[TIL] 통계학 기초 - 5주차  (0) 2024.08.05
[TIL] 통계학 기초 - 4주차  (0) 2024.08.02