Warum Python Vincent Karte visuzalization nicht Karte Daten aus Data Frame?

Ich verwende Python vincent Kartenvisualisierung mit der Verwendung dieses Pakets einleitende Beispiele . Ich arbeite im ipython notebook .

Ich habe einfache pandas DataFrame mit Land FIPS Codes (von hier genommen ). Dann habe ich versucht, DataFrame Daten mit vincent Karte durch diese FIPS-Codes zuzuordnen, aber die Visualisierung fehlgeschlagen, Länder in irgendeiner Weise zu färben . Wie kann ich es machen?

 country_data_tmp = pd.DataFrame({'country_names' : np.array(['Argentina', 'Armenia', 'Australia', 'Austria']), 'country_FIPS' : np.array(['032', '051', '036', '040']), 'my_rate' : np.array([0.254, 0.3456, 0.26, 0.357])}) country_data_tmp.head() 

Bildbeschreibung hier eingeben

 world_topo = r'world-countries.topo.json' geo_data = [{'name': 'countries', 'url': world_topo, 'feature': 'world-countries'}] vis = vincent.Map(data=country_data_tmp, geo_data=geo_data, scale=1100, data_bind='my_rate', data_key='country_FIPS', map_key={'counties': 'properties.FIPS'}) vis.display() 

Bildbeschreibung hier eingeben

    One Solution collect form web for “Warum Python Vincent Karte visuzalization nicht Karte Daten aus Data Frame?”

    Sie werden nicht angezeigt, da Sie den map_key richtig eingestellt haben. Die Datei world_countries.topo.json identifiziert die Länder mit 3 Buchstaben-Code, benannte id in dieser Datei (dies entspricht dem Feld alpha-3 auf der Seite, mit der du verlinkt ist ). Sie können dies sehen, wenn man sich die Rohdaten in dieser json-Datei ansieht .

    Außerdem map_key du 'name': 'countries' geo_data 'name': 'countries' in geo_data , aber in map_key du, es als counties zu verweisen (merke das fehlende r ). Einfacher Fehler zu machen, wie es ist counties in der Beispielseite, wo sie Mapping US Grafschaften sind.

    Wenn Sie die Variablennamen so ändern, dass sie auf nicht leere Felder country_alpha3 erhalten Sie eine schöne Karte als country_alpha3 in Ihrer Datentabelle übereinstimmen id in den JSON Variablenländern.

    NB Wie Ihr Code steht, werden nur die Länder, für die Sie Daten haben, geplottet. Du könntest eine Schicht mit allen Landumrissen nach dem zweiten Beispiel hier hinzufügen , wenn du alles umrissen willst, aber nur die mit Daten farbig. Ich habe Änderungen an dem Code vorgenommen, um das im zweiten Code / Ausgabe-Abschnitt unten zu tun.

    NB 2 Mit den aktuellen Werten von my_rate der Farbkontrast nicht sehr spürbar. Probieren Sie es mit [0,0.3,0.7,1.0] zu überzeugen, dass es anders gefärbt wird.

    Code

     #Data setup bit - Input[1] from your notebook #Note new name for country code country_alpha3 import pandas as pd import numpy as np country_data_tmp = pd.DataFrame({'country_names' : np.array(['Argentina', 'Armenia', 'Australia', 'Austria']), 'country_alpha3' : np.array(['ARG','ARM','AUS','AUT']), 'my_rate' : np.array([0.254, 0.3456, 0.26, 0.357])}) country_data_tmp.head() #map drawing bit Input[2] from your notebook #Note the changes in variable names world_topo = r'world-countries.topo.json' geo_data = [{'name': 'countries', 'url': world_topo, 'feature': 'world-countries'}] vis = vincent.Map(data=country_data_tmp, geo_data=geo_data, scale=1100, data_bind='my_rate', data_key='country_alpha3', map_key={'countries': 'id'}) vis.display() 

    Ausgabe

    Ausgabe des Skripts mit Beispieldaten

    Code mit Gliederungsschicht plus Datenschicht (für diejenigen mit Daten farbig):

     #Replace input[2] with this to add a layer with outline only world_topo = r'world-countries.topo.json' geo_data = [{'name': 'countries', 'url': world_topo, 'feature': 'world-countries'}, {'name': 'countries_outline', 'url': world_topo, 'feature': 'world-countries'}] vis = vincent.Map(data=country_data_tmp, geo_data=geo_data, scale=100, data_bind='my_rate', data_key='country_alpha3', map_key={'countries': 'id'}) del vis.marks[1].properties.update vis.marks[1].properties.enter.stroke.value = '#000' vis.display() 

    Ausgabe (Ausgangsschicht plus Datenschicht)

    Bild mit Ländern umrissen - die mit Daten farbig

    Python ist die beste Programmiersprache der Welt.