Python este un limbaj de programare excelent pentru crearea vizualizarilor de date.
Cu toate acestea, lucrul cu un limbaj de programare brut precum Python (in loc de software mai sofisticat precum, sa zicem, Tableau) prezinta unele provocari. Dezvoltatorii care creeaza vizualizari trebuie sa accepte mai multa complexitate tehnica in schimbul unei contributii mult mai mari in aspectul vizualizarilor lor.
In acest tutorial, va voi invata cum sa creati vizualizari Python cu actualizare automata. Vom folosi datele din IEX Cloud si vom folosi si biblioteca matplotlib si cateva oferte simple de produse Amazon Web Services.
Pasul 1: Adunati-va datele
Actualizarea automata a graficelor suna atragatoare. Dar inainte de a investi timpul in construirea lor, este important sa intelegeti daca aveti nevoie sau nu de diagrame pentru a fi actualizate automat.
Pentru a fi mai specific, nu este necesar ca vizualizarile dvs. sa se actualizeze automat daca datele pe care le prezinta nu se schimba in timp.
Scrierea unui script Python care actualizeaza automat o diagrama a punctelor-pe-joc anuale ale lui Michael Jordan nu ar fi inutila – cariera sa a luat sfarsit, iar setul de date nu se va schimba niciodata.
Cei mai buni candidati pentru setari de actualizari automate sunt date din seria timpului in care se adauga periodic noi observatii (sa zicem, in fiecare zi).
In acest tutorial, vom folosi datele pietei bursiere din API-ul IEX Cloud. Mai exact, vom vizualiza preturile stocurilor istorice pentru cateva dintre cele mai mari banci din SUA:
- Chase JPMorgan (JPM)
- Bank of America (BAC)
- Citigrup (C)
- Wells Fargo (WFC)
- Goldman Sachs (GS)
Primul lucru pe care trebuie sa il faceti este sa creati un cont IEX Cloud si sa generati un jeton API.
Din motive evidente, nu voi publica in acest articol cheia API. Stocarea propriei chei API personalizate intr-o variabila numita IEX API Key va fi suficienta pentru a putea urma.
In continuare, vom stoca lista de capuse intr-o lista Python:
tickers = [‘JPM’, ‘BAC’, ‘C’, ‘WFC’, ‘GS’,]
API-ul IEX Cloud accepta tickere separate prin virgule. Trebuie sa serializam lista noastra de ticker intr-un sir separat de ticker. Iata codul pe care il vom folosi pentru a face acest lucru:
# Creati un sir gol numit `ticker_string` pe care il vom adauga tickers si virgule la ticker_string = ” # Inchideti fiecare element din` tickers` si adaugati-le si o virgula la ticker_string pentru ticker in tickers: ticker_string + = ticker ticker_string + = ‘,’ #Dupa ultima virgula din `ticker_string` ticker_string = ticker_string [: – 1]
Urmatoarea sarcina pe care trebuie sa o gestionam este sa selectam care este punctul final al API-ului IEX Cloud pe care trebuie sa-l facem ping.
O trecere in revista rapida a documentatiei IEX Cloud dezvaluie faptul ca acestea au un punct de plecare al preturilor istorice, pe care il putem trimite o solicitare HTTP folosind cuvantul cheie grafic.
De asemenea, va trebui sa specificam cantitatea de date solicitate (masurata in ani).
Pentru a viza acest punct final pentru intervalul de date specificat, am stocat punctul final al graficelor si cantitatea de timp in variabile separate. Aceste puncte finale sunt apoi interpolate in adresa URL serializata pe care o vom folosi pentru a trimite solicitarea noastra HTTP.
Iata codul:
#Create the endpoint and string string years endpoints = ‘chart’ years = ’10’ #Interpoleaza sirurile de final in sirul HTTP_request HTTP_request = inhttps: //cloud.iexapis.com/stable/stock/market/batch? Symbols = {ticker_string} & tipurile = {puncte finale} & range = {y} ani & jeton = {IEX_API_Key}“
Acest sir interpolat este important, deoarece ne permite sa schimbam cu usurinta valoarea sirului nostru la o data ulterioara, fara a schimba fiecare aparitie a sirului din baza noastra de coduri.
Acum este timpul sa efectuati cererea HTTP si sa stocati datele intr-o structura de date pe masina noastra locala.
Pentru a face acest lucru, voi folosi biblioteca panda pentru Python. Mai exact, datele vor fi stocate intr-un pandas DataFrame.
Mai intai va trebui sa importam biblioteca panda. Prin conventie, panda este de obicei importata sub piasul alias. Adaugati urmatorul cod la inceputul scriptului pentru a importa panda sub alias dorit:
import panda ca pd
Dupa ce am importat panda in scriptul nostru Python, putem folosi metoda read_json pentru a stoca datele din IEX Cloud intr-un pandas DataFrame:
bank_data = pd.read_json (HTTP_request)
Tiparirea acestui DataFrame in interiorul unui Jupyter Notebook genereaza urmatoarea iesire:
Este clar ca nu asta ne dorim. Va trebui sa analizam aceste date pentru a genera un DataFrame care merita sa fie reprezentat.
Pentru inceput, sa examinam o anumita coloana de bank_data – sa spunem, bank_data [‘JPM’]:
Este clar ca urmatorul strat de analiza va trebui sa fie punctul final al graficului:
Acum avem o structura de date asemanatoare JSON in care fiecare celula este o data impreuna cu diverse puncte de date despre pretul actiunilor JPM la acea data.
Putem infasura aceasta structura asemanatoare JSON intr-un pandas DataFrame pentru a o face mult mai lizibila:
Cu asta putem lucra!
Sa scriem o bucla mica care foloseste o logica similara pentru a extrage seriile de preturi de inchidere pentru fiecare stoc ca o serie pandas (care este echivalent cu o coloana a unui DataFrame pandas). Vom stoca aceste serii pandas intr-un dictionar (cheia fiind numele capusarului) pentru acces usor ulterior.
pentru ticker in tickers: series_dict.update ({ticker: pd.DataFrame (bank_data [ticker] [‘chart’]) [‘inchide’]})
Acum putem crea DataFrame-ul nostru pandas finalizat, care are data ca indice si o coloana pentru pretul de inchidere al tuturor actiunilor bancare majore din ultimii 5 ani:
series_list = [] pentru ticker in tickers: series_list.append (pd.DataFrame (bank_data [ticker] [‘chart’]) [‘close’]) series_list.append (pd.DataFrame (bank_data [‘JPM’] [‘chart’ ‘]) [‘ data ‘]) column_names = tickers.copy () column_names.append (‘ Data ‘) bank_data = pd.concat (serie_list, axa = 1) bank_data.columns = column_names bank_data.set_index (‘ Date ‘, inplace = Adevarat)
Dupa toate acestea, banca noastra de date DataFrame va arata astfel:
Colectia noastra de date este completa. Acum suntem gata sa incepem sa cream vizualizari cu acest set de date al preturilor actiunilor pentru bancile tranzactionate public. Ca o recapitulare rapida, iata scriptul pe care l-am creat pana acum:
# Trimiteti cererea HTTP catre API-ul IEX Cloud si stocati raspunsul intr-un pandas DataFrame bank_data = pd.read_json (HTTP_request) #Create o lista goala pe care o vom adauga la seria de date cu preturi de stoc in serie_list = [] #Loop prin fiecare din capusele noastre si analizeaza un panda Seria preturilor lor de inchidere din ultimii 5 ani pentru ticker in tickers: series_list.append (pd.DataFrame (bank_data [ticker] [‘chart’]) [‘inchide’]) # Adaugare intr-un column of dates series_list.append (pd.DataFrame (bank_data [‘JPM’] [‘chart’]) [‘date’]) #Copiati lista de „tickers” din scriptul anterior si adaugati un element nou numit ‘Date. “. # Aceste elemente vor fi denumirile coloanelor din panda DataFrame noastre ulterior. column_names = tickers.copy () column_names.append (‘Data’)
Pasul 2: Creati diagrama pe care doriti sa o actualizati
In acest tutorial, vom lucra cu biblioteca de vizualizare matplotlib pentru Python.
Matplotlib este o biblioteca extrem de sofisticata, iar oamenii petrec ani intregi stapanind-o in cea mai mare masura. In consecinta, va rugam sa retineti ca in acest tutorial nu zgariem doar suprafata capacitatilor matplotlib.
Vom incepe prin importarea bibliotecii matplotlib.
Cum sa importati Matplotlib
Prin conventie, oamenii de stiinta de date importa, in general, biblioteca piplot de matplotlib sub plias alias.
Iata declaratia completa de import:
import matplotlib.pyplot ca plt
Va trebui sa includeti acest lucru la inceputul oricarui fisier Python care foloseste matplotlib pentru a genera vizualizari de date.
Exista, de asemenea, alte argumente pe care le puteti adauga la importul dvs. de biblioteca matplotlib pentru a va facilita vizualizarea.
Daca lucrati prin acest tutorial intr-un Jupyter Notebook, este posibil sa doriti sa includeti urmatoarea declaratie, care va face ca vizualizarile dvs. sa apara fara a fi necesar sa scrieti o instructiune plt.show ():
% matplotlib inline
Daca lucrati intr-un Jupyter Notebook de pe un MacBook cu afisaj de retina, puteti utiliza urmatoarele afirmatii pentru a imbunatati rezolutia vizualizarilor dvs. matplotlib din notebook:
din IPython.display import set_matplotlib_formats set_matplotlib_formats (‘retina’)
Cu asta, incepem sa cream primele noastre vizualizari de date folosind Python si matplotlib!
Bazele de formatare Matplotlib
In acest tutorial, veti invata cum sa creati boxplots, scatterplots si histograme in Python folosind matplotlib. Vreau sa parcurg cateva elemente de baza ale formatarii in matplotlib inainte de a incepe sa cream vizualizari reale de date.
In primul rand, aproape tot ceea ce faceti in matplotlib va implica invocarea unor metode asupra obiectului plt, care este aliasul pe care l-am importat matplotlib.
In al doilea rand, puteti adauga titluri la vizualizari matplotlib apeland plt.title () si trecand in titlul dorit ca sir.
In al treilea rand, puteti adauga etichete la axele dvs. x si y utilizand metodele plt.xlabel () si plt.ylabel ().
In cele din urma, cu cele trei metode despre care tocmai am discutat – plt.title (), plt.xlabel () si plt.ylabel () – puteti modifica dimensiunea fontului din titlu cu argumentul pentru fonturi.
Haideti sa cream primele noastre vizualizari matplotlib.
Cum se creeaza Boxplots in Matplotlib
Boxplot-urile sunt una dintre cele mai fundamentale vizualizari de date disponibile pentru oamenii de stiinta de date.
Matplotlib ne permite sa cream boxplots cu functia boxplot.
Deoarece vom crea boxploturi de-a lungul coloanelor noastre (si nu de-a lungul randurilor noastre), vom dori, de asemenea, sa transpunem DataFrame in apelul metodei boxplot.
plt.boxplot (bank_data.transpose ())
Acesta este un inceput bun, dar trebuie sa adaugam un pic de styling pentru ca aceasta vizualizare sa fie usor interpretabila pentru un utilizator extern.
In primul rand, sa adaugam un titlu de diagrama:
plt.title („Boxplotul preturilor actiunilor bancare (5Y Lookback)”, fonturi = 20)
In plus, este util sa etichetati axele x si y, asa cum am mentionat anterior:
plt.xlabel (‘Bank’, fontsize = 20) plt.ylabel (‘Preturi de stoc’, fontsize = 20)
De asemenea, va trebui sa adaugam etichete specifice coloanei pe axa x, astfel incat sa fie clar care boxplot apartine fiecarei banci.
Urmatorul cod face trucul:
ticks = range (1, len (bank_data.columns) +1) labels = list (bank_data.columns) plt.xticks (capuse, etichete, fonturi = 20)
La fel, avem un boxplot care prezinta cateva vizualizari utile in matplotlib! Este clar ca Goldman Sachs a tranzactionat la cel mai mare pret din ultimii 5 ani, in timp ce actiunile Bank of America au tranzactionat cele mai mici. Este, de asemenea, interesant de mentionat ca Wells Fargo are cele mai primite puncte de date.
Ca recapitulare, iata codul complet pe care l-am folosit pentru a genera boxplot-urile noastre:
######################## # Creeaza un boxtot Python ###################### ### # Setati dimensiunea panzei matplotlib plt.figure (figsize = (18,12)) #Generate boxplot plt.boxplot (bank_data.transpose ()) #Adauga titluri in grafic si axele plt.title (‘ Boxplot al preturilor actiunilor bancare (5Y Lookback) ‘, fontsize = 20) plt.xlabel (‘ Bank ‘, fontsize = 20) plt.ylabel (‘ Preturi de stoc ‘, fontsize = 20) #Adauga etichete la fiecare boxplot individual pe panza ticks = range (1, len (bank_data.columns) +1) labels = list (bank_data.columns) plt.xticks (capuse, etichete, fonturi = 20)
Cum se creeaza Scatterplots in Matplotlib
Scatterplot-urile pot fi create in matplotlib folosind metoda plt.scatter.
Metoda scatter are doua argumente necesare – o valoare x si o valoare ay.
Haideti sa reprezentam in timp pretul actiunilor lui Wells Fargo, folosind metoda plt.scatter ().
Primul lucru pe care trebuie sa il facem este sa cream variabila noastra pe axa x, numita date:
date = bank_data.index.to_series ()
In continuare, vom izola preturile actiunilor Wells Fargo intr-o variabila separata:
WFC_stock_prices = banca_data [‘WFC’]
Acum putem planifica vizualizarea folosind metoda plt.scatter:
plt.scatter (date, WFC_stock_prices)
Asteptati un pic – etichetele x ale acestui grafic sunt imposibil de citit!
Care este problema?
Ei bine, matplotlib nu recunoaste in prezent ca axa x contine date, deci nu este distantarea corecta a etichetelor.
Pentru a remedia acest lucru, trebuie sa transformam fiecare element al Seriei de date intr-un tip de date date. Urmatoarea comanda este cea mai citita modalitate de a face acest lucru:
date = banca_data.index.to_series () date = [pd.to_datetime (d) pentru d in date]
Dupa rularea din nou a metodei plt.scatter, veti genera urmatoarea vizualizare:
Mult mai bine!
Ultimul nostru pas este sa adaugam titluri in grafic si pe axa. Putem face acest lucru cu urmatoarele afirmatii:
plt.title (“Wells Fargo Stock Price (5Y Lookback)”, fontsize = 20) plt.ylabel (“Stock Price”, fontsize = 20) plt.xlabel (“Data”, fontsize = 20)
Ca o recapitulare, iata codul pe care l-am folosit pentru a crea aceasta scatterplot:
######################## # Creeaza un scatterplot Python ##################### ### # Setati dimensiunea matplotlib canvas plt.figure (figsize = (18,12)) #Create data axei x date = bank_data.index.to_series () dates = [pd.to_datetime (d) pentru d in date] #Create datele axei y WFC_stock_prices = bank_data [‘WFC’] #Generate the scatterplot plt.scatter (date, WFC_stock_prices) #Adauga titluri in grafic si axe plt.title (“Wells Fargo Stock Price (5Y Lookback) ) “, fontsize = 20) plt.ylabel (” Pret stoc “, fontsize = 20) plt.xlabel (” Data “, fontsize = 20)
Cum se creeaza histograme in Matplotlib
Histogramele sunt vizualizari de date care va permit sa vedeti distributia observatiilor in cadrul unui set de date.
Histogramele pot fi create in matplotlib folosind metoda plt.hist.
Sa cream o histograma care sa ne permita sa vedem distributia diferitelor preturi ale actiunilor in setul nostru de date bank_data (retineti ca va trebui sa folosim metoda de transpunere in plt.hist la fel cum am facut cu plt.boxplot mai devreme):
plt.hist (bank_data.transpose ())
Aceasta este o vizualizare interesanta, dar mai avem multe de facut.
Primul lucru pe care probabil l-ati observat a fost ca diferitele coloane ale histogramei au culori diferite. Acest lucru este intentionat. Culorile impart diferitele coloane din cadrul nostru Panda DataFrame.
Acestea fiind spuse, aceste culori sunt lipsite de sens, fara legenda. Putem adauga o legenda la histograma noastra matplotlib cu urmatoarea afirmatie:
plt.legend (bank_data.columns, FONTSIZE = 20)
De asemenea, este posibil sa doriti sa modificati numarul de cos al histogramei, care schimba cate felii setul de date este impartit la goruparea observatiilor in coloane de histograma.
Ca exemplu, iata cum se poate modifica numarul de cosuri din histograma la 50:
plt.hist (bank_data.transpose (), pubele = 50)
In sfarsit, vom adauga titluri la histograma si axele sale folosind aceleasi enunturi pe care le-am folosit in celelalte vizualizari ale noastre:
plt.title (“O histograma a preturilor zilnice de inchidere a actiunilor pentru cele mai mari 5 banci din SUA (5Y Lookback)”, fontsize = 20) plt.ylabel (“Observatii”, fonturi = 20) plt.xlabel (“Preturile actiunilor” , fonturi = 20)
Ca recapitulare, aici este codul complet necesar pentru a genera aceasta histograma:
######################## # Creeaza o histograma Python ###################### ### # Setati dimensiunea panzei matplotlib plt.figure (figsize = (18,12)) #Generati histograma plt.hist (bank_data.transpose (), bins = 50) # Adaugati o legenda la histograma plt. legend (bank_data.columns, fontsize = 20) #Adauga titluri in grafic si axe plt.title (“O histograma a preturilor zilnice de inchidere a actiunilor pentru cele mai mari banci din SUA (5Y Lookback)”, fontsize = 20) plt. ylabel („Observatii”, fonturi = 20) plt.xlabel („Preturi stoc”, fonturi = 20)
Cum sa creati subplote in Matplotlib
In matplotlib, subploturile sunt numele pe care il folosim pentru a ne referi la mai multe comploturi care sunt create pe aceeasi panza folosind un singur script Python.
Subplotele pot fi create cu comanda plt.subplot. Comanda ia trei argumente:
- Numarul de randuri dintr-o grila de subplot
- Numarul de coloane dintr-o grila de subplota
- Ce subplot ai selectat in prezent
Sa cream o grila de subplot 2×2 care contine urmatoarele diagrame (in aceasta ordine specifica):
- Boxplot-ul pe care l-am creat anterior
- Dispersarea pe care am creat-o anterior
- Un scatteplot similar care foloseste date BAC in loc de date WFC
- Histograma pe care am creat-o anterior
Mai intai, sa cream grila de subplot:
plt.subplot (2,2,1) plt.subplot (2,2,2) plt.subplot (2,2,3) plt.subplot (2,2,4)
Acum, ca avem o panza de subplot necompletata, trebuie pur si simplu sa copiem / lipim codul de care avem nevoie pentru fiecare complot dupa fiecare apel al metodei plt.subplot.
La sfarsitul blocului de cod, adaugam metoda plt.tight_layout, care rezolva multe probleme comune de formatare care apar la generarea subploturilor matplotlib.
Iata codul complet:
################################################## ############################################## Creeaza subplote in Python ############################################### # ################################################# ##################### #Subplot 1 ######################## plt. subplot (2,2,1) #Generate the boxplot plt.boxplot (bank_data.transpose ()) #Adauga titluri in grafic si axe plt.title (‘Boxplot of Price Bank Stock (5Y Lookback)’) plt.xlabel ( ‘Bank’, fontsize = 20) plt.ylabel (‘Preturile stocului’) # Adaugarea etichetelor la fiecare cutie individuala de pe panza capuse = interval (1, len (bank_data.columns) +1) etichete = lista (bank_data.columns) plt.xticks (capuse, etichete) ######################## # Subplot 2 ############### ######### plt.subplot (2,2,2) #Create data axei x date = bank_data.index.to_series () dates = [pd.to_datetime (d) pentru d in date] #Creati datele axei y WFC_stock_prices = bank_data [‘WFC’] #Generate the scatterplot plt.scatter (dates, WFC_stock_prices) #Adauga titluri in graficul si axele plt.title (“Wells Fargo Stock Price (5Y Lookback) “) plt.ylabel (” Pretul stocului) plt.xlabel (“Data”) ######################## #Subplot 3 ######################## plt.subplot (2,2,3) #Create data axelor x date = bank_data.index. to_series () dates = [pd.to_datetime (d) pentru d in date] #Create datele axei y BAC_stock_prices = bank_data [‘BAC’] #Generate the scatterplot plt.scatter (date, BAC_stock_prices) #Add titluri la grafic and axes plt.title (“Bank of America Stock Price (5Y Lookback)”) plt.ylabel (“Stock Stock”) plt.xlabel (“Data”) ######################## #Subplot 4 ####################### ## plt.subplot (2,2,4) #Genereaza histograma plt.hist (bank_data.transpose (), bins = 50) #Adauga o legenda la histograma plt.legend (bank_data.columns, fontsize = 20) # Adaugati titluri in grafic si axe plt.title („O histograma a preturilor zilnice de inchidere a actiunilor pentru cele mai mari 5 banci din SUA (5Y Lookback)”) plt.ylabel („Observatii”) plt.xlabel („Preturile actiunilor”) plt.tight_layout ()tight_layout ()tight_layout ()
Dupa cum puteti vedea, cu unele cunostinte de baza, este relativ usor sa cream vizualizari frumoase de date folosind matplotlib.
Ultimul lucru pe care trebuie sa il facem este sa salvam vizualizarea ca fisier .png in directorul nostru de lucru curent. Matplotlib are functionalitati incorporate excelente pentru a face acest lucru. Pur si simplu adaugati urmatoarea declaratie imediat dupa finalizarea celei de-a patra subplote:
################################################ #Salvati cifra masinii noastre locale ########################################### #### plt.savefig (‘bank_data.png’)
In restul acestui tutorial, veti invata cum sa programati aceasta matrice de subplot pentru a fi actualizate automat pe site-ul dvs. web in fiecare zi.
Pasul 3: Creati un cont de servicii web Amazon
Pana acum, in acest tutorial, am invatat cum sa:
- Sursati datele pietei bursiere pe care le vom vizualiza din API-ul IEX Cloud
- Creati vizualizari minunate folosind aceste date cu biblioteca matplotlib pentru Python
In restul acestui tutorial, veti invata cum sa automatizati aceste vizualizari, astfel incat sa fie actualizate intr-un program specific.
Pentru a face acest lucru, vom folosi capabilitatile de cloud computing ale Amazon Web Services. Mai intai va trebui sa creati un cont AWS.
Accesati aceasta adresa URL si faceti clic pe „Creati un cont AWS” in coltul din dreapta sus:
Aplicatia web AWS va va ghida prin etapele de creare a unui cont.
Dupa crearea contului, putem incepe sa lucram cu cele doua servicii AWS de care avem nevoie pentru vizualizarile noastre: AWS S3 si AWS EC2.
Pasul 4: Creati o cupa AWS S3 pentru a va stoca vizualizarile
AWS S3 inseamna Serviciu de stocare simpla. Este una dintre cele mai populare oferte de cloud computing disponibile in Amazon Web Services. Dezvoltatorii folosesc AWS S3 pentru a stoca fisierele si a le accesa ulterior prin intermediul adreselor URL adresate publicului.
Pentru a stoca aceste fisiere, trebuie sa cream mai intai ceea ce se numeste AWS S3 galeata, care este un cuvant fantezist pentru un folder care stocheaza fisiere in AWS. Pentru a face acest lucru, mergeti mai intai la tabloul de bord S3 din cadrul Amazon Web Services.
In partea dreapta a tabloului de bord Amazon S3, faceti clic pe Creare galeata, asa cum se arata mai jos:
Pe ecranul urmator, AWS va va solicita sa selectati un nume pentru noua dvs. galeata S3. In scopul acestui tutorial, vom folosi numele galeata nicks-first-galeata.
Apoi, va trebui sa derulati in jos si sa setati permisiunile cu galeata. Deoarece fisierele pe care le vom incarca sunt concepute pentru a fi accesibile publicului (la urma urmei, le vom incorpora in pagini de pe un site web), atunci veti dori sa faceti permisiunile cat mai deschise.
Iata un exemplu specific cum ar trebui sa arate permisiunile dvs. AWS S3:
Aceste permisiuni sunt foarte vagi, iar pentru multe cazuri de utilizare nu sunt acceptabile (desi indeplinesc intr-adevar cerintele acestui tutorial). Din aceasta cauza, AWS va va solicita sa confirmati urmatorul avertisment inainte de a crea cupa AWS S3:
Dupa ce toate acestea sunt facute, puteti derula pana in partea de jos a paginii si faceti clic pe Create Bucket. Acum sunteti gata sa continuati!
Pasul 5: Modificati scriptul Python pentru a salva vizualizarile dvs. in AWS S3
Scriptul nostru Python in forma sa actuala este conceput pentru a crea o vizualizare si apoi pentru a salva acea vizualizare pe computerul nostru local. Acum trebuie sa modificam scriptul pentru a salva fisierul .png in bucketul AWS S3 pe care tocmai l-am creat (care, ca memento, se numeste nicks-first-bucket).
Instrumentul pe care il vom folosi pentru a incarca fisierul nostru in galeata AWS S3 se numeste boto3, care este Amazon Web Services Software Development Kit (SDK) pentru Python.
In primul rand, va trebui sa instalati boto3 pe masina dvs. Cel mai simplu mod de a face acest lucru este utilizarea managerului de pachete pip:
pip3 instala boto3
In continuare, trebuie sa importam boto3 in scriptul nostru Python. Facem acest lucru adaugand urmatoarea afirmatie langa inceputul scriptului nostru:
import boto3
Avand in vedere profunzimea si latimea ofertelor de produse Amazon Web Services, boto3 este o biblioteca Python neplacut complexa.
Din fericire, trebuie doar sa utilizam unele dintre cele mai de baza functionalitati ale boto3.
Urmatorul bloc de cod va incarca vizualizarea noastra finala pe Amazon S3.
################################################ #Apasati fisierul din galeata AWS S3 ########################################### ##### s3 = boto3.resource (‘s3’) s3.meta.client.upload_file (‘bank_data.png’, ‘nicks-first-bucket’, ‘bank_data.png’, ExtraArgs = {‘ACL’: ‘read-public’})
Dupa cum puteti vedea, metoda upload_file de boto3 ia mai multe argumente. Sa le daramam, rand pe rand:
- bank_data.png este numele fisierului pe masina noastra locala.
- nicks-first-bucket este numele buclei S3 pe care vrem sa o incarcam.
- bank_data.png este numele pe care dorim sa il aiba fisierul dupa ce acesta este incarcat in cupa AWS S3. In acest caz, este acelasi cu primul argument, dar nu trebuie sa fie.
- ExtraArgs = {‘ACL’: ‘public-read’} inseamna ca fisierul ar trebui sa fie citit de public, odata ce este impins catre cupa AWS S3.
Rularea acestui cod va duce la o eroare.
japoneze husband porno http://www.helenag.cz/obchod/plugins/guestbook/go.php?url=https://adult66.net/
porno xnxxx http://dkdfilm.com/__media__/js/netsoltrademark.php?d=adult66.net/
scufita rosie porno romanesc http://aaavista.net/__media__/js/netsoltrademark.php?d=adult66.net/
porno hd watch http://referencevalley.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/amatori
filmme porno http://www.hotelsepicuriens.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/anal
porno pornhub http://looismotor.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/asiatice
japoneze porno http://www.cyprus-net.com/banner_click.php?banid=9&link=https://adult66.net/filme-porno/beeg
filme porno indiene http://sunlightmktg.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/blonde
porno suedez http://www.hammerfest.es/forum.html/redirect?url=https://adult66.net/filme-porno/brazzers
porno misionari http://asai-kota.com/acc/acc.cgi?REDIRECT=https://adult66.net/filme-porno/brunete
tini porno http://artesian.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/chaturbate
viol filme porno http://lawdailyrecord.1updemo.com/Redirect.asp?UID=25188916&SubSectionID=4&LinkID=31&LinkURL=https://adult66.net/doua-panarame-se-fut-in-cele-mai-ciudate-pozitii-cu-un-salbatic
porno mom boi http://darknlovely.com/__media__/js/netsoltrademark.php?d=adult66.net/doua-lesbiene-de-15-ani-se-dezvirgineaza-una-pe-alta
porno botosani http://ladyinnylons.net/crtr/cgi/out.cgi?url=https://adult66.net/o-creola-super-frumoasa-e-fututa-de-un-burtos-apoi-ejaculeaza-pe-ea
porno la sauna http://askyourmom.net/__media__/js/netsoltrademark.php?d=adult66.net/surori-minore-fortate-de-unchi-sa-faca-sex-oral-si-sa-se-futa-cu-el
animatie porno http://www.basementfilms.com/__media__/js/netsoltrademark.php?d=adult66.net/blonda-mica-singura-acasa-se-masturbeaza-pe-canapea
porno frate si sora http://www.paidfriends.com/__media__/js/netsoltrademark.php?d=adult66.net/ii-face-sex-oral-prietenei-apoi-o-fute-de-i-sar-capacele
filme porno cu puli mari http://www.cmajor.org/__media__/js/netsoltrademark.php?d=adult66.net/se-masturbeaza-in-fata-webului-si-apoi-are-orgasm
fnaf porno http://shopdazzles.com/guestbook/go.php?url=https://adult66.net/un-cuplu-incinge-o-partida-de-sex-pe-sezlong-la-piscina
kelli berglund porno http://www.financetemp.com/__media__/js/netsoltrademark.php?d=adult66.net/blonda-voluptoasa-se-joaca-cu-sanii-ca-actritele-din-filmele-porno
Mai exact, Python va arunca urmatoarea exceptie:
S3UploadFailedError: Nu a putut incarca bank_data.png pe nicks-first-bucket / bank_data.png: A aparut o eroare (NoSuchBucket) la apelarea operatiei PutObject: bucket-ul specificat nu exista
De ce asta?
Ei bine, se datoreaza faptului ca nu am configurat inca masina noastra locala pentru a interactiona cu serviciile web Amazon prin boto3.
Pentru a face acest lucru, trebuie sa rulam comanda aws configure din interfata liniei de comanda si sa adaugam cheile noastre de acces. Aceasta piesa de documentare de la Amazon impartaseste mai multe informatii despre modul de configurare a interfetei dvs. de linie de comanda AWS.
Daca preferati sa nu navigati pe freecodecamp.org, iata pasii rapide pentru configurarea CLI-ului dvs. AWS.
In primul rand, faceti clic peste numele dvs. de utilizator din coltul din dreapta sus, astfel:
Dati clic pe acreditarile de securitate.
Pe ecranul urmator, veti dori sa faceti clic pe tastele Acces (cod cheie de acces si tasta de acces secret, in jos, apoi faceti clic pe Creati cheie de acces noua.
Acest lucru va va solicita sa descarcati un fisier .csv care contine atat cheia dvs. de acces cat si cheia secreta de acces. Salvati-le intr-o locatie sigura.
Apoi, declanseaza interfata liniei de comanda Amazon Web Services tastand aws configure pe linia de comanda. Acest lucru va va solicita sa introduceti cheia de acces si cheia de acces secreta.
Odata facut acest lucru, scriptul dvs. ar trebui sa functioneze asa cum a fost dorit. Reexecutati scriptul si verificati pentru a va asigura ca vizualizarea dvs. Python a fost incarcata corect in AWS S3, uitandu-va in interiorul galetii pe care am creat-o mai devreme:
Vizualizarea a fost incarcata cu succes. Acum suntem gata sa incorporam vizualizarea pe site-ul nostru web!
Pasul 6: incorporarea vizualizarii pe site-ul dvs. web
Dupa ce vizualizarea datelor a fost incarcata pe AWS S3, veti dori sa incorporati vizualizarea undeva pe site-ul dvs. web. Aceasta ar putea fi intr-o postare pe blog sau in orice alta pagina de pe site-ul dvs.
Pentru a face acest lucru, va trebui sa luam adresa URL a imaginii din galeata noastra S3. Faceti clic pe numele imaginii din cupa S3 pentru a naviga la pagina specifica fisierului pentru acel element. Va arata astfel:
Daca derulati in partea de jos a paginii, va exista un camp numit URL de obiect care arata astfel:
https://nicks-first-bucket.s3.us-east-2.amazonaws.com/bank_data.png
Daca copiati si lipiti aceasta adresa URL intr-un browser web, aceasta va descarca de fapt fisierul bank_data.png pe care l-am incarcat mai devreme!
Pentru a incorpora aceasta imagine intr-o pagina web, veti dori sa o treceti intr-o eticheta img HTML ca atribut src. Iata cum am integra imaginea noastra bank_data.png intr-o pagina web folosind HTML:
<img src = “https://nicks-first-bucket.s3.us-east-2.amazonaws.com/bank_data.png”>
Nota: intr-o imagine reala incorporata pe un site web, ar fi important sa includeti o eticheta alt in scopuri de accesibilitate.
In urmatoarea sectiune, vom invata cum sa programam scriptul nostru Python pentru a rula periodic, astfel incat datele din bank_data.png sa fie mereu actualizate.
Pasul 7: Creeaza o instanta AWS EC2
Vom folosi AWS EC2 pentru a programa scriptul nostru Python pentru a rula periodic.
AWS EC2 reprezinta Elastic Compute Cloud si, impreuna cu S3, este unul dintre cele mai populare servicii de cloud computing din Amazon.
Va permite sa inchiriati unitati mici de putere de calcul (numite instante) pe computerele din centrele de date ale Amazon si sa programati acele calculatoare pentru a efectua lucrari pentru dvs.
AWS EC2 este un serviciu destul de remarcabil, deoarece daca inchiriati o parte din computerele lor mai mici, atunci va calificati pentru nivelul gratuit AWS. In mod diferit, utilizarea diligenta a preturilor in cadrul AWS EC2 va va permite sa evitati sa platiti bani.
Pentru inceput, va trebui sa cream prima noastra instanta EC2. Pentru a face acest lucru, navigati la tabloul de bord EC2 din AWS Management Console si dati clic pe Lansare instanta:
Acest lucru va va duce la un ecran care contine toate tipurile de instanta disponibile in AWS EC2. Exista un numar aproape de incredibil de optiuni aici. Vrem un tip de instanta care se califica drept nivel liber eligibil – in mod special, am ales Amazon Linux 2 AMI (HVM), tip SSD Volume:
Faceti clic pe Selectare pentru a continua.
In pagina urmatoare, AWS va va solicita sa selectati specificatiile pentru aparatul dvs. Campurile pe care le puteti selecta includ:
- Familie
- Tip
- vCPUs
- Memorie
- Stocare de instanta (GB)
- EBS optimizat
- Performanta retelei
- Asistenta IPv6
In scopul acestui tutorial, dorim pur si simplu sa selectam masina unica care este eligibila pentru nivel liber. Se caracterizeaza printr-o mica eticheta verde care arata astfel:
Faceti clic pe Revizuire si Lansati in partea de jos a ecranului pentru a continua.
Urmatorul ecran va prezenta detaliile noii tale instante pentru a le putea examina.
Examinati rapid specificatiile aparatului, apoi faceti clic pe Lansare in coltul din dreapta jos.
Facand clic pe butonul Lansare va declansa o fereastra care va va solicita sa selectati o pereche de chei existente sau sa creati o noua pereche de chei.
O pereche de chei este alcatuita dintr-o cheie publica detinuta de AWS si o cheie privata pe care trebuie sa o descarcati si sa o stocati intr-un fisier .pem.
Trebuie sa aveti acces la acel fisier .pem pentru a accesa instanta dvs. EC2 (de obicei prin SSH). De asemenea, aveti optiunea de a continua fara o pereche de chei, dar acest lucru nu este recomandat din motive de securitate.
Dupa ce se va face acest lucru, instanta dvs. se va lansa! Felicitari pentru lansarea primei instante pe unul dintre cele mai importante servicii de infrastructura Amazon Web Services.
In continuare, va trebui sa impingeti scriptul Python in instanta EC2.
Iata o declaratie de stare de comanda generica care va permite sa mutati un fisier intr-o instanta EC2:
scp -i path / to / .pem_file path / to / file username@host_address.amazonaws.com: / path_to_copy
Rulati aceasta declaratie cu inlocuirile necesare pentru a muta bank_stock_data.py in instanta EC2.
S-ar putea sa crezi ca acum poti rula scriptul Python din cadrul instantei tale EC2. Din pacate, nu este cazul. Instanta dvs. EC2 nu vine cu pachetele Python necesare.
Pentru a instala pachetele pe care le-am folosit, puteti exporta un fisier require.txt si importa pachetele corespunzatoare folosind pip, sau puteti rula pur si simplu urmatoarele:
sudo yum instala python3-pip pip3 instaleaza pandas pip3 instaleaza boto3
Acum suntem gata sa programam scriptul nostru Python pentru a putea fi rulat periodic pe instanta noastra EC2! Exploram acest lucru in urmatoarea sectiune a articolului nostru.
Pasul 8: Planificati scriptul Python pentru a rula periodic pe AWS EC2
Singurul pas care ramane in acest tutorial este sa planificati fisierul nostru bank_stock_data.py pentru a rula periodic in instanta noastra EC2.
Putem folosi o utilitate pentru linia de comanda numita cron pentru a face acest lucru.
cron functioneaza prin care va solicita sa specificati doua lucruri:
- Cat de des doriti o sarcina (numita lucrare cron), exprimata printr-o expresie cron
- Ce trebuie executat atunci cand este programata lucrarea cron
In primul rand, sa incepem prin crearea unei expresii cron.
Expresiile cron pot parea ca niste straini. De exemplu, iata expresia cron care inseamna „in fiecare zi la pranz”:
00 12 * * *
Eu personal folosesc site-ul web crontab guru, care este o resursa excelenta care va permite sa vedeti (in termeni de profan) ce inseamna expresia dvs. cron.
Iata cum puteti utiliza site-ul web guru crontab pentru a programa un job cron pentru a rula in fiecare duminica la 7 dimineata:
Avem acum un instrument (crontab guru) pe care il putem folosi pentru a genera expresia noastra cron. Acum trebuie sa instruim demonul cron al instantei noastre EC2 pentru a rula fisierul nostru bank_stock_data.py in fiecare duminica la 7 dimineata.
Pentru a face acest lucru, vom crea mai intai un nou fisier in instanta noastra EC2 numita bank_stock_data.cron. Deoarece folosesc editorul de text vim, comanda pe care o folosesc pentru aceasta este:
vim bank_stock_data.cron
In acest fisier .cron, ar trebui sa existe o linie care arata astfel: (expresia cron) (instructiunea de executat). Expresia crona este 00 7 * * 7, iar declaratia noastra de executat este python3 bank_stock_data.py.
Imbunatatind totul si iata care ar trebui sa fie continutul final al bank_stock_data.cron:
00 7 * * 7 python3 bank_stock_data.py
Ultimul pas al acestui tutorial este importul fisierului bank_stock_data.cron in crontab al instantei noastre EC2. Crontab este, in esenta, un fisier care combina lucrari pentru ca demonul cron sa se efectueze periodic.
Sa luam mai intai un moment pentru a investiga acest lucru in crontab. Urmatoarea comanda tipareste continutul crontab in consola noastra:
crontab -l
Din moment ce nu am adaugat nimic la crontab si am creat instanta noastra EC2 doar cateva clipe in urma, atunci aceasta afirmatie nu ar trebui sa imprime nimic.
Acum, sa importam bank_stock_data.cron in crontab. Iata afirmatia pentru a face acest lucru:
crontab bank_stock_data.cron
Acum ar trebui sa putem sa tiparim continutul crontab-ului nostru si sa vedem continutul bank_stock_data.cron.
Pentru a testa acest lucru, executati urmatoarea comanda:
crontab -l
Ar trebui sa imprime:
00 7 * * 7 python3 bank_stock_data.py
Ganduri finale
In acest tutorial, ai invatat cum sa creezi vizualizari frumoase de date folosind Python si Matplotlib care se actualizeaza periodic. Mai exact, am discutat:
- Cum pot descarca si analiza date din IEX Cloud, una dintre sursele mele preferate de date financiare de inalta calitate
- Modul de formatare a datelor intr-un pandas DataFrame
- Cum se creeaza vizualizari de date in Python folosind matplotlib
- Cum sa creati un cont cu Amazon Web Services
- Cum sa incarcati fisierele statice in AWS S3
- Cum sa incorporati fisiere .png gazduite pe AWS S3 in pagini de pe un site web
- Cum se creeaza o instanta AWS EC2
- Cum sa programati un script Python pentru a rula periodic utilizand AWS EC2 folosind cron
Acest articol a fost publicat de Nick McCullum, care ii invata pe oameni cum sa codeze pe site-ul sau.
Invata sa codam gratuit. Programul de invatamant open source freeCodeCamp a ajutat mai mult de 40.000 de oameni sa obtina locuri de munca ca dezvoltatori. Incepe








