Hist est une interface conviviale pour les analystes pour boost-histogram, conçue pour Python 3.8+ (les utilisateurs 3.6-3.7 obtiennent des versions plus anciennes). Découvrez les nouveautés.
Vous pouvez installer cette bibliothèque depuis PyPI avec pip :
python3 -m pip install "hist[plot,fit]"
Si vous n'avez pas besoin des fonctionnalités de traçage, vous pouvez ignorer les extras [plot]
et/ou [fit]
. [fit]
n'est actuellement pas pris en charge dans WebAssembly.
Hist fournit actuellement tout ce que boost-histogram fournit, ainsi que les améliorations suivantes :
Hist augmente les axes avec des noms :
name=
est une étiquette unique décrivant chaque axe.
label=
est une chaîne facultative utilisée dans le traçage (par défaut, name
si elle n'est pas fournie).
L'indexation, la projection et bien d'autres prennent en charge les axes nommés.
Experimental NamedHist
est un Hist
qui désactive la plupart des formes d'accès positionnel, obligeant les utilisateurs à utiliser uniquement des noms.
La classe Hist
augmente bh.Histogram
avec une construction plus simple :
flow=False
est un moyen rapide de désactiver le flux pour les axes en construction.
Les stockages peuvent être donnés par chaîne.
storage=
peut être omis, les chaînes et les stockages peuvent être positionnels.
data=
peut initialiser un histogramme avec des données existantes.
Hist.from_columns
peut être utilisé pour initialiser avec un DataFrame ou un dict.
Vous pouvez diffuser des contenus dans les deux sens avec boost-histogram (ou toute autre extension).
Hist prend en charge QuickConstruct, un système de construction sans importation qui ne nécessite pas d'importations supplémentaires :
Utilisez Hist.new.<axis>().<axis>().<storage>()
.
Les noms d'axes peuvent être complets ( Regular
) ou courts ( Reg
).
Les arguments de l'histogramme (comme data=
) peuvent être stockés.
Fonctionnalités étendues de l'histogramme :
Prise en charge directe de .name
et .label
, comme les axes.
.density()
calcule la densité sous forme de tableau.
.profile(remove_ax)
peut convertir un histogramme ND COUNT en un histogramme (N-1)D MEAN.
.sort(axis)
prend en charge le tri d'un histogramme selon un axe catégoriel. Prend éventuellement une fonction pour trier.
.fill_flattened(...)
aplatira et remplira, y compris la prise en charge d'AwkwardArray.
.integrate(...)
, qui prend les arguments opposés comme .project
.
Hist implémente UHI+ ; une extension du système UHI (Unified Histogram Indexing) conçue pour une interactivité sans importation :
Utilise le suffixe j
pour passer aux coordonnées de données dans l'accès ou les tranches.
Utilise le suffixe j
sur les tranches à réorganiser.
Les chaînes peuvent être utilisées directement pour indexer dans les axes de catégories de chaînes.
Des routines de traçage rapides encouragent l'exploration :
.plot()
fournit des tracés 1D et 2D (ou utilisez plot1d()
, plot2d()
)
.plot2d_full()
affiche des projets 1D autour d'un tracé 2D.
.plot_ratio(...)
crée un tracé de rapport entre l'histogramme et un autre histogramme ou appelable.
.plot_pull(...)
effectue un pull plot.
.plot_pie()
crée un diagramme circulaire.
.show()
fournit une belle impression str en utilisant Histoprint.
Piles : travaillez avec des groupes d'histogrammes avec des axes identiques
Les piles peuvent être créées avec h.stack(axis)
, en utilisant l'index ou le nom d'un axe ( StrCategory
axes idéal).
Vous pouvez également créer avec hist.stacks.Stack(h1, h2, ...)
, ou utiliser from_iter
ou from_dict
.
Vous pouvez indexer une pile et définir une entrée avec un histogramme correspondant.
Les piles prennent en charge .plot()
et .show()
, avec des noms (les étiquettes de tracé sont par défaut les informations sur les axes d'origine).
Les piles passent par .project
, *
, +
et -
.
Nouveaux modules
intervals
prend en charge les intervalles de couverture fréquentistes.
Prêt pour le carnet : Hist a une superbe représentation dans le carnet.
Aucune dépendance requise
from hist import Hist# Construction rapide, aucune autre importation nécessaire :h = (Hist.new.Reg(10, 0, 1, name="x", label="x-axis") .Var(range(10), name="y", label="y-axis") .Int64() )# Le remplissage par noms est autorisé :h.fill(y=[1, 4, 6], x=[3, 5, 2])# Les noms peuvent être utilisés pour manipuler l'histogramme :h.project("x") h[{"y": 0.5j + 3, "x": 5j}]# Vous pouvez accéder aux coordonnées des données ou au rebin avec un suffixe `j` :h[0.3j:, ::2j] # x depuis .3 jusqu'à la fin, y est regroupé par 2# Fonctions de traçage élégantes : h.plot()h.plot2d_full()h.plot_pull(Callable)
À partir d'une extraction git, utilisez nox ou exécutez :
python -m pip install -e .[dev]
Voir Directives de contribution pour plus d'informations sur la configuration d'un environnement de développement.
Nous tenons à remercier les contributeurs qui ont rendu ce projet possible (clé emoji) :
Henri Schreiner ? | Nino Lau ? | Chris Burr | Nick Amine | Eduardo Rodrigues | Andrej Novak | Matthieu Feickert |
Kyle Cranmer | Daniel Antrim | Nicolas Smith | Michel Eliachevitch | Jonas Eschle |
Ce projet suit la spécification de tous les contributeurs.
2021-07-07 PyHEP 2021 -- Histogramme haute performance pour l'analyse HEP ?
2020-09-08 IRIS-HEP/GSOC -- Hist : histogramme pour l'analyse optimisé par boost-histogram ?
2020-07-07 Actes SciPy ?
2020-07-17 PyHEP 2020 ?
Cette bibliothèque a été principalement développée par Henry Schreiner et Nino Lau.
Ce travail a été soutenu par les accords de coopération de la National Science Foundation OAC-1836650 (IRIS-HEP) et OAC-1450377 (DIANA/HEP). Toutes les opinions, conclusions, conclusions ou recommandations exprimées dans ce document sont celles des auteurs et ne reflètent pas nécessairement les points de vue de la National Science Foundation.