이전 글에서 언급했던 문제였던 경도 위도 데이터들을 추가 해주었으며, 구마다 거리들의 평균을 구했습니다.
추가적으로 귀무가설과 대립가설을 정의 한 후 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보다 큰 값이므로 귀무가설을 채택할 수 있게 되므로 결론은 이디야 매장은 스타벅스 매장 근처에 짓지 않는 것으로 확인 되었습니다.
글은 제로베이스 데이터 분석 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
이상입니다.
'Project > data analysis' 카테고리의 다른 글
[zero-base] 셀프 주유소는 정말로 저렴한가? (보충) (0) | 2024.10.28 |
---|---|
[zero-base] 셀프 주유소는 정말로 저렴한가? (1) | 2024.10.25 |
[zero-base] 스타벅스와 이디야 매장 거리 분석 (1) | 2024.10.22 |
데이터 분석 및 시각화하기 (영화 평점과 티켓 수익률) - Project 4 (4) | 2024.09.13 |
데이터 분석 및 시각화 하기 (영화 평점과 티켓 수익률) - Project 3 (1) | 2024.09.13 |