The raw data
The source is NUFORC, the National UFO Reporting Center, accessed through the public TidyTuesday mirror. Each row is one report: a timestamp, a city and state, latitude and longitude, a reported shape, a duration, and a free-text description. Below is a slice of the real log. Note the flagged cells, where the shape was logged as a placeholder like na or unknown. That is the kind of mess cleaning has to handle.
| latitude | longitude | state | year | hour | shape |
|---|
Cleaning
Before any analysis the pipeline keeps only rows that sit in a real US state with usable coordinates, and standardizes each timestamp into a year, month, hour, and weekday. The rest, mostly international reports and rows with a missing location, are set aside so the geography stays honest.
Where: the hotspots
Two views of geography. A live map of the real geolocated sample, and the leaderboard of states. The outline of the country appears with no map underneath it, the signature of a population-driven process: reports trace where people live, the coasts, the Great Lakes, Texas, Florida.
Reported locations
Top states by reports
When: the rhythm
The timing signals are the sharpest in the whole dataset. Reports peak in summer, peak on Saturday, and peak on the clock at 9 to 10 pm, the after-dinner, still-dark, still-awake window. And one calendar date towers over the rest.
By month
By hour of day
By weekday
Busiest calendar dates
The trend, and a forecast
Annual volume climbs steeply from the mid-1990s. The critical read is what this curve measures. NUFORC's web form arrived in the internet era, so the rise is mostly a story of access and awareness, not more objects overhead. A log-linear model is fit to 1995 to 2013, backtested on held-out years, then projected forward. It forecasts reporting behavior, nothing more.
Annual report volume: actual, fit, and forecast
Live model: score any moment
The seasonal, weekly, and hourly patterns combine into a transparent likelihood model. Each dimension contributes a factor equal to its share divided by an even share, so 1.0 means average and 2.0 means twice as likely as a random hour. Pick a month, a weekday, and an hour to score it. This is the "find for Y" step: given a moment, how report-heavy is it, historically?
Analysis, model, and visuals by Carlos Abel Vivanco / AbleV Labs · Read the full notebook → · Back to the case study →