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