957 storms entered Philippine waters across the 45 finalised satellite-era seasons — 66.2% of every storm in the western Pacific, the busiest basin on earth. 80 of them reached category 5. This is a track archive, so it says nothing about what any of them cost.
The archive holds 4,105 western Pacific storms since 1884, and 2,905 of them passed through Philippine waters. But only 957 can be used for any rate: intensity is missing for 100.0% of pre-1945 observations, so a storm count from 1884 charts the arrival of satellites rather than any change in the weather.
The archive goes back to 1884 and the temptation is to use all of it. The intensity column says why that would be wrong: before anyone was measuring, there is nothing to measure.
Of observations carry no wind speed — 1,324 storms with no intensity of any kind. A check asserts none of them is given one.
Aircraft reconnaissance. Better, and still missing more than two observations in five.
Satellite era. Every rate, trend and ranking on this page uses only these 957 storms, out of 2,905 that reached these waters in total.
Storms entering the box each season since 1980. The count moves around a lot — between 13 and 28 — and the page draws no trend line through it, because 45 seasons of a noisy count is not enough to establish one.
Mean across the 45 finalised seasons from 1980.
2010 was the quietest and 1985 the busiest, at 28.
Of every storm the western Pacific produced. This is the single most important number about Philippine geography.
Each storm counted once, at its own peak category, so a slow storm does not outweigh a fast one. The distribution has two humps and the lower one is bigger.
Peaked below category 1: depressions and tropical storms. They still flood.
209 storms. The tail that does the damage.
8.36% of the total, about 1.78 a year across the period.
The most intense storms to enter these waters since 1980, by peak one-minute sustained wind. Note what this ranking is sensitive to: satellite intensity estimation improved substantially over the period, so a list weighted toward recent decades is partly a real signal and partly a measurement one.
315 km/h, shared by 4 storms: Haiyan, Meranti, Goni, Surigae.
The record-holders cluster in the last decade, the most recent in 2021. Whether that is intensification or better measurement is not something this archive can settle.
Same caveat, more sharply. The Dvorak technique for estimating intensity from satellite imagery was revised repeatedly across this period.
Storms by calendar month across the whole satellite era. Most tropical basins have a closed season. This one does not, and a check asserts all twelve months are present so a quiet month cannot silently drop off the chart.
The peak month, with 184 storms across 45 years.
Four months carrying nearly two thirds of the year.
The quiet quarter, and still not zero. February is the quietest month of all with 12 storms in 45 years.
Share of storms in the box each season that record a landfall observation. This is the weakest measure on the page and the reason is worth stating: IBTrACS gives distance to the nearest land, not which country's land, so a storm counted here may have made landfall on Taiwan or Vietnam.
466 of the storms in these waters record a landfall.
In 1980.
In 2022. The year-to-year swing is larger than any trend in it.
The page this replaced was built on impact figures. IBTrACS has none, and that gap is the most important thing to be clear about.
Not one column. The previous version of this page led with 43.9 million people affected and 4.2 million houses damaged, sourced to NDRRMC and DROMIC. Those are real organisations publishing real reports, and this analysis does not read them — so the figures are gone rather than restated. A check asserts the impact count stays at zero.
5-25N, 115-135E is the bounding rectangle of the Philippine Area of Responsibility, which is a polygon. Counts here slightly exceed true PAR entries. The rectangle is used because it is reproducible from two lines of SQL; the difference is stated rather than hidden.
The archive records distance to the nearest land. A storm with a landfall observation inside the box may have come ashore in Taiwan, Vietnam or southern China. Section 6 is a share of storms recording any landfall, not a count of Philippine landfalls, and it says so on the page rather than only here.
PAGASA assigns its own names inside the PAR, which is why the 2013 storm is Yolanda in the Philippines and Haiyan everywhere else. IBTrACS carries the international name and this page uses it throughout.
45 seasons of a count that swings between 13 and 28 does not establish a direction, and the intensity ranking is confounded by measurement improvement. The page reports the distribution and declines the trend.
One fetcher over a 109 MB archive, with the interesting decisions in the filtering.
TRACK_TYPE is filtered to 'main', which drops spur and provisional duplicates of the same storm. It also excludes the current season, whose tracks are still provisional, so the latest season present is finalised by construction — and that is how the last usable year is derived rather than written into the script, where it would go stale.
IBTrACS puts column names on line 1 and units on line 2. Skipping two lines loses the header; the second row is dropped instead by requiring SEASON to parse as an integer, which is true of every real row and of no units row.
The intensity distribution groups by storm id and takes the maximum category. Counting observations instead would weight a slow-moving storm above a fast one, and a check asserts the distribution sums to the storm count rather than the observation count.
Category 5 begins at 137 knots. A check fails on any storm flagged 5 below that, or above it and not flagged 5, because two columns coming apart produces a ranking that still looks plausible.
ERA = 1980, used for every rate and stated on the page. It is a judgement, and the checks record what it is a judgement about: one asserts that seasons before 1940 carry essentially no intensity data, so if that ever stopped being true the threshold should be revisited.
109 MB that NOAA revises far less often than this page is rebuilt. It is not committed.
Every figure on this page traces to one of these, through a CSV in
data/ph-typhoon/. Each is checked against its source query on every
build.
243,281 six-hourly observations of 4,105 western Pacific storms from 1884: position, one-minute sustained wind, Saffir-Simpson category, and distance to the nearest land — A track archive with no impact data of any kind — no deaths, damage or people affected. Intensity is missing for 100% of pre-1945 observations and 43.3% of 1945-69, so every rate and trend here starts at 1980.
The Philippine authority for the Area of Responsibility and for local storm names — Cited for provenance and for the PAR definition. pagasa.dost.gov.ph is not reachable from a script here, and IBTrACS carries international names — Haiyan rather than Yolanda.
Disaster response reports carrying people affected, houses damaged and barangays served — The source the previous version of this page cited for its four impact figures. It is named here because impact is the obvious question this page cannot answer; none of its numbers are used, and IBTrACS contains none of them.
If you have raw data and want to transform it into meaningful insights like this analysis, let's connect. I can help with data cleaning, visualization, and actionable recommendations.
Have a dataset you'd like analyzed or need a mini AI project as a starter guide? Send me your suggestions!
I wrote a companion post — “Two Thirds Of Every Pacific Storm Comes Here” — in simple, everyday words.