본문 바로가기
Programming Languages/Python

Chapter 15. Requests

by 더 이프 2023. 3. 28.
728x90

Chapter 15. Requests

 1. Requests

  ⦁ requests를 import하여 사용 가능

  ⦁ get함수를 사용하여 url을 통해 데이터를 가져옴

 a. requests

# requests
import requests
x = requests.get('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')
print(x.text)

# 결과값
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
......
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3.0,5.1,1.8,Iris-virginica

 2. UCI Machine Learning Repositiory 사용

  ⦁ 구글에 UCI Machin Learning Repositiory 검색

  ⦁ 원하는 데이터를 선택하여 Data Folder 클릭

  ⦁ .data 파일의 링크 주소를 복사하여 requests에 적용

 3. Example

  ⦁ 자동차 연비 데이터 정제

   - uci repo url: https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data

   - requests 패키지를 이용하여 데이터를 로딩

   - 상관도는 -1 ~ 1의 수치를 가지는데 1에 가까우면 양의 상관도로 서로 연관성이 높으며, -1에 가까우면 음의 상관도로 연관성이 낮음

 a. 자동차 연비 데이터

# 자동차 연비 데이터

# 함수 설정
import math
# 평균
def mean(num_list):
    return sum(num_list)/len(num_list)
# 중간값
def median(num_list):
    num_list.sort()
    if len(num_list)%2==1:
        #//는 몫만 가지고 옴
        i = (len(num_list))//2
        return num_list[i]
    else:
        i = len(num_list)//2
        return (num_list[i] + num_list[i-1])/2
# 편차
def dev(num_list):
    m = mean(num_list)
    return [x-m for x in num_list]
# 분산
def var(num_list):
    n = len(num_list)
    d = dev(num_list)
    return sum([x*x for x in d])/(n-1)
# 표준편차
def stdev(num_list):
    return math.sqrt(var(num_list))
# 공분산
def covar(list_1, list_2):
    n = len(list_1)
    list_1_dev = dev(list_1)
    list_2_dev = dev(list_2)
    return sum(x*y for x, y in zip (list_1_dev,list_2_dev))/(n-1)
#상관도(-1 ~ 1)
def corel(list_1,list_2):
    return covar(list_1, list_2)/(stdev(list_1)*stdev(list_2))
import requests
x = requests.get('https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data')

pass1 = x.text.split('\n') # by-line
pass2 = [] #각 샘플(줄)별 숫자부분, 차명 부분 분리, split('\t')
for line in pass1:
    pass2.append(line.split('\t'))
    
pass3 = [] # 숫자 부분 분리. split()
for e in pass2:
    try:
        y = e[0].split()
        y.append(e[1])
        pass3.append(y)
    except:
        pass
print(pass3[:3])

# 결과값
[['18.0', '8', '307.0', '130.0', '3504.', '12.0', '70', '1', '"chevrolet chevelle malibu"'], ['15.0', '8', '350.0', '165.0', '3693.', '11.5', '70', '1', '"buick skylark 320"'], ['18.0', '8', '318.0', '150.0', '3436.', '11.0', '70', '1', '"plymouth satellite"']]

   - 계산을 위해 문자형을 float 형태로 형변환 및 데이터 내 " 제거

#float으로 형변환, 차명"제거
for e in pass3:
    for i,s in enumerate(e[:-1]):
        try:
            e[i] = float(s)
        except:
            e[i] = 0.0
    e[-1]=e[-1].strip('"')

# 연비, 배기량, 무게 list 생성
mpg_list=[] #연비
disp_list=[] #배기량
wei_list=[]
for e in pass3:
    mpg_list.append(e[0])
    disp_list.append(e[2])
    wei_list.append(e[4])

# 연비, 배기량, 무게 평균, 표준편차
print('연비 평균 : {},\n연비 표준편차 : {}'.format(mean(mpg_list),stdev(mpg_list)))
print('배기량 평균 : {},\n배기량 표준편차 : {}'.format(mean(disp_list),stdev(disp_list)))
print('무게 평균 : {},\n무게 표준편차 : {}'.format(mean(wei_list),stdev(wei_list)))

# 결과값
연비 평균 : 23.514572864321615,
연비 표준편차 : 7.815984312565782
배기량 평균 : 193.42587939698493,
배기량 표준편차 : 104.26983817119581
무게 평균 : 2970.424623115578,
무게 표준편차 : 846.8417741973271
# 연비, 배기량 상관도
print('상관도 : {}'.format(corel(mpg_list,disp_list)))

# 연비, 무게 상관도
print('상관도 : {}'.format(corel(mpg_list,wei_list)))

# 결과값
상관도 : -0.8042028248058988
상관도 : -0.8317409332443351