Cvičení – vyčištění dat o počasí za účelem analýzy kritérií startu rakety
Teď, když máme naimportovaná data, musíme použít praxi strojového učení označovanou jako "čištění dat". Vezmeme data, která vypadají špatně nebo nepořádky, a vyčistíme je tak, že změníme hodnotu nebo ji úplně odstraníme. Mezi běžné příklady čištění dat patří:
- Zajištění, že neexistují žádné hodnoty null
- Nastavení všech hodnot ve sloupci na stejnou hodnotu
Data čistíme, protože počítače jsou zmatené, pokud se dívají na nekonzistentní data nebo pokud je v datech hodně hodnot null.
Čištění dat
Prvním krokem při čištění dat je nahrazení všech chybějících hodnot něčím. Nahrazení těchto hodnot obvykle vyžaduje odborné znalosti dané problematiky. V tomto případě ale použijete svůj nejlepší úsudek. V některých řádcích (nezapomeňte, že řádky představují dny) chybí data o počasí nebo startu.
Napřed získáte přehled o spouštěcích datech spuštěním tohoto příkazu v souboru .ipynb :
launch_data.info()
V některých ze 300 řádků chybí informace:
RangeIndex: 300 entries, 0 to 299
Data columns (total 26 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Name 60 non-null object
1 Date 300 non-null datetime64[ns]
2 Time (East Coast) 59 non-null object
3 Location 300 non-null object
4 Crewed or Uncrewed 60 non-null object
5 Launched? 60 non-null object
6 High Temp 299 non-null float64
7 Low Temp 299 non-null float64
8 Ave Temp 299 non-null float64
9 Temp at Launch Time 59 non-null float64
10 Hist High Temp 299 non-null float64
11 Hist Low Temp 299 non-null float64
12 Hist Ave Temp 299 non-null float64
13 Precipitation at Launch Time 299 non-null float64
14 Hist Ave Precipitation 299 non-null float64
15 Wind Direction 299 non-null object
16 Max Wind Speed 299 non-null float64
17 Visibility 299 non-null float64
18 Wind Speed at Launch Time 59 non-null float64
19 Hist Ave Max Wind Speed 0 non-null float64
20 Hist Ave Visibility 0 non-null float64
21 Sea Level Pressure 299 non-null object
22 Hist Ave Sea Level Pressure 0 non-null float64
23 Day Length 298 non-null object
24 Condition 298 non-null object
25 Notes 3 non-null object
Vidíte, že Hist Ave Max Wind Speed
, Hist Ave Visibility
a Hist Ave Sea Level Pressure
neobsahují žádná data.
To, že Wind Speed at Launch Time
, Temp at Launch Time
, Launched
, Crewed or Uncrewed
, Time
a Name
mají pouze 60 hodnot, dává smysl, protože data zahrnují pouze 60 startů. Zbývající jsou dny před a po startu.
Tady je několik způsobů, jak data vyčistíme:
- Řádky, které
Y
Launched
ve sloupci nemají start rakety, tedy aby tyto chybějící hodnotyN
nebyly nalezeny. - U řádků, ve kterých chybí informace o tom, jestli rakety měly nebo neměly posádku, předpokládejte, že posádku neměly. Pravděpodobnější je varianta, že posádku neměly, protože počet misí s posádkou je menší.
- Pokud chybí směr větru, označte ho jako
unknown
. - Pokud chybí povětrnostní podmínky, předpokládejte, že se jednalo o typický den, a použijte
fair
. - U všech ostatních dat použijte hodnotu
0
.
Do další buňky vložte tento kód a spusťte ho:
## To handle missing values, we will fill the missing values with appropriate values
launch_data['Launched?'].fillna('N',inplace=True)
launch_data['Crewed or Uncrewed'].fillna('Uncrewed',inplace=True)
launch_data['Wind Direction'].fillna('unknown',inplace=True)
launch_data['Condition'].fillna('Fair',inplace=True)
launch_data.fillna(0,inplace=True)
launch_data.head()
Zkuste spustit launch_data.info()
znovu, aby se zobrazily změny, které jste v datech právě provedli.
Poznámka:
Provádíte změny dat, která jsou uložena v proměnné launch_data
, nikoli dat uložených v excelovém souboru. Pokud zjistíte, že jste změnili nebo odebrali data, která jste nechtěli, můžete poznámkový blok spustit znovu a vrátit původní data.
Manipulace s daty
Vzhledem k tomu, že výpočty se nejlépe provádí s číselnými vstupy, převeďte veškerý text na čísla. 1
třeba použijeme, pokud raketa má posádku, a 0
v případě, že raketa posádku nemá.
## As part of the data cleaning process, we have to convert text data to numerical because computers understand only numbers
label_encoder = preprocessing.LabelEncoder()
# Three columns have categorical text info, and we convert them to numbers
launch_data['Crewed or Uncrewed'] = label_encoder.fit_transform(launch_data['Crewed or Uncrewed'])
launch_data['Wind Direction'] = label_encoder.fit_transform(launch_data['Wind Direction'])
launch_data['Condition'] = label_encoder.fit_transform(launch_data['Condition'])
Pojďme se znovu podívat na všechna data a ověřme, že jsou vyčištěná.
launch_data.head()