Övning – Förbereda väderdata för att analysera kriterier för uppskjutningen av en rymdraket

Slutförd

Nu när vi har importerat data måste vi använda en maskininlärningspraxis som kallas "rensa data". Vi tar data som ser felaktiga eller röriga ut och rensar upp dem genom att ändra värdet eller ta bort dem helt och hållet. Vanliga exempel på rensningsdata är:

  • Se till att det inte finns några null-värden
  • Få varje värde i en kolumn att se likadant ut

Vi rensar data eftersom datorer blir förvirrade om de tittar på inkonsekventa data eller om många värden i data är null.

Datarensning

Det första steget när du rensar dina data är att ersätta alla saknade värden med något. Att ersätta dessa värden kräver vanligtvis ämnesexpertis. Men i det här fallet använder du ditt bästa omdöme. Vissa rader (kom ihåg att rader representerar dagar) saknar väder- eller uppskjutningsdata.

Kom igång genom att först få en översikt över startdata genom att köra det här kommandot i .ipynb-filen :

launch_data.info()

Av 300 rader saknas det information i vissa kolumner:

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 

Du kan se att Hist Ave Max Wind Speed, Hist Ave Visibility och Hist Ave Sea Level Pressure inte har några data.

Det är logiskt att Wind Speed at Launch Time, Temp at Launch Time, Launched, Crewed or Uncrewed, Time och Name bara har 60 värden, eftersom datauppsättningen endast innehåller 60 uppskjutningar. De återstående är dagarna före och efter lanseringen.

Här är några sätt att rensa data:

  • Raderna som inte finns Y i Launched kolumnen hade ingen raketuppskjutning, så gör dessa saknade värden N.
  • Om en rad inte innehåller information om huruvida rymdraketen var bemannad eller obemannad, förutsätter vi att den var obemannad. Det är troligare att rymdraketen var obemannad eftersom färre uppskjutningar var bemannade.
  • Om vindriktningen saknas märker du den som unknown.
  • Om väderförhållandet saknas antar vi att det var en typisk dag och använder fair.
  • För andra data använder du värdet 0.

I nästa cell klistrar du in och kör den här koden:

## 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()

Prova att köra launch_data.info() igen för att se ändringarna som du precis har gjort.

Kommentar

Du ändrar data som lagras i variabeln launch_data, inte data som sparas i Excel-filen. Om du upptäcker att du har ändrat eller tagit bort data av misstag kan du köra notebook-filen igen för att hämta dina ursprungliga data.

Datamanipulering

Eftersom beräkningar passar bäst för numeriska indata, omvandlar du all text till siffror. Som exempel ska vi använda 1 om en rymdraket är bemannad och 0 om en rymdraket är obemannad.

## 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'])

Nu ska vi titta på alla data igen och kontrollera att de har rensats.

launch_data.head()