Hallo, ich habe ein Problem.
Ich muss eine HTML- Tabelle von Wikipedia in Python einlesen, nur irgendwie klappt es nicht.
Der Link ist: https://en.wikipedia.org/wiki/United_St ... gn_finance
Anschließend müsste ich die spalten im Datensatz umbennen und manch auch entfernen , weiß jemand zufällig wie das geht?
Danke schon mal im voraus
Python HTML Link- einlesen
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Mal als Ansatz:
Man möchte natürlich danach die Zahlen zum Beispiel in tatsächliche Zahlen umwandeln und Header hinzufügen.
Warum musst Du das in Python machen? Das ist ja fest für das Jahr 2016, die Daten ändern sich ja nicht und werden wohl auch kaum in der Zukunft erweitert. Da lohnt sich der Aufwand von Automatisierung wahrscheinlich nicht und es ist einfacher/schneller das Beispielsweise direkt aus dem Browser in eine Tabellenkalkulation zu kopieren und schnell von Hand zu bereinigen.
Code: Alles auswählen
#!/usr/bin/env python3
import pandas as pd
def main():
campaing_finance = pd.read_html(
'https://en.wikipedia.org/wiki/'
'United_States_presidential_election,_2016',
'Money raised', # Something that is just in *that* table.
skiprows=2,
)[0]
print(campaing_finance)
if __name__ == '__main__':
main()
Warum musst Du das in Python machen? Das ist ja fest für das Jahr 2016, die Daten ändern sich ja nicht und werden wohl auch kaum in der Zukunft erweitert. Da lohnt sich der Aufwand von Automatisierung wahrscheinlich nicht und es ist einfacher/schneller das Beispielsweise direkt aus dem Browser in eine Tabellenkalkulation zu kopieren und schnell von Hand zu bereinigen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Aufgabenstellung
1.Lesen sie die die HTML-Tabellen des Wikipedia-Artikels zu den US-amerikanischen Präsidentschaftswahlen von 2016 ein. Die URL lautet: https://en.wikipedia.org/wiki/United_St ... gn_finance
Sollten sie die Pandas read_html() Funktion nutzen, so beachten sie bitte den Hinweis, dass es sich um die Tabelle an Indexstelle 25 handelt.
2.Bereiten sie den Datensatz folgendermaßen auf:
Benennen sie die Spalten entsprechend Liste 1 um.
Entfernen sie die ersten zwei Zeilen des Datensatzes, so dass nur die Zeilen mit Kandidaten übrig bleiben.
Entfernen sie die Fußnoten aus den Strings der Kandidatennamen (gemeint sind die eckigen Klammern und die darin enthaltenen Zahlen). Tips: Text-Daten in Pandas, str.replace
3.Ersetzen sie den numerischen Index mit der Spalte 'Candidate'.
Entfernen sie das Dollarzeichen und die Kommatas aus den verbleibenden Zellen und ändern sie den dtype der verbliebenen Zellen zu einem numerischen Typ. Tip: .astype()
4. Recherchieren sie folgende Informationen über den Datensatz und stellen sie diese kurz dar:
Was sind die Merkmalsträger?
Was sind die Variablen? Beschreiben sie hier auch, was für Informationen in den Daten kodiert sind.
Überlegen sie sich eine Fragestellung, zu deren Beantwortung diese Daten beitragen könnten.
Gehen sie zu folgender Destatis Genesis URL: https://www-genesis.destatis.de/genesis ... scheiben=1
Laden sie den Datensatz „Studienanfänger: Bundesländer, Semester, Nationalität, Geschlecht“ als CSV Datei herunter.
Lesen sie den Datensatz mittels Pandas I/O Funktionen ein. Achten sie dabei insbesondere auf die Zeichen, die zur Seperation verwendet wurden (Tip: sep=).
Grenzen sie den Datensatz auf die zentrale Datentabelle ein. speichern sie diese als Stata Datensatz.
Material
Liste 1
'Candidate'
'Campaign committee Money raised'
'CC Money spent'
'CC Cash on hand'
'CC Debt'
'Outside groups Money raised'
'OG Money spent'
'OG Cash on hand'
'OG Total spent'
1.Lesen sie die die HTML-Tabellen des Wikipedia-Artikels zu den US-amerikanischen Präsidentschaftswahlen von 2016 ein. Die URL lautet: https://en.wikipedia.org/wiki/United_St ... gn_finance
Sollten sie die Pandas read_html() Funktion nutzen, so beachten sie bitte den Hinweis, dass es sich um die Tabelle an Indexstelle 25 handelt.
2.Bereiten sie den Datensatz folgendermaßen auf:
Benennen sie die Spalten entsprechend Liste 1 um.
Entfernen sie die ersten zwei Zeilen des Datensatzes, so dass nur die Zeilen mit Kandidaten übrig bleiben.
Entfernen sie die Fußnoten aus den Strings der Kandidatennamen (gemeint sind die eckigen Klammern und die darin enthaltenen Zahlen). Tips: Text-Daten in Pandas, str.replace
3.Ersetzen sie den numerischen Index mit der Spalte 'Candidate'.
Entfernen sie das Dollarzeichen und die Kommatas aus den verbleibenden Zellen und ändern sie den dtype der verbliebenen Zellen zu einem numerischen Typ. Tip: .astype()
4. Recherchieren sie folgende Informationen über den Datensatz und stellen sie diese kurz dar:
Was sind die Merkmalsträger?
Was sind die Variablen? Beschreiben sie hier auch, was für Informationen in den Daten kodiert sind.
Überlegen sie sich eine Fragestellung, zu deren Beantwortung diese Daten beitragen könnten.
Gehen sie zu folgender Destatis Genesis URL: https://www-genesis.destatis.de/genesis ... scheiben=1
Laden sie den Datensatz „Studienanfänger: Bundesländer, Semester, Nationalität, Geschlecht“ als CSV Datei herunter.
Lesen sie den Datensatz mittels Pandas I/O Funktionen ein. Achten sie dabei insbesondere auf die Zeichen, die zur Seperation verwendet wurden (Tip: sep=).
Grenzen sie den Datensatz auf die zentrale Datentabelle ein. speichern sie diese als Stata Datensatz.
Material
Liste 1
'Candidate'
'Campaign committee Money raised'
'CC Money spent'
'CC Cash on hand'
'CC Debt'
'Outside groups Money raised'
'OG Money spent'
'OG Cash on hand'
'OG Total spent'
@Maya: zum Teil ist das Absicht, weil daran üben kann, wie man mit Aufgaben umgeht, die einen im ersten Moment total überfordern. In vielen Situationen ist es im wirklichen Leben ja nicht anders. Man steht vor einer Aufgabe und es gibt niemanden, der so eine ähnliche Aufgabe schon einmal hatte. Früher saßen wir immer in Lerngruppen zusammen und haben gemeinsam Aufgabenblätter gelöst. Ist das heutzutage nicht mehr angesagt?
In der Aufgabenstellung sind die Stichworte, wo man in der pandas-Dokumentation nachlesen muß, freundlicherweise schon angegeben. Was verstehst Du an der Dokumentation, bzw. an den Beispielen die darin vorkommen nicht?
In der Aufgabenstellung sind die Stichworte, wo man in der pandas-Dokumentation nachlesen muß, freundlicherweise schon angegeben. Was verstehst Du an der Dokumentation, bzw. an den Beispielen die darin vorkommen nicht?
Lerngruppen gibt es leider keine. Ich studiere Soziologie und nicht Informatik. Wir müssen von der Uni aus diesen Kurs bestehen und leider kenne ich niemanden der mit Python umgehen kann, deshalb versuche ich hier Hilfe zu bekommen.
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Maya: Ich würde mit dem Python-Tutorial in der Python-Dokumentation anfangen und dann mit der Pandas-Dokumentation weitermachen. Da gibt's ja auch eine kleine Einführung und Verweise auf weitere Tutorials. Anhand der Kapitelnamen kannst Du entscheiden was Du Dir näher anschauen solltest. Erst allgemein und dann spezifisch für Deine zu lösenden Probleme.
Zum Ausprobieren und von Ausdrücken und kleinen Codestücken sind IPython Notebooks bzw. Jupyter Notebooks interessant.
Bezüglich Lerngruppen: Du bist doch nicht die Einzige mit diesem Aufgabenzettel? Ist da bei Euch echt jeder Einzelkämpfer? Wäre ja nicht sehr sozial, ausgerechnet bei Soziologen.
Zum Ausprobieren und von Ausdrücken und kleinen Codestücken sind IPython Notebooks bzw. Jupyter Notebooks interessant.
Bezüglich Lerngruppen: Du bist doch nicht die Einzige mit diesem Aufgabenzettel? Ist da bei Euch echt jeder Einzelkämpfer? Wäre ja nicht sehr sozial, ausgerechnet bei Soziologen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Code: Alles auswählen
import pandas as pd
df = pd.read_html('https://en.wikipedia.org/wiki/United_States_presidential_election,_2016#Campaign_finance',
header=0)
df[25]
Code: Alles auswählen
import pandas as pd
df = df.rename(columns={'Candidate': 'Candidate', 'Campaign committee (as of December 9)': 'Campaign committee Money raised', 'Outside groups (as of December 9)': 'CC Money spent', 'Total spent':'CC Cash on hand', 'Unnamed: 4': 'CC Debt', 'Unnamed: 5': 'Outside groups Money raised', 'Unnamed: 6': 'OG Money spent', 'Unnamed: 7': 'OG Cash on hand', 'Unnamed: 8': 'OG Total spent'})
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Maya: Der Name `df` ist ja auch falsch bzw. irreführend, weil man da einen Wert vom Typ `DataFrame` erwarten würde. `read_html()` liefert aber etwas anderes. Den Typ eines Wertes kann man mit der `type()`-Funktion ermitteln und dann beispielsweise mit `print()` ausgeben wenn man das nicht in einer interaktiven Python-Shell macht. Der Rückgabetyp steht aber auch in der Dokumentation.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ein Ansatz den Programmieranteil der beiden Aufgaben anzugehen:
Code: Alles auswählen
#!/usr/bin/env python3
import pandas as pd
COLUMN_NAMES = [
'Candidate',
'Campaign committee Money raised',
'CC Money spent',
'CC Cash on hand',
'CC Debt',
'Outside groups Money raised',
'OG Money spent',
'OG Cash on hand',
'OG Total spent',
]
def convert_dollars(column):
return column.str.replace('$', '').str.replace(',', '').astype(int)
def process_campaign_finance():
campaign_finance = pd.read_html(
'https://en.wikipedia.org/wiki/'
'United_States_presidential_election,_2016',
'Money raised', # Something that is just in *that* table.
skiprows=2,
)[0]
campaign_finance.columns = COLUMN_NAMES
#
# Remove footnotes from candidates names.
#
campaign_finance['Candidate'] = (
campaign_finance['Candidate'].str.partition('[')[0]
)
campaign_finance = (
campaign_finance.set_index('Candidate').transform(convert_dollars)
)
print(campaign_finance.to_csv())
def process_student_numbers():
#
# Source of data: https://www-genesis.destatis.de/genesis/online/
# logon?sequenz=tabelleErgebnis&selectionname=21311-0014&zeitscheiben=1
#
student_numbers = pd.read_csv(
'test.csv',
encoding='iso8859-15',
sep=';',
engine='python',
skiprows=4,
skipfooter=3,
index_col=[0, 1],
header=[0, 1],
)
#
# Stata doesn't like the `MultiIndex` columns, so let's flatten the index.
#
student_numbers.columns = (
'_'.join(value) for value in student_numbers.columns.values
)
student_numbers.to_stata('test.dta')
def main():
process_campaign_finance()
process_student_numbers()
if __name__ == '__main__':
main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis