1. 파이썬을 이용한 기상자료 처리
파이콘 한국 2017 ( Science / Data ]
2017. 08. 13. (일) 15:15 15:40 / 코엑스, 그랜드볼룸 104
권 태 헌
2. 발표 순서
• Part 1 : 파이썬 사용 사례
• Part 2 : 기상 관측 자료 처리
1. 기상 관측 자료
2. 관측 자료 처리시스템 구축 : class, re, os, glob, shutil …
3. 품질검사와 Flux 자료 처리 : Pandas, Scipy
4. Mapping : Folium
5. 코딩
6. 참고
• Part 3 : 결론
4. PyROOT - CERN
“Why Python? CMS already uses it for its configuration files. It is a powerful language that many
consider both much easier to read and easier to write than C++.”
Part 1 1. 파이썬 사용 사례
- 85개국, 580개 대학, 8000여명 과학자
- 연간 250 PT
- www (팀 버너스리)
- 힉스 입자
5. QuTiP
Part 1 1. 파이썬 사용 사례
Python code : 2.011 Mcell/s
Python+Fortran : 198.178 Mcell/s
* Paul Nation, Korea University
6. 미국기상학회(AMS) – Python Symposium
13 topics
6 sessions, 1 lecture, 1 poster session
43 presentations
23 - 24 January 2017
Part 1 1. 파이썬 사용 사례
9. 기상 관측 자료
Part 2 1. 기상 관측 자료
<자동기상관측장비>
<고층> <위성>
<레이더>
<해양>
10. 지점,일시,기온(°C),강수량(0.5)(mm),풍향(deg),풍속(m/s)
400,2014-01-01 0:00,4.8,0,268.8,2.7
400,2014-01-01 0:01,4.8,0,267.2,2.1
400,2014-01-01 0:02,4.8,0,308.8,1.2
400,2014-01-01 0:03,4.7,0,298.1,2.7
400,2014-01-01 0:04,4.8,0,270.3,2.3
400,2014-01-01 0:05,4.8,0,261.4,1.8
400,2014-01-01 0:06,4.7,0,274.9,1.9
400,2014-01-01 0:07,4.7,0,288.3,1.6
400,2014-01-01 0:08,4.7,0,293.2,1.8
400,2014-01-01 0:09,4.7,0,304.1,1.9
400,2014-01-01 0:10,4.7,0,306.8,2.8
400,2014-01-01 0:11,4.7,0,282.2,2
400,2014-01-01 0:12,4.6,0,308.4,1.1
400,2014-01-01 0:13,4.7,0,271.2,2.7
400,2014-01-01 0:14,4.7,0,233.5,2.3
400,2014-01-01 0:15,4.7,0,268.6,2.6
400,2014-01-01 0:16,4.7,0,284.2,1.7
….
2014년 서울 지역 (400) AWS 기온 관측 자료 시계열 그래프
Part 2 1. 기상 관측 자료
기상 관측 자료를 정해진 시간내에 수집/저장/처리/평가/표출 하는 일
기상 관측 자료 처리
11. 파이썬으로 처리한 기상 관측 자료 - 바람 / 공간분포
<바람장미 (Matplotlib)> <기온 Contour (Scipy, Folium)>
Part 2 1. 기상 관측 자료
2012년 서울지역 AWS 바람 관측 자료 / 2017년 수도권 지역 기온 관측 자료
12. System Outline
Observation
Data Acquisition
System (DAS)
Data Storage
System(DSS)
Job Process
System
(JPS)
Web Service
System (WSS)
Internal
Management
System
Raw data
Query
Raw data Data
QC
Result
Monitoring
Location
Transmission
Evaluation
Part 2 2. 관측 자료 처리시스템
13. 개 발 과 정
항목 분석 설계 개발 현재단계
Level 0
O 관측계획안
- 관측자료 형식/크기/주기
O 자료 흐름도 O 자료처리 계획안 O
Level 1
O 관측장비별 1차분석
- 관측자료 흐름도
O 자료처리 알고리즘
O 파일처리 규칙 - 대분류
O 자료처리 알고리즘 O
Level 2
O 관측장비별 2차분석
- 관측자료별 흐름도
- 자료 파일 이름/형식/크기
O 자료처리 세부 알고리즘
O 파일 처리 규칙 - 상세분류
O 자료처리 세부 알고리즘 (파일 처리) O
Level 3
O 관측 장비별 3차분석
- 관측 자료 상세 흐름도
- 생산 원리
- 관측자료 샘플링
O모니터링 / 표출 / QC O QC, 표출/모니터링 -
Part 2 2. 관측 자료 처리시스템
14. Part 2 2. 관측 자료 처리시스템
Data Flow Chart
Sensor
Data Logger
Modem
Serial
Leased Line
Laptop
Portable Disk
CDMA
M2M
Data Acquisition
Servers
M2M
Servers
Processing
System
Storage
Users
Sensing
Operating
Computer
Laptop / Portable Disk
16. 프로그램 수행 절차
시작
Crontab
정상 작동
(매시간)
/home/specore/LOG/
ammp_Crontab.log
PID
/home/specore/LOG/
ammp_sh_YYYYMM
DD.log
종료
자료 처리
프로그램 실행
/home/AMMP
로 데이터 이동
/home/nimrftp/
DATA 와 동기화
(60일 보전)
Yes
No
No
Yes
/home/specore/LOG/
ammp_python_YYYY
MMDD.log
DISK1 동기화,
DISK2 백업
Part 2 2. 관측 자료 처리시스템
17. 자료 처리 프로그램 시작/종료
Part 2 2. 관측 자료 처리시스템
프로그램 시작
날짜, 폴더
정보
프로그램 종료
실행순서 항목 주요 사용 기능
1 날짜/폴더 정보 datetime.datetime
2 폴더 유무 os.path.isdir
3 폴더 사용 여부 OS.popen, lsof (Shell)
4 자료파일 유무 glob
5 종료 signal os.path.isfile
6 파일처리 여부 tailer.tail
7 프로그램 종료 sys.exit
날짜별
폴더 유무
폴더
사용
여부
파일
유무
파일
처리
여부
종료
signal 유무
Yes
Yes
Yes
No
No
No
No
자료 처리 시
작
Yes
Yes
No
18. 설정 파일 작성
Part 2 2. 관측 자료 처리시스템
CKFBDS;CKFBDS??-$YYYY$MM$DD-$hh$mm-DataLog_User.dat;/home/AMMP/AQGH/YYYYMM/DD/;
CKFBDS##-YYYYMMDD-hhmm-DataLog_User.dat
2. 관측 자료 파일 구조 파악
시리얼 번호
고정 부분
년도 월 일 시간 분
변경 부분 변경 부분 고정 부분
3. 설정 파일 형식
key
구분 기호 구분 기호 구분 기호
File Name
시리얼번호의 숫
자가 바뀔 경우에
대비하여 ??를 사
용
연도, 월, 일, 시, 분 앞에 $를 놓아 고정 이
름이 아닌 변경 이름임을 표시
Directory Name
프로그램이 찾은 파일 이름으로 부터
추출되는 날짜여서 $를 생략하고 “년
월 / 일” 표시
1.설정 파일의 역활
•하나의 알고리즘으로 가능한 모든 자료 처리
•정확도 향상
•확장/이식 용이성 : 알고리즘에 맞지 않는 자료 발생시 설정파일만 수정해도 문제 해결
•프로그램 통제
19. 파일 처리
실행순서 항목 주요 사용 기능
1 설정 파일 내용 읽기 try except, with open, class
2 ?' 위치 찾기
re.compile, re.finditer, re.group,
re.span
3 YYYY, MM, DD 위치 찾기 re.compile, re.sub
4 파일 결정 re.compile
5 대상 폴더 경로 결정 Dict, replace
번호 항목 주요 사용 기능
1 폴더 생성 os.makedirs
2 이동 shutil.move
3 삭제 os.remove
< 파일 정보 분석>
< 파일 처리>
Part 2 2. 관측 자료 처리시스템
자료처리시
관측자료 파일
리스트 추출
설정 파일
정보 분석
복사/이동 폴
더 결정
설정에
맞는 파일
TBD
자료처리끝파일 이동
Yes No
YYYY, MM, DD,
HH, MI, “[?]+” 위치와
값이 필요. 어렵지 않지
만, 주의 필요
20. JPS - 품질검사
Part 2 3. 품질 검사
RQMOD (Real-Time Quality control system for Meteorological Observation Data)
21. Pandas를 이용한 품질검사
def MissingDataFilling(timestamps, values):
time_format='%Y-%m-%d %H:%M:%S'
time_str_0 = timestamps[0]
time_str_1 = timestamps[-1]
begin = dt.datetime.strptime(time_str_0, time_format)
end = dt.datetime.strptime(time_str_1, time_format)
dict_tms_temp={}
for i,items in enumerate(timestamps):
dict_tms_temp[items]=values[i]
if values[i] == '':
dict_tms_temp[items]='-99999.0'
DR = DataResampling()
while begin <= end:
tms_str=begin.strftime(time_format)
try :
values_resample = dict_tms_temp[tms_str]
except ValueError :
values_resample = '-99999.0'
except Exception as e :
pass
#print str(e)
DR.Add_Value(tms_str, values_resample)
values_resample = '-99999.0'
begin += td(0,60)
return (DR)
data=pd.read_csv(INPUT, index_col=0,
skiprows=[0,2,3],parse_dates=0)
data1=data.astype(float)
das=data1.resample('100L’)
❖ Parse _dates : 날짜가 있는 칼럼 알려 주기
❖ .astype(float) : data 의 자료형을 float으로 해
주어야 오류 없이 처리 됨
❖ 100L = 100 millisecond
<Pandas를 이용하지 않은 경우> < Pandas를 이용 >
Part 2 3. 품질 검사
23. Flux 자료 표출
Part 2 3. Flux 자료 처리
1개 화면 - 6개 그래프; 1개 그래프 - 1개 자료, 3개 계산
결과
총 160704000 값, 이런 그래프 240여개를
원래 컴퓨터는 반복 작업을 잘 한다.
파이썬으로 그 일을 쉽게 할 수 있다.
관측 자료 파일 1개 —> —> 한번에 그리기!
24. Mapping : 관측지점
Part 2 4. Mapping
import folium
import pandas as pd
file_csv = 'aws_201701011200.txt'
data = pd.read_csv(file_csv, na_values=['NAN'])
maps = folium.Map(location = [37.5602, 126.982], zoom_start=11, tiles='Stamen
Toner')
for inum, st_id in enumerate(data.STATION_ID):
st_latitude = data.STATION_LATITUDE[inum]
st_longitude = data.STATION_LONGITUDE[inum]
folium.Marker([st_latitude,st_longitude],popup=str(st_id)).add_to(maps)
maps.save('skt_site_20161116.html'
25. 기온 Contour
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata
file_csv = 'aws_201701011200.txt'
data = pd.read_csv(file_csv, na_values=['NAN'])
y = data.STATION_LATITUDE
x = data.STATION_LONGITUDE
z = data.TEMPERATURE_TC
(xmax, xmin) = (x.max(), x.min())
(ymax, ymin) = (y.max(), y.min())
print ymax, ymin, xmax, xmin
points = (x.values,y.values)
values = z.values
grid_x, grid_y = np.mgrid[xmin:xmax:300j, ymin:ymax:300j]
grid_z0 = griddata(points, values, (grid_x, grid_y),
method='nearest')
plt.imshow(grid_z0.T, extent=(xmin,xmax,ymin,ymax),
origin='lower')
plt.colorbar()
plt.savefig('v5_nearest.png’)
Part 2 4. Mapping
27. 코딩 방법의 예
• 메인 프로그램과 서브 프로그램으로 나눠서 작성
예> Ammp_main.py, Ammp_cf.py
• 변수명은 길어도 상관없으니 이름만으로도 의미를 알 수 있게 (소
문자)
예> get_rules_from_seutup_file
• 함수/클래스 명은 파스칼 기법
예> WorkMeteorologyDataPosting
• 함수/클래스 인스턴스 이름은 대문자로
예> WMDP = WorkMeteorologyDataPosting()
• 메인 프로그램은 알고리즘의 큰 제목만, 상세기능은 서브프로그램
에서
1. Index number와 인자가 모두 필요한 for 문에서는
enumerate 를 사용하자
2. 리스트 크기가 큰 경우 index() 를 사용하여 index
number를 찾기 보다는 For 문이 더 빠름
예> 리스트 크기가 10만개의 경우 index() 사용시
47.258초, 사전형 자료로 만들고 for 문 두번 썼을 때,
0.043 초 (47초는 1분 단위로 자료처리하거나 Model
에 자료 입력시 허용 불가한 시간 임)
3. 2 GB가 넘는 자료의 pandas.DataFrame.resample 보
다는 pytables를 사용
Part 2 5. 코딩
29. Part 3 : 결론
❖ 파이썬으로 기상 자료 처리시스템 개발한 사례를 보여주고 있다.
❖ Part1 과 Part2 에서 보여 줬듯이, IT 분야 뿐만 아니라 과학 분야에
서도 파이썬의 사용이 다양하고 많아져서 결과적으로 중요해졌다.
❖ 작업의 효율성을 높이기 위해 파이썬에 주목할 필요성이 있다.
32. 설정 파일 (2) : 자료의 흐름 분석 -
CRDS (cavity ringdown spectroscopy) 예시
내부 PC
외장하드
/data/20170724/CKFBDS01-20170724-1340-DataLog_User.dat
파일 형식 분석
CKFBDS??-$YYYY$MM$DD-$hh$mm-DataLog_User.dat
파일 전송 : SFTP (노트북)
/data/20170724/CKFBDS01-20170724-1340-DataLog_User.dat
ABOS
/home/specore/data/20170724/CKFBDS01-20170724-1340-DataLog_User.dat
C:PicarroG2000LogArchive [year][month][day][hour]
(15분 간격 자료 생산, 90일 보관)
최
초
자
료
처
리
시
스
템
에
서
설
계
한
내
용