[ANN] WeatherReport.jl - A simple weather app for the Julia REPL

I am elated to announce WeatherReport.jl, a package that provides basic weather information right within the REPL. Your location is not tracked, therefore, you need to specify a city/town/village or latitude/longitude yourself. Most major locations (population > 500) around the world are supported.

Package has been in development for a while, and has already been registered. Weather data is obtained from Open-Meteo API, which is free for non-commercial use under the Attribution 4.0 International (CC BY 4.0) license.

Check out the documentation. More use cases, contributions and issues are welcome!

Example usage

For current weather conditions:

julia> show_current("Oslo")
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Timezone β”‚ Elevation β”‚ Wind speed β”‚ Temperature β”‚ Condition β”‚      πŸŒ… β”‚      πŸŒ† β”‚
β”‚       [CET] β”‚       [m] β”‚     [km/h] β”‚        [Β°C] β”‚        [] β”‚ [hh:mm] β”‚ [hh:mm] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Europe/Oslo β”‚      27.0 β”‚       20.9 β”‚        -7.0 β”‚  Overcast β”‚   09:17 β”‚   15:25 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
[Weather data by Open-Meteo.com]

A summary of daily weather forecast can be obtained for up to a week as shown below:

julia> show_daily("Veldhoven")
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Time β”‚ Min. T β”‚ Max. T β”‚ App. min T β”‚ App. max T β”‚ Prec. sum β”‚ Prec. duration β”‚ Prec. prob. β”‚           Condition β”‚
β”‚     [date] β”‚   [Β°C] β”‚   [Β°C] β”‚       [Β°C] β”‚       [Β°C] β”‚      [mm] β”‚        [hours] β”‚         [%] β”‚                  [] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2024-01-03 β”‚    8.4 β”‚   10.6 β”‚        4.9 β”‚        6.2 β”‚      13.7 β”‚           18.0 β”‚          89 β”‚ Slight rain showers β”‚
β”‚ 2024-01-04 β”‚    6.6 β”‚    8.5 β”‚        4.3 β”‚        5.1 β”‚       6.7 β”‚           15.0 β”‚          52 β”‚ Slight rain showers β”‚
β”‚ 2024-01-05 β”‚    4.7 β”‚    7.8 β”‚        1.4 β”‚        5.6 β”‚       9.6 β”‚           15.0 β”‚          30 β”‚         Slight rain β”‚
β”‚ 2024-01-06 β”‚    0.8 β”‚    4.6 β”‚       -3.0 β”‚        1.4 β”‚       0.8 β”‚            4.0 β”‚           8 β”‚         Slight rain β”‚
β”‚ 2024-01-07 β”‚   -2.5 β”‚    0.9 β”‚       -7.2 β”‚       -3.1 β”‚       0.0 β”‚            0.0 β”‚          14 β”‚            Overcast β”‚
β”‚ 2024-01-08 β”‚   -4.2 β”‚   -1.7 β”‚       -8.6 β”‚       -6.8 β”‚       0.0 β”‚            0.0 β”‚           6 β”‚            Overcast β”‚
β”‚ 2024-01-09 β”‚   -4.6 β”‚   -0.1 β”‚       -9.1 β”‚       -4.2 β”‚       0.0 β”‚            0.0 β”‚           0 β”‚        Mainly clear β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Europe/Amsterdam CET
[Weather data by Open-Meteo.com]

Hourly forecast can be visualized in the REPL itself as shown in the following examples:

julia> plot_hourly_temp("Eindhoven", days = 3)
             β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €Eindhoven: min 1.5 Β°C, max 9.6 Β°C (air temp)β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €                
             β €Timezone: Europe/Amsterdamβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €[Weather data by Open-Meteo.com]β €                
             ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓                
         9.6 ┃⠉⠉⠉⠒⠒⒄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ Air temperature
             β”ƒβ €β €β €β €β €β €β €β ‰β ‘β ’β Šβ ’β ’β ’β €β €β €β£€β£€β£€β£€β£€β’„β‘ β ”β ’β ‘β ’β‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ Feels like     
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⒀⠀⠒⠒⠒⠒⠒⠙⒄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃                
             ┃⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⒄⣀①⠀⠀⠀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠒⠀⠔⠒⑄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃                
             β”ƒβ ˆβ ‘β ”β’’β’€β‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β Έβ‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             β”ƒβ €β €β €β €β β ˆβ ’β €β €β ’β ’β ’β €β €β ”β’„β’€β£€β£€β‘ β ”β ’β €β ”β ’β ’β ’β €β’€β €β €β €β €β €β €β €β €β €β €β €β‘”β ‰β ‰β ‘β ’β’„β‘€β €β €β €β €β €β €β €β €β €β €β €β €β ±β‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˆβ β €β €β €β €β €β €β €β €β €β €β €β €β ‘β ’β ’β ‰β ²β €β£€β €β €β‘ β Žβ €β €β €β €β €β €β ‰β Ήβ‘€β£€β €β €β’ β €β ’β Šβ ‰β’‡β €β €β ˆβ ‰β ’β €β‘€β €β €β €β €β €β €β €β €β €β €β”ƒ                
   [Β°C]      β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ‰β ‰β β €β €β €β €β €β €β €β €β €β ‘β β £β €β ƒβ €β €β €β €β ˆβ‘†β €β €β €β €β €β ‰β ‘β ’β’„β €β €β €β €β €β €β €β”ƒ                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⑄⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⑀⠀⠀⠀⠀┃                
             β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˜β£„β‘€β €β €β €β €β €β €β €β €β ‘β’„β£€β‘ β Šβ”ƒ                
             β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˆβ ‘β ’β‘€β €β €β €β €β €β €β €β €β €β €β”ƒ                
             ┃⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣉⣑⣀⣀⣀⣀⣀⣀⣀⣀⣀┃                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⒄⠀⠀⠀⠀⠀⠀┃                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⑀⠀⠀⠀⠀┃                
        -2.6 ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⒄⣀⣀⠔┃                
             ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛                
             β €2024-01-03T13:00:00β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €2024-01-06T12:00:00β €                
             β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €Time [days]β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €     
julia> plot_hourly_rain("Veldhoven", days = 3)
               β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €Veldhovenβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β € 
               β €Timezone: Europe/Amsterdamβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €[Weather data by Open-Meteo.com]β € 
               ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ 
             3 ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⒰⑄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀Ⓒ⒣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⠀⠀⠀⑇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⒠⠀⑸⠸⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
   Rain [mm]   ┃⠀⠀⒠⒇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀Ⓒ⑇⑇⠀⑇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               ┃⒀⑄ⒸⒸ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⑄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀Ⓒ⒱⠇⠀⑇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ 
               β”ƒβ’Έβ‘‡β’Έβ’Έβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β£‡β €β €β €β €β €β €β €β €β €β €β‘‡β ˆβ €β €β‘‡β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ 
               β”ƒβ‘Žβ‘‡β’Έβ ˜β‘„β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β’Έβ’Έβ €β €β €β €β €β €β €β €β €β €β‘‡β €β €β €β’‡β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ 
               β”ƒβ ‡β’±β‘œβ €β‘‡β €β €β €β’ β’Ίβ €β €β €β €β €β €β €β €β €β €β €β €β’Έβ’Έβ €β €β €β €β €β €β €β €β €β €β‘‡β €β €β €β’Έβ €β €β €β €β €β €β €β €β €β£Ύβ €β‘œβ‘„β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ 
               β”ƒβ €β’Έβ‘‡β €β’£β €β €β‘”β β ˜β‘„β €β‘Žβ’±β €β €β €β €β €β €β €β €β’Έβ ˆβ‘†β €β €β €β €β €β €β €β €β’°β β €β €β €β’Έβ €β €β €β €β €β €β €β €β’ β ƒβ’§β ƒβ ±β‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ 
               β”ƒβ €β’Έβ‘‡β €β Έβ‘€β’°β β €β €β‘‡β‘Έβ €β €β’‡β‘ β‘€β €β €β €β €β €β‘Žβ €β‘‡β €β €β €β €β €β €β €β €β’Έβ €β €β €β €β’Έβ €β €β €β €β €β €β €β €β‘Έβ €β ˆβ €β €β ±β’„β‘œβ‘†β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ 
             0 β”ƒβ €β €β ‡β €β €β §β Žβ €β €β €β ˆβ €β €β €β ˆβ €β’£β£€β£€β£€β£€β£€β‘‡β €β Έβ£€β£€β£€β£€β£€β£€β£€β£€β ‡β €β €β €β €β ˜β£„β£€β£€β£€β£€β£€β£€β ”β β €β €β €β €β €β ˆβ €β Έβ Šβ’£β£€β£€β£€β£€β£€β£€β£ β ‹β ‰β ‰β ™β£„β£€β£€β£€β£€β£€β”ƒ 
               ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 
               β €2024-01-03T13:00:00β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €2024-01-06T12:00:00β € 
               β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €Time [days]β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β € 

To see a boxplot distribution of historical monthly data for a given year, use one of the
plot_box_* functions. For example, temperature can be visualized using plot_box_temp
as shown below:

julia> plot_box_temp("Mumbai", year = "2023")
                            Mumbai: Air temp. monthly distribution for 2023                
              Timezone: Asia/Kolkata                     [Weather data by Open-Meteo.com]  
             ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ 
             ┃           β•·            β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”                 β•·                  ┃ 
     January ┃           β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€     β”‚       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                  ┃ 
             ┃           β•΅            β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜                 β•΅                  ┃ 
             ┃                  β•·           β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β•·           ┃ 
    February ┃                  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”‚          β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€           ┃ 
             ┃                  β•΅           β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β•΅           ┃ 
             ┃                         β•·         β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”                   β•·      ┃ 
       March ┃                         β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€     β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      ┃ 
             ┃                         β•΅         β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜                   β•΅      ┃ 
             ┃                             β•·          β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”              β•·       ┃ 
       April ┃                             β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€       ┃ 
             ┃                             β•΅          β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜              β•΅       ┃ 
             ┃                                    β•·        β”Œβ”€β”¬β”€β”€β”€β”€β”€β”       β•·             ┃ 
         May ┃                                    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚     β”œβ”€β”€β”€β”€β”€β”€β”€β”€             ┃ 
             ┃                                    β•΅        β””β”€β”΄β”€β”€β”€β”€β”€β”˜       β•΅             ┃ 
             ┃                                    β•·     β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”         β•·             ┃ 
        June ┃                                    β”œβ”€β”€β”€β”€β”€β”€    β”‚   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€             ┃ 
             ┃                                    β•΅     β””β”€β”€β”€β”€β”΄β”€β”€β”€β”˜         β•΅             ┃ 
             ┃                                    β•·  β”Œβ”¬β”€β”      β•·                         ┃ 
        July ┃                                    β”œβ”€β”€β”€β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€                         ┃ 
             ┃                                    β•΅  β””β”΄β”€β”˜      β•΅                         ┃ 
             ┃                                   β•·   β”Œβ”€β”¬β”€β”     β•·                         ┃ 
      August ┃                                   β”œβ”€β”€β”€β”€ β”‚ β”œβ”€β”€β”€β”€β”€β”€                         ┃ 
             ┃                                   β•΅   β””β”€β”΄β”€β”˜     β•΅                         ┃ 
             ┃                                  β•·    β”Œβ”€β”¬β”€β”            β•·                  ┃ 
   September ┃                                  β”œβ”€β”€β”€β”€β”€ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                  ┃ 
             ┃                                  β•΅    β””β”€β”΄β”€β”˜            β•΅                  ┃ 
             ┃                           β•·          β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”          β•·             ┃ 
     October ┃                           β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€     β”‚     β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€             ┃ 
             ┃                           β•΅          β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜          β•΅             ┃ 
             ┃                          β•·        β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”           β•·           ┃ 
    November ┃                          β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€      β”‚        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€           ┃ 
             ┃                          β•΅        β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β•΅           ┃ 
             ┃                     β•·         β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”           β•·               ┃ 
    December ┃                     β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€       β”‚       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€               ┃ 
             ┃                     β•΅         β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜           β•΅               ┃ 
             ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 
              10                                  25                                   40  
                                                  [Β°C]                                     

Historical weather data can now be saved to a SQLite database. Check the help text for
export_to_sqlite function.

To compare monthly data over a given number of years, use one of the compare_box_*
functions. For example, temperature distribution can be visualized using compare_box_temp as shown below:

julia> compare_box_temp("Tokyo", num_years = 5, month = "June")
                    Tokyo: Air temp. comparison for June over last 5 years            
         Timezone: Asia/Tokyo                       [Weather data by Open-Meteo.com]  
        ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ 
        ┃           β•·         β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”                β•·                         ┃ 
   2019 ┃           β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”‚     β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                         ┃ 
        ┃           β•΅         β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜                β•΅                         ┃ 
        ┃              β•·         β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”              β•·                       ┃ 
   2020 ┃              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€     β”‚     β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                       ┃ 
        ┃              β•΅         β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜              β•΅                       ┃ 
        ┃               β•·        β”Œβ”€β”€β”€β”¬β”€β”€β”€β”€β”€β”             β•·                          ┃ 
   2021 ┃               β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚     β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                          ┃ 
        ┃               β•΅        β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜             β•΅                          ┃ 
        ┃          β•·         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”                          β•·          ┃ 
   2022 ┃          β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€        β”‚       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€          ┃ 
        ┃          β•΅         β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜                          β•΅          ┃ 
        ┃          β•·             β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”                 β•·                    ┃ 
   2023 ┃          β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    ┃ 
        ┃          β•΅             β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜                 β•΅                    ┃ 
        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 
         10                                  25                                   40  
                                             [Β°C]                                     
57 Likes

This is a really neat package! I’m excited to try it out!

1 Like

How can I get a list of the cities that are covered? How can I add my own city (Den Haag)?

Thanks, can be neat!

It is sometimes hard to choose the correct city though, if one doesn’t remember coordinates by heart (:

julia> show_daily("Cambridge")
[ Info: More than one match found, showing report for location in row 1.
[ Info: You can select another location by its row index.
15Γ—4 DataFrame
 Row β”‚ CITY       TIMEZONE          LATITUDE  LONGITUDE  
     β”‚ String?    String31          Float64   Float64    
─────┼───────────────────────────────────────────────────
   1 β”‚ Cambridge  Australia/Hobart  -42.8333   147.45
   2 β”‚ Cambridge  America/Toronto    43.3601   -80.3127
   3 β”‚ Cambridge  Europe/London      52.2        0.11667
   4 β”‚ Cambridge  America/Jamaica    18.3133   -77.9025
   5 β”‚ Cambridge  Pacific/Auckland  -37.8782   175.44
   6 β”‚ Cambridge  America/New_York   38.5632   -76.0788
   7 β”‚ Cambridge  America/Chicago    41.8983   -93.5291
   8 β”‚ Cambridge  America/Chicago    41.3036   -90.1929
   9 β”‚ Cambridge  America/New_York   42.3751   -71.1056
  10 β”‚ Cambridge  America/New_York   45.0242   -69.4739
  11 β”‚ Cambridge  America/Chicago    45.5727   -93.2244
  12 β”‚ Cambridge  America/New_York   43.0281   -73.3812
  13 β”‚ Cambridge  America/New_York   40.0312   -81.5885
  14 β”‚ Cambridge  America/Chicago    43.0036   -89.0165
  15 β”‚ Cambridge  America/Chicago    40.282   -100.166

Maybe it’s better to show some more information?

Also, maybe the default choice should be β€œthe most populous one”?

julia> show_daily("Boston")
[ Info: More than one match found, showing report for location in row 1.
[ Info: You can select another location by its row index.
8Γ—4 DataFrame
 Row β”‚ CITY     TIMEZONE          LATITUDE  LONGITUDE 
     β”‚ String?  String31          Float64   Float64   
─────┼────────────────────────────────────────────────
   1 β”‚ Boston   Europe/London     52.9763    -0.02664
   2 β”‚ Boston   Europe/Dublin     53.0308    -8.93167
   3 β”‚ Boston   Asia/Manila        7.87111  126.364
   4 β”‚ Boston   America/New_York  30.7919   -83.7899
   5 β”‚ Boston   America/New_York  37.6093   -75.8427
   6 β”‚ Boston   America/New_York  42.3584   -71.0598
   7 β”‚ Boston   America/New_York  42.629    -78.7375
   8 β”‚ Boston   America/New_York  40.312    -79.8231
3 Likes

hmmm… if I remember correctly there is a system for Julia packages to locally store configuration options… it could be used to store the chosen location so that one can then call the various functions without the zone attribute…

In any case, great package… thank you…

1 Like

Preferences.jl

2 Likes

Very neat! Seems broken though… says it is 2.5C where I am when it is actually 36F :wink:

7 Likes

Another user case for using Preferences.jl :wink:

2 Likes

I bit of a heavy dependency if only used to help this but GMT.jl has a geocoder function that will tell you the coordinates

using GMT

julia> geocoder("Den Hag")
Attribute table (Dict{String, String})
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€
β”‚        lat β”‚ country_code β”‚           type β”‚ ISO3166-2-lvl4 β”‚ place_rank β”‚    class β”‚         importance β”‚       lon β”‚        state β”‚  β‹―
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€
β”‚ 52.0799838 β”‚           nl β”‚ administrative β”‚          NL-ZH β”‚         16 β”‚ boundary β”‚ 0.6773178318552627 β”‚ 4.3113461 β”‚ Zuid-Holland β”‚  β‹―
└────────────┴──────────────┴────────────────┴────────────────┴────────────┴──────────┴────────────────────┴───────────┴──────────────┴───
                                                                                                                        10 columns omitted
BoundingBox: [4.3113461, 4.3113461, 52.0799838, 52.0799838]
Global BoundingBox: [4.1849984, 4.4224897, 52.0148484, 52.1350362]
PROJ: +proj=longlat +datum=WGS84 +units=m +no_defs

1Γ—2 GMTdataset{Float64, 2}
 Row β”‚     Lon    Lat
─────┼────────────────
   1 β”‚ 4.31135  52.08
2 Likes

Coordinates for all cities are loaded from a CSV file into a DataFrame. β€˜The Hague’ is actually part of the list, but due to an incorrect logic applied to correct for capitalization in the name, it gets changed to β€˜The hague’, which as expected is not found.

I have made an issue here and will fix it in the next release. Thanks for checking!

4 Likes

Perhaps looking at the timezone might help here? The cities database (population > 500) that I am using does have multiple locations/coordinates with the same name, which could indeed make things confusing sometimes.

To select a certain row, you can simply use the index from the list shown.

julia> show_daily("Cambridge", 3)
[ Info: More than one match found, showing report for location in row 3.
[ Info: You can select another location by its row index.
15Γ—4 DataFrame
 Row β”‚ CITY       TIMEZONE          LATITUDE  LONGITUDE  
     β”‚ String?    String31          Float64   Float64    
─────┼───────────────────────────────────────────────────
   1 β”‚ Cambridge  Australia/Hobart  -42.8333   147.45
   2 β”‚ Cambridge  America/Toronto    43.3601   -80.3127
   3 β”‚ Cambridge  Europe/London      52.2        0.11667
   4 β”‚ Cambridge  America/Jamaica    18.3133   -77.9025
   5 β”‚ Cambridge  Pacific/Auckland  -37.8782   175.44
   6 β”‚ Cambridge  America/New_York   38.5632   -76.0788
   7 β”‚ Cambridge  America/Chicago    41.8983   -93.5291
   8 β”‚ Cambridge  America/Chicago    41.3036   -90.1929
   9 β”‚ Cambridge  America/New_York   42.3751   -71.1056
  10 β”‚ Cambridge  America/New_York   45.0242   -69.4739
  11 β”‚ Cambridge  America/Chicago    45.5727   -93.2244
  12 β”‚ Cambridge  America/New_York   43.0281   -73.3812
  13 β”‚ Cambridge  America/New_York   40.0312   -81.5885
  14 β”‚ Cambridge  America/Chicago    43.0036   -89.0165
  15 β”‚ Cambridge  America/Chicago    40.282   -100.166
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Time β”‚ Min. T β”‚ Max. T β”‚ App. min T β”‚ App. max T β”‚ Prec. sum β”‚ Prec. duration β”‚ Prec. prob. β”‚           Condition β”‚
β”‚     [date] β”‚   [Β°C] β”‚   [Β°C] β”‚       [Β°C] β”‚       [Β°C] β”‚      [mm] β”‚        [hours] β”‚         [%] β”‚                  [] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2024-01-03 β”‚    6.8 β”‚   10.0 β”‚        4.2 β”‚        6.8 β”‚       1.3 β”‚            5.0 β”‚          37 β”‚ Slight rain showers β”‚
β”‚ 2024-01-04 β”‚    5.3 β”‚    8.1 β”‚        2.1 β”‚        5.9 β”‚       3.7 β”‚            5.0 β”‚          13 β”‚         Slight rain β”‚
β”‚ 2024-01-05 β”‚    3.7 β”‚    6.6 β”‚        0.0 β”‚        3.2 β”‚       6.8 β”‚            6.0 β”‚          30 β”‚         Slight rain β”‚
β”‚ 2024-01-06 β”‚    3.0 β”‚    5.4 β”‚        0.3 β”‚        2.3 β”‚       0.0 β”‚            0.0 β”‚           3 β”‚            Overcast β”‚
β”‚ 2024-01-07 β”‚    0.1 β”‚    3.7 β”‚       -3.5 β”‚        0.3 β”‚       0.0 β”‚            0.0 β”‚           3 β”‚            Overcast β”‚
β”‚ 2024-01-08 β”‚   -1.0 β”‚    2.2 β”‚       -4.9 β”‚       -2.0 β”‚       0.0 β”‚            0.0 β”‚           1 β”‚            Overcast β”‚
β”‚ 2024-01-09 β”‚   -0.9 β”‚    1.4 β”‚       -4.9 β”‚       -3.4 β”‚       0.0 β”‚            0.0 β”‚           1 β”‚            Overcast β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Europe/London GMT
[Weather data by Open-Meteo.com]

Sorting according to population is a cool idea, but finding all the data could be tricky. I will look around.

1 Like

hmm, interesting. I didn’t think about that before. Also, thank you for the kind words!

Sure, but there are several Cambridges in each of the NewYork and Chicago time zones (: It was quite a popular name to give to a town back then…

Please do, and thank you for the kind words!

1 Like

Yeah, that’s an issue. I was initially thinking of using a different database where cities have a higher population, for example 10000. But then you end up missing a lot of locations around the world.

haha, I prefer to stick to the metric system. :laughing:

2 Likes

β€˜The Hague’ is now correctly recognized in release v0.19.2. Since the database has names in English, β€˜Den Haag’ is currently not supported.

julia> plot_hourly_temp("The Hague", days = 3)
             β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €The Hague: min 0.1 Β°C, max 9.4 Β°C (air temp)β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €                
             β €Timezone: Europe/Amsterdamβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €[Weather data by Open-Meteo.com]β €                
             ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓                
         9.4 ┃⣀⣀①⠔⠉⠑⠒⒄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⒀⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃ Air temperature
             β”ƒβ €β €β €β €β €β €β €β €β £β£€β €β €β €β €β €β €β €β €β €β’€β €β ’β ’β’„β €β €β €β’€β Žβ €β €β €β ˜β‘„β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ Feels like     
             β”ƒβ €β €β €β €β €β €β €β €β €β ˆβ ’β €β ’β ’β ’β ²β €β €β Šβ β €β €β €β €β “β ¦β ”β β €β£€β‘ β ”β‘„β ±β£€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             ┃⠒⠀⣀⠀⠒⣀⠀⠀⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⒀⠀⠀⠒⠁⠀⠀Ⓒ⠀⠀⠙⠒⒄⣀⒀⣀⣀⣀⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃                
             β”ƒβ €β €β €β €β €β €β €β €β ˆβ ‰β ’β’„β €β €β£€β €β €β €β’ β ”β ‰β ‰β ‘β €β ”β ƒβ €β €β €β €β €β €β €β‘‡β €β €β €β €β €β β €β €β €β ˆβ ’β’„β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⒄⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⑇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠒⒀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀Ⓒ⣠⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⣄⠀⠀⠀⒀⣀⠀⠀⒄⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃                
   [Β°C]      β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˆβ €β ˆβ ²β‘€β €β €β£€β£€β£€β €β €β €β €β €β €β €β €β ‰β ‰β ‰β β €β €β €β €β ˆβ ’β’„β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˆβ ‰β ‹β €β €β €β ‰β “β’„β‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β “β’„β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˆβ ’β’„β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ‰β ‰β ‰β ‰β ‰β ‰β ‘β ’β €β£€β‘€β”ƒ                
             ┃⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠻⑉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉┃                
             β”ƒβ €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β ˆβ ’β €β €β €β ”β ’β ’β ’β’’β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β”ƒ                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠒⑀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀┃                
             ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠒⠀⠀⠒⠒⠒⠒⒄⠀⠀⠀⠀┃                
        -4.4 ┃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠒⠀⣀┃                
             ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛                
             β €2024-01-04T08:00:00β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €2024-01-07T07:00:00β €                
             β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €Time [days]β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €                

In case someone makes an error in the capitalization, the name will be internally corrected.

julia> show_daily("The haGUe")
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Time β”‚ Min. T β”‚ Max. T β”‚ App. min T β”‚ App. max T β”‚ Prec. sum β”‚ Prec. duration β”‚ Prec. prob. β”‚           Condition β”‚
β”‚     [date] β”‚   [Β°C] β”‚   [Β°C] β”‚       [Β°C] β”‚       [Β°C] β”‚      [mm] β”‚        [hours] β”‚         [%] β”‚                  [] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2024-01-04 β”‚    7.1 β”‚    9.4 β”‚        4.9 β”‚        6.2 β”‚       4.1 β”‚           13.0 β”‚          62 β”‚ Slight rain showers β”‚
β”‚ 2024-01-05 β”‚    5.7 β”‚    8.9 β”‚        1.8 β”‚        7.2 β”‚      14.7 β”‚           17.0 β”‚          69 β”‚ Slight rain showers β”‚
β”‚ 2024-01-06 β”‚    1.0 β”‚    5.9 β”‚       -3.2 β”‚        2.2 β”‚       1.6 β”‚            8.0 β”‚          42 β”‚         Slight rain β”‚
β”‚ 2024-01-07 β”‚   -1.2 β”‚    1.1 β”‚       -6.7 β”‚       -2.9 β”‚       0.0 β”‚            0.0 β”‚          12 β”‚            Overcast β”‚
β”‚ 2024-01-08 β”‚   -3.2 β”‚   -1.1 β”‚       -8.9 β”‚       -6.3 β”‚       0.0 β”‚            0.0 β”‚           1 β”‚            Overcast β”‚
β”‚ 2024-01-09 β”‚   -4.1 β”‚   -1.2 β”‚       -9.0 β”‚       -6.2 β”‚       0.0 β”‚            0.0 β”‚           0 β”‚        Mainly clear β”‚
β”‚ 2024-01-10 β”‚   -4.8 β”‚   -1.1 β”‚       -9.6 β”‚       -6.3 β”‚       0.0 β”‚            0.0 β”‚           0 β”‚        Mainly clear β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Europe/Amsterdam CET
[Weather data by Open-Meteo.com]
3 Likes

Thanks for the quick fix!

1 Like

Is it possible to save the data used to make the plots? For example can I get the data for plot_hourly_windspeed() as a dataframe? Sorry if this is simple I’ve been trying to figure it out for a while now.

1 Like

Hi, yes, it’s possible to export historical data as a sqlite database file. I made it this way so that the data can be easily ingested also by other languages. You can use the SQLite.jl package to read the database in case you decide to continue working in Julia.

Check out the help text:

help?> export_to_sqlite
search: export_to_sqlite

  Saves the hourly historical temperature, rain, snowfall, relative humidity, windspeed and solar data for a given city (between "startdate" and "enddate")
  to a SQLite database. Each of the weather variable is saved as a separate table. The database itself is saved to the "export" folder in the root of this
  repository.

  Arguments
  ≑≑≑≑≑≑≑≑≑

    β€’  city::String : Valid city name, e.g. "Oslo", "Paris", "Amsterdam" etc.

    β€’  i_row::Int64 : In case of more than one match for a given location, select the desired timezone by providing the row index from the printed
       DataFrame. Default is set to 1.

    β€’  start_date::String : Starting day in ISO8601 date format, e.g. "2023-02-01"

    β€’  end_date::String : Ending day in ISO8601 date format, e.g. "2023-02-25"

  Optional keywords
  ≑≑≑≑≑≑≑≑≑≑≑≑≑≑≑≑≑

    β€’  lat::Float64 : Geographical WGS84 coordinate of the location (Β°S < 0, Β°N > 0)

    β€’  long::Float64 : Geographical WGS84 coordinate of the location (Β°W < 0, Β°E > 0)

  Example
  ≑≑≑≑≑≑≑

  julia> export_to_sqlite("Veldhoven", start_date = "2022-01-01", end_date = "2022-01-31")