Skip to content

Commit 0a172c3

Browse files
committed
Add case study Markdown for translation
1 parent 8015f82 commit 0a172c3

2 files changed

Lines changed: 525 additions & 0 deletions

File tree

content/titanic/CaseStudy.cs.md

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
# Případová studie – Titanic
2+
3+
## Obsah
4+
5+
6+
[**Krok 1: Obchodní porozumění**](#Step-1:-Obchodní-porozumění)
7+
8+
[**Krok 2: Porozumění údajům**](#Step-2:-Porozumění-údajům)
9+
10+
- [**Načíst data**](#Načíst-data)
11+
- [**Kontrola kvality dat**](#Kontrola-kvality-dat)
12+
- [**Průzkumná analýza dat-EDA**](#Průzkumná-analýza-dat---EDA)
13+
14+
[**Krok 3: Příprava dat**](#Krok-3:-Příprava dat)
15+
- [**Vypořádejte se s chybějícími daty**](#Vypořádejte-se-s-chybějícími-daty)
16+
- [**Funkce inženýrství**](#funkce-inženýrství)
17+
18+
[**Krok 4: Modelování**](#Krok-4:-Modelování)
19+
20+
[Zpět na začátek](#Obsah)
21+
22+
## Krok 1: Obchodní porozumění
23+
Tato počáteční fáze se zaměřuje na pochopení cílů a požadavků projektu z obchodní perspektivy a poté na převedení těchto znalostí do definice problému dolování dat a předběžného plánu navrženého k dosažení cílů.
24+
#### Příběh Titaniku
25+
Potopení RMS Titanic je jedním z nejneslavnějších vraků v historii. 15. dubna 1912, během své první plavby, se Titanic potopil po srážce s ledovcem a zabil 1502 z 2224 cestujících a posádky. Tato senzační tragédie šokovala mezinárodní společenství a vedla k lepším bezpečnostním předpisům pro lodě.
26+
27+
Jedním z důvodů, proč ztroskotání vedlo k takovým ztrátám na životech, byl nedostatek záchranných člunů pro cestující a posádku. I když přežití potopení zahrnovalo určitý prvek štěstí, některé skupiny lidí měly větší šanci na přežití než jiné, jako jsou ženy, děti a cestující z vyšší třídy.
28+
29+
#### Cíl
30+
V této výzvě dokončíme analýzu toho, jaké druhy lidí pravděpodobně přežijí.
31+
32+
Kromě toho vytvoříme regresní model pro predikci ceny letenky (jízdného).
33+
34+
35+
[Zpět na začátek](#Obsah)
36+
37+
## Krok 2: Porozumění datům
38+
Fáze porozumění datům začíná počátečním sběrem dat a pokračuje činnostmi s cílem seznámit se s daty, identifikovat problémy s kvalitou dat, objevit první pohledy na data nebo odhalit zajímavé podmnožiny za účelem vytvoření hypotéz o skrytých informacích. Tento krok se často kombinuje s dalším krokem, přípravou dat.
39+
### Datový slovník
40+
Data jsou v souboru csv ```titanic.csv```.
41+
42+
| Proměnná | Definice | Klíč |
43+
| --- | --- | --- |
44+
| survival | Přežití | 0 = ne, 1 = ano |
45+
| pclass | Třída vstupenek | 1 = 1., 2 = 2., 3 = 3. |
46+
| sex | Sex | muž/žena |
47+
| Age | Věk | v letech |
48+
| sibsp | Počet sourozenců / manželů na palubě Titaniku | |
49+
| parch | Počet rodičů / dětí na palubě Titaniku | |
50+
| ticket | Číslo lístku | |
51+
| fare | Jízdné pro cestující | |
52+
| cabin | Číslo kabiny | |
53+
| embarked | Přístav nalodění | C = Cherbourg, Q = Queenstown, S = Southampton |
54+
55+
**Poznámky proměnných**
56+
- pclass: proxy pro socioekonomický status (SES)
57+
- 1. = horní
58+
- 2. = střední
59+
- 3. = nižší
60+
61+
- věk: Věk je zlomek, pokud je menší než 1. Pokud je věk odhadován, je ve tvaru xx.5
62+
63+
- sibsp: Dataset definuje rodinné vztahy tímto způsobem...
64+
- Sibling (Sourozenec) = bratr, sestra, nevlastní bratr, nevlastní sestra
65+
- Spouse (Manžel) = manžel, manželka (milenky a snoubenci byli ignorováni)
66+
67+
- parch: Dataset definuje rodinné vztahy tímto způsobem...
68+
- Rodič = matka, otec
69+
- Dítě = dcera, syn, nevlastní dcera, nevlastní syn
70+
- Některé děti cestovaly pouze s chůvou, proto pro ně parch=0.
71+
72+
73+
### Načíst data
74+
75+
Tato datová sada je v titanic.csv. Ujistěte se, že je soubor v aktuální složce.
76+
77+
import pandas as pd
78+
import matplotlib.pyplot as plt
79+
import piplite
80+
await piplite.install('seaborn')
81+
import seaborn as sns
82+
import warnings
83+
warnings.filterwarnings('ignore')
84+
%matplotlib inline
85+
df_titanic = pd.read_csv('titanic.csv')
86+
df_titanic.head()
87+
88+
### Zkontrolujte kvalitu dat
89+
Zkontrolujte kvalitu dat. Nejběžnější kontrolou je kontrola chybějících hodnot. Můžeme provést základní čištění dat, jako je čištění pole měn.
90+
- Zkontrolujte nulové hodnoty
91+
- Pole měny je třeba převést na plovoucí, odstranit '$' nebo ',', někdy je záporná hodnota uzavřena v ()
92+
93+
##### Úkol 1: Podívejte se na základní informace o datovém rámci
94+
95+
Nápověda: funkce info().
96+
Diskutujte o chybějících hodnotách v datovém rámci.
97+
df_titanic.info()
98+
#Další způsob, jak zobrazit počet chybějících hodnot v každém sloupci
99+
df_titanic.isnull().sum()
100+
##### Úkol 2: Vyčistit jízdné, převést na plovoucí
101+
Odstraňte "$" z Fare, převeďte datový typ na float.
102+
# uklidit Fare, převést na float
103+
df_titanic.Fare = df_titanic.Fare.str.replace('$','')
104+
df_titanic['Fare'] = df_titanic.Fare.astype(float)
105+
df_titanic.head()
106+
##### Úkol 3: Podívejte se na statistiky Numeric Columns
107+
108+
Funkce Hint:describe().
109+
110+
Diskutujte:
111+
- Věk, SibSp, Parch, statistiky jízdného
112+
- Co znamená Přežil?
113+
df_titanic.describe()
114+
### Průzkumná analýza dat - EDA
115+
EDA je přístup k analýze souborů dat za účelem shrnutí jejich hlavních charakteristik, často pomocí vizuálních metod.
116+
117+
#### Typy funkcí
118+
##### Kategorické vlastnosti:
119+
Kategorická proměnná je taková, která má dvě nebo více kategorií a každá hodnota v tomto rysu může být podle nich kategorizována. Například pohlaví je kategorická proměnná, která má dvě kategorie (muž a žena). Nyní nemůžeme třídit ani dávat žádné resp
120+
vzhledem k takovým proměnným. Jsou také známé jako nominální proměnné.
121+
122+
Kategorické funkce v datové sadě: Sex,Embarked.
123+
124+
##### Souvislá funkce:
125+
Prvek se nazývá spojitý, pokud může nabývat hodnot mezi libovolnými dvěma body nebo mezi minimálními či maximálními hodnotami ve sloupci prvků.
126+
127+
Souvislé funkce v datové sadě: Jízdné
128+
### Kategorické vlastnosti
129+
Budeme analyzovat Survived jako univariantní. Vztah mezi sexem a přežitím, embarkovaným a přežitím.
130+
131+
#### Kolik přežilo
132+
Sloupcový graf ve sloupci Přežil. Existuje několik způsobů, jak vytvořit sloupcový graf. Ukážeme si zde 2 způsoby, seaborn count plot a pandas series bar.
133+
##### Úkol 4: Vykreslete sloupcový graf pro Zahynulé vs. Přežilé
134+
Vykreslit sloupcový graf pro sloupec Přežil. Survived=0 znamená zahynulo, Survived=1 znamená přežilo.
135+
#Kolik jich přežilo
136+
f,ax=plt.subplots(figsize=(5,5))
137+
sns.countplot('Survived',data=df_titanic, ax = ax)
138+
ax.set_title('Zahynulí vs. přežili')
139+
#Není nutné, jen k odstranění jakéhokoli výstupu
140+
plt.show()
141+
#počet přeživších
142+
f,ax=plt.subplots(figsize=(5,5))
143+
survivd_counts = df_titanic.Survived.value_counts()
144+
přežil_počet.plot.bar(ax=ax)
145+
ax.set_title('Zahynulí vs. přežili')
146+
plt.show()
147+
#Procento přeživších
148+
f,ax=plt.subplots(figsize=(5,5))
149+
přeživší_počet = df_titanic.Survived.value_counts(normalize=True)
150+
přežil_počet.plot.bar(ax=ax)
151+
ax.set_title('Zahynulí vs. přežili')
152+
ax.set_xticklabels( ['Zhynulo', 'Přežilo'], rotace=0)
153+
plt.show()
154+
#### Vztah mezi sexem a přežitím
155+
Můžeme použít agregační funkci nebo graf.
156+
157+
Další 2 buňky demonstrují agregační funkci.
158+
159+
Následující buňka znázorňuje sloupcový graf a graf počtu.
160+
161+
##### Úkol 5: Vykreslete sloupcový graf počtu cestujících mužů a žen
162+
163+
Tip: Použijte seaborn countplot().
164+
#Muž vs. Žena
165+
f,ax=plt.subplots(figsize=(5,5))
166+
sns.countplot('Sex',data=df_titanic,ax=ax)
167+
ax.set_title('Muž vs. Žena')
168+
plt.show()
169+
##### Úkol 6: Skupinové pohlaví, abyste zjistili míru přežití mužů a žen
170+
#míra přežití žen/mužů
171+
df_titanic.groupby(['Sex'], as_index=False).agg({'Survived':'mean'})
172+
##### Úkol 7: Vykreslení zániku vs. bar přežití pro muže a ženy
173+
Znovu použijeme seaborn countplot(), ale nastavíme argument `hue` na 'Survived'.
174+
#Zhynul vs. přežil pro muže/ženu
175+
f,ax=plt.subplots(figsize=(5,5))
176+
sns.countplot('Sex',hue='Survived',data=df_titanic,ax=ax)
177+
ax.set_title('Pohlaví: Zahynulý vs. Přežil')
178+
plt.show()
179+
Počet mužů na lodi je mnohem vyšší než počet žen. Stále je počet přeživších žen téměř dvojnásobný než počet přeživších mužů. Většina žen přežila, zatímco velká většina mužů zahynula.
180+
#### Pclass a přežití
181+
##### Úkol 8: Uveďte míru přežití každé třídy P
182+
df_titanic.groupby(['Pclass'], as_index=False).agg({'Survived':'mean'})
183+
##### Úkol 9: Vykreslení zániku vs. přežití pro každou třídu P
184+
# barový pozemek a seaborn počítat spiknutí
185+
f,ax=plt.subplots(figsize=(5,5))
186+
sns.countplot('Pclass',hue='Survived',data=df_titanic,ax=ax)
187+
ax.set_title('Pclass:Perished vs. Survived')
188+
plt.show()
189+
### Průběžné funkce
190+
191+
#### Jednorozměrný distribuční graf
192+
Histogram lze udělat několika způsoby. Ukážeme si 3 způsoby.
193+
- ax.hist(): nemůže zpracovat hodnotu NnN
194+
- seaborn.distplot(): nezvládne NaN. Ve výchozím nastavení má KDE (odhad hustoty jádra).
195+
- pd.Sereis.hist(): nejjednodušší a standardně zvládne NaN
196+
##### Úkol 10: Vykreslete histogram pro věk
197+
Použijte funkci pandas Series hist(), která zpracovává chybějící hodnotu.
198+
#use dataframe hist(), který bude standardně zpracovávat NaN
199+
obr, ax = plt.subplots()
200+
df_titanic.Age.hist(ax=ax, bins=20, edgecolor='black', alpha=0.5)
201+
##### Úkol 11: Naskládejte věkový histogram přežitých na vrchol celkového věkového histogramu
202+
Vykreslete histogram pro věk, poté odfiltrujte přeživší cestující a vykreslete histogram pro věk na stejné ose. Nastavte jinou barvu a štítek.
203+
#use dataframe hist(), který bude standardně zpracovávat NaN
204+
obr, ax = plt.subplots()
205+
df_titanic.Age.hist(ax=ax, label='all', bins=20, edgecolor='black', alpha=0.5)
206+
#stack přežil
207+
df_titanic[df_titanic.Survived==1].Age.hist(ax=ax, bins=20, color='g', label='survived', edgecolor='black', alpha=0.5)
208+
ax.set_title('Věková distribuce')
209+
ax.legend()
210+
Děti mají vyšší míru přežití.
211+
[Zpět na začátek](#Obsah)
212+
213+
## Krok 3: Příprava dat
214+
Vytvářejte nové funkce prostřednictvím inženýrství funkcí; Vypořádat se s chybějícími hodnotami; Vyčistit data, tzn. odstranit nadbytečné bílé mezery v hodnotách řetězce. Zaměříme se na řešení chybějících údajů v tomto slovním spojení.
215+
#zkontrolovat všechna chybějící data
216+
df_titanic.isnull().sum()
217+
### Vypořádejte se s chybějícími daty
218+
Předvedeme si plnění průměrem/režimem a odhadem z dalších sloupců.
219+
220+
#### Vyplňte průměrem/režimem
221+
Embarked má pouze 2 chybějící hodnoty a neexistuje žádný zřejmý způsob, jak odhadnout chybějící hodnotu, jednoduše ji doplníme režimem sloupce nebo 'S'
222+
##### Úkol 12: Doplňte chybějící Nastoupili jste s režimem
223+
#fill NaN v režimu Embarked with
224+
df_titanic['Embarked'].fillna(df_titanic.Embarked.mode()[0],inplace=True)
225+
df_titanic.info()
226+
#### Vyplňte odhadovanou hodnotou
227+
228+
Titul je slovo používané ve jménu osoby v určitých kontextech. Může to znamenat buď úctu, oficiální postavení nebo profesionální neboakademická kvalifikace. Je to dobrý údaj o věku, například Mr je pro dospělého muže, Master je pro mladé chlapce.
229+
230+
Pokud se podíváme na všechna jména cestujících Titaniku, vidíme, že jméno je ve formátu Last, Title. První. Tyto informace můžeme použít k odhadu chybějících věků.
231+
232+
- Nejprve použijeme regulární výraz k extrahování názvu z názvu.
233+
- Poté převedeme název na velká písmena.
234+
- Chybějící věk pak doplníme průměrným věkem konkrétního titulu.
235+
#extrahujte předponu z názvu
236+
df_titanic['Title']=df_titanic.Name.str.extract('([A-Za-z]+\.)')
237+
df_titanic.head()
238+
##### Úkol 13: převeďte počáteční písmena na velká písmena.
239+
Abychom zajistili přesný průměrný věk každé iniciály, převedeme iniciály na všechna velká písmena.
240+
df_titanic.Title = df_titanic.Title.str.upper()
241+
df_titanic.head()
242+
##### Úkol 14: Doplňte chybějící věk průměrným věkem iniciály
243+
df_titanic.Title.value_counts()
244+
df_titanic.Age.fillna(df_titanic.groupby('Title').Age.transform('mean'), inplace=True)
245+
df_titanic.info()
246+
### Funkce inženýrství
247+
Vytvoříme nový sloupec FamilySize. Existují 2 sloupce týkající se velikosti rodiny, parch označuje číslo rodiče nebo dětí, Sibsp označuje číslo sourozence a manžela.
248+
249+
Vezměte si jako příklad jedno jméno 'Asplund', můžeme vidět, že celková velikost rodiny je 7 (Parch + SibSp + 1) a každý člen rodiny má stejné jízdné, což znamená, že jízdné je pro celou skupinu. Velikost rodiny tedy bude důležitou vlastností pro předpovídání Fare. V datové sadě jsou pouze 4 Asplundy ze 7, protože datová sada je pouze podmnožinou všech cestujících.
250+
df_titanic[df_titanic.Name.str.contains('Asplund')]
251+
##### Úkol 15: Vytvořte sloupec Rodinná velikost 'FamilySize'
252+
Rodinná velikost FamilySize = Parch + SibSp + 1
253+
df_titanic['FamilySize'] = df_titanic.Parch + df_titanic.SibSp + 1
254+
df_titanic.sample(5)
255+
256+
[Zpět na začátek](#Obsah)
257+
258+
## Krok 4: Modelování
259+
260+
Nyní máme relativně čistou datovou sadu (kromě sloupce **Cabin**, který má mnoho chybějících hodnot). Můžeme provést klasifikaci na Survived, abychom předpověděli, zda cestující katastrofu přežije, nebo regresi na Fare, abychom předpověděli jízdné. Tato datová sada není vhodná pro regresi. Ale protože v tomto workshopu nehovoříme o klasifikaci, zkonstruujeme v tomto cvičení lineární regresi na Fare.
261+
262+
import statsmodels.formula.api as smf
263+
result = smf.ols("Fare ~ C(Pclass) + C(Embarked) + FamilySize", data=df_titanic).fit()
264+
result.summary()
265+

0 commit comments

Comments
 (0)