Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit

Einführung

Ich möchte ein Dashboard erstellen, mit dem Daten intuitiv visualisiert, analysiert und als Webanwendung veröffentlicht werden können. Aber HTML, CSS und JS sind problematisch, deshalb möchte ich mich nicht mit ihnen anlegen. In einem solchen Fall können Sie mit Streamlit problemlos ein Datenanalyse-Dashboard mit nur einem Python-Skript erstellen. In diesem Artikel

Ich werde gehen Da dies eine solche Zeit ist, sollten Sie sich als Thema die Daten ansehen, die den Verkehr von Menschen in den 23 Bezirken Tokios bestätigen können, die in Yahoo Data Solution veröffentlicht wurden, sowie die neue Corona Lassen Sie uns die Auswirkungen der Maßnahmen überprüfen.

\ # Insbesondere die zweite Hälfte ist eine Aufzeichnung, die ein Anfänger des Web-Systems durch Herumtasten versucht hat, daher sollte es verschiedene Mängel in Inhalt und Beschreibung geben. \ # Ich würde es begrüßen, wenn Sie darauf hinweisen könnten.

App-Erstellung

Streamlit-Installation

Streamlit ist OSS. GitHub:https://github.com/streamlit/streamlit

Die Installation ist mit den folgenden Schritten in Ordnung.

pip install streamlit

Durch Ausführen des folgenden Befehls können Sie die Demo-App lokal starten und im Browser überprüfen (der Browser wird automatisch gestartet).

streamlit hello

image.png

Die offizielle Tutorial-Seite ist leicht zu verstehen. Dieser Kommentarartikel ist ebenfalls verfügbar.

[Zusatz] Dies ist auch hilfreich.

Datenaufbereitung

Es ist eine solche Zeit, also werden Sie sehen wollen, wie sich die neuen Koronamaßnahmen auf den Menschenstrom in Tokio auswirken. Als ich nach solchen Daten suchte, fand ich sie unter Yahoo! Data Solution. "Täglicher Übergang der geschätzten Bevölkerung in Tokio 23 Stationen (insgesamt / Besucher / Einwohner)" Daten Es wurde als offene Daten veröffentlicht (Stand: 10. April 2020). Dieses Mal werde ich versuchen, dies auf eine schöne Art und Weise zu visualisieren.

[Quelle: Yahoo! Data Solution (https://ds.yahoo.co.jp/report/, 2020/04/09)] Die Daten werden täglich aktualisiert. Hier werden die Daten bis zum 9. April 2020 verwendet.

Die Originaldaten liegen im Excel-Format vor und umfassen die Anzahl der Einwohner, Besucher und die Gesamtzahl der Personen in den 23 Bezirken Tokios täglich. Da dies für jeden Monat in einem separaten Blatt gespeichert wird, konvertieren Sie es im Voraus in CSV.

Lesen Sie jede davon und kombinieren Sie sie zu einer.

import numpy as np
import pandas as pd

data_02 = pd.read_csv('Tokyo 23 Ward Transition 0409_Februar.csv')
data_03 = pd.read_csv('Tokyo 23 Ward Transition 0409_März.csv')
data_04 = pd.read_csv('Tokyo 23 Ward Transition 0409_April.csv')

data_all = pd.concat([data_02, data_03.iloc[:, 2:], data_04.iloc[:, 2:]], axis=1)
data_all.head()
Bereich Zielklassifizierung 1. Februar 2. Februar 3. Februar 4. Februar 5. Februar 6. Februar 7. Februar 8. Februar ... 30. März 31. März 1. April 2. April 3. April 4. April 5. April 6. April 7. April 8. April
0 Die gesamten 23 Bezirke Tokios ganz 10485000 10164000 11676000 11687000 11659000 11690000 11691000 10471000 ... 11393000 11388000 11288000 11263000 11256000 10021000 9737000 11212000 11104000 10859000
1 NaN Resident 8921000 8921000 8921000 8921000 8921000 8921000 8921000 8921000 ... 8949000 8949000 8924000 8924000 8924000 8924000 8924000 8924000 8924000 8924000
2 NaN Besucher 1564000 1243000 2755000 2766000 2738000 2769000 2770000 1550000 ... 2444000 2439000 2364000 2339000 2332000 1097000 813000 2288000 2180000 1935000
3 Chiyoda-ku ganz 454900 356900 1028900 1039900 1031900 1043900 1041900 453900 ... 857000 855000 819500 802500 791500 266500 195500 775500 731500 624500
4 NaN Resident 54900 54900 54900 54900 54900 54900 54900 54900 ... 56000 56000 55500 55500 55500 55500 55500 55500 55500 55500

Bereiche und Zielklassifizierungen sind als MultiIndex und Ausgabe organisiert.

data_all.fillna(method='ffill', inplace=True)
data_all.set_index(['Bereich', 'Zielklassifizierung'], inplace=True)

data_all.to_csv('tokyo_0409.csv', index=True, header=True)

Die endgültigen Daten sehen so aus.

data_all.head(7)
1. Februar 2. Februar 3. Februar 4. Februar 5. Februar 6. Februar 7. Februar 8. Februar 9. Februar 10. Februar ... 30. März 31. März 1. April 2. April 3. April 4. April 5. April 6. April 7. April 8. April
Bereich Zielklassifizierung
Die gesamten 23 Bezirke von Tokio Insgesamt 10485000 10164000 11676000 11687000 11659000 11690000 11691000 10471000 10149000 11523000 ... 11393000 11388000 11288000 11263000 11256000 10021000 9737000 11212000 11104000 10859000
Resident 8921000 8921000 8921000 8921000 8921000 8921000 8921000 8921000 8921000 8921000 ... 8949000 8949000 8924000 8924000 8924000 8924000 8924000 8924000 8924000 8924000
Besucher 1564000 1243000 2755000 2766000 2738000 2769000 2770000 1550000 1228000 2602000 ... 2444000 2439000 2364000 2339000 2332000 1097000 813000 2288000 2180000 1935000
Chiyoda-ku Insgesamt 454900 356900 1028900 1039900 1031900 1043900 1041900 453900 356900 958900 ... 857000 855000 819500 802500 791500 266500 195500 775500 731500 624500
Resident 54900 54900 54900 54900 54900 54900 54900 54900 54900 54900 ... 56000 56000 55500 55500 55500 55500 55500 55500 55500 55500
Besucher 400000 302000 974000 985000 977000 989000 987000 399000 302000 904000 ... 801000 799000 764000 747000 736000 211000 140000 720000 676000 569000
Chuo-ku Insgesamt 441000 367000 849000 857000 852000 861000 863000 440000 370000 793000 ... 733000 728000 701000 691000 684000 307000 256000 675000 641000 563000

Erstellen Sie ein Dashboard

Von hier aus erstellen wir tatsächlich ein Dashboard. Mit Streamlit können Sie ein Dashboard mit nur einem Python-Skript erstellen. Dieses Mal werde ich das Skript als streamlit_app.py schreiben.

Der Inhalt der Daten wird in einem Liniendiagramm angezeigt. Geben Sie das Zielgebiet im Auswahlfeld an und legen Sie eine Spezifikation fest, mit der Sie den Zeitreihenübergang der Anzahl der Einwohner, Besucher und der Gesamtzahl des Gebiets anzeigen können.

streamlit_app.py


import numpy as np
import pandas as pd
import streamlit as st
import plotly.graph_objects as go

st.title('Täglicher Übergang der geschätzten Bevölkerung in 23 Bezirken Tokios')
st.write('[Quelle: Yahoo Data Solution]')

data_all = pd.read_csv('data/tokyo_0409.csv')
erea_list = data_all['Bereich'].unique()

data_all.set_index(['Bereich', 'Zielklassifizierung'], inplace=True)

#Ändern Sie den Wert in vertikales Halten
data_all = data_all.T
#Konvertieren Sie das Datum in den Datum / Uhrzeit-Typ
data_all.index = map(lambda x: '2020'+x, data_all.index)
data_all.index = pd.to_datetime(data_all.index, format='%Y Jahr%m Monat%d Tag')
data_all.index.name = 'Zeit'

#Wählen Sie den Anzeigebereich mit dem Auswahlfeld aus
selected_erea = st.sidebar.selectbox(
    'Wählen Sie den anzuzeigenden Bereich aus:',
    erea_list
)

#Grafikanzeige
st.write(f'##Anzeige:{selected_erea}')
data_plotly = data_all[(selected_erea)]
data_plot = [
    go.Scatter(x=data_plotly.index,
               y=data_plotly['Bewohner'],
               mode='lines',
               name='Bewohner'),
    go.Scatter(x=data_plotly.index,
               y=data_plotly['Besucher'],
               mode='lines',
               name='Besucher'),
    go.Scatter(x=data_plotly.index,
               y=data_plotly['Das ganze'],
               mode='lines',
               name='Das ganze')]
layout = go.Layout(
    xaxis={"title": "Datum"},
    yaxis={"title": "Anzahl der Personen"}
)
st.plotly_chart(go.Figure(data=data_plot, layout=layout))


image.png

Verwenden der st.write () Methode des streamlit Moduls usw. Wir definieren die Zeichenfolgen, Tabellen und Grafiken, die auf dem Bildschirm angezeigt werden sollen.

Als interaktiver Prozess wird "st.selectbox ()" verwendet, um die Zielbereichsoptionen anzuzeigen. Indem der vom Benutzer in selected_erea ausgewählte Wert als Rückgabewert verwendet wird, Die Informationen des entsprechenden Bereichs werden in einem Diagramm gezeichnet. Sie können Elemente in der Seitenleiste auf der linken Seite des Bildschirms mit "st.sidebar" platzieren, und es sieht ein wenig gut aus.

Für die Diagrammanzeige stehen einfache Methoden wie "st.line_chart ()" zur Verfügung. Ich schien nicht in der Lage zu sein, mit Daten usw. umzugehen. Dieses Mal verwende ich st.plotly_chart (), um mit Plotly ein interaktives Diagramm zu erstellen und es zu zeichnen.

Ein weiteres charakteristisches Merkmal von Streamlit ist Sie können Daten auf der Karte mit st.map () zeichnen Mit st.progress () können Sie einen Fortschrittsbalken für Prozesse anzeigen, die lange dauern. Ich wollte diesen Bereich auch nutzen, aber dieses Mal werde ich ihn weglassen.

Es ist praktisch, einen Bildschirm mit nur einem kurzen Python-Skript erstellen zu können, ohne HTML zu kennen.

Bereitstellung in AWS

Bei angenommener Verwendung können Sie die vorliegenden Daten schnell überprüfen, die Ergebnisse mit dem Team teilen usw. Ich denke, es geht darum, aber da es eine große Sache ist, werde ich es auf einer AWS EC2-Instanz bereitstellen und als Test veröffentlichen.

Verfahren: 1: Erstellen Sie eine t2.micro-Instanz der kostenlosen AWS EC2-Schicht 2: Führen Sie die App in der Instanz aus

streamlit run streamlit_app.py

3: Domainerwerb Dieses Mal habe ich vom kostenlosen Domain-Service freenom einen entsprechenden Domain-Namen "onedata.ml" erhalten. (Sie können kostenlos ".tk" -, ".ml" -, ".ga" -, ".cf" -, ".gq" -Domains erhalten.) 4: Bearbeiten Sie die Streamlit-Konfigurationsdatei In der Konfigurationsdatei (config.toml) im Ordner ~ / .streamlit Geben Sie den Domainnamen ein, den Sie als Zugangsadresse erhalten haben.

[browser]
gatherUsageStats = false
serverAddress = "onedata.ml"

[server]
port = 8501

5: Portübertragung von 80 auf 8501 Standardmäßig akzeptiert streamlit die Kommunikation über Port 8501. Ich möchte vom Standardport 80 aus auf den Zugriff zugreifen können, ohne den Port anhand des Domänennamens angeben zu müssen. Dazu benötigen Sie Root-Rechte, wenn Sie die App ausführen. Daher werden wir uns hier damit befassen, indem wir mit iptables spielen und den Zugriff auf Port 80 an Port 8501 weiterleiten.

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8501

6: Port 80 öffnen Bearbeiten Sie Sicherheitsgruppe> Eingehende Regeln im EC2-Dashboard und lassen Sie Port 80 offen.

Hier ist die App, die ich gemacht habe ↓ http://onedata.ml

Implementierung ↓ https://github.com/tkmz-n/streamlit_app

Zusammenfassung

Erstellen Sie eine einfache Demo-App, um offene Daten mit Streamlit zu visualisieren Ich habe versucht, es in AWS bereitzustellen und zu veröffentlichen.

Wenn wir uns die Daten ansehen, können wir sehen, dass der Verkehr der Menschen in den 23 Bezirken Tokios seit Ende März allmählich zurückgegangen ist. Bleiben wir weiterhin zu Hause, um die neue Corona so schnell wie möglich zusammenzuführen.

Recommended Posts

Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Erstellen Sie mit Python einen Entscheidungsbaum aus 0 und verstehen Sie ihn (3. Datenanalysebibliothek Pandas Edition)
[AWS lambda] Stellen Sie mit lambda verschiedene Bibliotheken bereit (generieren Sie eine Zip-Datei mit einem Kennwort und laden Sie sie auf s3 hoch) @ Python
Erstellen Sie ein Bereitstellungsskript mit Stoff und Küche und verwenden Sie es erneut
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Machen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (4. Datenstruktur)
Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)
Schritte zum Erstellen eines Twitter-Bots mit Python
Laden Sie Daten mit einem Befehl und einer Aktualisierung auf s3 von aws hoch und löschen Sie die verwendeten Daten (unterwegs).
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Datenanalyse mit Python
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Lesehinweis: Einführung in die Datenanalyse mit Python
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
Bis Sie mit Python unter Windows 7 eine maschinelle Lernumgebung erstellen und ausführen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Erstellen Sie Anwendungen, registrieren Sie Daten und teilen Sie sie mit einer einzigen E-Mail
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Erstellen Sie eine Nachricht, die der Lokalisierung entspricht, mit einer Python-Übersetzungszeichenfolge
Holen Sie sich zusätzliche Daten zu LDAP mit Python (Writer und Reader)
Übersicht über die virtuelle Python-Umgebung und deren Erstellung
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Schritte zum Erstellen eines Jobs, der ein Docker-Image abruft und mit Github-Aktionen testet
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
[Python / Ruby] Mit Code verstehen Wie man Daten aus dem Internet abruft und in CSV schreibt
Schritte zum Einrichten von Pipenv, Erstellen einer CRUD-App mit Flask und Containerisieren mit Docker
[Python] Ich habe einen Test von "Streamlit" geschrieben, der das Erstellen von Visualisierungsanwendungen erleichtert.
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
Verarbeitung zur Verwendung von notMNIST-Daten in Python (und versucht, sie zu klassifizieren)
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]
Erstellen Sie eine virtuelle Umgebung mit Python!
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
Links zu Personen, die gerade mit der Datenanalyse mit Python beginnen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich möchte eine Pipfile erstellen und im Docker wiedergeben