사이트 도구


태풍:베스트트랙

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
태풍:베스트트랙 [2026/05/06 02:17] – [5. 활용방안] admin태풍:베스트트랙 [2026/05/06 08:24] (현재) – [4. 베스트트랙 제공 위치] admin
줄 17: 줄 17:
 태풍의 위치(위‧경도), 중심기압, 최대풍속, 강도 등급, 강풍반경, 폭풍반경 정보를 포함합니다. 태풍의 위치(위‧경도), 중심기압, 최대풍속, 강도 등급, 강풍반경, 폭풍반경 정보를 포함합니다.
  
-====① 베스트트랙 양식(예시)====+====3.1 베스트트랙 양식(예시)====
  
  
  
-^   등급    태풍호수  ^  날짜(UTC)  ^^^^  위치  ^^  강도  ^^  강풍반경  ^^^  폭풍반경  ^^^  태풍이름  ^+^   등급    태풍 \\ 호수  ^  날짜(UTC)  ^^^^  위치  ^^  강도  ^^  강풍반경  ^^^  폭풍반경  ^^^  태풍이름  ^
 ^ ::: ^ ::: ^  년  ^  월  ^  일  ^  시  ^  경도(°E)  ^  위도(°N)  ^  최대풍속(m/s)  ^  중심기압(hPa)  ^  장반경(km)  ^  단반경(km)  ^  단반경방향(°)  ^  장반경(km)  ^  단반경(km)  ^  단반경방향(°)  ^ ::: ^ ^ ::: ^ ::: ^  년  ^  월  ^  일  ^  시  ^  경도(°E)  ^  위도(°N)  ^  최대풍속(m/s)  ^  중심기압(hPa)  ^  장반경(km)  ^  단반경(km)  ^  단반경방향(°)  ^  장반경(km)  ^  단반경(km)  ^  단반경방향(°)  ^ ::: ^
 |  TS  |  2401  |  2024  |  05  |  25  |  12  |  122.2  |  13.3  |  18  |  1000  |  180  |  110  |  270.0  |  -999  |  -999  |  -999.9  |  EWINIAR  | |  TS  |  2401  |  2024  |  05  |  25  |  12  |  122.2  |  13.3  |  18  |  1000  |  180  |  110  |  270.0  |  -999  |  -999  |  -999.9  |  EWINIAR  |
-====② 베스트트랙 세부내용====+====3.2 베스트트랙 세부내용====
  
 ^  종류  ^^  자리수  ^  세부내용  ^ ^  종류  ^^  자리수  ^  세부내용  ^
줄 50: 줄 50:
 =====4. 베스트트랙 제공 위치===== =====4. 베스트트랙 제공 위치=====
  
- • 기상청 누리집(https://www.kma.go.kr/kma/): 알림‧자료 > 기상간행물 > 국가태풍센터 간행물 > 베스트트랙+ • **기상청 누리집(https://www.kma.go.kr/kma/)**: 알림‧자료 > 기상간행물 > 국가태풍센터 간행물 > 베스트트랙
  
- • 기상청 API허브(https://apihub.kma.go.kr/): 태풍 > 태풍 베스트트랙+ • **기상청 API허브(https://apihub.kma.go.kr/)**: 태풍 > 태풍 베스트트랙
  
- • IBTrACS(International Best Track Archive for Climate Stewardship)+ • **IBTrACS(International Best Track Archive for Climate Stewardship)**
  
 ===== 5. 활용방안 ===== ===== 5. 활용방안 =====
줄 379: 줄 379:
 {{:태풍:typhoon_besttrack_map_2023_2301.png?nolink500}} {{:태풍:typhoon_besttrack_map_2023_2301.png?nolink500}}
 {{:태풍:typhoon_besttrack_map_2023_2311.png?nolink500}} {{:태풍:typhoon_besttrack_map_2023_2311.png?nolink500}}
-====① 데이터 정제 함수==== 
-<code py> 
-   def clean_besttrack_df(df): 
-      if df.empty: 
-          return df 
-      df = df.copy() 
-      numeric_cols = ["TYNO", "YY", "MM", "DD", "HH", "LON", "LAT", "MAX_WS", "PRES", "R15", "R25"] 
-      for col in numeric_cols: 
-          df[col] = pd.to_numeric(df[col], errors="coerce") 
-      # 결측값 처리 
-      for col in ["MAX_WS", "PRES", "R15", "R25"]: 
-          df.loc[df[col] <= -9, col] = pd.NA 
-      # YY가 2자리면 2000년대 보정 
-      if df["YY"].dropna().max() < 100: 
-          df["YYYY"] = df["YY"].apply(lambda x: int(2000 + x) if pd.notna(x) else pd.NA) 
-      else: 
-          df["YYYY"] = df["YY"] 
-      def make_dt(row): 
-          try: 
-              return datetime( 
-                  int(row["YYYY"]), 
-                  int(row["MM"]), 
-                  int(row["DD"]), 
-                  int(row["HH"]) 
-              ) 
-          except Exception: 
-              return pd.NaT 
-      df["datetime"] = df.apply(make_dt, axis=1) 
-      # 유효한 범위만 남김 
-      df = df.dropna(subset=["LAT", "LON"]).copy() 
-      df = df[(df["LAT"] >= -90) & (df["LAT"] <= 90)] 
-      df = df[(df["LON"] >= 0) & (df["LON"] <= 360)] 
-      # 0~360 경도를 -180~180으로 바꾸고 싶으면 아래 사용 
-      # df["LON"] = df["LON"].apply(lambda x: x - 360 if x > 180 else x) 
-      df = df.sort_values("datetime").reset_index(drop=True) 
-      return df 
-</code> 
-====② 지도 시각화 함수====       
-<code py> 
-   def plot_typhoon_track(df): 
-       # 1. 지도 및 투영법 설정 
-       fig = plt.figure(figsize=(12, 10)) 
-       ax = plt.axes(projection=ccrs.PlateCarree()) 
-       # 2. 지형지물 추가 (육지, 바다, 해안선) 
-       ax.add_feature(cfeature.LAND, facecolor="#f2f2f2") 
-       ax.add_feature(cfeature.OCEAN, facecolor="#e6f2ff") 
-       ax.add_feature(cfeature.COASTLINE, linewidth=0.8) 
-       # 3. 태풍 경로 및 중심점 그리기 
-       ax.plot(df["LON"], df["LAT"], color="black", transform=ccrs.PlateCarree()) 
-       ax.scatter(df["LON"], df["LAT"], color="royalblue", transform=ccrs.PlateCarree()) 
-       # 4. 강풍 반경 원 그리기 (반복문을 통해 R15, R25 표시) 
-       for i, row in df.iterrows(): 
-           draw_wind_radius(ax, row["LON"], row["LAT"], row["R15"], "orange", "gold") 
-           draw_wind_radius(ax, row["LON"], row["LAT"], row["R25"], "red", "red") 
-       # 5. 결과물 저장 
-       plt.savefig(OUTPUT_PNG, dpi=150, bbox_inches="tight") 
-</code> 
-====③ 예상결과====    
  
- 
-{{:태풍:typhoon_besttrack_map_2023_2301.png?nolink500}} 
-{{:태풍:typhoon_besttrack_map_2023_2311.png?nolink500}}