Si j'utilise le jeu de données vega "catastrophes" et fais un graphique simple, j'obtiens des valeurs étranges pour l'année.

Dans Altair le code est :

import altair as alt
from vega_datasets import data

dis=data.disasters()

alt.Chart(dis).mark_bar().encode(
    x=alt.X('Year:T'),
    y=alt.Y('Deaths'),
    color='Entity'
)

enter image description here

(lien éditeur vega)

4
campo 10 mars 2019 à 01:08

2 réponses

Meilleure réponse

Ajout à la réponse de @kanitw: lorsque vous convertissez un entier en datetime, l'entier est traité comme des nanosecondes depuis la date zéro. Vous pouvez le voir dans les pandas en exécutant ce qui suit :

>>> pd.to_datetime(dis.Year)
0   1970-01-01 00:00:00.000001900
1   1970-01-01 00:00:00.000001901
2   1970-01-01 00:00:00.000001902
3   1970-01-01 00:00:00.000001903
4   1970-01-01 00:00:00.000001905
Name: Year, dtype: datetime64[ns]

Altair/Vega-Lite utilise une convention similaire.

Si vous souhaitez analyser l'année en tant que date lors du chargement des données, puis tracer l'année avec Altair, vous pouvez procéder comme suit :

import altair as alt
from vega_datasets import data

dis=data.disasters(parse_dates=['Year'])

alt.Chart(dis).mark_bar().encode(
    x=alt.X('year(Year):T'),
    y=alt.Y('Deaths'),
    color='Entity'
)

example chart

Nous analysons d'abord la colonne année comme une date en passant l'argument pandas.read_csv approprié à la fonction de chargement, puis utilisons le year timeUnit pour extraire uniquement l'année de la date/heure complète.

Si vous tracez des données à partir d'une URL CSV plutôt que d'une trame de données pandas, Vega-Lite est suffisamment intelligent pour analyser le fichier CSV en fonction de l'encodage que vous spécifiez dans le graphique, ce qui signifie que ce qui suit donnera le même résultat :

dis=data.disasters.url

alt.Chart(dis).mark_bar().encode(
    x=alt.X('year(Year):T'),
    y=alt.Y('Deaths:Q'),
    color='Entity:N'
)

example chart

6
jakevdp 10 mars 2019 à 03:13

L'entier de l'année n'est pas une valeur de temps standard.

Dans Vega-Lite, vous pouvez ajouter "format": {"parse": {"Year": "date: '%Y'"}} au bloc de données pour spécifier le format d'analyse de date personnalisé pour le champ "year".

Voir une spécification de travail

Dans Altair, vous pouvez également spécifier la propriété format d'une classe *Data (par exemple, NamedData).

3
kanitw 9 mars 2019 à 22:43