Datavisualiseringsapp ved hjelp av GAE Python, D3.js og Google BigQuery

Tenk deg at du har et stort sett med data med millioner av rader, og du står overfor oppgaven med å utvinne informasjon fra dataene. Hvordan gir du mening om et stort sett med data? Det enkle svaret på dette spørsmålet er at vi gjør det via datavisualisering, men hva er det, nøyaktig?

Datavisualisering er den grafiske representasjonen av data for å finne ut hva som er skjult inne i informasjonen. I denne tredelte serien lager vi en visualiseringsapp for å hente informasjon og gi mening om et stort sett med data.

Å spørre store biter av data uten riktig maskinvare kan resultere i ytelsesproblemer. Google gir en løsning på dette problemet i form av BigQuery. Sikkerhetskopiert av Googles infrastruktur, gjør det mulig å spørre store biter av data. Vi bruker et datasett fra Google BigQuery for vårt visualiseringsprogram.

I denne opplæringen tar jeg deg gjennom prosessen med å lage et visualiseringsprogram ved hjelp av Python, Google BigQuery og D3.js JavaScript-biblioteket. Vi bruker Google App Engine (eller GAE) for å være vert for programmet vårt. Denne opplæringen antar at du har grunnleggende kunnskap om Python og JavaScript. For å lage grafer bruker vi D3.js.

Legg også merke til at koden fra ovenstående veiledning er tilgjengelig på GitHub, og en demo er vert på AppSpot.

Komme i gang med Google App Engine 

Trinn 1: Nedlasting og bruk av GAE Python SDK 

La oss starte med å sette opp utviklingsmiljøet vårt. Last ned Google App Engine Python SDK og pakk den ut. Vi bruker webapp2-rammen for Python. 

Fra Googles dokumentasjon:

Et webapp2-program har to deler: 
1) en eller flere RequestHandler-klasser som behandler forespørsler og bygger svar 
2) en WSGIApplication-forekomst som ringer innkommende forespørsler til behandlere basert på nettadressen.

De nevnte punktene blir tydeligere når vi lager vår forespørselhandlerklasse. Opprett en katalog som heter PythonD3jsMashup som vil bli vår prosjektkatalog. Naviger til prosjektkatalogen og opprett en fil som heter app.py. Dette blir vår applikasjonsmodul. La oss lage en forespørselhandlerklasse for å behandle forespørselen og bygge et svar, og en WSGIApplication-instans for å rute forespørsler. 

 Her er hvordan app.py bør se:

importer webapp2 klasse ShowHome (webapp2.RequestHandler): def get (selv): ## Kode for å gjengi hjemmesiden ## Her er WSGI-applikasjonseksemplet som ruter forespørsler application = webapp2.WSGIApplication ([('/', ShowHome) , debug = True)

Når en / forespørsel oppstår, blir den sendt til showhome klasse som gjør hjemmesiden. La oss skrive Python-koden for å vise vår hjemmeside. Først oppretter du en ny mappe som heter maler i PythonD3jsMashup mappe. Inne i det, opprett en HTML-side som heter index.html

Den skal inneholde følgende kode:

         

Datavisualisering App

  • Hjem
  • Kildekode
  • Handle om

Datavisualisering App

Python & D3.js Mashup app

Klikk her

© Firma 2014

For å kunne lage maler må vi importere malbiblioteket. Etter å ha gjort det, bruker vi det til å gjengi index.html side som vist nedenfor:

importer webapp2 fra google.appengine.ext.webapp importmal klasse VisHome (webapp2.RequestHandler): def get (selv): temp_data =  temp_path = 'Maler / index.html' self.response.out.write (template.render (temp_path, temp_data)) application = webapp2.WSGIApplication ([('/', ShowHome),] debug = True)

Deretter navigerer du til prosjektkatalogen PythonD3jsMashup og lag en fil som heter app.yaml. Denne filen vil fungere som en konfigurasjonsfil for vår søknad. Det skal se slik ut:

søknad: appid versjon: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: app.application

Som du kan se, har vi definert en rekke ting i app.yaml. De fleste parametrene er selvforklarende. De handlers Direktivet dikterer at hver URL-forespørsel som samsvarer /.* håndteres av applikasjonsobjektet i app modul.

For å kjøre programmet lokalt, naviger til GAE SDK og kjør følgende kommando:

./dev_appserver.py 

Pek nettleseren din til http: // localhost: 8080 og du bør se denne siden:

Distribuere en app til AppSpot 

Deretter distribuerer vi vår app på Google App Engine. For å distribuere appen må du først logge deg på GAE-konsollen:

Fra dashbordet klikker du på Lag applikasjon knapp.

Deretter ser du en skjerm som ligner på den som vises nedenfor. Skriv en Applikasjonsidentifikator og Søknadstittel for appen og klikk Lag applikasjon.

Når søknaden er registrert, vil du bli møtt med en vellykket melding:

Legg merke til den røde sirklede teksten som vil bli brukt som applikasjonsidentifikator senere.

Klikk på dashbord link. Fra venstremenyen i Dashboard, under Administrasjon fanen, klikk på Applikasjon innstillinger. Du ser følgende skjermbilde:

Legg merke til Tjenerkonto navn. Vi trenger dette i Google-utviklerkonsollen.

Deretter endrer du applikasjon navn til pythond3jsmashup i app.yaml.

søknad: pythond3jsmashup versjon: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: app.application

Nå for å distribuere appen til GAE, naviger til GAE Python SDK og skriv inn følgende kommando:

./appcfg.py oppdatere PythonD3jsMashup /

Når du er distribuert, kan du prøve å bla AppSpot-nettadressen.

Komme i gang med Google BigQuery

For å komme i gang med Google BigQuery, logg deg inn på Google API-konsollen. Du bør se et dashbord som viser alle tilgjengelige prosjekter i Google-kontoen din. Klikk på prosjektnavnet PythonD3jsMashup.

 

Legg merke til Prosjektnummer, som vi skal bruke mens du kobler til med Google BigQuery.

Fra venstre side menyen, klikk på APIer og auth fane. Fra de oppførte produktene klikker du på APIer. Nå bør du se en liste over tilgjengelige APIer:

BigQuery API er slått av. Klikk på AV status for å slå den .

Klikk på prosjektnavnet pythond3jsmashup på menyen til venstre og klikk tillatelser. Klikk Legg til medlem og legg til Tjenerkonto navn (som vi nevnte tidligere) med "Kan redigere" tillatelser som vist nedenfor:

Innsamler data fra Google BigQuery

Inntil nå har vi opprettet vår enkle app og distribuert den på GAE med BigQuery API aktivert. Deretter kobler vi til et av de fritt tilgjengelige datasettene på BigQuery. 

La oss begynne med å opprette en ny side som heter  Maler / chart.html hvor vi skal vise visualiseringen. Lag en metode for å rute Klikk her lenke på vår hjemmeside til chart.html

Slik ser det ut:

klasse ShowChartPage (webapp2.RequestHandler): def get (selv): temp_data =  temp_path = 'Maler / chart.html' self.response.out.write (template.render (temp_path, temp_data))

Endre også forespørselsbehandleren for å rute forespørselen / kart til ShowChartPage som vist under:

søknad = webapp2.WSGIApplication ([('/ chart', ShowChartPage), ('/', ShowHome),] debug = True)

Deretter endrer du href attributten til Klikk her lenke som vist:

Klikk her

Prøv nå å kjøre appen og klikke på Klikk her, og du bør omdirigeres til chart.html.

Deretter prøver vi å godkjenne vår app med Google BigQuery og hente noen data. For godkjenning krever vi Google API Python-klienten. nedlasting google-api-python-client-gae-1.2.zip og trekk den ut i prosjektmappen.

Inkluder følgende biblioteker i app.py.

importer httplib2 fra apiclient.discovery import bygge fra oauth2client.appengine import AppAssertionCredentials

Først, for å spørre et datasett fra BigQuery, må vi bygge en BigQuery-tjeneste som vist: 

url = 'https://www.googleapis.com/auth/bigquery' credentials = AppAssertionCredentials (scope = url) httpss = credentials.authorize (httplib2.Http ()) bigquery_service = bygge ('bigquery', 'v2', http = httpss)

For det andre må vi lage en spørring som vi skal utføre mot BigQuery datasettet. Vi bruker Shakespeare datasettet. Her er spørringen som vi vil utføre mot datasettet:

queryData = 'query': 'VELG ord fra [publiseringsdata: samples.shakespeare] LIMIT 1000'

For å spørre dataene oppretter vi en jobb fra bigquery_service:

tableData = bigquery_service.jobs ()

Og deretter spørre fra den opprettede jobben:

respons = tableData.query (projectId = PROJECT_NUMBER, body = queryData) .execute ()

Erstatte PROJECT_NUMBER med prosjektnummeret vi hadde nevnt tidligere. Så, her er den endrede app.py:

importer httplib2 importer webapp2 fra google.appengine.ext.webapp import mal fra apiclient.discovery import bygge fra oauth2client.appengine import AppAssertionCredentials url = 'https://www.googleapis.com/auth/bigquery' PROJECT_NUMBER = 'xxxxxxxxxxxxx' credentials = AppAssertionCredentials (scope = url) httpss = credentials.authorize (httplib2.Http ()) bigquery_service = bygge ('bigquery', 'v2', http = httpss) klasse ShowChartPage (webapp2.RequestHandler): def get (selv): temp_data =  temp_path = 'Maler / chart.html' queryData = 'query': 'VELG ord FRA [publicdata: samples.shakespeare] LIMIT 1000' tableData = bigquery_service.jobs () respons = tableData.query (projectId = PROJECT_NUMBER, body = queryData) .execute () self.response.out.write (response) # self.response.out.write (template.render (temp_path, temp_data)) klasse ShowHome (webapp2.RequestHandler): def get template_data =  template_path = 'Maler / index.html' self.response.out.write (template.render (template_path, template_data)) a pplication = webapp2.WSGIApplication ([('/ chart', ShowChartPage), ('/', ShowHome),] debug = True)

Svaret fra spørringen vil bli skrevet ut på chart.html. Lagre all kode og last opp den endrede koden til GAE ved hjelp av appcfg.py oppdatering PythonD3jsMashup /.

Nå hvis du peker nettleseren din til http://pythond3jsmashup.appspot.com/chart vil du se svaret fra json returnert fra å spørre datasettet.

Konklusjon

I denne opplæringen opprettet vi et Python-program og distribuerte det på Google App Engine. Vi koblet vår søknad med Google BigQuery og hentet data fra det fritt tilgjengelige datasettet. 

Deretter prøver vi å analysere dataene hentet fra Google BigQuery og visualisere det ved hjelp av JavaScript-biblioteket D3.js. I mellomtiden, vennligst ikke nøl med å legge igjen noen spørsmål eller kommentarer i feedet under.