Övning – Förbereda väderdata för att analysera kriterier för uppskjutningen av en rymdraket
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
iLaunched
kolumnen hade ingen raketuppskjutning, så gör dessa saknade värdenN
. - 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()