이전 글에서 언급했던 문제였던 경도 위도 데이터들을 추가 해주었으며, 구마다 거리들의 평균을 구했습니다.

추가적으로 귀무가설과 대립가설을 정의 한 후 p-value를 통해  어떤 가설이 맞는지 확인 또한 해보았습니다.

코드를 통해 설명해보겠습니다.

 

1. 상세 주소를 이용하여 위도 경도 알아내기

lat_lng_url = 'https://www.findlatlng.org/#google_vignette'

driver = webdriver.Chrome()
new_lat = []
new_lng = []

url = lat_lng_url
driver.get(url)
driver.maximize_window()

for address in address_ediya:
    a = driver.find_element(By.CLASS_NAME, 'form-control.rounded')
    a.send_keys(address)
    a.send_keys('\n')
    time.sleep(0.5)
    # 위도 경도 크롤링
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')

    text = soup.find_all('div', {'class': 'container-fluid pb-3'})
    print(text[1].text)
    parts = text[1].text.split('/')
    new_lat.append(parts[0].split('위도(Latitude) : ')[1])
    new_lng.append(parts[1].split(' 경도(Longitude) : ')[1])
    # time.sleep(1)
    a.clear()

driver.quit()

위의 코드는 new_lat과 new_lng에 이디야 매장의 위도 경도를 크롤링 후 추가해주는 코드입니다.

이렇게 하여 이디야 매장에서 찾을 수 없었던 위도 경도 값들을 모두 찾을 수 있었습니다.


2. 기존 데이터 프레임에 넣기

우선 제가 추출해낸 데이터들은 이디야 데이터 프레임의 데이터 순서대로 이므로, 추출해낸 경도 위도 값 또한 같은 순서로 뽑혔습니다.

즉, new_lat, new_lng 값을 그냥 넣어주면 알맞게 들어가게 되는 것입니다.

추가해주도록 하겠습니다.

ediya['위도'] = new_lat
ediya['경도'] = new_lng

ediya['경도'] = ediya['경도'].astype('float')
ediya['위도'] = ediya['위도'].astype('float')

ediya

이렇게 데이터가 잘 들어간 것을 확인 할 수 있습니다.

그리고 이전 글과는 달리 확실히 이디야 매장의 분포도 많아진 것을 확인 할 수 있습니다.

근데 이번엔 스타벅스 매장 보다 많아 보이기는 하지만요 ㅎㅎㅎ


3. 다시 평균값 확인 후 이상치 제거

이전 글에서 했던 구마다 평균 구하는 방법을 사용 해본 결과 중랑구의 평균 값만 너무 높은 값이 출력 되었습니다.

그리고 혹시 몰라 이상치가 있는지 더 확인 하기 위해 박스플롯을 이용해보았습니다.

박스플롯 생성하여 확인 결과 맨 끝에 있는 이상치 값인 중랑구 데이터만 확인 되었습니다.

data = pd.Series(value)
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

filtered_data = data[(data >= lower_bound) & (data <= upper_bound)]

그래서 저는 IQR을 사용하여 이상치를 제거해주는 작업 또한 해주었습니다.


4. P-값 계산하기

이제 이상치도 제거했으므로 해당 데이터를 이용하여 다시 mean값을 구하고 해당 mean값을 이용하여 p-값을 구해보겠습니다.

import numpy as np
import scipy.stats as stats

# 이상치 제거후 거리 평균 2.26km 확인
sample_mean = round(np.mean(filtered_data))
t_statistic, p_value = stats.ttest_1samp(filtered_data, sample_mean)
print(f"t-Statistic: {t_statistic}, p-값: {p_value}")
t-Statistic: 1.522071477407014, p-값: 0.1416222723067014

scipy라이브러리에 있는 함수들을 이용하여 p-값을 계산할 수 있었습니다. 

결과는 위의 값과 마찬가지로 0.14로 확인 되었습니다.


5. 귀무가설 & 대립가설 설정 후 결론 도출하기

우선 귀무가설과 대립가설을 설정해보겠습니다.

귀무가설 : 이디야 매장은 스타벅스 매장 근처에 입점하지 않는다.

대립가설 : 이디야 매장은 스타벅스 매장 근처에 입점한다.

 

p-값 = 0.14입니다.

즉, 0.05보다 큰 값이므로 귀무가설을 채택할 수 있게 되므로 결론은 이디야 매장은 스타벅스 매장 근처에 짓지 않는 것으로 확인 되었습니다.


 글은 제로베이스 데이터 분석 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

이상입니다.

728x90
hmm06