Панды…. Аббревиатура панельных данных. Panda - это модуль библиотеки Python для анализа и обработки данных. Как говорится, данные - один из важнейших аспектов в области машинного обучения. Машины не могут быть обучены до тех пор, пока им не будут предоставлены данные (потому что: Ага !!! Чему он научится ???). При этом, в этом мире бесконечного количества форматов данных и их неравномерного распределения, данные не будут каждый раз представлять себя красиво и красиво (черт возьми! Это большой беспорядок). Здесь на помощь приходит Панда. Panda делает очистку, форматирование, уточнение и всевозможные манипуляции данными в миллионы раз быстрее и эффективнее! Его простота использования, открытый исходный код, фантастическая документация, огромное сообщество, активная разработка с момента его первоначального выпуска - это лишь некоторые из функций, которыми panda обязана своей известностью среди специалистов по данным.

Без каких-либо дополнительных обязательств давайте запачкаем руки и познакомимся с некоторыми из основных функций, которые может предложить Panda.

ПРИМЕЧАНИЕ. В этом посте я предполагаю, что на вашем компьютере уже установлена ​​панда. В противном случае вы можете сделать это в первую очередь, например, "pip install pandas".

Начнем с базовой настройки и использования панды!

#basic usage
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
style.use('fivethirtyeight')
stats = {
'Day':[1,2,3,4,5,6],
'Visitors':[43,34,65,56,29,76],
'Bounce_Rate':[65,67,78,65,45,52]
}
df = pd.DataFrame(stats)
print(df.head())
print(df.tail())
print(df.head(2))
print(df.tail(2))
print(df.shape)
df.set_index('Day', inplace = True)
print(df)
df.index.name = 'Day'
df.reset_index(inplace = True)
print(df)

Теперь перейдем к некоторым основным операциям с колонками.

#column operations
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
style.use('fivethirtyeight')
stats = {
'Day':[1,2,3,4,5,6],
'Visitors':[43,34,65,56,29,76],
'Bounce_Rate':[65,67,78,65,45,52]
}
df = pd.DataFrame(stats)
AXIS = 0 STANDS FOR ROWS
df.drop(['Day', 'Visitors'], axis = 1, inplace = True)
print(df.Bounce_Rate)
print('Bounce_Rate')
df.rename(columns = {'Day': 'day', 'Visitors': 'visitors'}, inplace = True)
print(df.columns)

Некоторые основные операции фильтрации и сортировки можно выполнить следующим образом.

#filtering and sorting
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
style.use('fivethirtyeight')
stats = {
'Day':[1,2,3,4,5,6],
'Visitors':[43,34,65,56,29,76],
'Bounce_Rate':[65,67,78,65,45,52]
}
df = pd.DataFrame(stats)
x = df.Visitors.sort_values()
print(x)
'''
OR another method to do the same would be:
x = df['Visitors'].sort_values()
print(x)
'''
x = df.sort_values('Day')
print(x)
x = df[df.Day > 2]
print(x)
x = df[(Day > 2) and (Visitors > 29)]
print(x)
y = df[(Day > 2) or (Visitors > 29)]
print(y)

Давайте прочитаем из CSV-файла и запишем в новый CSV-файл.

#csv operations
import pandas as pd
df = pd.read_csv('somecsvfile.csv')
df.to_csv('anothercsvfile.csv')
df['somecolumn'].to_csv('yetanothercsvfile.csv')
df = pd.read_csv('somecsvfile.csv', usecols = ['column_name', 'another_column_name'])
df = pd.read_csv('somecsvfile.csv', index_col = 0)
df.rename(columns = {'originalname' : 'newname'}, inplace = True)

Давайте читать со страницы HTML.

import pandas as pd
df = pd.read_html('here goes the url link of the website')
print(df)
print(df[0])
print(df[0][0])
for item in df[0][0][1:]:
 print(str(item))

Теперь давайте попробуем объединить два фрейма данных pandas четырьмя разными способами, а именно: объединение, объединение, добавление и объединение. На первый взгляд может показаться, что все они работают одинаково, но не ошибитесь, потому что все они имеют очень уникальные и разные методологии работы.

#CONCATENATING AND APPENDING
import pandas as pd
df1 = pd.DataFrame({'HPI':[80,85,88,85],
                    'Int_rate':[2, 3, 2, 2],
                    'US_GDP_Thousands':[50, 55, 65, 55]},
                   index = [2001, 2002, 2003, 2004])
df2 = pd.DataFrame({'HPI':[80,85,88,85],
                    'Int_rate':[2, 3, 2, 2],
                    'US_GDP_Thousands':[50, 55, 65, 55]},
                   index = [2005, 2006, 2007, 2008])
df3 = pd.DataFrame({'HPI':[80,85,88,85],
                    'Int_rate':[2, 3, 2, 2],
                    'Low_tier_HPI':[50, 52, 50, 53]},
                   index = [2001, 2002, 2003, 2004])
concat_1 = pd.concat([df1, df2])
print concat
concat_2 = pd.concat([df1, df2, df3])
print(concat_2)
df4 = df1.append(df2)
print(df4)
s = pd.Series([40, 90, 65], index = ['HPI', 'Int_rate', 'US_GDP_Thousands'])
df5 = df1.append(s, ignore_index = True)
print(df5)

#JOINING AND MERGING
import pandas as pd
df1 = pd.DataFrame({
         'id':[1,2,3,4,5],
         'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
         'subject_id':['sub1','sub2','sub4','sub6','sub5']})
df2 = pd.DataFrame(
         {'id':[1,2,3,4,5],
         'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
         'subject_id':['sub2','sub4','sub3','sub6','sub5']})
first_merge = pd.merge(df1, df2, on = 'id')
print(first_merge)
second_merge = pd.merge(df1, df2, on = ['id', 'subject_id'])
print(second_merge)
# MERGE USING 'HOW' ARGUMENT
"""
THERE ARE 4 TYPES OF MERGING METHOD USING 'HOW' ARGUMENT
1) LEFT OUTER
2) RIGHT OUTER
3) FULL OUTER
$) INNER
"""
left_merge = pd.merge(df1, df2, on = 'subject_id', how = 'left')
print(left_merge)
right_merge = pd.merge(df1, df2, on = 'subject_id', how = 'right')
print(right_merge)
outer_merge = pd.merge(df1, df2, on = 'subject_id', how = 'outer')
print(outer_merge)
inner_merge = pd.merge(df1, df2, on = 'subject_id', how = 'inner')
print(inner_merge)
'''
JOINING WILL BE PERFORMED ON INDEX. JOIN OPERATION HONORS THE OBJECT ON WHICH IT IS CALLED. SO, A.JOIN(B) IS NOT EQUAL TO B.JOIN(A).
'''
df1.set_index('subject_id', inplace=True)
df3.set_index('subject_id', inplace=True)
right_joined = df1.join(df3, how="right")
print(right_joined)
right_joined = df1.join(df3, how="left")
print(left_joined)
right_joined = df1.join(df3, how="inner")
print(inner_joined)
right_joined = df1.join(df3, how="outer")
print(outer_joined)

Один из очень частых случаев в наборах данных - это отсутствие значений. NAN (не число). Для обработки этих недостающих значений в Panda есть несколько встроенных функций, которые мы можем использовать.

#handling missing data
import pandas as pd
df = pd.read_csv('http://bit.ly/uforeports')
df.isnull().tail()
df.notnull().tail()
df.isnull().sum()
 
df[df.City.isnull()]
df.dropna(how = 'any')
df.dropna(how = 'all')
df.dropna(subset = ['City', 'Shape Reported'], how = 'any')\
df.fillna(value = 'heregoesthevalueyouwanttofill')

Quandl - это онлайн-сайт с множеством наборов данных по различным областям (например, американские индексы цен на жилье, акции, товары, иностранная валюта и т. Д.). Для получения дополнительной информации о Quandl посетите https://www.quandl.com. Давайте настроим Quandl с пандами для извлечения данных из Quandl и использования их в анализе.

#setting up Quandl with pandas
import quandl
api_key = 'yoursuperamazingquandlAPIkey'
df = quandl.get('heregoesthequandlcode', authtoken = api_key)
print(df.head())

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

Сноска: у меня есть репозиторий Github, который содержит весь приведенный выше код в хорошо прокомментированной структуре вместе со всеми необходимыми ссылками, которые я использовал для изучения этой прекрасной библиотеки. . Я буду обновлять этот репозиторий со временем и по мере того, как узнаю что-то стоящее.

Если вам понравилась эта статья, не бойтесь аплодировать.

Будьте на связи. До скорого !