Publier un module Python qui calcule les éléments météorologiques

introduction

J'ai créé un module Python ** `` wxparams``` ** qui collecte des fonctions qui calculent des éléments météorologiques, tels que des fonctions qui calculent la température du point de rosée à partir de la température et de l'humidité relative, je vais donc le publier. (Abréviation de ** Paramètres météorologiques **)

Avant de commencer Python, j'écrivais souvent des scripts pour traiter les données météorologiques en Perl, et j'assemblais également des fonctions qui sont souvent utilisées dans les champs liés à la météo dans le module Perl. En raison de l'influence de Corona, j'ai passé plus de temps à la maison (rires), j'ai donc décidé de le réécrire en Python sur cette machine.

Le code source est GitHub, et l'explication de son utilisation est résumée dans cet article car je le publierai si je le fais quand même.

Installation

Vous pouvez installer pip depuis mon GitHub.

pip install git+https://github.com/Yoshiki443/weather_parameters

Si vous n'êtes pas à l'aise avec l'installation de pip, vous pouvez télécharger et utiliser uniquement wxparams / wxparams.py``` depuis GitHub.

Licence

C'est une licence MIT.

Fonctions principales

  1. Fonctions qui gèrent le vent --Composant UV du vent <=> Conversion direction / vitesse du vent, direction du vent 8/16 direction, vent transversal, etc.
  2. Une fonction qui gère la quantité d'eau dans l'atmosphère
  1. Fonction liée à la stabilité atmosphérique --Niveau de température, niveau de température équivalent, SSI, K-Index, etc.
  2. Conversion d'unités

Comment utiliser

Je vais d'abord présenter un exemple de code.

import numpy as np
import wxparams as wx
temp = np.array([[0., 5.],[10., 20.]]) #Température[C]
rh = np.array([[90., 50.], [70., 99.5]]) #Humidité[%]
td = wx.RH_to_Td(temp, rh) #Température du point de rosée[C]
print(td)
#production
# [[-1.44330606 -4.56523582]
#  [ 4.78251527 19.91913689]]

Importez d'abord. L'abréviation «wx» dans l'exemple de code est souvent utilisée comme abréviation pour la météo. Après l'importation, appelez la fonction. L'exemple ci-dessus montre le cas du calcul de la température du point de rosée à partir de la température et de l'humidité relative.

Les données saisies ici sont fondamentalement supposées être ** numpy.ndarray **. Ou cela fonctionne avec ** pandas.Series **. Si vous entrez chaque élément météorologique un par un, certaines fonctions fonctionneront et d'autres pas.

En tant que données d'entrée, par exemple, saisissez l'élément météorologique entier avec un plan de pression avec GPV (c'est-à-dire un tableau à deux dimensions) pour calculer un autre élément météorologique, ou entrez une colonne d'éléments météorologiques avec des données structurées telles que csv pour séparer Il est censé être utilisé pour calculer les éléments météorologiques de.

** numpy.ndarray ** est recommandé comme auteur, car certains processus supposent numpy.ndarray.

Vous trouverez ci-dessous une description de chaque fonction.

Des fonctions qui gèrent le vent

UV_to_SpdDir(U, V) La direction et la vitesse du vent sont calculées à partir de la composante UV du vent. La composante UV représente U = vent est-ouest et V = vent nord-sud, et les données de vent des prévisions numériques GPV telles que le MSM de l'agence météorologique sont généralement la composante UV. En général, le vent d'ouest a une valeur positive pour le vent d'est-ouest et le vent du sud a une valeur positive pour le vent du nord-sud. L'unité de vitesse du vent peut être n'importe quelle unité de vitesse telle que * m / s, noeud *. La direction du vent est de 360 degrés et non de 0 degrés vers le nord. Si la vitesse du vent est de 0, la direction du vent sera également de 0 degré.

** Paramètres: **

** Retour: **


SpdDir_to_UV(Wspd, Wdir) À l'opposé de UV_to_SpdDir, la composante UV du vent est calculée à partir de la direction et de la vitesse du vent. L'unité de vitesse du vent peut être n'importe quelle unité de vitesse telle que * m / s, noeud *.

** Paramètres: **

** Retour: **


Deg_to_Dir8(Wdir, dir_zero=None, numeric=False) Convertit la direction du vent de 360 degrés en 8 directions. La valeur renvoyée est l'alphabet "** N, NE, E, SE, S, SW, W, NW " qui représente les huit directions de " nord, nord-est, est, sud-est, sud, sud-ouest, ouest, nord-ouest ". Sera converti en. Si la direction du vent est 0, elle sera convertie en la chaîne de caractères spécifiée par l'argument dir_zero. La valeur par défaut est Aucun, mais dans le cas de la météo aéronautique, par exemple, vous pouvez l'utiliser pour convertir en " VRB **", qui indique un état où la direction du vent n'est pas fixe.

Si l'argument numeric est défini sur True, la sortie sera la valeur numérique "8, 1, 2, 3, 4, 5, 6, 7". À ce moment, le vrai nord est 8 au lieu de 0. Si la direction du vent est 0, la sortie sera 0.

** Paramètres: **

** Retour: **


Deg_to_Dir16(val, dir_zero=None, numeric=False) Convertit la direction du vent de 360 degrés en 16 directions, comme Deg_to_Dir8. Autrement dit, la valeur de retour est un alphabet représentant 16 directions de "** nord, nord nord-est, nord-est, est nord-est, est, est sud-est, sud-est, sud sud est, sud, sud sud-ouest, sud-ouest, ouest sud-ouest, ouest, ouest nord-ouest, nord-ouest, nord nord-ouest " Il est converti en " N / NNE / NE / ENE / E / ESE / SE / SSE / S / SSW / SW / WSW / W / WNW / NW / NNW **".

Si l'argument numeric est défini sur True, la sortie sera les valeurs numériques "16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15". Le traitement de la direction du vent 0 est le même que celui de Deg_to_Dir8.

** Paramètres: **

** Retour: **


Cross_Wind(Wspd, Wdir, RWY) La composante de vent de travers (vent de travers) du vent est calculée à partir de la vitesse du vent, de la direction du vent et de la direction de la piste à l'aéroport. L'unité de vitesse du vent peut être n'importe quelle unité de vitesse telle que * m / s, noeud *. L'unité de direction du vent est le * degré *. La piste est indiquée en 360 degrés au lieu du numéro RWY à 2 chiffres. Par exemple, pour RWY22, entrez 220 degrés.

** Paramètres: **

** Retour: **


Tail_Wind(Wspd, Wdir, RWY) La composante du vent arrière (vent arrière) du vent est calculée à partir de la vitesse du vent, de la direction du vent et de la direction de la piste à l'aéroport. D'autres sont identiques à Cross_Wind.

** Paramètres: **

** Retour: **


Head_Wind(Wspd, Wdir, RWY) La composante de vent de face (vent de face) du vent est calculée à partir de la vitesse du vent, de la direction du vent et de la direction de la piste à l'aéroport. Correspond à la valeur opposée de Tail_Wind. À part cela, c'est la même chose que Cross_Wind.

** Paramètres: **

** Retour: **


Une fonction qui gère la quantité d'eau dans l'atmosphère

RH_to_Td(T, RH, formula="Bolton") La température du point de rosée [C] est calculée à partir de la température [C] et de l'humidité relative [%]. Puisque l'humidité relative ne peut pas être calculée si elle est de 0%, elle est convertie de sorte que 0,1% soit la valeur minimale. La pression de vapeur d'eau saturée [hPa] est calculée dans le processus de calcul, et il existe trois types de formules de calcul. Par défaut, la formule de Bolton est utilisée, mais la formule de Tetens et la formule d'approximation de l'OMM peuvent être spécifiées comme options. Voir T_to_WVP pour plus de détails.

** Paramètres: **

** Retour: **


Td_to_RH(T, Td, formula="Bolton") À l'opposé de RH_to_Td, l'humidité relative [%] est calculée à partir de la température [C] et de la température du point de rosée [C]. D'autres sont identiques à RH_to_Td.

** Paramètres: **

** Retour: **


T_to_WVP(T, formula="Bolton") Calculez la pression de vapeur d'eau saturée [hPa] à partir de la température [C]. Si vous entrez la température du point de rosée [C] au lieu de la température, la pression de vapeur d'eau [hPa] sera calculée. Il existe trois types de formules de calcul. La valeur par défaut utilise la formule de Bolton. En effet, il est mis en œuvre par la formule adoptée par l'Agence météorologique lors du calcul du niveau de température équivalent. Voir aussi Theta_e. Cependant, pour autant que je l'ai confirmé, peu importe la formule que vous utilisez dans la pratique, je pense donc que vous pouvez utiliser n'importe quelle formule que vous aimez. Personnellement, je connais la formule Tetens.

Expression Tetens: $ {\ Large es = 6,1078 \ times 10 ^ {\ left (\ frac {7,5 T} {T + 237,3} \ right)}} $ Approximation de l'OMM: $ {\ Large es = e ^ {\ left (19.482- \ frac {4303.4} {T + 243.5} \ right)}} $ Formule de Bolton: $ {\ Large es = 6.112 \ times e ^ {\ left (\ frac {17.67 T} {T + 243.5} \ right)}} $

** Paramètres: **

** Retour: **


WVP_to_T(es, formula="Bolton") La fonction inverse de T_to_WVP calcule la température [C] à partir de la pression de vapeur d'eau saturée [hPa]. Si vous entrez la pression de vapeur d'eau [hPa], la température du point de rosée [C] sera calculée.

** Paramètres: **

** Retour: **


T_Td(T, Td) Le nombre d'humidité [C] est calculé à partir de la température [C] et de la température du point de rosée [C]. C'est une fonction qui effectue simplement une soustraction.

** Paramètres: **

** Retour: **


Mixing_Ratio(Td, P, formula="Bolton") Calculez le rapport de mélange [g / g] à partir de la température du point de rosée [C] et de la pression [hPa]. Puisque la pression de vapeur d'eau saturée est calculée pendant le processus de calcul, la formule peut être spécifiée avec l'option de formule. Voir T_to_WVP pour les types d'options.

** Paramètres: **

** Retour: **


Fonction liée à l'instabilité atmosphérique

Theta(T, P) Le niveau de température [K] est calculé à partir de la température [C] et de la pression [hPa].

** Paramètres: **

** Retour: **


Tlcl(T, Td) À partir de la température [K] et de la température du point de rosée [K], calculez la température [K] à l'altitude de levage et de réglage. Veuillez noter que l'unité de température et de température du point de rosée est entrée en [K]. Il est utilisé dans le processus de calcul du niveau de température équivalent. Voir aussi Theta_e pour la formule.

{\Large T_{LCL} = \frac{1}{\frac{1}{Td-56}+\frac{ln(T\ /\ Td)}{800}}+56 }

** Paramètres: **

** Retour: **


Theta_e(T, Td, P, formula="Bolton") Le niveau de température équivalent [K] est calculé à partir de la température [C], de la température du point de rosée [C] et de la pression [hPa]. Il semble qu'il existe plusieurs formules pour calculer le niveau de température équivalent, mais ici méthode de calcul adoptée par l'Agence météorologique Il est conforme à. Pour plus de détails, reportez-vous à la dernière page du PDF lié.

{\large \theta_{e} = T\left(\frac{1000}{P-e}\right)^\frac{R_{d}}{C_{pd}}\left(\frac{T}{T_{LCL}}\right)^{0.28w}exp\left(\left(\frac{3036.0}{T_{LCL}}-1.78\right)w(1+0.448w)\right) }

Dans le PDF ci-dessus, la valeur de $ R_ {d} \ / \ C_ {pd} $ est ** 0,2854 **, mais je pense que c'est généralement ** 0,2857 **. Je ne sais pas pourquoi c'est ** 0,2854 **, s'il s'agit d'une erreur d'impression ou s'il y a une raison. La mise en œuvre a été adoptée ** 0,2857 **.

Puisque la pression de vapeur d'eau saturée est calculée pendant le processus de calcul, la formule peut être spécifiée avec l'option de formule. La valeur par défaut est "Bolton" suivant la formule de calcul de température équivalente de l'Agence météorologique. Voir T_to_WVP pour les types d'options.

** Paramètres: **

** Retour: **


SSI(P0, P1, T0, T1, Td0, formula="Bolton") Calculez le SSI, qui est un représentant de l'indice d'instabilité atmosphérique. Les entrées sont la pression d'altitude [hPa], la température [C] et la température du point de rosée [C] de l'air à soulever, et la pression d'altitude [hPa], température [C] de l'air soulevé. Normalement, le SSI est calculé à 850-500 hPa, mais il peut être calculé à n'importe quel niveau de pression. Puisque la pression de vapeur d'eau saturée est calculée pendant le processus de calcul, la formule peut être spécifiée avec l'option de formule. Voir T_to_WVP pour les types d'options.

** Paramètres: **

** Retour: **


K_Index(T850, Td850, T700, Td700, T500) Calcule l'indice K, l'un des indices d'instabilité atmosphérique. Les entrées sont la température de 850 hPa [C] et la température du point de rosée [C], la température de 700 hPa [C] et la température du point de rosée [C] et la température de 500 hPa [C].

** Paramètres: **

** Retour: **


Conversion d'unité

MPS_to_KT(x) Il s'agit d'une conversion d'unité de vitesse telle que la vitesse du vent. Convertissez m / s en nœud.

** Paramètres: **

** Retour: **


KT_to_MPS(x) Il s'agit d'une conversion d'unité de vitesse telle que la vitesse du vent. Convertit le nœud en m / s.

** Paramètres: **

** Retour: **


M_to_FT(x) C'est une conversion d'unité de longueur telle que l'altitude. Convertissez le mètre en pieds.

** Paramètres: **

** Retour: **


FT_to_M(x) C'est une conversion d'unité de longueur telle que l'altitude. Convertissez les pieds en mètres.

** Paramètres: **

** Retour: **


degF_to_degC(x) C'est une conversion unitaire de température. Convertit Hua [F] en Set [C].

** Paramètres: **

** Retour: **


degC_to_degF(x) C'est une conversion unitaire de température. Convertit [C] en [F].

** Paramètres: **

** Retour: **


À propos des futures mises à niveau de version

Comme je l'ai mentionné au début, j'ai réécrit ce que j'avais créé à l'origine en tant que module Perl en Python, donc je l'ai terminé une fois.

À l'avenir, nous intégrerons également les facteurs météorologiques suivants. Je ne sais pas s'il y a de la demande (rires), mais j'aimerais y parvenir avec l'engagement d'experts météorologiques.

  1. LFC, CAPE, CIN, index levé, etc.
  2. Translocation, vortex, cisaillement vertical du vent, stabilité, etc.
  3. Température bulbe humide, température bulbe humide, etc.
  4. Indice supercellulaire (SCP) et indice tornade (STP) utilisés aux États-Unis, etc.

Recommended Posts

Publier un module Python qui calcule les éléments météorologiques
Créer un module Python
Utilisez Blender comme module Python
L'histoire de la création d'un module qui ignore le courrier avec python
[Python] Un programme qui crée des escaliers avec #
[Python] Un programme qui calcule le nombre de segments de chocolat qui remplissent les conditions
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Créer un diagramme de relations des modules Python
Nous avons publié un module Python qui génère un maillage régional pour le Japon
Fonction Eval () qui calcule une chaîne de caractères comme expression en python
[Python] Créez un LineBot qui s'exécute régulièrement
Un monde typé qui commence par Python
Un programme qui utilise Python pour lire des fichiers indésirables
[Python] Un programme qui arrondit le score
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
[Python] Un programme qui calcule la différence entre les valeurs totales diagonales
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
Erreur lors de l'installation d'un module avec Python pip
Un mémo que j'ai écrit un tri rapide en Python
[Python] Un outil qui permet une importation relative intuitive
[Python / Tkinter] Une classe qui crée un cadre défilable
Un joli nimporter qui connecte nim et python
Un programme qui supprime les instructions en double en Python
Comment ajouter un chemin de recherche de module Python
"Kit Python" qui appelle des scripts Python depuis Swift
Pour ajouter un module à python que vous mettez dans Julialang
Python: créer une classe qui prend en charge l'affectation décompressée
[Python] Une compréhension approximative du module de journalisation
Plug-in Vim qui formate automatiquement les styles Python
J'ai essayé d'ajouter un module Python 3 en C
Faisons un module pour Python en utilisant SWIG
Une histoire qui était pratique lorsque j'ai essayé d'utiliser le module d'adresse IP python
Importer le module Python
Fileinput, un module qui facilite l'écriture de programmes de filtrage de type Perl en Python
Module de collections Python
[Python] Un programme qui compte le nombre de vallées
Essayez de créer un module Python en langage C
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé un module Python pour traduire les commentaires
Python qui fusionne beaucoup d'excellence en un seul Excel
D'un livre que les programmeurs peuvent apprendre ... (Python): Pointer
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Création d'une bibliothèque Python DateTimeRange qui gère les plages horaires
En Python, créez un décorateur qui accepte dynamiquement les arguments Créer un décorateur
[Python] Comment écrire une docstring conforme à PEP8
Un serveur qui fait écho aux données POSTées avec flask / python
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
Un mémo que j'ai touché au magasin de données avec python
[Python] Un programme qui compare les positions des kangourous.
Publier / télécharger une bibliothèque créée en Python vers PyPI
Programme Python qui convertit les données ical en texte
MALSS (introduction), un outil qui prend en charge l'apprentissage automatique en Python
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python