Cvičení – vyčištění dat o počasí za účelem analýzy kritérií startu rakety

Dokončeno

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é YLaunched ve sloupci nemají start rakety, tedy aby tyto chybějící hodnoty Nnebyly 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()