[Python, Программирование] Напишем и поймем Decision Tree на Python с нуля! Часть 3. Библиотека для анализа данных Pandas (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет, Хабр! Представляю вашему вниманию перевод статьи "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 Дождь Жарко Норм Нет ○
Спасибо за прочтение!
Мы будем очень рады, если вы расскажете нам, понравилась ли вам данная статья, понятен ли перевод, была ли она вам полезна?
===========
Источник:
habr.com
===========
===========
Автор оригинала: 豊久 中田
===========Похожие новости:
- [Программирование, Git] Переписывание истории репозитория кода, или почему иногда можно git push -f
- [Data Engineering] Data Science в обувном магазине: предсказали поведение клиентов и увеличили конверсию сайта на 16%
- [Настройка Linux, Программирование, Go, Разработка под Linux] eBPF: современные возможности интроспекции в Linux, или Ядро больше не черный ящик
- [Конференции, Data Engineering] SmartData 2020: конференция про data engineering
- [Высокая производительность, PostgreSQL, Программирование, Go] Приключения одного бага или как починить pgx чужими руками
- [Децентрализованные сети, Информационная безопасность, Программирование, Хранение данных] Блокчейн как структура данных (перевод)
- [JavaScript, Дизайн, Конференции, Программирование] 25 и 26 сентября — открытые дни на Frontend Live
- [Big Data, Data Engineering, Hadoop, Python] Как мы оркестрируем процессы обработки данных с помощью Apache Airflow
- [Программирование, Scala] Scala мертва?
- [Julia, Высокая производительность, Исследования и прогнозы в IT, Программирование, Промышленное программирование] Julia готова для прода (перевод)
Теги для поиска: #_python, #_programmirovanie (Программирование), #_python, #_decision_tree, #_data_science, #_python, #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:46
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет, Хабр! Представляю вашему вниманию перевод статьи "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 Дождь Жарко Норм Нет ○ Спасибо за прочтение! Мы будем очень рады, если вы расскажете нам, понравилась ли вам данная статья, понятен ли перевод, была ли она вам полезна? =========== Источник: habr.com =========== =========== Автор оригинала: 豊久 中田 ===========Похожие новости:
Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:46
Часовой пояс: UTC + 5