내일배움캠프

데이터 분석 트랙 34일차 (25.03.31.) TIL

jjaio8986 2025. 3. 31. 22:00
  • 통계학 기초 1강 개인 정리
  • 파이썬 <문법> 종합 : 부가기능들

  • 통계학 기초 1강 개인정리

1. 기술통계 vs 추론통계

 1.1. 기술 통계

  - 정의 : 데이터를 요약하고 설명하는 통계의 방식

  - 자주 사용되는 통계 값

  A. "평균"(Mean) : 산술적 대표값(중간)

  B. "중앙값"(Median)  : 실제 데이터 상의 대표값 데이터 값(중간)

  C. "분산"(Variance) : 평균과 데이터들 사이의 흩어진 정도 [분산의 값이 클수록 흩어진 정도가 크다]

    # sum((데이터 값1-평균)**2)/len(데이터의 수)  

  D. "표준편차"(Standard Deviation) : 평균과 데이터들 사이의 흩어진 정도 [데이터의 변동성! 원래 데이터 값과 동일 단위]

 

 1.2. 추론 통계

  - 정의 : 표본을 통한 모집단의 "특성 추정", "가설 검정"

  - 주로 사용되는 용어

  A. 신뢰구간(Confidence Interval)

   - 정의 : 모집단의 평균이 특정 범위 내에 있을 것이라는 확률을 의미!    # 이 구간 내에 대부분의 값들이 위치한다!

   - 일반적으로 95% 신뢰구간이 사용된다.

 

  B. 가설 검정(Hypothesis Testing)

   - 정의 : 모집단에 대한 가설을 검증하기 위해 사용

   - 흔히 사용되는 가설 검정 방식

   B.a. 귀무가설(H0) : 검증하고자 하는 내용이 틀렸음을 나타내는 가설 ("~~는 변화가 없을 것이다.")

cf) p-value : 관찰된 데이터가 귀무가설과 양립하는 정도를 0에서 1 사이의 수치로 표현한 것.

      # 작을수록 그 정도가 약하다! 특정 값(0.05 혹은 0.01등등) 보다 작을 경우 귀무가설을 기각하는 것이 관례이지만 여러 문제가 있다.  출처) Wikipedia - "유의 확률"

   B.b. 대립가설(H1) : 가설로 주장하고자 하는 바를 증명해낸다 ("~~는 변화한다")

 

2. 기초적인 통계 분석 방법

 2.1. 위치 추정 : 데이터의 중심을 확인하는 방법

  - Numpy 라이브러리를 활용한 mean()함수와 median()함수를 주로 사용.

 

 2.2. 변이 추정 : 데이터들이 서로 얼마나 다른지 확인하는 방법    # 변동성확인!

  - Numpy 라이브러리의 "var()"[분산함수], "std()"[표준편차함수], "max()-min()"[범위(range)] 등을 주로 사용.

 

 2.3. 데이터 분포 탐색 : 데이터 값들의 대략적인 형세를 확인

  a. 히스토그램 : "수치데이터"에서 데이터 값을 임의의 범위로 나눈 뒤 그 범위에 해당하는 값이 몇 개 있는지 확인!

    # plt.hist(나타낼 값이 담긴 변수, bins=범위로 나눌 개수)

  b. 상자 그림 : 데이터 분포를 시각적으로 표현하는 대표적인 방법으로 박스의 각 끝은 75, 25분위의 값이며 박스 내에 그어진 선은 중앙값(median)을 의미한다.

    # plt.boxplot(나타낼 값이 담긴 변수)

 

 2.4. 이진 데이터와 범주 데이터의 탐색

  - "수치형 + 범주형 데이터" 혹은 "범주형 데이터"로 구성된 데이터들이 서로 얼마나 다른지 확인하는 방법

  - 주로 자주 등장한 데이터값(최빈값) 혹은 그 값의 개수로 사용되며 "파이차트", "막대그래프"로 표현된다.

 

 2.5. 상관관계

  - 두 변수간의 관계를 측정하는 방법으로 -1 혹은 1에 가까울수록 강한 상관관계가 있다.

  - 흔히 -0.7~-1, 0.7~1까지를 "강한 상관관계", -0.5 혹은 0.5를 "중간 정도의 상관관계", -0.3, 0.3을 "미미한 상관관계", 0은 "무관한 관계"로 고려한다.

  - "plt.scatter()"함수와 같은 산점도 그래프를 주로 사용한다.

cf) 상관관계 산점도 제작시 등장하는 np.corrcoef()함수 뒤에 붙는 [0,1]의 의미

A = [값1, 값2, 값3, .....]

B = [값a, 값b, 값c, .....]

C = np np.corrcoef(A, B)[0,1]     

# 변수 C에 A와 B의 상관관계를 계산하는 np의 라이브러리 함수를 사용하고 그 값 중에서 0행1열의 값을 가져오겠다.

# 즉, "A와 B의 상관관계"에 해당하는 '상관계수'의 값을 C에 담는다는 뜻 [0,0], [1,1]은 자기 자신과의 관계를 의미하는 상관계수 값이기에 사용하지 않는다.

cf) 인과관계 vs 상관관계 : 상관관계는 두 변수 간에 어떠한 관계, 연관성이 있다는 것을 의미한다. 하지만 인과관계는" X라는 변수가 Y라는 변수를 변화"시키는 명확한 의미관계를 갖는다. Y가 X를 변화시키는 지에 대해서는 의미범위를 벗어나기에 명확한 인과를 말할 수 없다. 즉, X이면 Y라고 말할 수 있지만 Y이면 X라고 말할 수 없는 관계인 것!

 # 법칙 수준의 강력한 의미관계이지만 그것을 증명하기 위해선 엄밀하고 까다로운 조건을 거쳐서 증명해야한다!

 

 2.6. 두 개 이상의 변수 탐색

  - "다변량 분석" : 여러 변수 간의 관계를 분석하는 방법    # 3개 이상의 변수의 관계를 분석하는 방법!

  - 흔히 seaborn 라이브러리의 "sns.pairplot(파악 대상이 담긴 변수)"함수, pandas 라이브러리의 "파악대상.corr()"함수[상관관계 연산 함수]를 사용하여 나타내며  "sns.heatmap(파악대상.corr())"를 사용해 히트맵으로 그릴 수 있다.

 


  • 파이썬 <문법> 종합 : 부가기능들

1. 파일 불러오기

  1.1. 파일 확장자 : CSV(.csv), Excel(.xls | .xlsx), Json(.json), 텍스트 파일(.txt | .dat)

  1.2. 파일 불러오기 : pandas 라이브러리의 "read_확장자명('파일명.확장자')"함수를 사용!

ex.

# 만일 구글 코랩 사용시 from google.colab import drive

                                     drive.mount('/content/drive')

# 를 사용하여 파일을 드라이브 한 뒤 파일 경로를 사용 아래의 판다스 라이브러리 함수를 이용하여 파일을 불러온다.

 

import pandas as pd

df = pd.read_csv('파일명.csv') 

       pd.read_excel('파일명.xlsx')

       pd.read_json('파일명.json')

       pd.read_csv('파일명.csv')

 

  1.3. 파일 저장하기 : ".to_확장자()"를 사용하여 파일을 저장한다. 이때 "CSV와 Excel", "json", "텍스트파일"의 저장 형식이 다르다.

 

ex 1) CSV, Excel로 저장

df = pd.DataFrame(데이터 프레임으로 저장할 데이터)

csv_file_path = '/content/저장할 파일 경로/저장할 파일명.csv'

혹은

excel_file_path = '/content/저장할 파일 경로/저장할 파일명.xlsx'

 

df.to_csv(csv_file_path, index=False)

혹은 

df.to_excel(escel_file_path, index=False)

 

cf) "index=False"를 하는 이유는 파일을 저장할 때 별도의 인덱스를 저장하지 않겠다는 의미 True로 할 시 파일을 불러올 때 쓸모없는 index가 늘어난다. 파일을 불러올 때 별도로 처리하는 방법도 있다.

ex 2) JSON파일

data = {키와 벨류의 딕셔너리}

json_file_path = '/content/sample_data/data.json'

with open(json_file_path, 'w') as jsonfile:

json.dump(data, jsonfile, indent=4)

 

ex 3) 텍스트파일

data = {키와 벨류의 딕셔너리}

text_file_path = '/content/sample_data/data.txt'

with open(text_file_path, 'w') as textfile:

for key, item in data.items():

textfile.write(str(key) + " : " + str(item) + '\n')

 

# csv, 엑셀, 제이슨 모두 판다스와 json을 호출한 다음에 저장한다. 하지만 텍스트파일과 제이슨파일은 각각 제이슨파일과 텍스트파일을 열어 제이슨 파일 저장형식 혹은 반복문을 통한 기입을 통해 저장해야 한다.

 

2. 라이브러리

 - 종류

 A. pandas : 데이터 조작, 분석을 위한 라이브러리

 B. numpy : 과학적 계산을 위한 라이브러리, 다차원 배열 및 행렬 연산을 지원

 C. matplotlib : 데이터 시각화 라이브러리

 D. seaborn : matplotlib 기반으로 한 통계용 데이터 시각화 라이브러리

 E. scikit-learn : 머신 러닝 알고리즘을 사용할 수 있는 라이브러리, "분류", "회귀", "군집화", "차원 축소"등의 다양한 머신 러닝 기법 제공

 F. statsmodels : 통계 분석을 위한 라이브러리 "회귀 분석", "시계열 분석", "비모수 통계" 등

 G. scipy : 과학기술 및 수학 연산 라이브러리 "선형대수", "최적화", "통계 분석" 등의 기능

 H. tensorflow : 딥러닝 및 기계 학습 목적 오픈 소스 라이브러리 "그래프 기반 연산을 통한 수치 계산", "신경망 구축 및 학습 가능"

 I. pytorch : 딥러닝 목적 오픈소스 라이브러리 "동적 계산 그래프 사용", "신경망 구축 및 학습 가능"

 

3. 포맷팅(formatting)

 - 정의 : 문자와 변수를 연산자 없이 한 번에 출력 가능

 - 대표적으로 "f-string"이 있다.

 - 사용법 : print(f"내용1 {변수1} 내용2")

 - 다른 형태의 포맷팅 형식

  a. format함수 : print( "내용1 {} 내용2".format(변수1))

  b. 이전에 사용하던 포맷팅 방식 : print("내용1 %d 내용2" % (변수1))    # 변수를 넣을 위치에 %로 표시, 어떤 타입의 변수를 넣을 것인지 작성(숫자=d, 문자=s)

 

4. 리스트 컴프리헨션

 - 정의 : 리스트를 간결하게 생성하는 방법

 - 반복문과 조건문을 사용한 리스트 생성 시에 사용한다.

 - 데이터 처리 및 변환에 유용하게 활용

 - 기본형태 : 조건 for 조건을 적용할 반복 수행 대상 내의 요소 in 반복수행할 대상 if 조건문 #if 조건문은 안 넣어도 된다.

ex.

# 제곱 리스트 생성

squares = [x**2 for x in range(1, 11)]

# 리스트 중 짝수만 선택 후 제곱 리스트 생성

even_ squares = [x**2 for x in range(1, 11) if x % 2 == 0]

# 문자열 리스트에서 각 문자열의 길이를 저장한 리스트 생성

words = ["apple", "banana", "grape", "orange"]

word_lengths = [len(word) for word in words]

 

5. lambda

 - 정의 : 익명 함수로 임시적으로 간결한 내용의 함수를 사용해야 할 때 사용하는 함수

구분 lambda def
선언(정의)방식 lambda x:x와 x에 적용할 조건, x의 요소들이 들어있는 대상(리스트) def 함수명 
# 즉 일반 함수는 이름이 있지만, 람다는 간단 표현식만 가질 뿐 이름이 없음! 이름없는 함수를 사용할 때 쓰는 것! 임시적!
구조 한 줄, 간단한 표현식 여러 줄의 코드블록
사용 영역 한 번만 사용되거나, 임시로 필요한 경우에만 사용 어디서나 함수 이름을 호출!
사용법 함수를 매개변수로 받거나, 함수를 반환하는 고차함수! 함수형 프로그래밍에서 사용 함수명 호출 (&인수값 입력!)

 - 종류

  A. "filter(조건 함수, 반복 가능 데이터)" : 파이썬 내장 함수로 여러 개의 데이터로부터 조건 충족하는 데이터 추출 사용

ex.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

print(even_numbers) # 출력: [2, 4, 6, 8, 10]

 

  B. "map(조건 함수, 반복 가능 데이터)" : 파이썬 내장 함수, 여러 값을 받아 각각의 값에 함수를 적용한 결과를 반환

ex.

numbers = [1, 2, 3, 4, 5]

squared_numbers = list(map(lambda x: x ** 2, numbers))

print(squared_numbers) # 출력: [1, 4, 9, 16, 25]

 

6. split 메서드

 - 정의 : 문자열 혹은 시퀸스 타입 데이터를 여러 개의 요소로 분리할 때 사용하는 메서드

 - 형태 : "분할할 데이터.split(분할 기준 만일 없을 시 문자열의 경우 하나하나 분리하여 출력)"

 - ".join()"을 통해 분할된 요소를 합칠 수 있음.

ex) split

data = "apple,banana,grape,orange"

fruits = data.split(',')

print(fruits) # 출력: ['apple', 'banana', 'grape', 'orange']

 

ex) join

words = ['Hello,', 'how', 'are', 'you', 'doing', 'today?']

sentence = ' '.join(words)

print(sentence) # 출력: Hello, how are you doing today?