- SQL과 Python 차이점 복습
SQL, Python 둘다 데이터에 접근하기 위한 Query(질의)이다.
- 라이브러리란?
우리가 자주 쓰는 함수들을 모아놓은 묶음!
- library 호출하기
import pandas as pd : pandas라는 라이브러리(모듈)을 호출(import)라고 그 이름을 pd로 명명
from matplotlib.pyplot as plt : matplotlib의 pyplot 함수만 가져오고 이름을 plt로 명명
- 목적 : 서로 다른 여러 가지 유형의 데이터를 시리즈와 데이터 프레임이라는 공통의 포맷으로 정리하여 쉽고 빠른 연산 및 분석을 위한 함수를 제공
json, html, csv, hdf5, sql 모두 DataFrame으로 통일해서 표현할 수 있다
- 데이터 프레임 (Data frame) 이란?
통계와 머신러닝 모델에서 가장 기본이 되는 테이블 형태의 데이터 구조
(ex. 엑셀 스프레드시트)
데이터프레임이란, 파이썬 및 R 에서 사용하는 특정 데이터 포맷
Pandas Series는 테이블의 열과 같으며, 모든 유형의 데이터를 보유하는 1차원 배열!
series = 테이블의 열
dataframe = 표
파이썬으로는 분석 + 통계 + 모델 + 예측 + 대시보드 + 시각화 모두 가능!!
- Magic command를 활용한 셀 실행시간 확인하기
Magic command = IPython kernel에서 제공되는 명령어로 %, %% 키워드를 사용하여 실행 가능
주피터 노트북에서 지원하는 매직 커맨드로, 셀 가장 위쪽에 작성해야 작동함.
CPU time : CPU 가 코드를 실행하는데 걸린 시간
Wall clock time : 실제 코드를 실행하는 데 걸린 시간
- 코드 핵심 요약
method나 fuction을 사용할 때에는 '.' 으로 불러온다
# pandas 라이브러리를 활용한 csv 파일 읽기
df = pd.read_csv("xxxx.csv")
# 테이블 확인하기
display(df, df2, df3)
# 처음 5 줄만 출력하기
#df2.head()
# 마지막 5 줄만 출력하기
#df2.tail()
# 각 테이블의 행(가로) 길이 파악하기
len(df)
# shape: 테이블의 행과 열의 갯수를 반환
df.shape
# dtypes: 테이블 내 컬럼타입(문자형, 숫자형, 배열 등) 확인
df.dtypes
# columns: 테이블 내 컬럼 확인
df.columns
# values: 테이블 내 각 행들을 배열 형태로 확인
df.values
# 테이블 기본 구조 한눈에 확인하기
df.info()
# 전체 행 갯수, 평균, 표준편차, 최솟값, 사분위수, 최댓값 확인
df2.describe()
#컬럼별로 결측치(데이터가 없는) 확인하기
df.isnull().sum()
# 특정 컬럼 1개 가져오기
#방법1: 속성. 사용
df.Category
#방법2: [] 연산자 사용
df['Category']
#방법3: iloc 사용
# : 은 모든 행을 가져오겠다는 의미이며 dataframe 의 인덱스 번호 4번(카테고리)컬럼을 가져오겠다는 희미
df.iloc[:,4]
# 특정 컬럼 여러개 가져오기
#방법1: [[]] 연산자 사용
# []를 하나 사용하면 결과값이 series 형태로 반환되어 key error 가발생되며, [[]] 는 dataframe 으로 반환되어 에러가 나지 않습니다.
df[['Category','Selling Price']]
#방법2: iloc 사용
# : 은 모든 행을 가져오겠다는 의미이며 dataframe 의 인덱스 번호 4번,7번 컬럼을 가져오겠다는 희미
df.iloc[:,[4,7]]
# 특정 컬럼 버리기
# axis=0 은 인덱스 기준, 1은 컬럼 기준 삭제를 의미
# inplace=True 는 원본을 변경하겠다는 의미, False 의 경우 원본테이블은 변경되지 않음
df3.drop('Interaction type', axis=1, inplace=True)
# 조건에 부합하는 데이터 가져오기1
# 조건에 만족하는 행은 정상출력 ,아닌 행은 NaN 으로 반환
df2.where(df2['Age']>50)
# 조건에 부합하는 데이터 가져오기2
# true, false의 개념이 아닌 조건에 부합하는 데이터만 슬라이싱하여 가져오고 싶을 때
# mask 메서드로 불립니다. 이름은 반드시 mask 일 필요가 없습니다.
mask = ((df2['Age']>50) & (df2['Gender']=='Male'))
df2[mask]
# 조건에 부합하는 데이터 가져오기3
# 데이터프레임명[조건] 을 사용하면 조건을 만족하는 행만 필터링됩니다.
df2 = df2[df2['Age']>50]
# 조건에 부합하는 데이터 가져오기4
# loc[]을 활용한 조건 필터링
df2 = df2.loc[df2['Age']>50]
# 데이터 그루핑- 기준 1개
df2.groupby('Gender')['Customer ID'].count()
# 데이터 그루핑- 기준 여러개
df2.groupby(['Gender','Location'])['Customer ID'].count()
# 데이터 count 와 nunique(distinct, 중복제거) 차이
df2.groupby('Location')['Age'].count()
df2.groupby('Location')['Age'].nunique()