Blair  - Soul Eater [패스트캠퍼스] 데이터분석 부트캠프12기 학습일지_03

• 패스트캠퍼스 데이터분석 부트캠프 12기

[패스트캠퍼스] 데이터분석 부트캠프12기 학습일지_03

oujin 2024. 1. 5. 10:02
728x90

2023년 12월 18일부터 데이터분석 부트캠프를 진행하게 되었습니다.

오늘은 2024년 01월 05일로 시작한지 19일째 되는 날이네요!


데이터 분석을 위한 기초 수학/통계(이동훈 강사님)

지도학습과 비지도 학습

지도학습: 지도학습은 정답이 있는 데이터를 활용해 데이터를 학습하고, 학습한 모델이 얼마나 정답을 정확하게 맞추는지 평가하는 학습이다.

분류, 회귀 문제들을 해결 가능하다

회귀: 연속형 수치의 입력값을 활용해 특정 수치를 예측

분류: 주어진 입력 값을 2개 혹은 여러 개의 결과값으로 분류

 

비지도학습: 비지도학습은 정답이 없는 데이터를 활용해 데이터를 학습하는 것. 데이터가 어떻게 구성되어 있는지, 혹은 어떻게 분류될 수 있는지에 대한 문제 해결

군집 문제 해결 가능하다


차트 그리기

차트를 그릴때 고민 해야 할 것: 

1. 어떤 숫자로 차트를 그릴 것인가?

2. 어떤 차트가 숫자를 가장 잘 설명하는가?

3. 차트를 어떻게 디자인하는게 가장 효과적인가?

 

차트디자인:

예쁘게 꾸미는 것이 아니라 정보전달이 잘되게 디자인 해야함

1. 차트의 모든 데이터를 단색으로 변경(회색 추천) -> 회색

2. 차트에서 가장 중요한(강조해야 하는) 데이터 선정 -> 인천

3. 차트의 메인 컬러(1개) 선택 -> 주황

4. 2의 중요 데이터에만 3의 메인 컬러 적용

+ 데이터 레이블 숫자 추가

+차트의 윤곽선 제거: 데이터의 레벨이 달라질 때만 선을 그리기

+깔끔하게 하기

1. 선을 맞추기

2. 필요없는 선, 범례 등을 지우기

 

최종 그래프

 

 

 

다양한 차트

거품형차트: 숫자의 크기나 비율을 거품으로 나타냄, 거품의 위치, 크기, 색등을 활용해 정보를 표현

어떤 데이터의 현황을 볼 때 유용함

주의! 데이터 선택시 이름빼고 숫자값만 잡아야함!, x , y , 거품크기 순서여야함

 

 

폭포형 차트:  시계열 데이터오 각 시기에 대한 차로 증감을 보여주는 그래프


 

데이터 분석을 위한 핵심 Tool Python(김상모 강사님)

진법:

 1. 2진법: 0과 1 두개의 숫자 사용, 0b 붙임

 2. 10진법: 0~9까지의 10개의 숫자 사용

 3. 16진법: 0~9의 10개의 숫자와 A~F까지의 6개의 문자 사용, 0x 붙임

 

컴퓨터 프로그램

컴퓨터에 일을 시키려면 인간이 컴퓨터에게 자세한 명령어 (instruction)들의 리스트를 줘야함

프로그램: 컴퓨터가 수행할 명령어를 적어 놓은 문서 (=작업지시서)

 

프로그래머: 

1. 컴퓨터 프로그램의 논리나 알고리즘을 설계하고, 원시코드를 작성하여 검증을 진행하는 사람

2. 컴퓨터 프로그래밍을 제작하고 컴퓨터 소프트웨어를 개발하는 사람을 칭하는 직업

3. 단순 코더가 아닌 프로젝트를 이끄는 분석/설계자나 개발 리더가 될지 프로그램 개발을 어떻게 하는지에 대해 달라짐

4. 프로그래밍 언어의 문법만 외우는 것이 아니라 프로그램 설계를 이해 해야함

 

▶ 저장장치 - 메모리 - CPU 사이의 관계를 알기!


파이썬 기본 문법

변수의 이름 규칙

1. 의미 있는 이름을 사용 (a 대신에 name, b 대신에 age)

2. 소문자와 대문자는 서로 다르게 취급된다

3. 변수의 이름은 영문자와 숫자, 밑줄(_)로 이루어진다

4. 변수의 이름 중간에 공백이 들어가면 안된다(_로 단어를 구분)

 

ASKII 코드란?

1. American Standard Code for Information Interchange 의 약자

2. ANSI 라는 미국 표준 협회에서 제정한 문자 표현 방식

3. 우리가 사용하는 컴퓨터에는 수많은 문자들이 있는데 그때 문자를 표현하거나 일부의 특수기호를 표현하자고 제정

4. 컴퓨터마자 문자를 표현하는 방식이 전부 다르면 혼선 발생

▶문자 to ASKII : ord() 함수사용

print(ord("A")) -> 65 출력됨

▶ ASKII to 문자 : chr() 함수사용

print(chr(65))

 

print()

▶ 값 입력받기 :  int(input())

 

▶ , 로 구분된 숫자 두개 입력받기 : int(input().split(",")

 

▶ 몫과 나머지 한번에 구하기 : divmod(a,b)

 

▶ 출력시 특정 각각 기호 넣어서 출력 : sep=''

 

▶ 마지막 출력시에만 특정 기호 함 출력 : end=' '

 


 

▶ 비교연산자

==: 값이 동일한지 비교 (equal to)

!=: 값이 다른지 비교 (not equal to)

<: 작은지 비교 (less than)

>: 큰지 비교 (greater than)

<=: 작거나 같은지 비교 (less than or equal to)

>=: 크거나 같은지 비교 (greater than or equal to)

 

▶ == , != 과 is , is not 차이

1. ==, != 값 자체를 비교

2. is, is not 은 객체(object)를 비교

 

▶ not and or 순서로 논리 연산사 판단

▶ 문자는 null 이 False, 나머지는 True

 숫자는 0이 FALSE, 나머지는 True

▶ 단락평가: 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법


 

파이썬 온라인 강의

 

01. 프로그래밍이란

▶ 프로그래밍은 컴퓨터에게 일을 시키는 과정이다

▶ 프로그래밍의 구성 요소에는 코드 /  컴퓨터가 있다

▶ 코드는 특정 프로그래밍 언어의 문법, 의미론을 따름

▶ 컴퓨터는 폰 노이만 아키텍처로 구성되어 있다 (CPU, Memory, I/O Devices)

▶ 데이터와 프로그램은 메모리에 상주하며, 모든 연산은 CPU가 담당한다.

▶ 프로그램에서 수행한 결과를 저장하고 싶을때는 저장장치에 Save를 한다.

▶ Instructon cycle 을 통해서 CPU는 지속적으로 주어진 일을 처리합니다.

 

02. 파이썬이란

▶ 파이썬은 데이터분석, 프로토 타입 개발 등에 유리한 프로그래밍 언어

▶ 오픈소스 라이브러리를 통한 확장성이 뛰어나서 인기가 많다

 

03. 데이터 타입

7가지 데이터 타입 : 

int : 정수

float : 실수 (정수가 아닌 나머지, 소수)

str : 문자열 (character sequence)

list : 자유롭게 변경이 가능한 여러개의 데이터 묶음

tuple : 생성 후에 변경이 불가능한 여러개의 데이터 묶음

set : 집합

dict : key-value store 방식을 가지고 저장하는 구조 (키로 값을 찾아갈 수 있는 사전 구조)

 

▶ int, float, str, list, tuple, set, dict 등의 데이터 타입이 있다

▶ 데이터 타입은 프로그래밍을 할 때 기본이 되는 데이터를 담을 수 있는 그릇을 정의한것

 

 

04. IF

▶ if문을 사용할 땐,  사용에 주의 한다

▶ 조건문을 사용할 프로그래밍을 한다는건, 의사결정을 하는 것과 같다

▶ 조건에서 빠지는 것들이 없는지 항상 체크한다. 보통 edge case 에서 에러가 자주 난다

 list의 처음과 끝의 원소를 indexing하는 경우(boundary condition)

 

05. for while

 while : 조건에 따른 반복수행을 한다

조건이 만족하는 동안 명령을 수행한다.

특정횟수를 반복하는게 아닌 조건의 만족여부에 따라 반복을 수행한다

 

 for : 횟수에 따른 반복 수행을 한다

특정 횟수를 지정 할 수도 있고, list같은 시퀀스를 처음부터 끝까지 반복하게 할 수 도 있다

주어진 여러개의 데이터를 순서대로 다룰 때 많이 사용된다.

 

▶ for, while문을 사용 할 때도   사용을 주의한다

▶ 반복문을 사용하려면 하려는 일을 반복하능하게 바꿔줘야함 (decomposition)

▶ 조건문과 함께 사용되어 프로그램의 로직(logic)을 구성한다

 

06. 함수

 코드의 구조화가 잘되어 있으면 가독성도 높고 유지,보수를 하기가 편하다

▶ 구조화된 코드의 재사용성 (Reusability)가 향상된다 , 코드의 생산성 향상

▶ 함수를 정의해서 사용할 때도  사용이 중요하다

▶ 함수들의 구조를 잘 짜면 유지보수하기 쉬운 좋은 코드를 만들 수 있다.

 

07. IO

▶ 파이썬에서 키보드로 데이터를 입력하면 input함수 사용

▶ 파일로 된 데이터를 읽어오려면 file I/O 처리가 필요하다. 어떤 데이터 타입의 데이터를 읽어오느냐에 따라 필요한 라이브러리가 달라진다

▶ file의 사이즈가 크면, file I/O가 데이터 처리에 치명적인 성능 저하를 가져올 수 있다.

 

08. OOP

  OOP는 대규모 코드의 유지 보수를 편리하게 하기 위해서 생긴 프로그래밍 방법론이다

  OOP는 구현하고자 하느 대상을 class로 정의하여 코드를 구현 할 수 있게 해준다

  다양한 특징들이 class를 통해서 구현된 코드가 재사용되기 편하게 해준다

  이러한 이유로 잘 만들어진 open source library들을 손쉽게 이용가능하다

▶ 상속, 다형성, 추상화, 은닉화의 특징이 있

 

09. Class

▶ 생성자는 __init__()함수를 이용하여 구현함

▶ 구현되는 객체는 self 라는 자체 변수를 가짐. self는 말그대로 객체 자기자신을 지칭

▶ self 변수를 통해서 모든 객체는 자기 자신을 구분 할 수 있음

▶ class method도 self변수를 이용해 객체를 구분함

▶ self는 class variable 이기 때문에 하나의 class내에서 통용됨

▶ class도 재사용성을 고려하여 디자인되어야 함

▶ class로 구현 할 때 제일 중요한 포인트는 "어떤 특성과 어떤 기능을 구현할 것인가" 입니다.

 

 


▶ numpy 란?

▶ arrray

1. numpy array는 C언어의 array 구조와 동일한 개념 (C array)

2. numpy array 는 파이썬 리스트와 비슷한 구조이나 세부적인 특징이 많이 다름

 

 리스트와 다른점

1. 선언한 이후에 크기 변경이 불가능

2. 모든 원소의 데이터 타입이 동일해야함 (homogeneous array)

데이터 타입이 같으면 연산이 고정됨, 원소가 무슨데이터 일지 고려하지 않아도됨, 연산이 더 빨라짐

 

 리스트와 같은점

1. 인덱싱으로 원소에 접근가능

2. 생성후 asssignment operator를 이용해 원소의 update가 가능

 

 넘파이가 제공하는 데이터 타입

1. 수치와 관련된 데이터 타입이 대부분이다

2. 원소의 크기(memory size)를 조절가능하고 크기에 따라 표현할 수 있는 수치범위가 정해짐

np.int8 -> 수치표현에 8 bits를 사용한다 : 00000000~11111111 -> 2^8(256개) : -128~127

uint = 음수가 없음 -> 0~255 

np.float32 -> 실수 표현에 32 bits를 사용한다 -> eaponent, mantissa, sign -> 2.813 * 10^23 -> sign precision

표현범위: 크거나 자세히 설명하거나

i : integer (정수)
b : boolean (참거짓)
u : unsigned integer (부호없는 정수)
f : float (소수)
c : complex (복소수)
m : timedelta (타임델타)
M : datetime (날짜시간)
O : object (객체)
S : string (문자열)
U : unicode string (유니코드 문자열)
V : void (다른 타입에 대한 고정된 메모리묶음) 
# 파이썬 list를 numpy array로 변환.
data = [1,2,3,4,5]
arr = np.array(data)

# 0부터 9까지 숫자를 자동으로 생성한 array.
np.array(list(range(10)))

# reshape을 이용하여 3 x 3 행렬 만들기.
np.arange(1,10).reshape(3,3)

# 펼치기
x.reshape(-1,)

#행렬합치기
np.vstack([arr1,arr2])
np.hstack([arr1,arr2])

#numpy array의 인덱싱은 python list의 인덱싱과 같다

# 표준정규분포에서 random sampling을 한 원소를 가지는 5x3 행렬을 만든다.
mat1 = np.random.randn(5,3)

# mat1에 절대값 씌우기
np.abs(mat1)

mat2 = np.random.rand(3, 2) # 0 ~ 1 사이의 랜덤값
# Summation
np.sum(mat2)
np.sum(mat2,axis=0)
np.sum(mat2,axis=1)
#mean , std , min , max 등 가능

# 최소값이 있는 Index (최대값:argmax)
print(np.argmin(mat2,axis=0))

#sorting한뒤 원래인덱스 보고 싶을때
#argsort
np.argsort(mat2,axis=0)

 

▶ pandas 란?

1. Python Data Analysis Library. 정형데이터 분석에 최적화된 라이브러리

2. 2008년에 만들어 졌으며 2009년에 100% 오픈소스가 됨

3. 다양한 데이터 조작 기능제공 (indexing, search, filtering, reshaping, concat, reding, writing, ...)

4. 정형 데이터를 효율적으로 표현할 수 있는 DataFrame 형태로 모든 데이터를 표현함 

5. 벡터연산에 최적화 되어 있음( Numpy와 연관성 있다)

 

 판다스를 사용해야 하는 이유

1. 대부분의 정제된 데이터들은 테이블 형태로 표현된다. 테이블 형태 분석에 최적임

2. numpy처럼 정형화된 데이터 연산에 최적화됨

3. 다양한 정형 데이터를 통합 관리 가능함(json, html, csv, xlsx,sql,,,모두 dataframe으로 통일해서 표현가능)

4. 엑셀에서 제공하는 연산 기능을 거의 다 제공 (편의성이 좋다)

 

▶DataFrame

1. DataFrame은 2차원 테이블 구조이다

2. 1차원 구조인 Series 도 있다 (가로나 세로 (행이나 열) 한줄을 가져오는 경우) (=하나의 row, 하나의 column)

3. row, column으로 모든 원소를 구분한다 (indexing)

4. index, columns, values라는 객체 변수를 가지고 있음

5. relation DB와 완전히 호환됨

6. 하나의 column을 기준으로 모든 원소의 data type이 동일 (모두 numpy array가 가지는 data type과 동일)

7. DataFrame은 numpy array를 상위호환하는 개념으로 univasal function이 사용가능함 (내부 구현제로 numpy array를 사용하기 때문)

# 12x4 행렬에 1부터 36까지의 숫자를 원소를 가지고, index는 0부터 시작하고, coulmns은 순서대로 X1, X2, X3, X4로 하는 DataFrame 생성
df = pd.DataFrame(data=np.arange(1,49).reshape(12,4), 
                  index=np.arange(12), 
                  columns=["X1","X2","X3","X4"])
                  

df.index   # dataframe index
df.columns   # dataframe columns, 오브젝트 타입은 스트링(문자포함)
df.values   # dataframe values

df["X2"] # dictionary like   # 특정 column을 가져오기
df['X1'] +2   # X1 column에 2 더하기

# X2 column를 기준으로 내림차순 정렬
df.sort_values(by="X2",ascending=False)

df["X1"]  #컬럼명적기
df[:3]   #슬라이싱

# 인덱싱방법 정리
list[][]
numpy[,]
loc[인덱스번호, "컬럼명"]
iloc[인덱스순서, 컬럼순서]

# 데이터프레임 합치기
# outer join
pd.merge(df1,df2,on='A',how='outer')
# left join
pd.merge(df2,df3, on='B',how='left')
# 그냥 합치기 (concatenation) 인덱스를 기준으로 붙음, 인덱스가 다르면 그냥 길게쌓임
pd.concat([df1,df2,df3],axis=1)
pd.concat([df1,df2,df3],axis=0).reset_index(drop=True) #drop_True하면 기존에 있는 인덱스 사라짐

# csv 파일 불러오기
train = pd.read_csv("data/titanic/train.csv")

titanic['Pclass'].value_counts() #빈도분석

titanic[titanic.Age.isnull()] #age가 nan인 데이터만 보기

titanic.loc[titanic.Age>30,'Fare'] #age가 30이상인 데이터의 Fare값

# 피벗테이블 이용하기
# 성별을 기준으로 생존률 파악 --> Mean vs Sum
pd.pivot_table(data=titanic, index=["Sex"],values=["Survived"],aggfunc=['sum','mean','count'])

# 사회 계급을 기준으로 생존률 파악
pd.pivot_table(data=titanic, index=["Pclass",'Sex'],values=["Survived"],aggfunc=['sum','mean','count'])

▶ Matplotlib 이란?

1.Statistical Data Visualization library on matplotlib

2. 파이썬 오픈소스 라이브러리 중에 가장 널리 사용되는 시각화 라이브러리 이다.

3. 2002년부터 만들어졌으며, MATLAB의 기능들을 파이썬으로 가져오는 컨셉으로 시작

4. 각종 논문에서 figure를 그릴때 사용될 만큼 깔끔하게 그래프를 그려주는 것으로 유명

5. figure라는 도화지에 여러가지 component를 얹어서 그래프를 완성하는 컨셉

6. 크게 pyplot을 이용하여 구현하는 방법과 OOP-style 을 이용하여 구현하는 두가지 방법이 있다

7. 빠르게 적당한 퀄리티의 그래프는 pyplot 디테일하게 표현한다면 OOP-style로 구현하는걸 추천


▶Seaborn 이란?

1. 2012년에 만들어 졌으며 matplotlib을 더 편하게 사용 할 수 있도록 만든 라이브러리

2. matplotlib이 MATLAB을 표방하여 디자인된 것과 달리 seaborn은 numpy, pandas 와 같은 파이썬 라이브러리들을 편하게 시각화 하는 것을 중점으로 디자인된 라이브러리 이다.

3. 특히, DataFrame을 직접적으로 지원하기 때문에 훨씬 편리하게 데이터를 시각화 할 수 있다.

4. 그리고 matplotlib 위에 만들어져서 , matplotlib 에 있는 개념들을 확장해서 사용 할 수 있다.

5. 다양한 기본 plot들이 있어서 빠르게 통계분석을 하기에 편리합니다 -> EDA편리

 

728x90