상관계수(Correlation coefficient)

-두 변수가 얼마나 강하게 연결되어 있는지를 숫자로 표현

 

  • 1에 가까울수록 두 변수가 같이 움직임
  • -1에 가까울수록 반대로 움직임
  • -0이면 서 관련 없음

  1. 피어슨 상관분석(pearson correlation analysis): 가장 일반적인 상관 분석 방법
  2. 스피어만 상관분석(Spearman correlation analysis): 두 변수가 정규성을 보이지 않을떄 사용하기 적합
  3. 켄달 상관분석(Kendall correlation analysis): 스피어만 상관분석과 비슷하나 표본 데이터가 적고 동점이 많을때 사용하기 적합

 

<차이점>

 

 

1. 상관분석 데이터 준비

import pandas as pd
import matplotlib.pyplot as plt
# 리스트에 데이터 삽입하기
X = [1, 2, 3, 4, 5]
Y_linear = [2, 4, 6, 8, 10] # 선형 데이터
# 리스트를 데이터프레임으로 변환하기
data = {'X': X, 'Y_선형': Y_linear}
df = pd.DataFrame(data)
df

 

2. 그래프

# 그래프그리기
df.plot(x='X', y='Y_선형' )
 plt.show()

 

3. 피어슨 상관분석

# 피어슨상관분석수행하기(X와Y선형)
 coef_p = df.corr(method='pearson')
 print("피어슨상관계수(X와Y_linear):")
 print(coef_p)

 

4. 스피어만 상관분석

# 스피어만상관분석수행하기(X와Y선형)
 coef_s = df.corr(method='spearman')
 print("\n스피어만상관계수(X와Y_linear):")
 print(coef_s)

 

5. 켄달 상관분석

# 켄달상관분석수행하기(X와Y선형)
 coef_k = df.corr(method='kendall')
 print("\n켄달 상관계수(X와Y_linear):")
 print(coef_k)

 

 

 

 

 

#고수정 교수님 수업자료 참고

'데이터 분석' 카테고리의 다른 글

데이터 전처리  (0) 2024.11.26
웹 크롤링 기초  (0) 2024.11.23
1. 데이터 분석  (0) 2024.09.21
python기초 정리  (0) 2024.09.21

결측치

-데이터 수집과정에서 값이 기록되지 않은 것

-넘파이 배열에서는 결측치를 na.nan으로 표현

-판다스 데이터프레임에서는 결측치를 NaN으로 표현

 

1.결즉치 처리

pd.isna(df) #결즉치 위치 확인(isna(): 각 값의 결측 유무를 나타냄)
pd.isna(df).sum() #열별 결측치 개수 확인

 

df_drop_nan = df.dropna() #행별로 모든 결측치 제거 ( dropna(): 결측치 제거)
df_drop_nan

 

df_0 = df['C'].fillna(0) # 숫자로 'C'열 결즉치를 0으로 대체 (fillna(): 숫자 결측치 대체)
print(df_0)

-------------------------------------------------------------------
df_missing = df['C'].fillna('missing') # 숫자로 'C'열 결즉치를 missing으로 대체 (fillna(): 문자열 결측치 대체)
df_missing

 

# mean()은 df각 열의 평균을 나타냄 # 평균으로 결즉치 대체
df_mean = df.fillna(df.mean())
print(df,'\n')
print(df_mean)

 

2.결측치 채우기

예시

1. 평균 구하기  

Ave=df.mean()

이상치

 

-데이터셋에서 범위를 크게 벗어난 값

 

1. 이상치 제거

 

 사분위수

  • Q1 (제1사분위수): 데이터의 하위 25% 지점, 
  • Q2 (제2사분위수): 데이터의 중앙값, 즉 전체 데이터의 50%
  • Q3 (제3사분위수): 전체 데이터의 75%
  • Q3 (제4사분위수): 100%

예시

Q1 = df['김밥수'].quantile(0.25) #1사분위수(25%)-> 2
Q2 = df['김밥수'].quantile(0.5) #2사분위수(50%)-> 3
Q3 = df['김밥수'].quantile(0.75) #3사분위수(75%)-> 4
Q4 = df['김밥수'].quantile(1) #4사분위수(100%)-> 10

 

IQR(Interquartile Range) : 데이터의 분포에서 중심부의 폭을 측정 IQR = Q3-Q1

Q3-Q1 => 4-2=>2
  • 이상치 기준 설정: IQR을 기반으로 이상치의 경계를 설정합니다. 일반적으로는 IQR의 1.5배를 사용하여 이상치를 판단합니다. 이때의 기준은 다음과 같습니다:

    -하한 경계: Q1−1.5×IQR
    -상한 경계: Q3+1.5×IQR
 Q1−1.5×IQR => 2-3=>-1 # -1보다 작은 값이 없음
 Q3+1.5×IQR => 4+3=> 7 # 7보다 큰 값인 10이 이상치가 됨

 


<IQR 기법 적용한 이상치 제거 절차>

1.IQR 값 추출

import pandas as pd  # pandas 라이브러리를 불러옵니다.

# 데이터 리스트를 정의합니다.
data = [0, 2, 4, 8, 10, 21]

# DataFrame을 생성하고 'Values'라는 열 이름을 지정합니다.
df = pd.DataFrame(data, columns=['Values'])

# Q1(제1사분위수, 25% 지점)을 계산합니다.
q1 = df['Values'].quantile(0.25)

# Q3(제3사분위수, 75% 지점)을 계산합니다. (변수 이름을 q3로 수정해야 합니다.)
q3 = df['Values'].quantile(0.75)

# Q1 값을 출력합니다.
print('Q1', q1)

# Q3 값을 출력합니다.
print('Q3', q3)

# IQR(사분위 범위)을 계산합니다: Q3 - Q1
iqr_Value = q3 - q1

# IQR 값을 출력합니다.
print('iqr', iqr_Value)

 

2. 최대값, 최소값 추출

upper_V = q3 + 1.5 * iqr_Value
Lower_V = q1 - 1.5 * iqr_Value
print(upper_V,'/', lower_V)

 

3.이상치 제거

df_iqr = df[(df['Values']<upper_V) &(df['Values'] > lower_V)]
df_iqr

정규화

-값을 0부터 1까지의 값으로 전환

 

1. 순서대로 나열

=> 1, 2, 3, 4, 10

 

  • 최대값: 10
  • 최소값: 1

X’(1) = (1-1)/(10-1)  //0

X’(2) = (2-1)/(10-1) //0.1

X’(3) = (3-1)/(10-1) //0.2

X’(4) = (4-1)/(10-1) //0.3

X’(10) = (10-1)/(10-1) //1


 

1.데이터 정규화

import pandas as pd
personA = [160, 180, 150,190]
df = pd.DataFrame(personA, columns=['키'])
df['정규화키'] = (df['키'] - df['키'].min( )) / (df['키'].max( ) - df['키'].min( ))
df

 

 

 

 

 

 

 

 

 

출처: 고수정 교수님 수업자료 참고

'데이터 분석' 카테고리의 다른 글

상관관계분석  (0) 2024.11.30
웹 크롤링 기초  (0) 2024.11.23
1. 데이터 분석  (0) 2024.09.21
python기초 정리  (0) 2024.09.21

<HTML 태그 간단 정리>

  • <div>: 블록 단위를 지정할 때 사용.

    예: <div id="myid">내용</div>, <div class="myclass">내용</div>
    <table>: 표 생성 태그.

  • <tr>: 행을 구성.
  • <th>: 제목 열을 표현 (볼드체).
  • <td>: 일반 열을 구성.
  • <meta>: 웹 페이지의 메타 정보를 설정.

  • <br>: 행을 바꿔줌.

  • <u>, <b>, <i>: 각각 밑줄, 볼드체, 이탤릭체를 지정.

  • <font>: 글자의 크기나 색상을 지정 (HTML5에서는 권장하지 않음).

  • <hr>: 수평선을 그어줌.

    예: <hr size='픽셀수'>로 선의 폭을 지정.
  • <a>: 링크를 설정.

    예: <a href="URL">링크 텍스트</a>
  • <img>: 이미지 파일을 화면에 표시.
    width와 height 속성을 생략하면 원본 크기로 출력.
  • <ul>, <li>:

    <ul>: 순서가 필요 없는 목록 생성.
    <li>: 목록 항목을 표현.
  • <strong>, <em>: 글자를 강조할 때 사용.

  • <p>: 문단을 만들 때 사용.

  • <span>: 한 줄 단위를 지정할 때 사용.

<웹 크롤링과 웹 크롤러 >

  • 인터넷에 공개된 데이터를 가져와 필요한 형식으로 변환하는 것이 데이터를 수집하는 가장 빠른 방법
  • 크롤링(Crawling): 웹상에 공개된 내용에서 데이터를 추출하는 것 
  • 크롤러(Crawler): 웹 크롤링 작업을 하는 프로그램

<urllib.request와 BeautifulSoup>

  • urllib.request: 웹 페이지의 HTML 소스를 가져오는 데 사용.
  • BeautifulSoup: 가져온 HTML 소스를 파싱하여 필요한 데이터를 추출하는 데 사용.

 

 

1. 필요한 라이브러리 설치

  • BeautifulSoup을 사용하기 위해 bs4 패키지를 설치
!pip install bs4

 

2. 필요한 라이브러리 임포트

  • urllib.request를 사용하여 URL에서 HTML 소스를 가져오고, BeautifulSoup을 사용하여 HTML을 파싱
import urllib.request
from bs4 import BeautifulSoup

 

 

3. 웹 페이지 HTML 소스 가져오기

  • 원하는 URL의 HTML 코드를 가져오는 코드
# 가져올 웹 페이지 URL
nateUrl = "가져올 웹 페이지 URL"

# URL 열기
htmlObject = urllib.request.urlopen(nateUrl)

# HTML 코드 읽기
html = htmlObject.read()

# HTML 코드 출력
print(html)




<태그 추출 방법>

1. find()와 findAll() 메서드

  • find(): 특정 태그 중 처음 발견된 하나의 요소를 반환
  • findAll(): 특정 태그를 모두 찾아 리스트 형태로 반환


예시)

1. html 코드가 아래와 같을 때 , url을 사용하여 find()와 findAll()로 태그 추출 예

 

#예시: 'https://www.example.com' 
<html>
<body>
    <div id='myId1'> 고양이 </div>
    <div class='myClass1'> 내 강아지 </div>
    <ul class='myClass2'>
        <li> 사과 </li>
    </ul>
    <div class='myClass1'> 토끼 </div>
    <ul>
        <li class='myClass3'> 바나나 </li>
    </ul>
</body>
</html>

 

from bs4 import BeautifulSoup
import urllib.request

# 웹 페이지 URL 설정
url = 'https://www.example.com' 

# URL 열기
response = urllib.request.urlopen(url)

# HTML 코드 읽기
html_code = response.read()

# BeautifulSoup 객체 생성
bsObject = BeautifulSoup(html_code, 'html.parser')

# find() 사용 예시
tag_div = bsObject.find('div')  # 첫 번째 'div' 태그 찾기
print(tag_div)  # 첫 번째 'div' 태그 출력

# find()를 사용하여 id가 'myId1'인 div 찾기
tag_div_id = bsObject.find('div', {'id': 'myId1'})  # 'myId1'인 div 찾기
print(tag_div_id)  # 해당 'div' 태그 출력

# findAll() 사용 예시
tag_div_all = bsObject.findAll('div')  # 모든 'div' 태그 찾기
for tag in tag_div_all:
    print(tag)  # 각 'div' 태그 출력

 

2. Google Colab에서 html 파일 업로드 해서 태그 추출 예

# 위 url: example.com을 example.html파일로 저장해 파일 업로드

# 1. 파일 업로드
from google.colab import files

# 파일 업로드 함수 호출
uploaded = files.upload()

# 2. HTML 파일 읽기 및 태그 출력
import bs4

# example.html 파일 읽기
webPage = open('example.html', 'rt', encoding='utf8').read()
bsObject = bs4.BeautifulSoup(webPage, 'html.parser')

# 전체 HTML 출력
print(bsObject)

# 첫 번째 'div' 태그 찾기
tag_div = bsObject.find('div')
print(tag_div)

 

 

 

 

출처: 고수정 교수님 수업자료 참고

'데이터 분석' 카테고리의 다른 글

상관관계분석  (0) 2024.11.30
데이터 전처리  (0) 2024.11.26
1. 데이터 분석  (0) 2024.09.21
python기초 정리  (0) 2024.09.21

데이터 과학

통계학, 데이터 분석, 머신러닝 등을 활용하여 문제 해결을 위한 최적의 솔루션을 창출하는 분야

 

데이터 분석

  • 기술통계: 데이터를 정량화하고 요약하는 기법.
  • 탐색적 데이터 분석: 데이터의 주요 특징을 시각적으로 표현하고 분석하는 방법.
  • 가설검정: 데이터를 기반으로 특정 가정의 합당성을 평가하는 통계적 방법.

 

구글 코랩 실행 단축키

• Ctrl + Enter : 해당 셀을 실행하고 커서를 해당 셀에 두는 경우(결과 값만)

• Shift + Enter : 해당 셀을 실행하고 커서를 다음 셀로 이동

• Alt + Enter : 해당 셀을 실행하고 셀을 삽입한 후 커서를 삽입한 셀로 넘기는 경우

 

구글 코랩 셀조작 단축

• Ctrl + M A = 코드 셀 위에 삽입

•Ctrl + M B = 코드 셀 아래 삽입

•Ctrl + M D = 셀 지우기

• Ctrl + M Y = 코드 셀로 변경

• Ctrl + M M = 텍스트 셀로 변경

•Ctrl + M Z = 실행 취소

 

 

 

 

출처: 고수정 교수님 수업자료 참고

'데이터 분석' 카테고리의 다른 글

상관관계분석  (0) 2024.11.30
데이터 전처리  (0) 2024.11.26
웹 크롤링 기초  (0) 2024.11.23
python기초 정리  (0) 2024.09.21

 

a = 5
for i in range(1,4):
print(str(a))

-연산자

 

조건문

if:  조건이 참이면 실행

if~else: 조건이 참이면 if이후만 실행하고 거짓이면 else이후만 실행

if~elif~else 여러조건을 if와 elif에 각각 할당하여 조건이 참인 부분만 실행하고 만약 모두 거짓이면 else 이후만 실행

a = 5
if a == 5:
print(‘맞음’)

 

반복문

-while문 : 주어진 조건이 참인 동안 계속 반복, 조건이 거짓이 되면 반복 종료

a = 5
i=1
#3번 반복하기
while i <= 3:
print(str(a))
i += 1

-for in range 문: 반복할 횟수가 정해져 있을떄 주로 사용

a = 5
for i in range(1,4):
print(str(a))

콜렉션 자료형

-데이터를 효율적으로 처리하기 위한 일종의 자료구조

튜플(Tuple)

-순서가 있는 데이터의 목록

tuple_1 = 1, 2, 3 #(1,2,3)
print(tuple_1, type(tuple_1)) #(1,2,3) <class 'tuple'>
print(len(tuple_1)) #튜플의 크기 ,3

세트

-데이터 중복을 허용하지 않으며, 데이터 입력 순서는 중요하지 않음

set_1 = {1, '가', '나', 1, 2}
set_2 = set({1, 2, 3, 1})
print(set_1) #{1, '가', 2, '나’} 
print(set_2) #{1, 2, 3}

 

리스트: 데이터를 다루기 편리하여 매우 자주 활용되는 콜렉션 자료형

append  추가

insert 삽입

remove삭제

sort정렬

#리스트 생성하기
list_1 = [1, 2, 3]
print(list_1) #[1,2,3]
#리스트 수정
list_1.append(100)
list_1.remove(1)
list_1.insert(0,100) #인덱스 0
print(list_1) #[100,2,3,100]

 

딕셔너리 

- 단어 그대로 사전과 같은 자료형으로 값과 키가 한 쌍을 이루어 요소가 된는 자료구조

-신속하게 값을 찾아내야 할 때 사용

#딕셔너리 생성하기
dic_1 ={'birth':1990}
print(dict_1['birth]) #1990
#키와 값 추가하기
dict_1['weight'] = 60.5
print(dict_1) #{'birth': 1990, 'weight': 60.5}

 

함수: (≒수학에서의 함수)기능을 정의한 가장 작은 단위

# 함수 정의
def sum1(a): #def는 함수를 정의할때 사용/ sum1은 함수이름/ a는 함수가 입력받는 매개변수
for i in a:
print(i)
list_a = [1, 2]
sum1(list_a) # 호출

 

 

 

 

 

출처: 고수정 교수님 수업자료

'데이터 분석' 카테고리의 다른 글

상관관계분석  (0) 2024.11.30
데이터 전처리  (0) 2024.11.26
웹 크롤링 기초  (0) 2024.11.23
1. 데이터 분석  (0) 2024.09.21

+ Recent posts