<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 APIs Modules - ein erste Blick auf "Requests"
Gezielt und automatisiert Daten im Web auslesen
Zuerst installieren wir pandas und requests. Das können wir von der Command line mit den Befehlen pip install requests und pip install pandas die beiden Module installieren. Oder direkt hier in Jupyter Notebook mit !pip install requests und !pip install pandas.
Step1:  Unsere Imports
Step2:  Zur Dokumentation von requestst geht es hier lang.
Notes
In einer ersten Übung arbeiten wir mit der API des USGS arbeiten. Für die meisten API muss man sich heutezutage eine eigene API-Key kreieren. Das werden wir zu einem späteren Zeitpunkt tun. Diese API braucht keine Keys. Deshalb ist es ein gutes Kennenlernbeispiel.
Falls Probleme mit dem Output auftauchen, hier ein Work around für die Meldung, dass der Output limitiert wurde. Reconfigure line output and opening stuff from the command line
Dokumentation
Bevor man mit deiner API arbeitet, lohnt es sich immer zuerst, die Dokumentation anzuschauen. 
Erste Abfragen
Kleinere Abfrage. Wieviele Erdbeben hat es in einem bestimmten Zeitraum gegeben?#APIs die genutzt werden wollen, dokumentieren ihren Aufbau auf der Website - zB ws-old.parlament
Step3:  Wieviele hat es letzte Nacht von 22 bis 6 Uhr morgens gegeben? Dafür müssen wir in der Dokumentation Time nachfragen.
Step4:  Wegen Zeitverschiebung Zeit anpassen.
Step5:  Grosse, komibinierte Abfrage
Details zu allen Erbeben in den über drei Tage, 17-9-2017 bis 21-9-2017.
Step6:  Alle Erbeben mit den ungefähren Koordinaten von Mexiko. Hier könnte man die ungefähr nachschlagen.
Step7:  Dieser Wulst lässt sich aber ziemlich schwer lesen. Deshalb müssen wir das zuerst umformatieren und dann verstehen, wie das ganze strukturiert ist.
Step8:  Um sicher zu gehen, prüfen wir nochmals den Datentyp.
Step9:  Schauen wir uns alle keys und values an
Step10:  Features interessiert uns.
Step11:  Schauen wir uns das erste Element an
Step12:  Lesen wir folgendes aus
Step13:  Dealing with Unix time
Step14:  Erste Erfahrung mit Pandas
Step15:  Speichern wir das ab.
<ASSISTANT_TASK:>
Python Code:
!pip install requests
!pip install pandas
Explanation: APIs Modules - ein erste Blick auf "Requests"
Gezielt und automatisiert Daten im Web auslesen
Zuerst installieren wir pandas und requests. Das können wir von der Command line mit den Befehlen pip install requests und pip install pandas die beiden Module installieren. Oder direkt hier in Jupyter Notebook mit !pip install requests und !pip install pandas.
End of explanation
import requests
import pandas as pd
import calendar, datetime, time
Explanation: Unsere Imports
End of explanation
url = 'https://earthquake.usgs.gov/fdsnws/event/1/count?starttime=2017-09-20&endtime=2017-09-21'
response = requests.get(url)
response
response.text
Explanation: Zur Dokumentation von requestst geht es hier lang.
Notes
In einer ersten Übung arbeiten wir mit der API des USGS arbeiten. Für die meisten API muss man sich heutezutage eine eigene API-Key kreieren. Das werden wir zu einem späteren Zeitpunkt tun. Diese API braucht keine Keys. Deshalb ist es ein gutes Kennenlernbeispiel.
Falls Probleme mit dem Output auftauchen, hier ein Work around für die Meldung, dass der Output limitiert wurde. Reconfigure line output and opening stuff from the command line
Dokumentation
Bevor man mit deiner API arbeitet, lohnt es sich immer zuerst, die Dokumentation anzuschauen. 
Erste Abfragen
Kleinere Abfrage. Wieviele Erdbeben hat es in einem bestimmten Zeitraum gegeben?#APIs die genutzt werden wollen, dokumentieren ihren Aufbau auf der Website - zB ws-old.parlament
End of explanation
url = 'https://earthquake.usgs.gov/fdsnws/event/1/count?starttime=2017-09-20T22:00:00&endtime=2017-09-21T06:00:00'#Funktion bis ? Dann Parameter mit & verbunden
Explanation: Wieviele hat es letzte Nacht von 22 bis 6 Uhr morgens gegeben? Dafür müssen wir in der Dokumentation Time nachfragen.
End of explanation
url = 'https://earthquake.usgs.gov/fdsnws/event/1/count?starttime=2017-09-20T24:00:00&endtime=2017-09-21T08:00:00'
response = requests.get(url)
response.text
Explanation: Wegen Zeitverschiebung Zeit anpassen.
End of explanation
url1 = 'https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson'#query heisst wir suchen bestimmte erdbeben
urlzeit = '&starttime=2017-09-17T24:00:00&endtime=2017-09-21T08:00:00'
response = requests.get(url1+urlzeit)#Ich hänge die beiden Variablen zusammen
response.text#Alle Erdbeben auf der ganzen Welt in diesem Zeitraum
Explanation: Grosse, komibinierte Abfrage
Details zu allen Erbeben in den über drei Tage, 17-9-2017 bis 21-9-2017.
End of explanation
urlloc = '&minlatitude=13&maxlatitude=33&minlongitude=-120&maxlongitude=-85'
response = requests.get(url1+urlzeit+urlloc)
response.text
Explanation: Alle Erbeben mit den ungefähren Koordinaten von Mexiko. Hier könnte man die ungefähr nachschlagen.
End of explanation
response.json()#json strukturiert die daten. Ich sehe es ist ein dictionyry von zwei listen, die wiederum dictionaries enthält mit keys  und values - wo beginnt sie; es nur zwei keys: bbox und features. features ist interessanter
dct = response.json()
Explanation: Dieser Wulst lässt sich aber ziemlich schwer lesen. Deshalb müssen wir das zuerst umformatieren und dann verstehen, wie das ganze strukturiert ist.
End of explanation
type(dct)
Explanation: Um sicher zu gehen, prüfen wir nochmals den Datentyp.
End of explanation
for key, value in dct.items() :# mit .items angehängt an dictionnary-name druckt value und keys aus
    print (key, value)
Explanation: Schauen wir uns alle keys und values an
End of explanation
type(dct['features'][0])#type zeigt mir den Datentyp; mit (0) sage ich, dass er mir erstes der Features
len(dct['features'])
Explanation: Features interessiert uns.
End of explanation
for key in dct['features'][0]:#so frage ich die Keys im Value Feature ab
    print(key)
dct['features'][0]#so frage ich das erste element von features ab
Explanation: Schauen wir uns das erste Element an
End of explanation
earthquakes = []#Leere Liste kreieren
for elem in dct['features']:
    t = elem['properties']['type']#in den properties (die ich ja vorhin als element gefunden habe) will ich 
    m = elem['properties']['mag']
    p = elem['properties']['place']
    tm = elem['properties']['time']
    
    mini_dict = {'Type': t,
                 'Mag': m,
                 'Place': p,
                 'Time': tm}#Hier baue ich mein eigenes Dictionary auf; die Begriffe kann ich selbst wählen
    
    earthquakes.append(mini_dict)
Explanation: Lesen wir folgendes aus:
1. Type
2. Magnitude
4. Örtlichkeit
5. Time
End of explanation
earthquakes
earthquakes = []
for elem in dct['features']:
    t = elem['properties']['type']
    m = elem['properties']['mag']
    p = elem['properties']['place']
    
    #Ints bearbeiten, die letzten drei Stellen abschneiden (weil der Converter von Unixtime in Normalzeit die Angabe nur lesen kann, wenn die letzten drei Zahlen weg sind); ich muss zahl zuerst in string verwandeln, weil man nur dort die drei letzten zeichen abschneiden kann; dann verwandle ich es wieder in eine zahl zurück und mit dt
    tm = dt(int(str(elem['properties']['time'])[:-3])) 
    
    mini_dict = {'Type': t,
                 'Mag': m,
                 'Place': p,
                 'Time': tm}
    
    earthquakes.append(mini_dict)
earthquakes
Explanation: Dealing with Unix time
End of explanation
pd.DataFrame(earthquakes)#es muss aber eine dictionary-Liste sein; kann auch nur eine Liste sein, dann gibt es nur eine Spalte
df = pd.DataFrame(earthquakes)
df.sort_values(by='Mag', ascending=False)#startet von 'Mag'; default Einstellung: beginnt beim kleinsten, wenn ich beim stärksten beginnen will, muss ich ascending=false eingeben
Explanation: Erste Erfahrung mit Pandas
End of explanation
df.to_csv('erdbeben.csv')
Explanation: Speichern wir das ab.
End of explanation
<END_TASK>