Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Вступление в визуализацию данных при обзоре с поддержкой Pandas

Anna | 16.06.2014 | нет комментариев
Доброго времени суток, уважаемые читатели.
Как обещалось в предыдущей статье, сегодня я продолжу рассказ о модуле pandas и обзоре данных на языке Python. В данной статье хотелось бы затронуть тему стремительной визуализации данных итогов обзора. В этом нам помогут библиотека для визуализации данных matplotlib и среда разработки Spyder.

Среда разработки

Выходит, как мы увидели в прошлый раз, pandas владеет широким вероятностями для обзора данных, но всецело раскрыть их разрешает интерактивная оболочка IPython. О ней дозволено прочитать на Прогре. В качестве ее основного превосходства хотелось бы подметить ее интеграцию с библиотекой matplotlib, что комфортно для визуализации данных при расчетах. Следственно при выборе IDE я глядел на то, Дабы у нее была помощь IPython. В итоге мой выбор остановился на Spyder.
Spyder (Scientific PYthon Development EnviRonment) – это среда разработки схожая на MATLAB. Основными плюсами данной среды являются:

  • Настраиваемый интерфейс
  • Интеграция с matplotlib, NumPy, SciPy
  • Помощь применения множества консолей IPython
  • Динамическая справка по функциям при написании кода (показывает справку по последней напечатанной функции)
  • Вероятность сберечь консоль в html/xml

Подробнейший обзор среды написан тут.
Заблаговременный обзор данных и приведение их в необходимый вид средствами pandas
Выходит, позже небольшого обзора среды для работы, давайте перейдем непринужденно к визуализации данных. Для примера я взял данные о численности населения в РФ.
Для начала давайте загрузим скачанный файл xls в комплект данных c поддержкой функции read_excel():

import pandas as pd
data = pd.read_excel('data.xls',u'Лист1', header=4, parse_cols="A:B",skip_footer=2, index_col=0)
c = data.rename(columns={u'Все':'PeopleQty'})

В нашем случае функция имеет 6 параметров:

  1. Имя открываемого файла
  2. Имя листа, на котором содержатся данные
  3. Номер строки содержащей наименования полей (в нашем случае это строка 4, т.к. первые 3 строки содержат справочную информацию)
  4. Список столбцов, которые попадут в комплект данных (в нашем случае из каждой таблицы нам необходимы только 2 столбца: год и число населения, соответствующее ему)
  5. Дальнейший параметр обозначает, что мы не будет рассматривать 2 последние строки (в них содержатся комментарии)
  6. Конечный параметр указывает, что 1-й из полученных столбцов мы будем применять в качестве индекса

Сейчас наш комплект данных будет выглядеть так:

PeopleQty
население,
млн.человек
1897.0
в границах Русской империи 128.2
в современных границах 67.5
1914
в границах Русской империи 165.7
в современных границах 89.9
1917 91
1926 92.7
1939 108.4
1959 117.2
1970 129.9
1971 130.6
1972 131.3
1973 132.1
1974 132.8
1975 133.6
1976 134.5
1977 135.5
1978 136.5
2013 143.3

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

  • Либо с поддержкой фильтров
  • Либо с поддержкой соединения с DataFrame’ом, тот, что будет содержать годы в формате даты (это поможет еще и в оформлении графики)

Базовая работа с фильтрами была показана в предыдущей статье. Следственно в данный раз мы используем добавочный DataFrame, т. к. в процессе его образования будет показано, как дозволено средствами pandas сделать временную последовательность.
Для образования временной шкалы дозволено применять функцию date_range(). В параметрах ей передается 3 параметра: исходное значение, число периодов, размер периода (День, месяц, год и т.д.). В нашем случае давайте сформируем последовательность, начиная с 1970 по подлинный момент, т.к. с этого момента данные в нашей таблице заполнены фактически за всякий год:

a = pd.date_range('1/1/1970', periods=46, freq='AS')

На выходе у нас произошла последовательность с 1970 по 2015 год.

<class 'pandas.tseries.index.DatetimeIndex'>
[1970-01-01 00:00:00, ..., 2015-01-01 00:00:00]

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

b = pd.DataFrame(a, index=a.year,columns=['year'])

В качестве параметров функции передаются следующее значения:

  1. Массив данных, из которых будет создаваться DataFrame
  2. Значения индексов для комплекта данных
  3. Наименование полей в комплекте

На комплект данных принял вид:

year
1970 1970-01-01 00:00:00
1971 1971-01-01 00:00:00
1972 1972-01-01 00:00:00
1973 1973-01-01 00:00:00
1974 1974-01-01 00:00:00
1975 1975-01-01 00:00:00
1976 1976-01-01 00:00:00
1977 1977-01-01 00:00:00
1978 1978-01-01 00:00:00
1979 1979-01-01 00:00:00
1980 1980-01-01 00:00:00
1981 1981-01-01 00:00:00
2015 2015-01-01 00:00:00

Ну что же, сейчас у нас есть 2 комплекта данных, осталось их объединить. В прошлой статье было показано, как это сделать merge(). В данный же раз мы будем применять иную функцию join(). Эту функцию дозволено использовать, когда у ваших комплектов данных идентичные индексы (кстати, именно для того, Дабы продемонстрировать эту функцию мы их и добавляли). В коде это будет выглядеть так:

i = b.join(c, how=’inner’)

В параметрах к функции, мы передаем комплект, тот, что присоединяется и тип соединения. Как вестимо итог inner-соединения будет состоять из значений, которые присутствуют в обоих комплектах.
Стоит сразу подметить разницу между функциями merge() и join(). Merge() может изготавливать соединение по различным столбцам, join() же, в свою очередь, работает только с индексами.

Визуализация итогов обзора

Позже проделанных нами манипуляция, комплект данных выглядит так:

year PeopleQty
1970 1970-01-01 00:00:00 129.9
1971 1971-01-01 00:00:00 130.6
1972 1972-01-01 00:00:00 131.3
1973 1973-01-01 00:00:00 132.1
1974 1974-01-01 00:00:00 132.8
1975 1975-01-01 00:00:00 133.6
2013 2013-01-01 00:00:00 143.3

Ну что же сейчас давайте нарисуем самый примитивный график, отображающий динамику роста населения. Сделать это дозволено функцией plot(). У этой функции много параметров, но для простого примера нам хватит задать значение осей x и y и параметра style, тот, что отвечает за жанр. Выглядеть это будет так:

i.plot(x='year',y='PeopleQty',style='k--')

В выводе наш график будет выглядеть так:

При вызове функции plot() в оболочке IPython, график выведется непринужденно в оболочке, что поможет избежать лишнего переключения между окнами. (при применении стандартной оболочки график открылся бы в отдельном окне, что бывает не дюже комфортно). Помимо того, если вы используете IPython через Spyder, дозволено будет выгрузить каждый сеанс в html файл совместно со всеми сформированными графиками.
Сейчас давайте отобразим динамику в виде столбчатой диаграммы. Сделать это дозволено при помощи параметра kind. По умолчанию параметр равен `line`. Дабы сделать диаграмму с вертикальными столбцами необходимо поменять значение этого параметра на `bar`, для горизонтальных столбцов существует значение `barh`. Выходит для горизонтальных столбцов, код будет выглядеть так:

i.plot(y='PeopleQty', kind='bar')

Получившийся график приведен ниже:

Как видно из кода, здесь мы не задаем знач

Источник: programmingmaster.ru
Оставить комментарий
БАЗА ЗНАНИЙ
СЛУЧАЙНАЯ СТАТЬЯ
СЛУЧАЙНЫЙ БЛОГ
СЛУЧАЙНЫЙ МОД
СЛУЧАЙНЫЙ СКИН
НОВЫЕ МОДЫ
НОВЫЕ СКИНЫ
НАКОПЛЕННЫЙ ОПЫТ
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB