제가 folium으로 태풍의 노선을 지도에 썼어요.

18653 단어 foliumPython3Python

문장 내용


어렸을 때 태풍이 이렇게 자주 발생했습니까?10월쯤 태풍이 일본에 왔나요?이런 모호한 의문이 있다.
기상청이 공개한 태풍에 대한 데이터로 이 부근의 의문을 해결할 수 있었으면 좋겠다고 생각해서 많이 해봤어요.

데이터 소스


정부가 운영하는 데이터 목록 사이트에서 얻은 것이다.
데이터 디렉토리 사이트
기상 예보_일기예보, 태풍 자료
이 페이지의 태풍 위치 테이블의 CSV 데이터를 사용합니다.
이 글은 링크에 실린 2001년부터 2019년까지의 CSV 데이터를 사용했다.

folium으로 태풍의 노선을 지도에 써 보세요.


준비


CSV 데이터의 제목이 일본어여서 영어로 바꿨습니다.상당히 적합하다
year,month,day,hour(UTC),typhoon_no,typhoon_name,rank,latitude,longitude,central_pressure,max_wind_speed,50KT_LDD,50KT_LD,50KT_MA,30KT_LDD,30KT_LD,30KT_MA,landing

코드


딱히 방법이 없다
typhoon_plot.py
import folium
import pandas as pd

pd.options.display.precision = 3

# 開始と終了の年
start_year = 2001
end_year = 2019

# 1年単位で処理する
for year in range(start_year, end_year+1):
    print('# ' + str(year) + ' year start')
    # データの読み込み
    df = pd.read_csv('./typhoon/table' + str(year) + '.csv',encoding="SHIFT-JIS")
    typhoon_names = list(df['typhoon_name'])
    latitude = list(df["latitude"])
    longitude = list(df["longitude"])
    landing = list(df["landing"])

    map = folium.Map(location=[35.6611098,139.6953576], zoom_start=3)

    target_typhoon = typhoon_names[0]
    target_location = []
    color = 'blue'
    typhoon_count = 0

    # CSVデータを1行ずつ処理する
    for lt, lo, name, land in zip(latitude, longitude, typhoon_names, landing):
        # 台風の名前が変わったら処理中の台風の情報を地図に書く
        if name != target_typhoon:
            map.add_child(folium.PolyLine(locations=target_location, color=color))
            target_location = [[float(lt), float(lo)]]
            target_typhoon = name
            typhoon_count += 1
        else:
            target_location.append([float(lt), float(lo)])

    map.add_child(folium.PolyLine(locations=target_location, color=color))
    map.save('./output/' + str(year) + '_typhoon_location.html')
    print('# Number of typhoon : ' + str(typhoon_count))
    print('# ' + str(year) + ' year end')

결과 내보내기


출력 결과는 매년 "output"폴더의 산하로 출력됩니다.
출력된 HTML을 열면 이런 느낌이 든다.

2001년부터 2019년까지 출력 결과 이미지를 표시하는 GIF를 만들었습니다.

일본에 상륙한 태풍이 선의 색깔을 바꾸려고 시도하다


역시 일본에 상륙한 태풍은 눈에 띄고 싶었겠지.
데이터의 최종 항목에는 로그인이라는 항목이 있다.접속하면 1, 접속하지 않으면 0.
나는 이 데이터로 색을 나눈다.
주의해야 할 것은 이 상륙은 일본 상륙이 아니라는 것이다.
따라서 일본인지 아닌지 판정이 필요하다.

코드


typhoon_plot.py
import folium
import pandas as pd

pd.options.display.precision = 3

# 開始と終了の年
start_year = 2001
end_year = 2019

# 日本の東西南北の端の座標
east_end = 153.5911
west_end = 122.5601
north_end = 45.3326
south_end = 20.2531

def is_japan_randing(lt, lo, randing):
    if south_end <= lt and lt <= north_end and west_end <= lo and lo <= east_end and randing == 1:
        return True
    else:
        return False

# 1年単位で処理する
for year in range(start_year, end_year+1):
    print('# ' + str(year) + ' year start')
    # データの読み込み
    df = pd.read_csv('./typhoon/table' + str(year) + '.csv',encoding="SHIFT-JIS")
    typhoon_names = list(df['typhoon_name'])
    latitude = list(df["latitude"])
    longitude = list(df["longitude"])
    landing = list(df["landing"])

    map = folium.Map(location=[35.6611098,139.6953576], zoom_start=3)

    target_typhoon = typhoon_names[0]
    target_location = []
    typhoon_count = 0
    color = 'blue'

    # CSVデータを1行ずつ処理する
    for lt, lo, name, land in zip(latitude, longitude, typhoon_names, landing):
        # 台風の名前が変わったら処理中の台風の情報を地図に書く
        if name != target_typhoon:
            map.add_child(folium.PolyLine(locations=target_location, color=color))
            target_location = [[float(lt), float(lo)]]
            target_typhoon = name
            typhoon_count += 1
            color = 'blue'
        else:
            target_location.append([float(lt), float(lo)])
            if is_japan_randing(lt, lo, land):
                color = 'red'

    map.add_child(folium.PolyLine(locations=target_location, color=color))
    map.save('./output/' + str(year) + '_typhoon_location.html')
    print('# Number of typhoon : ' + str(typhoon_count))
    print('# ' + str(year) + ' year end')
'is_japan_randing'에서 일본 내 판정을 하고 있습니다.
느낌이 잡잡한데, 위도는 일본 최북단, 최남단의 범위입니까?경도는 가장 서쪽, 가장 동쪽의 범위에 있습니까?디버깅을 진행하다.

결과



일본에 상륙하는 선만 빨개졌다.
구주와 본주에서 상당히 가까운 선이 있다.다음은 날씨입니다.com의 참조입니다.
태풍의 상륙은 태풍의 중심이 홋카이도, 본주, 구주, 4개국 해안에 도착하는 상황을 가리킨다.(오키나와는 태풍이 상륙한 것이 아니라 통과했다.)태풍의 접근은 반경 300km 이내에 들어가는 것을 가리킨다.
이렇게 생각하면 이 선은 중심의 좌표다.

끝날 때


최근 몇 년 동안 태풍이 일본에 상륙했습니까?이런 의문은 이것을 해 보았지만, 상륙 수는 2001년 이후 아무런 변화가 없는 것 같다.
다음에는 태풍의 규모도 가시화하고 싶습니다.

좋은 웹페이지 즐겨찾기