Open mingxoxo opened 3 years ago
pd.to_datetime(train['date'])
그리고 요일을 구하는 함수를 사용한다.
--> datetime.dt.weekday : 숫자로 요일을 반환, 0(월) ~ 6(일)
--> datetime.dt.weekday_name : 문자로 요일을 반환, Monday ~ Sunday
train['dayofweek'] = pd.to_datetime(train['date']).dt.weekday
train['date'].value_counts()
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html
LR과 NN으로 모델학습 시킨 결과 성능(오차)값의 큰 변화 없음. 모델 학습을 다른 것을 시도해보느냐가 큰 차이가 있는지 궁금하다.. 추측은 전처리를 어떻게 하느냐가 중요한 것이 아닌가 싶다.
제주 기상정보 크롤링 selenium 사용
기상청 제주 기상자료 주소 : https://www.weather.go.kr/weather/observation/currentweather.jsp?auto_man=m&stn=0&type=t99®=184&tm=2019.10.25.16%3A00&x=16&y=10
observation_text
btn[2]
weather_data_10
Selenium은 주로 웹앱을 테스트하는데 이용하는 프레임워크다. webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어하게 된다. ‘눈에 보이는’ 컨텐츠라면 모두 가져올 수 있다.
전체 코드 : 1등_코드_날씨데이터_크롤링(colab_버전)
패키지 설치 - selenium과 chromedriver
!pip install selenium
!apt-get update # apt install을 정확히 실행하기 위해 설치된 패키지 업데이트
!apt install chromium-chromedriver #패키지 설치
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
cp : 유닉스 셸에서 한 파일을 어떤 장소에서 다른 장소로 또는 다른 파일 시스템으로 옮길때 사용하는 명령어 /usr/lib/chromium-browser/chromedriver 파일을 /usr/bin로 복사한다.
webdriver Chrome Headless : Chrome 브라우저를 GUI 없이 사용할 수 있는 모드 리눅스 서버와 같이 GUI를 제공하지 않는 환경에서 '--no-sandbox' 옵션 추가 disable-dev-shm-usage도 마찬가지로 GUI를 사용할 수 없어서 추가하는 것 같다. 참고 링크
sys.path.insert : 다른 폴더(경로)에 있는 python 파일 import 가능하도록 경로를 환경변수로 지정 --> 경로를 환경변수로 설정하게 해주면 그 경로 안의 프로그램을 실행시킬 때 마다 경로를 매번 입력하지 않아도 된다.
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
from selenium import webdriver
#chrome의 option 설정
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless') #chrome 창이 나오지 않게 해준다.
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
#1등 코드에서의 browser == driver
driver = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
import pandas as pd
import time
weather_data_10 = pd.DataFrame(columns = ['현재일기_10','현재기온_10','체감온도_10','일강수_10']) url = 'http://www.weather.go.kr/weather/observation/currentweather.jsp?auto_man=m&type=t99®=184&tm=2019.10.25.16%3A00&x=19&y=7' driver.get(url) #browser == driver
for i in range(0, 46): i+=1
elem = driver.find_element_by_id('observation_text') elem.clear() elem.send_keys("2019.9.{}.10:00".format(i))
btn = driver.find_elements_by_class_name('btn') btn[2].click()
time.sleep(1) weathers = driver.find_elements_by_css_selector('td') weather_data_10 = weather_data_10.append(pd.DataFrame([[weathers[40].text,weathers[44].text, weathers[46].text, weathers[47].text]],columns=['현재일기_10','현재기온_10','체감온도_10','일강수_10']))
print('success !') driver.close()
1등 코드 데이터 전처리 부분
Query 함수는 아래 6가지 기능을 포함하고 있습니다. 1) 비교 연산자( ==, >, >=, <, <=, != ) 2) in 연산자( in, ==, not in, != ) 3) 논리 연산자(and, or, not) 4) 외부 변수(또는 함수) 참조 연산 -> 외부변수명 또는 함수명 앞에 @를 붙여 사용해야 한다. -> 또는 f-String를 이용하여 외부변수를 미리 참조하는 것도 방법 5) 인덱스 검색 6) 문자열 부분검색( str.contains, str.startswith, str.endswith )
train.groupby([ID])['18~20_ride'].agg([(col1, 'mean')])
: ID를 기준으로 groupby함수를 적용한 그룹객체의 18~20_ride 행의 mean값 계산한 것을 col1행에 넣은 것을 반환하는 듯
출처: https://rfriend.tistory.com/265 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
출처: https://devuna.tistory.com/67 [튜나 개발일기📚]
import geopy.distance #거리 계산해주는 패키지 사용
classgeopy.distance.vincenty(*args, **kwargs)
: Thaddeus Vincenty가 고안한 공식을 사용하여 두 점 사이의 측지(위도경도 정확한 위치?) 거리를 계산한다.coords_jejusi = (33.500770, 126.522761) #제주시의 위도 경도
data['dis_jejusi'] = [geopy.distance.vincenty((data['latitude'].iloc[i],data['longitude'].iloc[i]), coords_jejusi).km for i in range(len(data))]
data의 위도 경도와 제주시의 위도경도의 거리를 계산한다. 여기서 km은 kilometers
출처: https://rfriend.tistory.com/275 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
출처 : https://ko.wikipedia.org/wiki/%EB%A9%B1%ED%8F%89%EA%B7%A0
import shutil
filename = 'test.txt' src = 'home/banana/' dir = 'home/banana/txt/' shutil.move(src+filename, dir+filename)
> 출처 : https://ourcstory.tistory.com/96
트리기반의 학습 알고리즘인 gradient boosting 방식의 프레임 워크
import lightgbm as lgb
속도가 빠르다.
큰 사이즈의 데이터를 다룰 수 있고 실행시킬 때 적은 메모리 차지
결과의 정확도에 초점을 맞춘다.
GPU 학습을 지원 작은 데이터 셋에 사용하는 것은 추천하지 않는다. overfitting에 민감해 작은 데이터에 대해서는 과적합하기 쉽다. 10,000 이상의 row (행) 을 가진 데이터에 사용하는 것을 권유한다.
핵심 파라미터
dart 특정 tree를 drop하여 과적합을 방지한다. 인공신경망에서의 dropout과 동일하다. 일반적인 경우 조금 더 나은 예측력을 보여주지만 절대적인 것은 아니라고 한다.
https://dacon.io/competitions/official/229255/overview/
기온 공공데이터 사용 : https://data.kma.go.kr/stcs/grnd/grndTaList.do?pgmNo=70 강수량 공공데이터 사용 : https://data.kma.go.kr/stcs/grnd/grndRnList.do?pgmNo=69