Top.Mail.Ru

Python. Анализ данных. PANDAS

В языке Python существует множество библиотек для анализа данных, включая предобработку данных, Big Data, статистический анализ. Мы начнем свое знакомства с удивительным миром анализа  данных с библиотеки PANDAS, которая осуществляет их предобработку.

Итак, допустим, у нас имеются некоторые данные в формате  CSV. Чтобы их загрузить, в библиотеке есть функция read_csv. Рассмотрим пример:

#Подключим библиотеку
import pandas as pd

#Прочитаем данные
data = pd.read_csv('company.csv')

print(data)

Данная программа прочитает из файла данные, и выведет на экран краткое содержимое объекта DataFrame:

Стоит иметь в виду, что ead_csv по умолчанию понимает только файлы с разделителем запятая, а в числах в качестве десятичного разделителя — точка. Чтобы читать CSV других форматов, придется указывать параметры явно. Например, вот так:

#Подключим библиотеку
import pandas as pd

#Прочитаем данные
data = pd.read_csv('1.csv',sep=';',encoding='cp1251')

print(data)

Данная программа прочтет CSV файл в стандарной виндовой кодировке с разделитем «;»:

Результатом выполнения метода read_csv является объект DataFrame. Этот объект позовляет производить различные манипуляции с данными. Например, можно получить таблицу, содержащую отдельные столбцы исходной таблицы, или наоборот, взять с удалением лишних столбцов:

#Подключим библиотеку
import pandas as pd

#Прочитаем данные
data = pd.read_csv('company.csv')

#Получим входные и выходные значения
Y = data['NotFired']
X = data.drop(['UserId','Name','NotFired'], axis=1)

Если мы посмотрим типы наших переменных X и Y:

print(type(X))
print(type(Y))

То увидим, что X — это все тот же DataFrame, а Y — это Series

Зачем нам нужны подобные манипуляции? Предположим, что мы хотим найти в наших данных закономерности, для чего обучим какую-нибудь AI-модель, которых в Python вагон и маленькая тележка.

Нам дан список сотрудников компании, где имеется их имена, возраст, табельный номер, образование, бальная оценка навыков, и признак, попадает ли сотрудник под сокращение в связи с грядущим кризисом (поле NotFired, если 1 — то сотрудник остаётся работе, 0 — его увольняют). Таким образом, NotFired — это целевая переменная, и нам нужно вывести, как она зависит от остальных переменных. Для чего? Допустим, мы хотим узнать, нет ли при увольнении дискриминации по полу или возрасту. Такие столбцы, как имя и табельный номер нам тут не нужны, мы их удаляем. А NotFired удаляем потому, что эта переменная у нас должны быть в массиве Y — то, что мы хотим предсказать. Остальные — это X — данные для предсказания.

Ну а дальше мы можем обучить модель, например, решающее дерево:

#Обучим модель
model = DecisionTreeClassifier(random_state=241)
model.fit(X, Y)

А вот так можно создать датафрейм «с нуля»:

#создание DataFrame по столбцам с помощью словарей
frame = pd.DataFrame({'numbers':range(10), 'chars':['a']*10})

В данном примере мы создаем датафейм с полями numbers и chars. Столбец numbers  заполняется числами от 0 до 9 (10 не включаем), а столбец chars буквами ‘a’:

 

Обратится к столбцам дата фрейма можно через свойство columns:

Размер таблицы можно получить через свойство shape:

Как видим, это свойство возвращает кортеж.

Добавить строку можно методом append:

new_line = {'Name':'Perov', 'Birth':'22.03.1990', 'City':'Penza'}

#добавление строки в DataFrame
frame = frame.append(new_line, ignore_index=True)

Обратите внимание, что метод append не меняет существующую таблицу, а возвращает модифицированную (то есть создает копию и ее правит).

Для того, чтобы добавить столбец, достаточно просто присвоить значение новому столбцу (которого раньше не было):

#добавление столбца в DataFrame
frame['IsStudent'] = [False]*5 + [True]*2

Наконец, дата фрейм можно сохранить в файл (в текстовом формате):

#запись DataFrame в файл
frame.to_csv('updated_dataset.csv', sep=',', header=True, index=False)

В параметрах мы можем задать также разделитель, наличие заголовка, индекса, а также кодировку (все как и при чтении).

Comments

So empty here ... leave a comment!

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

Sidebar