Skip to content

Commit 0851769

Browse files
committed
update
1 parent b31b88c commit 0851769

File tree

2 files changed

+311
-0
lines changed

2 files changed

+311
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# HZ 5
2+
3+
## Einführung
4+
5+
Ich wollte zunächst Instagram als Webseite verwenden, um diese zu analysieren. Dafür habe ich die Daten zufällig generiert. Das Problem war jedoch, dass man kaum Trends erkennen konnte. Natürlich hätte ich den Generierungsalgorithmus so anpassen können, dass die Daten bestimmte Trends enthalten. Da ich jedoch Diagramme basierend auf den Daten erstellen und analysieren sollte, machte das für mich wenig Sinn. Ich hätte Trends analysiert, die ich vorher selbst erstellt habe. Aus diesem Grund habe ich mich dazu entschieden, öffentlich zugängliche Daten zu verwenden.
6+
7+
Nach etwas Recherche habe ich einen [Datensatz](https://opendata.swiss/de/dataset/bevolkerung-der-stadt-winterthur-nach-alter-geschlecht-und-herkunft-ab-2021) der Stadt Winterthur gefunden. Dieser zeigt die Bevölkerung im Jahr 2021, gruppiert nach Alter und Staatsbürgerschaft. Ich habe mich für diesen Datensatz entschieden, da er relativ übersichtlich und von angenehmer Grösse ist.
8+
9+
Zur Erstellung der Diagramme verwende ich `pandas` und `matplotlib`. Bei `pandas` handelt es sich um eine bekannte Python-Bibliothek, die speziell für die Analyse grosser Datensätze entwickelt wurde. `matplotlib` bietet anschliessend die Möglichkeit, diese Daten in Form von Diagrammen darzustellen.
10+
11+
12+
### Code
13+
14+
```python
15+
df = pd.read_csv("https://www.web.statistik.zh.ch/ogd/daten/ressourcen/KTZH_00001521_00002899.csv", sep=",")
16+
df = df.drop("Jahr", axis=1)
17+
18+
grouped_df = df.copy()
19+
grouped_df['AK'] = pd.Categorical(df['AK'], categories=df['AK'], ordered=True)
20+
21+
grouped_df.set_index('AK', inplace=True)
22+
23+
plt.figure(figsize=(12, 8))
24+
for column in grouped_df.columns:
25+
plt.plot(grouped_df.index, grouped_df[column], marker='o', label=column)
26+
27+
plt.title('Bewohner Wintertuhr nach Alter, Gechlecht und Statsbürgerschaft')
28+
plt.xlabel('Alltersgruppe')
29+
plt.ylabel('Anzahl Bewohner')
30+
plt.legend(title='Categories')
31+
plt.grid(True)
32+
plt.xticks(rotation=45)
33+
plt.tight_layout()
34+
plt.show()
35+
```
36+
37+
## Output
38+
39+
> TBD
40+
41+
42+
## Analyse
43+
44+
In den Diagrammen ist gut zu erkennen, dass der prozentuale Anteil von Personen mit einem ausländischen Pass stark zwischen den einzelnen Altersgruppen variiert. So sinkt der prozentuale Anteil der Schweizer Staatsbürger tendenziell ab der Altersgruppe `65+` deutlich. Die Ursachen dafür können vielfältig sein. Es ist jedoch denkbar, dass sich viele Bürger im Laufe der Zeit einbürgern lassen haben, wodurch sie dann in die Kategorie der Schweizer Staatsbürger übergehen. Da man für eine Einbürgerung mindestens 10 Jahre in der Schweiz leben muss, erklärt dies, warum dieser Effekt vor allem bei den älteren Altersgruppen zu beobachten ist.
45+
46+
Zudem ist ersichtlich, dass in Winterthur ungefähr gleich viele Frauen wie Männer leben.
47+
48+
49+
## Gesamte Anzahl Männer und Frauen pro Altersgruppe
50+
51+
## Code
52+
```python
53+
df = pd.read_csv("https://www.web.statistik.zh.ch/ogd/daten/ressourcen/KTZH_00001521_00002899.csv", sep=",")
54+
df = df.drop("Jahr", axis=1)
55+
56+
grouped_data = df.copy()
57+
grouped_data['AK'] = df['AK'].str.split('', n=1).str[0].str.strip("+")
58+
59+
60+
grouped_data["AK"] = grouped_data["AK"].astype("int64")
61+
62+
grouped_data = grouped_data.groupby("AK").agg({
63+
'TotalFrau': 'sum',
64+
'TotalMann': 'sum'
65+
})
66+
67+
grouped_data = grouped_data.sort_values(by="AK")
68+
grouped_data.plot(kind='bar', stacked=True, figsize=(10, 6))
69+
plt.title('Total Number of Women and Men by Age group')
70+
plt.xlabel('Age group')
71+
plt.ylabel('Total')
72+
plt.xticks(rotation=0)
73+
plt.legend(title='Gender')
74+
plt.show()
75+
```
76+
77+
## Output
78+
79+
> TBD
80+
81+
## Analyse
82+
83+
In diesem Diagramm sieht man deutlich, dass die Altersgruppen 25-55 besonders viele Bürger umfassen. Theoretisch würde es mehr Sinn ergeben, wenn das Diagramm eher wie ein Wasserfall aussieht, da im Laufe der Jahre immer mehr Menschen sterben.
84+
85+
### Prozentualer Anzahl pro Altersgruppe
86+
87+
```python
88+
df = pd.read_csv("https://www.web.statistik.zh.ch/ogd/daten/ressourcen/KTZH_00001521_00002899.csv", sep=",")
89+
df = df.drop("Jahr", axis=1)
90+
91+
grouped_data = df.copy()
92+
grouped_data['AK'] = grouped_data['AK'].str.split('', n=1).str[0].str.strip("+")
93+
94+
grouped_data['AK'] = grouped_data['AK'].astype('int64')
95+
96+
grouped_data = grouped_data.groupby('AK').agg({
97+
'TotalFrau': 'sum',
98+
'TotalMann': 'sum'
99+
})
100+
101+
grouped_data['Total'] = grouped_data['TotalFrau'] + grouped_data['TotalMann']
102+
grouped_data['PercentFrau'] = (grouped_data['TotalFrau'] / grouped_data['Total']) * 100
103+
grouped_data['PercentMann'] = (grouped_data['TotalMann'] / grouped_data['Total']) * 100
104+
105+
grouped_data = grouped_data.sort_values(by='AK')
106+
107+
plt.figure(figsize=(10, 6))
108+
plt.bar(grouped_data.index, grouped_data['PercentFrau'], label='Women', color='lightcoral')
109+
plt.bar(grouped_data.index, grouped_data['PercentMann'], bottom=grouped_data['PercentFrau'], label='Men', color='steelblue')
110+
111+
plt.title('Anzahl Männer und frauen pro Altersgruppe')
112+
plt.xlabel('Altersgruppe')
113+
plt.ylabel('Anzahl')
114+
plt.xticks(rotation=0)
115+
plt.legend(title='Gender')
116+
plt.grid(axis='y', linestyle='--', alpha=0.7)
117+
plt.tight_layout()
118+
plt.show()
119+
120+
```
121+
122+
123+
## Output
124+
125+
> TBD
126+
127+
## Analyse
128+
129+
Als letztes habe ich noch ein Diagramm erstellt, bei welchem man sieht wie der Prozentualle anteil an frauen und männer pro Altersgruppe aussieht. Dabei kann man ganz gut sehen, das der Prozentuale Anteil an Frauen ab dem 80. Altersjahr immer mehr Ansteigt. Das erscheint zwar zuerst mekrwürdig, es lässt sich allerdings dadurch erklären, das Frauen im Schnitt älter werden als Männer.

hz5/analyse.ipynb

Lines changed: 182 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)