🚀Роль Python в освоении космоса

Этот проект был введением в машинное обучение с использованием реальной проблемы. НАСА должно учитывать множество факторов перед запуском ракеты; они должны проанализировать несколько точек данных, чтобы убедиться, что они могут предсказать условия, необходимые для дня их запуска.

Этот проект включает в себя использование этапов жизненного цикла науки о данных, таких как определение бизнеса/проблемы, сбор и понимание данных, выбор машинной модели и моделирование данных.

Следующая шпаргалка помогла понять, какой лучший алгоритм машинного обучения необходим.

ИМПОРТ БИБЛИОТЕКИ

Мы будем использовать библиотеки Pandas, NumPy, SKLearn и PYDotplus Python.

# Pandas library is used for handling tabular data
import pandas as pd

# NumPy is used for handling numerical series operations (addition, multiplication, and ...)

import numpy as np
# Sklearn library contains all the machine learning packages we need to digest and extract patterns from the data
from sklearn import linear_model, model_selection, metrics
from sklearn.model_selection import train_test_split

# Machine learning libraries used to build a decision tree
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

# Sklearn's preprocessing library is used for processing and cleaning the data 
from sklearn import preprocessing

# for visualizing the tree
import pydotplus
from IPython.display import Image

СЧИТАЙТЕ ДАННЫЕ В ПЕРЕМЕННУЮ

Мы прочитаем файл .xlse и посмотрим на первые пять строк структурированных данных.

launch_data = pd.read_excel('RocketLaunchDataCompleted.xlsx')
launch_data.head()

Как видите, у нас есть несколько строк, целых чисел, чисел с плавающей запятой и довольно много значений NAN.

ИЗУЧАТЬ ДАННЫЕ

Есть много способов исследовать данные. Мы напечатаем все столбцы в наших данных.

launch_data.columns

ОЧИСТКА ДАННЫХ

Необработанные данные часто бывают грязными, поэтому в большинстве проектов анализа данных требуются этапы очистки данных. Чтобы выполнить этот шаг, нам нужно проанализировать наши данные. Мы получим краткий обзор наших данных.

launch_data.info()

Обработка пропущенных значений

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

Как мы видим, обработка недостающих данных — это следующий шаг.

СМОТРЕТЬ ИЗМЕНЕНИЯ, ВНЕСЕННЫЕ В ДАННЫЕ

Мы должны проанализировать изменения, внесенные в наши данные, с помощью .info().

launch_data.info()

Это выглядит лучше.

МАНИПУЛЯЦИЯ ДАННЫМИ

Нам нужно преобразовать текстовые (строковые) данные в числовые данные (целые/плавающие), чтобы компьютер мог их понять.

## 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'])
launch_data.head()FURTHER CLEANING

Проводим дальнейшую очистку, удаляя ненужные нам колонки.

Затем мы перечисляем все переменные, которые понадобятся нашему алгоритму машинного обучения.

# First, we save the output we are interested in. In this case, "launch" yes and no's go into the output variable.
y = launch_data['Launched?']

# Removing the columns we are not interested in
launch_data.drop(['Name','Date','Time (East Coast)','Location','Launched?','Hist Ave Sea Level Pressure','Sea Level Pressure','Day Length','Notes','Hist Ave Visibility', 'Hist Ave Max Wind Speed'],axis=1, inplace=True)

# Saving the rest of the data as input data
X = launch_data

Список переменных

# List of variables that our machine learning algorithm is going to look at:
X.columns

СОЗДАЙТЕ МОДЕЛЬ МАШИННОГО ОБУЧЕНИЯ

Мы создаем классификатор дерева решений.

# Create decision tree classifier 
tree_model = DecisionTreeClassifier(random_state=0,max_depth=5)

РАЗДЕЛИТЬ ДАННЫЕ НА ПОЕЗД И ИСПЫТАТЕЛЬНЫЕ ДАННЫЕ

Нам нужно разделить данные на обучающий набор и тестовый набор.

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=99)

СООТВЕТСТВУЙТЕ МОДЕЛИ

Затем мы подгоняем модель к обучающим данным.

# Fitting the model to the training data
tree_model.fit(X_train,y_train)

ПРОВЕРКА МОДЕЛИ НА ИСПЫТАТЕЛЬНЫХ ДАННЫХ

Прогнозируем нашу модель на тестовых данных

# Do prediction on test Data
y_pred = tree_model.predict(X_test)
print(y_pred)

ОЦЕНКА МОДЕЛИ

Следующим шагом является расчет точности.

# Calculate accuracy
tree_model.score(X_test,y_test)

ВИЗУАЛИЗАЦИЯ МОДЕЛИ

Для визуализации модели мы используем SKLearn.

# Let's import a library for visualizing our decision tree.
from sklearn.tree import export_graphviz

def tree_graph_to_png(tree, feature_names,class_names, png_file_to_save):
    tree_str = export_graphviz(tree, feature_names=feature_names, class_names=class_names,
                                     filled=True, out_file=None)
    graph = pydotplus.graph_from_dot_data(tree_str)  
    return Image(graph.create_png())
# This function takes a machine learning model and visualizes it.
tree_graph_to_png(tree=tree_model, feature_names=X.columns.values,class_names=['No Launch','Launch'], png_file_to_save='decision-tree.png')
launch_data[(launch_data['Wind Speed at Launch Time'] > 1) & (launch_data['Max Wind Speed'] > 30.5)]

ПРОВЕРЬТЕ МОДЕЛЬ

И, наконец, мы тестируем модель.

# ['Crewed or Uncrewed', 'High Temp', 'Low Temp', 'Ave Temp',
#        'Temp at Launch Time', 'Hist High Temp', 'Hist Low Temp',
#        'Hist Ave Temp', 'Precipitation at Launch Time',
#        'Hist Ave Precipitation', 'Wind Direction', 'Max Wind Speed',
#        'Visibility', 'Wind Speed at Launch Time', 'Hist Ave Max Wind Speed',
#        'Hist Ave Visibility', 'Condition']

data_input = [ 1.  , 75.  , 68.  , 71.  ,  0.  , 75.  , 55.  , 65.  ,  0.  , 0.08,  0.  , 16.  , 15.  ,  0.  ,  0. ]

tree_model.predict([data_input])

Спасибо, что прочитали эту статью.

Полный проект доступен на моем Gihub. Если вам понравилась моя статья, пожалуйста, поделитесь ею. Предложения приветствуются.

#NeverStopLearning #DataAnalysis #100DayChallenge