-
[datetime]데이터 자동 수집을 위한 가이드정보 자동 수집 가이드 2021. 11. 25. 01:50
데이터 자동 수집을 위한 가이드¶
데이터 수집을 자동으로 해보자. 이번에는 crontab와 sqlite3를 사용하여 DB에 자동으로 적재 해보려한다. 추가로 csv도 누적으로 적재하는 연습을 가져보려 한다. 이번 연습을 통해 잘 마무리를 하고 앞으로 주식 데이터나, 날씨 또는 여러가지의 데이터들을 수집 하는 과정을 가지려 한다. 전반적으로 목차는 다음과 같다.
- 주피터 파일 생성 후 데이터 수집 코드 생성
- CSV저장 및 db 저장
- 주피터 파일 파이썬으로 변경
- crontab 을 사용하여 분당 데이터 적재
우선 주피터 파일에 데이터 수집 코드를 작성 하자
1.코드 작성¶
1-1.라이브러리 불러오기¶
In [18]:import pandas as pd import datetime import sqlite3
1-2.datetime 불러오기¶
In [2]:today = datetime.datetime.now()
1-3.칼럼 추가하기¶
In [19]:datetime_df = pd.DataFrame({'year':[today.year], 'month':[today.month], 'day':[today.day], 'hour':[today.hour], 'minute':[today.minute]})
In [4]:datetime_df
Out[4]:year month day hour minute 0 2021 11 24 16 42 1-4.csv 생성¶
In [20]:datetime_df.to_csv('datetime_df.csv', index=False, mode ='a', header = False)
In [6]:# pd.read_csv('datetime_df.csv')
In [21]:conn = sqlite3.connect("datetime5.db")
2-2.cursor 생성¶
- conn.cursor을 통해 Cursor를 하나 생성
In [8]:cur = conn.cursor()
2-3.conn.execute를 통해 datetime_data5 테이블을 생성합니다.¶
In [9]:conn.execute('CREATE TABLE IF NOT EXISTS datetime_data5(year INTEGER, month INTEGER, day INTEGER, hour INTERGER, min INTERGER)')
Out[9]:<sqlite3.Cursor at 0x7f03c250bf10>
2-4.data int 변경¶
dataframe에서 데이터 선택수 int로 변경 (SQL 테이블 생성시 자료형을 INTERGER 로 했기 때문)
In [10]:year_value = int(datetime_df['year']) month_value = int(datetime_df['month']) day_value = int(datetime_df['day']) hour_value = int(datetime_df['hour']) minute_value = int(datetime_df['minute'])
2-5.데이터 삽입 (insert)¶
생성해둔 데이터 프레임 datetime_df에서 각각의 데이터를 삽입
In [11]:cur.execute('INSERT INTO datetime_data5 VALUES(:year, :month, :day, :hour, :minute);', {"year":year_value, "month":month_value, "day":day_value, "hour": hour_value, "minute": minute_value})
Out[11]:<sqlite3.Cursor at 0x7f03c250bea0>
2-6. 데이터 확인( select 구문 )¶
In [12]:cur.execute("SELECT month, day, hour, min FROM datetime_data5")
Out[12]:<sqlite3.Cursor at 0x7f03c250bea0>
2-7. pandas사용하여 데이터 프레임 호출¶
In [13]:df = pd.DataFrame(cur.fetchall())
In [14]:df
Out[14]:0 1 2 3 0 11 24 9 49 1 11 24 9 50 2 11 24 9 51 3 11 24 9 52 4 11 24 9 53 ... ... ... ... ... 395 11 24 16 39 396 11 24 16 40 397 11 24 16 41 398 11 24 16 42 399 11 24 16 42 400 rows × 4 columns
2-8.변경사항 저장 (commit)¶
In [15]:conn.commit()
In [16]:#conn.rollback()
2-9.DB 종료¶
In [17]:conn.close()
이렇게 데이터 수집 코드를 작성하고 주피터 파일을 파이썬 파일로 변경 해보자.
3.크론탭 사용¶
3-1.주피터 파일 파이썬으로 변경¶
$ jupyter nbconvert --to script [파일명].ipynb
파이썬 파일을 생성 했으니 이제 크론탭을 사용하여 자동화를 해보자. 이번에는 크론탭을 사용하지만 조만간에 airflow를 공부해서 포스팅 해보려 한다.
3-1.자동화를 위한 크론탭¶
크론탭 간략 설명¶
- crontab -e (크론탭 설정창 이동 코드)
- crontab -l (설정된 명령어 리스트 보기 코드)
주기 설정¶
- 요일(0 ~ 7)은 0과7은 일요일,1(월요일) ~ 6(토요일) ### 주기 설정 예
- 45 : 매시간 45분에 작업을 실행(1:45, 2:45, 3:45, 4:45.......)
- 40 7 4 : 매주 목요일 오전 7시 40분에 작업 실행.
3-2 리눅스 명령어 설정¶
crontab -e 입력 하면 설정창으로 이동 한다. 그러면 a를 눌러 INSERT 모드로 변경 후 제일 밑으로 내려가 코드를 입력!
주기 설정은 아무것도 입력 안하면 1분 단위로 실행 되는 코드 이다.다른 예도 밑에 적어 두도록 하겠다.
위 경로 선택/ 절대경로 선택까지 완료 후 Esc -> : -> wq(저장하고 나가기) -> Enter 나가기!pd.read_csv('datetime_df.csv')
4-2. DB 확인¶
df = pd.DataFrame(cur.fetchall())
df이렇게 마무리가 되었다. 이렇게 자동화가 되면 다음에 나에게 필요한 정보를 수집 할 때 정말 편리하면서 정보 수집에 많은 도움이 될거 같아 좋아보인다. 지금은 시간데이터만 자동화 했지만 다음에 더 좋은 정보를 수집해서 올려보도록 하자.
'정보 자동 수집 가이드' 카테고리의 다른 글
KRX(한국거래소)주식 정보 가져오기 (0) 2021.12.01 [krx]데이터 자동 수집을 위한 가이드 (0) 2021.11.26