[PYTHON] Erstellen einer Cholera-Karte für John Snow

Einführung

Die neue Corona-Virus-Karte wird auf die Webseite jedes Unternehmens hochgeladen. In diesem Zusammenhang interessierte ich mich unter anderem für die geografische Verbreitung von Infektionskrankheiten und epidemiologische Karten. In der Zwischenzeit gab es etwas Interessantes im Datacamp-Projekt, also würde ich es gerne ausprobieren. Ich möchte es als Memorandum veröffentlichen. Darüber hinaus wird es von DeepL ins Japanische übersetzt.

Überblick

Im Jahr 1854 führte Dr. John Snow eine computergestützte räumliche Analyse durch, indem er das Muster und den Status von Cholera-Ausbrüchen in Soho, London, abbildete. Er kartierte die Toten in der Nachbarschaft und entschied, dass die Mehrheit um einen bestimmten Brunnen herum auftrat und dass die Toten diesen Brunnen benutzten. Dies war nicht nur eine der frühesten Anwendungen der Datenvisualisierung, sondern durch die Lösung dieses Problems etablierte er räumliche Analysen und moderne Epidemien.

Dieses Python-Projekt analysiert die Daten erneut und erstellt die berühmte Karte von John Snow neu. Dieses Projekt soll das Wissen über Pandas und Bokeh testen, das in "Pandas Foundations" und "Interactive Data Visualization with Bokeh" erlernt werden kann.

1. Dr. John Snow

Dr. John Snow (1813-1858) ist ein bekannter britischer Arzt, der als Legende in der Geschichte der öffentlichen Gesundheit bekannt ist und Pionier in der Entwicklung der Anästhesie ist. Einige sagen sogar, einer der großen Ärzte aller Zeiten.

Als führender Verfechter sowohl der Anästhesie als auch der Hygienepflege führte er nicht nur Äther- und Chloroform-Experimente durch, sondern entwarf auch die Maske und ihre Verabreichungsmethode. Während der Geburt von Königin Victorias achtem und neunten Kindern in den Jahren 1853 und 1857 wurde bei seiner eigenen Verabreichung von Chloroform der Einsatz von Anästhetika während der Geburt allgemein akzeptiert.

Aber wie ich Ihnen später zeigen werde, war nicht sein ganzes Leben erfolgreich. John Snow wird durch einen wissenschaftlichen und ziemlich modernen Datenansatz, der 1854 die Quelle der Cholera in Soho, London, identifizierte (Datenvisualisierung, Weltraum), als einer der Begründer der modernen Epidemiologie anerkannt. Einige halten es für den Begründer der Analyse, der Datenwissenschaft im Allgemeinen und vieler anderer verwandter Disziplinen, aber das war nicht immer der Fall. Tatsächlich wurde er lange Zeit von der wissenschaftlichen Gemeinschaft einfach ignoriert und ist jetzt sehr oft mythisch.

Diese Notiz entdeckt nicht nur seine "Datengeschichte" wieder, sondern analysiert auch die Daten, die er 1854 gesammelt hat, um seine berühmte Karte (auch als Geisterkarte bekannt) neu zu erstellen. ..

1.py


# Loading in the pandas module
# ... YOUR CODE FOR TASK 1 ...
import pandas as pd

# Reading in the data
deaths = pd.read_csv("datasets/deaths.csv")

# Print out the shape of the dataset
# ... YOUR CODE FOR TASK 1 ...
print(deaths.shape)

# Printing out the first 5 rows
# ... YOUR CODE FOR TASK 1 ...
print(deaths.head(5))

Das Ergebnis ist wie folgt

(489, 3)
   Death  X coordinate  Y coordinate
0      1     51.513418     -0.137930
1      1     51.513418     -0.137930
2      1     51.513418     -0.137930
3      1     51.513361     -0.137883
4      1     51.513361     -0.137883

2. Cholera dringt ein!

Bevor John Snow Cholera entdeckte, war Cholera regelmäßig in den überfüllten und unhygienischen Straßen Londons. Während des dritten Cholera-Ausbruchs war Cholera eines der am meisten untersuchten Themen (mehr als 700 Studien und Aufsätze wurden allein in London zwischen 1839 und 1856 veröffentlicht) und fast alle Autoren Ich dachte, dass die Ursache für den Ausbruch der Cholera eine Infektionskrankheit und "schlechte Luft" war.

John Snow's Pionierarbeit in Bezug auf Anästhesie und Gas hat ihn dazu gebracht, ein Myasma-Modell der Krankheit zu vermuten. Ursprünglich formulierte und veröffentlichte er die Theorie, dass Cholera durch Wasser und Nahrung verbreitet wird, im Aufsatz "Über den Übertragungsstil der Cholera" (vor dem Ausbruch von 1849). Dieses Papier erhielt negative Bewertungen in den medizinischen Fachzeitschriften von Lancet und London.

Wir wissen, dass er Recht hatte, aber Dr. Schnees Dilemma bestand darin, es zu beweisen. Sein erster Schritt war die Überprüfung der Daten. Unser Datensatz enthält 489 Datenzeilen in 3 Spalten. Um die Arbeit mit dem Datensatz zu vereinfachen, haben wir Zuerst werden wir einige Änderungen vornehmen.

2.py


# Summarizing the content of deaths
# ... YOUR CODE FOR TASK 2 ...
deaths.info()

# Define the new names of your columns
newcols = {
    'Death': 'death_count',
    'X coordinate': 'x_latitude', 
    'Y coordinate': 'y_longitude' 
    }

# Rename your columns
# ... YOUR CODE FOR TASK 2 ...
deaths.rename(newcols)

# Describe the dataset 
# ... YOUR CODE FOR TASK 2 ...
deaths.describe()

Das Ergebnis ist wie folgt

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 489 entries, 0 to 488
Data columns (total 3 columns):
Death           489 non-null int64
X coordinate    489 non-null float64
Y coordinate    489 non-null float64
dtypes: float64(2), int64(1)
memory usage: 11.5 KB
Death	X coordinate	Y coordinate
count	489.0	489.000000	489.000000
mean	1.0	51.513398	-0.136403
std	0.0	0.000705	0.001503
min	1.0	51.511856	-0.140074
25%	1.0	51.512964	-0.137562
50%	1.0	51.513359	-0.136226
75%	1.0	51.513875	-0.135344
max	1.0	51.515834	-0.132933

3. John Snow, obwohl er nichts weiß!

Seine Arbeit wurde weitgehend ignoriert, weil es irgendwie undenkbar war, dass ein Mann die Miasma-Theorie leugnen und beweisen konnte, dass alle anderen falsch lagen. Es war. Kollegen Ärzte sagten: "John Snow, obwohl ich nichts weiß!"

Wie bereits erwähnt, endete der erste Versuch von John Snow mit einer negativen Überprüfung der "Miasma" -Theorie. Ein Kritiker machte jedoch einen nützlichen Vorschlag, welche Beweise zwingend wären. Der Cholera-Ausbruch in Soho, London, im Jahr 1854 gab Snow nicht nur eine lebensrettende Gelegenheit, sondern auch die Gelegenheit, seine Theorie weiter zu testen und zu verbessern. Aber was ist mit dem letzten Beweis, dass er Recht hatte?

Nachdem wir nun wissen, wie John Snow es gemacht hat, lassen Sie uns die Daten richtig machen.

3.py


# Create `locations` by subsetting only Latitude and Longitude from the dataset 
locations = deaths[["x_latitude","y_longitude"]]

# Create `deaths_list` by transforming the DataFrame to list of lists 
deaths_list = locations.values.tolist()

# Check the length of the list
# ... YOUR CODE FOR TASK 3 ...
len(deaths_list)

Das Ergebnis ist wie folgt

489

4. Geisterkarte

Leider ist seine Originalkarte nicht verfügbar (möglicherweise nicht vorhanden). Sie können jedoch die berühmte Karte sehen, die er 1855, etwa ein Jahr später, gezeichnet hat. image.png Diese Karte wird auch als Geisterkarte bezeichnet, da sie den Tod darstellt und visualisiert. Wir haben auch Daten darüber, wie John Snow es gezeichnet hat. Verwenden wir also moderne Technologie, um seine Karte neu zu erstellen.

4.py


# Plot the data on map (map location is provided) using folium and for loop for plotting all the points
import folium

map = folium.Map(location=[51.5132119,-0.13666], tiles='Stamen Toner', zoom_start=17)
for point in range(0, len(deaths)):
    folium.CircleMarker(deaths_list[point], radius=8, color='red', fill=True, fill_color='red', opacity = 0.4).add_to(map)
map

Das Ergebnis wird wie unten gezeigt auf der Karte angezeigt. image.png Folium ist ein Modul, mit dem Flugblätter in Python verwendet werden können.

5. Es ist eine Pumpe!

Was John Snow sah, nachdem er die Toten auf der Karte markiert hatte, war kein zufälliges Muster (auch in einer Reproduktion der Geisterkarte zu sehen). Die meisten Todesfälle waren auf die Ecken der Broad Street (jetzt Broadwick Street) und der Cambridge Street (jetzt Lexington Street) konzentriert. Eine Gruppe von Toten an der Kreuzung dieser Straßen war die Quelle des Ausbruchs, aber was ist dort passiert? Ja, es ist eine Wasserpumpe. John Snow hatte zu der Zeit bereits die Theorie, dass sich Cholera im Wasser ausbreitet. Um dies zu überprüfen, markierte er den Standort einer nahe gelegenen Wasserpumpe auf der Karte. Und das war das große Ganze. Durch die Kombination des Ortes von Todesfällen aufgrund von Cholera mit dem Ort von Wasserpumpen konnte Snow zeigen, dass sich die Mehrheit auf eine bestimmte öffentliche Wasserpumpe in der Broad Street in Soho konzentrierte. .. Am Ende bekam er die Beweise, die er brauchte. Wir tun jetzt dasselbe, um unserer Erholung auf der Geisterkarte Pumpstandorte hinzuzufügen.

5.py


# Import the data
pumps = pd.read_csv("datasets/pumps.csv")
# Subset the DataFrame and select just ['X coordinate', 'Y coordinate'] columns
locations_pumps = pumps[["X coordinate","Y coordinate"]]

# Transform the DataFrame to list of lists in form of ['X coordinate', 'Y coordinate'] pairs
pumps_list = locations_pumps.values.tolist()

# Create a for loop and plot the data using folium (use previous map + add another layer)
map1 = map
for point in range(0, len(pumps_list)):
    folium.Marker(pumps_list[point], popup=pumps['Pump Name'][point]).add_to(map1)
map1

image.png

6. Auch wenn ich nichts weiß, John Snow! ≪ (wieder)

So bekam John Snow endlich den Beweis, dass es einen Zusammenhang zwischen dem Tod infolge der Cholera-Epidemie und möglicherweise einer kontaminierten öffentlichen Wasserpumpe gab. Aber er hörte hier nicht auf, er untersuchte weiter. Er suchte nach Anomalien (was wir jetzt "Ausreißer in den Daten" nennen) und fand zwei Orte, an denen es keine tatsächlichen Todesfälle gab. Die erste war eine Brauerei in der Nähe der Broad Street, in der ich herausfand, dass sie hauptsächlich Bier tranken (mit anderen Worten, die Pumpe war die Quelle, nicht das Wasser der örtlichen Pumpe). Es unterstützt seine Theorie, dass es gibt). Das zweite Gebäude, das nicht starb, war eine Werkstatt in der Nähe der Poland Street, in der er erfuhr, dass ihre Wasserquelle keine Pumpe in der Broad Street war (was seine Theorie bestätigte). Die Standorte beider Gebäude werden auch auf der Karte links angezeigt. Die Beamten vertrauten ihm und seiner Theorie nicht, weil er überzeugt war, aber sie entfernten den Griff der Pumpe am nächsten Tag, dem 8. September 1854. John Snow veröffentlichte später in seinem berühmten Buch chronologisch Daten über Todesfälle vor und nach dem Höhepunkt der Epidemie, aber hier analysieren und vergleichen wir die Auswirkungen von Unbehandelten.

image.png

6.py


# Import the data the right way
dates = pd.read_csv("datasets/dates.csv",parse_dates=['date'])
print(dates.head())
# Set the Date when handle was removed (8th of September 1854)
handle_removed = pd.to_datetime('1854/9/8')

# Create new column `day_name` in `dates` DataFrame with names of the day 
dates['day_name'] = dates.date.dt.weekday_name

# Create new column `handle` in `dates` DataFrame based on a Date the handle was removed 
dates['handle'] = dates.date > handle_removed

# Check the dataset and datatypes
dates.info()

# Create a comparison of how many cholera deaths and attacks there were before and after the handle was removed
dates.groupby(['handle']).sum()

Das Ergebnis ist wie folgt

   order       date  attacks  deaths
0      1 1854-08-19        1       1
1      2 1854-08-20        1       0
2      3 1854-08-21        1       2
3      4 1854-08-22        0       0
4      5 1854-08-23        1       0
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 43 entries, 0 to 42
Data columns (total 6 columns):
order       43 non-null int64
date        43 non-null datetime64[ns]
attacks     43 non-null int64
deaths      43 non-null int64
day_name    43 non-null object
handle      43 non-null bool
dtypes: bool(1), datetime64[ns](1),int64(3),object(1)
memory usage: 1.8+ KB
order	attacks	deaths
handle			
False	231	528	500
True	715	43	116

7. Ein Bild mit mehr als tausend Worten

Als ich den Griff von der Pumpe entfernte, wurde kein infiziertes Wasser mehr gesammelt. Später wurde festgestellt, dass das Quellwasser unter der Pumpe mit Abwasser verunreinigt war. Diese Praxis wurde später als frühes Beispiel für die Anwendung von Epidemiologie, Medizin im Bereich der öffentlichen Gesundheit und Wissenschaft (pathogene Theorie) auf eine echte Krise bewertet. 1992 wurde eine Nachbildung der Pumpe in der Nähe der Wand hinter dem aktuellen John Snow Pub in der Nähe des ursprünglichen Standorts ohne Griffe zusammen mit einer Beschreibung und einer Gedenkplatte gebaut. Dieser Ort ist subtil durch einen rosa Granitrandstein vor einer kleinen Wandplatte gekennzeichnet.

Sie können viel aus den Daten von John Snow lernen. Sie können sich absolute Zahlen ansehen, aber diese Beobachtung kann zu falschen Schlussfolgerungen führen. Verwenden wir also Bokeh, um andere Daten zu betrachten.

Dank John Snow konnte ich die Daten in chronologischer Reihenfolge sehen.

python:7.py
import bokeh
from bokeh.plotting import output_notebook, figure, show
output_notebook(bokeh.resources.INLINE)

# Set up figure
p = figure(plot_width=900, plot_height=450, x_axis_type='datetime', tools='lasso_select, box_zoom, save, reset, wheel_zoom',
          toolbar_location='above', x_axis_label='Date', y_axis_label='Number of Deaths/Attacks', 
          title='Number of Cholera Deaths/Attacks before and after 8th of September 1854 (removing the pump handle)')

# Plot on figure
p.line(dates['date'], dates['deaths'], color='red', alpha=1, line_width=3, legend='Cholera Deaths')
p.circle(dates['date'], dates['deaths'], color='black', nonselection_fill_alpha=0.2, nonselection_fill_color='grey')
p.line(dates['date'], dates['attacks'], color='black', alpha=1, line_width=2, legend='Cholera Attacks')

show(p)

Das Ergebnis ist wie folgt. image.png

8. John Snow Mythos & Haben wir etwas gelernt?

Die vorherige interaktive Visualisierung zeigt deutlich, dass der Höhepunkt des Cholera-Ausbruchs vor dem Entfernen des Griffs auftrat und bereits vor dem 8. September 1854 abgenommen hatte (Abwärtsbahn).

Das ist einfach nicht wahr, da der Vergleich nur absoluter Zahlen zu der falschen Schlussfolgerung führen kann, dass das Entfernen des Griffs der Broad Street-Pumpe den Ausbruch der Cholera gestoppt hat ( Es hat geholfen, aber ich konnte es nicht aufhalten.

Aber die Leute lieben Geschichten über Helden und andere Mythen (definitiv mehr als Wissenschaft oder Datenwissenschaft). Nach der Mythologie von John Snow war er ein Superheld, der ihre Gleichheit innerhalb von zwei Tagen ignorierte, indem er vermutete, dass Cholera eine durch Wasser übertragene Krankheit sei. Obwohl niemand auf ihn hörte, kartierte er ihn tapfer weiter und überzeugte mit seinen Erkenntnissen die örtlichen Behörden, den Griff der infizierten Wasserpumpe zu entfernen, und verursachte den Ausbruch. gestoppt. John Snow rettete vielen Londonern das Leben.

Wenn Sie sich die Hintergründe dieser Geschichte genauer ansehen, werden Sie feststellen, dass Sie die Krankheit mit begrenzten Werkzeugen bekämpfen und versuchen, den Beweis zu erbringen, dass Sie Recht haben und etwas über Cholera "wissen". Sie können auch John Snow sehen. Er tat nur in begrenzter Zeit, was er konnte, und kochte immer Wasser, bevor er trank. image.png

abschließend

Ich habe eine Cholera-Karte auf Python von John Snow erstellt, einem britischen Arzt und führend in der Entwicklung von Anästhesie und medizinischer Hygiene. Cholera ist heute bekanntermaßen durch Wasser übertragen, war aber zu diesem Zeitpunkt noch unbekannt. Selbst unter solchen Umständen ist John Snow, der die Hypothese konstruiert und bewiesen hat, erstaunlich.

Recommended Posts

Erstellen einer Cholera-Karte für John Snow
Schritt für Schritt zum Erstellen einer Docker-Datei
Befehle zum Erstellen eines neuen Django-Projekts
Hinweise zum Erstellen von Textformatierungswerkzeugen
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Ein Tool zum Erstellen symbolischer Links unter Windows
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
Befehle zum Erstellen einer Python3-Umgebung mit virtualenv
Verfahren zum Erstellen einer Python-Isolationsumgebung (venv-Umgebung)
Hinweise zum Erstellen einer Python-Umgebung durch Anfänger
[Python] 2 Erstellen Sie eine Risiko-Rendite-Karte für Ihr Asset-Portfolio
Vorgehensweise zum Erstellen eines Linienbot in AWS Lambda
4. Erstellen eines strukturierten Programms
Erstellung von Schabewerkzeugen
Erstellen eines Dataset Loader
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Dockerfile zum Erstellen einer datenwissenschaftlichen Umgebung basierend auf pip3
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen