Напишем и поймем Decision Tree на Python с нуля! Часть 3. Библиотека для анализа данных Pandas

от автора

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pythonで0からディシジョンツリーを作って理解する (3. データ分析ライブラリPandas編)".

Это третья статья из серии. Ссылки на предыдущие статьи: первая, вторая

В данной статье я объясню, как работать с библиотекой Pandas, чтобы создавать Decision Tree.

3.1 Импортируем библиотеку

# импортируем pandas и прописываем, что далее мы будем ее указывать как pd import pandas as pd

3.2 Data frame и Series

В pandas используются такие структуры, как Data frame и Series.
Рассмотрим их на примере следующей таблицы, напоминающей Excel.
Одна строка данных называется Series, столбцы — атрибутами этих данных, а вся таблица целиком — Data frame-ом.

3.3 Создаем Data frame

Подключаем Excel-таблицу с помощью read_excel или ExcelWriter

# Сохраняем Excel файл туда же, где находится и файл ipynb df0 = pd.read_excel("data_golf.xlsx")   # выводим DataFrame как HTML таблицу  from IPython.display import HTML html = "<div style='font-family:\"メイリオ\";'>"+df0.to_html()+"</div>" HTML(html)   # Сохраняем в Excel файл (with автоматически выполняет f.close) with pd.ExcelWriter("data_golf2.xlsx") as f:         df0.to_excel(f)

Создание Data Frame из словаря (ассоциативного массива): словарь собирает вместе данные столбцов DataFrame

# создание из словаря: сбор данных из столбцов   d = {     "Погода":["Ясно","Ясно","Облачно","Дождь","Дождь","Дождь","Облачно","Ясно","Ясно","Дождь","Ясно","Облачно","Облачно","Дождь"],     "Температура":["Жарко","Жарко","Жарко","Тепло","Холодно","Холодно","Холодно","Тепло","Холодно","Тепло","Тепло","Тепло","Жарко","Тепло"],      "Влажность":["Высокая","Высокая","Высокая","Высокая","Норм","Норм","Норм","Высокая","Норм","Норм","Норм","Высокая","Норм","Высокая"],     "Ветер":["Нет","Есть","Нет","Нет","Нет","Есть","Есть","Нет","Нет","Нет","Есть","Есть","Нет","Есть"],   "Гольф":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"], } df0 = pd.DataFrame(d)

Создание Data Frame из массивов: сбор данных из строк DataFrame

# создание из массивов: сбор данных из строк  d = [["Ясно","Жарко","Высокая","Нет","×"],      ["Ясно","Жарко","Высокая","Есть","×"],      ["Облачно","Жарко","Высокая","Нет","○"],      ["Дождь","Тепло","Высокая","Нет","○"],      ["Дождь","Холодно","Норм","Нет","○"],      ["Дождь","Холодно","Норм","Есть","×"],      ["Облачно","Холодно","Норм","Есть","○"],      ["Ясно","Тепло","Высокая","Нет","×"],      ["Ясно","Холодно","Норм","Нет","○"],      ["Дождь","Тепло","Норм","Нет","○"],      ["ясно","Тепло","Норм","Есть","○"],      ["Облачно","Тепло","Высокая","Есть","○"],      ["Облачно","Жарко","Норм","Нет","○"],      ["Дождь","Тепло","Высокая","Есть","×"],     ] # название столбцов и строк можно указать как columns и index соответственно. В случае, если их опускать, указывается соответствующий им номер. df0 = pd.DataFrame(d,columns=["Погода","Температура","Влажность","Ветер","Гольф"],index=range(len(d)))

3.4 Получаем информацию из таблицы

# получение информации из таблицы   # количество строк и столбцов print(df0.shape) # вывод (14, 5)   #  получаем количество строк print(df0.shape[0]) # вывод 14   # получаем названия столбцов print(df0.columns) # вывод Index(['Погода', 'Температура', 'Влажность', 'Ветер', 'Гольф'], dtype='object')   # получаем названия строк (Название строки df0 - это автоматически присвоенный индекс) print(df0.index) # вывод RangeIndex(start=0, stop=14, step=1)

3.5 Получаем значения loc iloc values

# получение значений   # получаем значение, указав строку и столбец # получаем значение Влажности в строке под №1 (вторая сверху) print(df0.loc[1,"Влажность"]) # вывод Высокая  # получаем значение, указав массив из нескольких строк и столбцов # получаем значения Погоды и Гольфа из строк 1,2,4, и полученные данные тоже будут Data Frame-ом   df = df0.loc[[1,2,4],["погода","Гольф"]] print(df) # вывод #    Погода    Температура    Влажность    Ветер    Гольф # 1    Ясно        Жарко        Высокая     Есть      × # 2    Облачно    Жарко        Высокая    Нет    ○ # 3    Дождь        Тепло        Высокая    Нет    ○ # 4    Дождь        Холодно    Норм        Нет    ○  # iloc позволяет индексировать строки и столбцы. Индексы отсчитываются от 0. # получаем данные из строк с 1 по 3, не включая столбец Гольф. Так как iloc указывает индекс, если написать 1:4, то 4-ка включена не будет.  df = df0.iloc[1:4,:-1] print(df) # вывод #    Погода    Температура    Влажность    Ветер # 1    Ясно        Жарко        Высокая     Есть      # 2    Облачно    Жарко        Высокая    Нет # 3    Дождь        Тепло        Высокая    Нет   # получаем значение из одной строки (Series) # получаем данные из самой первой строки. s это Series s = df0.iloc[0,:] # так же, как и со словарем, значение можно получить с помощью s["название столбца"] print(s["Погода"]) # вывод Ясно  # все значения получаем в виде массива (numpy.ndarray). print(df0.values)

3.6 Цикл данных, пройдемся по данным с помощью iterrows iteritems

# цикл данных, просматриваем данные # в цикле проходимся по строкам. Смотрим данные по каждой строчке. for i,row in df0.iterrows():     # i это название строки (индекс строки), row это Series     print(i,row)     pass  # в цикле проходимся по столбцам. Смотрим данные по вертикали. for i,col in df0.iteritems():     # i это название столбца, col это Series     print(i,col)     pass

3.7 Частота value_counts

# частота вывода данных # получаем все данные из столбца Погода. s это Series s = df0.loc[:,"Погода"]  # получаем необходимое количество нужных данных print(s.value_counts()) # вывод # Ясно    5 # Дождь    5 # Облачно    4 # Name: Погода, dtype: int64  # Например, получили количество строк, когда встречается “Ясно” print(s.value_counts()["Ясно"]) # Вывод 5

3.8 Извлекаем конкретные данные query

# извлечение конкретных данных # получаем данные, когда Погода - Ясно. print(df0.query("Погода=='Ясно'")) # вывод #    Погода    Температура    Влажность    Ветер    Гольф # 0    Ясно        Жарко        Высокая    Нет    × # 1    Ясно        Жарко        Высокая    Есть    × # 7    Ясно        Тепло        Высокая    Нет    × # 8    Ясно        Холодно    Норм        Нет    ○ # 10    Ясно        Тепло        Норм        Есть    ○  # получаем данные, когда Погода - ясно, и иду на гольф  print(df0.query("Погода=='Ясно' and Гольф=='○'")) # вывод #    Погода    Температура    Влажность    Ветер    Гольф # 8    Ясно        Холодно    Норм        Нет    ○ # 10    Ясно        Тепло        Норм        Есть    ○  # получаем данные, когда Погода - ясно, или иду на гольф  print(df0.query("Погода=='Ясно' or Гольф=='○'")) # вывод #    Погода    Температура    Влажность    Ветер    Гольф # 0    Ясно        Жарко        Высокая    Нет    × # 1    Ясно        Жарко        Высокая    Есть    × # 2    Облачно    Жарко        Высокая    Нет    ○ # 3    Дождь        Тепло        Высокая    Нет    ○ # 4    Дождь        Холодно    Норм        Нет    ○ # 6    Облачно    Холодно    Норм        Есть    ○ # 7    Ясно        Тепло        Высокая    Нет    × # 8    Ясно        Холодно    Норм        Нет    ○ # 9    Дождь        Тепло        Норм        Нет    ○ # 10    Ясно        Тепло        Норм        Есть    ○ # 11    Дождь        Тепло        Высокая    Есть    ○ # 12    Дождь        Жарко        Норм        Нет    ○

Спасибо за прочтение!

Мы будем очень рады, если вы расскажете нам, понравилась ли вам данная статья, понятен ли перевод, была ли она вам полезна?

ссылка на оригинал статьи https://habr.com/ru/post/520204/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *