본문 바로가기

부트캠프/멀티캠퍼스_퍼포먼스 마케팅과 데이터 분석

[멀티캠퍼스 부트캠프 4주차(1)] 데이터 분석 기본_파이썬 기초(자료구조, 판다스)

데이터 분석 기본_파이썬 기초(자료구조, 판다스)


자료구조

1. 스택과 큐

-스택: Last in first out

-큐: First in first out

 

2. 튜플과 세트

1) 튜플

 -()

 -값 변경이 불가한 리스트

 -인덱싱[], 슬라이싱, 연산, len 함수 등이 리스트와 동일하게 작동

 -튜플 사용하는 경우

  • 공동 작업 시 내가 만든 데이터를 다른 사람이 수정하지 못하도록
  • 수정 필요 없는 데이터 확인용(빠르게 출력해볼 때)
t = (1, 2, 2, 3)
print(t)
# >>> (1, 2, 2, 3)

 

2) 세트

 -{}

 -중복 없이 데이터 저장(unique 값만 추출)

 -set(변수명): 세트 안 요소들의 중복 제거

 -순서가 없는 자료형 → 인덱스로 접근 불가

s = {1, 2, 2, 3}
s
# >>> {1, 2, 3}
r = [1, 2, 3, 2, 3]
print(r)  # >>> [1, 2, 3, 2, 3]

set(r)  # >>> {1, 2, 3}

 

 

3. 딕셔너리

-{}

-키(key)와 값(value)를 짝으로 저장

-변수명 = {key1: value1, key2: value2, ...}

-key의 타입은 숫자, 문자열 모두 가능

-딕셔너리는 순서 x

-변수명[key값]: key 값으로 value를 찾음(인덱싱 사용)

# 딕셔너리 생성_대학생 인적사항
student_info = {20140012: 'Sungchul', 20140059: 'Jiyoung', 20150234: 'Jaehong'}
# → 학번이 key이고 이름이 value인 딕셔너리 생성됨

# Q. 학번이 20140012인 학생은?
student_info[20140012]
# >>> 'Sungchul'

-.keys(): 딕셔너리에서 key만 출력

-.values(): 딕셔너리에서 value만 출력

-.items(): key와 value를 쌍으로 모두 출력

 


넘파이와 판다스 라이브러리

-라이브러리(library): 누군가 미리 짜둔 코드

-특정 함수들을 담고 있음

-기본적인 라이브러리들은 아나콘다 설치 때 다운 완료

-추가적인 라이브러리들은 다운 필요

 

 

1. 넘파이(numpy): 수학, 행렬 라이브러리

-넘파이 버전 확인 및 변경

# 넘파이 불러오기
import numpy as np

# 넘파이 버전 확인
np.__version__

# 넘파이 버전 변경(딱히 변경할 필요 x)
!pip uninstall numpy
!pip install numpy=='2.1.3'

-1차열 배열(array) → 리스트와 유사

-2차원 배열(행렬)

-고차원(ndarray)

# 1차원 배열
np.array([1, 2, 6])
# >>> array([1, 2, 6])

# 2차원 배열
np.array([[1, 2], [3, 4]])  # 리스트 안에 리스트가 들어간 형태
# >>> array([[1, 2]
			[3, 4]])

 

 

2. 판다스(pandas): 파이썬에서 엑셀처럼 데이터를 다룰 수 있게 해주는 도구

1) 데이터 특성 확인

 -1차원(시리즈)

 -2차원(데이터프레임)

 -csv, 엑셀 파일 불러와서 분석 → 데이터프레임(df) 형태

# 데이터 폴더 세팅

# python_multicampus/data
# 실행중인 주피터 파일과 data 파일이 같은 경로 내에 있어야 함

import pandas as pd

df_ins = pd.read_csv("data/insurance.csv")  # ds_ins라는 변수명에 저장
df_ins
# 보험 고객에 대한 정보
# 나이, 성별, bmi, 자녀 수, 흡연 여부, 지역, 보험료, 보험 종류, 가입 기간

 -.shape: 데이터 확인 → 데이터(행) 개수, 컬럼/피처(열) 개수

df_ins.shape
# >>> (1353, 9)

 -.head(n): 상위 데이터 n개 확인

df_ins.head(2)

 

2) 특정 데이터 추출(컬럼명)

 -데이터프레임["컬럼명"]: 한 컬럼만 선택(series)

df_ins["charges"]

 -.mean(): 판다스에서 평균 구하는 함수

 -:.nf: 소수점 아래 n자리까지 표현

컬럼 시리즈로 나이 추출하고 평균 나이 구하기
age = df_ins["age"]
print(f"평균 나이: {age.mean():.2f}세")
# >>> 평균 나이: 39.21세

 -두 개 이상의 컬럼은 리스트[]로 묶어서 선택

# 나이, bmi 데이터만 선택하기
df_ins[["age", "bmi"]]

 

3) 특정 데이터 추출(조건)

 -데이터프레임[조건]: 데이터프레임에서 조건으로 데이터 찾기

# 나이가 30세 이상인 데이터 찾기
# df_ins["age"] >= 30  # → True/False 형식으로 나옴(조건의 역할을 함)
df_ins[df_ins["age"] >= 30]  # → 30세 이상만 추출됨

※ df_ins[50 > df_ins["age"] >= 30]은 불가

    (if문에서는 가능했음)

 -2개의 조건으로 데이터프레임에서 데이터 추출

  • 데이터프레임[(조건1) & (조건2)]: and 조건
  • 데이터프레임[(조건1) | (조건2)]: or 조건
# 남성이면서 나이가 30세 이하인 데이터 추출
df_ins[(df_ins['sex'] == 'male') & (df_ins['age'] <= 30)]

# 가독성 고려
cond1 = df_ins['sex'] == 'male'
cond2 = df_ins['age'] <= 30
df_ins[cond1 & cond2]  # 변수명은 괄호로 감싸지 않아도 됨

※ df_ins[df_ins['sex'] == 'male' & df_ins['age'] <= 30]

     → TypeError 발생('male' & df_ins['age']의 이상한 비트 연산이 먼저 수행되기 때문)

     → 각 조건을 반드시 괄호로 감싸거나 비교 연산을 먼저 끝내도록 해야 함

# 나이가 25세 이하이거나 charges가 50000 이상인 데이터 추출
cond3 = df_ins['age'] <= 25
cond4 = df_ins['charges'] >= 50000
df_ins[cond3 | cond4]

 

4) 데이터프레임 인덱싱

 -데이터프레임.iloc[행 인덱스, 열 인덱스]: 데이터프레임에서 인덱스(위치)로 인덱싱 → 범위 인덱싱으로 확장 可

df_ins.iloc[0, 4]
# >>> 'no'  → index 0인 사람의 smoker에 대한 값

df_ins.iloc[0:3, 2]
# >>> 0    53.13
#     1    52.58
#     2    50.38
#     Name: bmi, dtype: float64  → index 0~2인 사람의 bmi에 대한 값

-데이터프레임.loc[행 이름, 열 이름]: 데이터프레임에서 컬럼명으로 인덱싱 → 범위 인덱싱으로 확장 可

df_ins.loc[0, 'bmi']  # 현재 데이터에서는 행 이름이 인덱스(숫자)로 명명되어있음
# >>> 53.13

df_ins[0:3, 'children':'charges']
#   children   smoker   region          charges
# 0 	0   	no  	southeast	1163.4627
# 1 	1   	yes 	southeast	44501.3982
# 2 	1   	no  	southeast	2438.0552
# 3 	0   	no  	southeast	11381.3254

※ .loc[]은 범위 맨 마지막까지 포함해서 가져옴


"데이터의 활용 가능성과 방법을 고려하여 가치 만들기"


 

#부트캠프후기 #멀티캠퍼스부트캠프 # 데이터마케팅부트캠프