Таблицы
Таблица — это базовый тип объекта для представления набора данных. Таблицу можно рассматривать двумя способами:
Чтобы использовать таблицы, импортируйте все модули с именем datascience
, которые были созданы для этой статьи.
from datascience import *
Пустую таблицу можно создать с помощью Table
. Пустые таблицы полезны, потому что их можно расширить, чтобы они содержали новые строки и столбцы.
Table()
Метод with_columns
таблицы использует столбцы с метками для создания новой таблицы. Каждый столбец таблицы представляет собой массив. Чтобы добавить новый столбец в таблицу, используйте метку и массив при вызове with_column
. (Метод with_column
имеет тот же эффект.)
Начнём с пустой таблицы без столбцов.
Table().with_columns('Number of petals', make_array(8, 34, 5))
Number of petals |
---|
8 |
34 |
5 |
Чтобы добавить два (или более) новых столбца, предоставьте массив и метку для каждого столбца. Все столбцы должны иметь одинаковую длину, иначе будет выдана ошибка.
Table().with_columns(
'Number of petals', make_array(8, 34, 5),
'Name', make_array('lotus', 'sunflower', 'rose')
)
Number of petals | Name |
---|---|
8 | lotus |
34 | sunflower |
5 | rose |
Мы можем дать этой таблице имя, а затем использовать другой столбец для её расширения.
flowers = Table().with_columns(
'Number of petals', make_array(8, 34, 5),
'Name', make_array('lotus', 'sunflower', 'rose')
)
flowers.with_columns(
'Color', make_array('pink', 'yellow', 'red')
)
Number of petals | Name | Color |
---|---|---|
8 | lotus | pink |
34 | sunflower | yellow |
5 | rose | red |
Каждый раз, когда вызывается метод with_columns
, создаётся новая таблица, поэтому исходная таблица не изменяется. Например, таблица an_example
по-прежнему имеет только два столбца, которые она имела при создании.
flowers
Number of petals | Name |
---|---|
8 | lotus |
34 | sunflower |
5 | rose |
Создание таблиц таким способом требует большого количества ввода. Если данные уже введены где-то ещё, обычно можно использовать Python для чтения их в таблицу вместо того, чтобы вводить их по одному элементу за раз.
Обычно таблицы создаются из файлов, содержащих значения, разделённые запятыми. Эти файлы называются CSV-файлами.
Теперь мы используем метод read_table
класса Table
, чтобы прочитать CSV-файл, содержащий некоторые данные, которые использовал Минар на своей картине о русской кампании Наполеона. Данные помещаются в таблицу с именем minard
.
minard = Table.read_table('minard.csv')
minard
Longitude | Latitude | City | Direction | Survivors |
---|---|---|---|---|
32 | 54.8 | Smolensk | Advance | 145000 |
33.2 | 54.9 | Dorogobouge | Advance | 140000 |
34.4 | 55.5 | Chjat | Advance | 127100 |
37.6 | 55.8 | Moscou | Advance | 100000 |
34.3 | 55.2 | Wixma | Retreat | 55000 |
32 | 54.6 | Smolensk | Retreat | 24000 |
30.4 | 54.4 | Orscha | Retreat | 20000 |
26.8 | 54.3 | Moiodexno | Retreat | 12000 |
Эти небольшие таблицы будут использоваться для демонстрации некоторых полезных методов работы с таблицами. Затем мы будем использовать эти же методы и разработаем другие методы на больших наборах данных.
Метод num_columns
возвращает количество столбцов в таблице, а num_rows
— количество строк.
minard.num_columns
5
minard.num_rows
8
Метод labels
можно использовать для перечисления меток всех столбцов. Для minard
это не особенно полезно, но для очень больших таблиц не все столбцы могут быть видны на экране.
minard.labels
('Longitude', 'Latitude', 'City', 'Direction', 'Survivors')
Мы используем relabeled
для изменения метки столбца. Это создаст новую таблицу и сохранит minard
без изменений.
minard.relabeled('City', 'City Name')
Longitude | Latitude | City Name | Direction | Survivors |
---|---|---|---|---|
32 | 54.8 | Smolensk | Advance | 145000 |
33.2 | 54.9 | Dorogobouge | Advance | 140000 |
34.4 | 55.5 | Chjat | Advance | 127100 |
37.6 | 55.8 | Moscou | Advance | 100000 |
34.3 | 55.2 | Wixma | Retreat | 55000 |
32 | 54.6 | Smolensk | Retreat | 24000 |
30.4 | 54.4 | Orscha | Retreat | 20000 |
26.8 | 54.3 | Moiodexno | Retreat | 12000 |
Однако этот метод не изменяет исходную таблицу.
minard
Longitude | Latitude | City | Direction | Survivors |
---|---|---|---|---|
32 | 54.8 | Smolensk | Advance | 145000 |
33.2 | 54.9 | Dorogobouge | Advance | 140000 |
34.4 | 55.5 | Chjat | Advance | 127100 |
37.6 | 55.8 | Moscou | Advance | 100000 |
34.3 | 55.2 | Wixma | Retreat | 55000 |
32 | 54.6 | Smolensk | Retreat | 24000 |
30.4 | 54.4 | Orscha | Retreat | 20000 |
26.8 | 54.3 | Moiodexno | Retreat | 12000 |
Обычной практикой является присвоение исходного имени minard
новой таблице, чтобы все будущие использования minard
ссылались на таблицу с изменёнными метками.
minard = minard.relabeled('City', 'City Name')
minard
Longitude | Latitude | City Name | Direction | Survivors |
---|---|---|---|---|
32 | 54.8 | Smolensk | Advance | 145000 |
33.2 | 54.9 | Dorogobouge | Advance | 140000 |
34.4 | 55.5 | Chjat | Advance | 127100 |
37.6 | 55.8 | Moscou | Advance | 100000 |
34.3 | 55.2 | Wixma | Retreat | 55000 |
32 | 54.6 | Smolensk |
Этот текст написан на языке Python. Доступ к данным в столбцах
Мы можем использовать метки столбцов для доступа к массиву данных в столбце.
minard.column('Survivors')
array([145000, 140000, 127100, 100000, 55000, 24000, 20000, 12000])
Пять столбцов имеют индексы 0
, 1
, 2
, 3
, 4
. Доступ к столбцу Survivors
также можно получить с помощью индекса столбца.
minard.column(4)
array([145000, 140000, 127100, 100000, 55000, 24000, 20000, 12000])
Восемь элементов массива имеют индексы от 0
до 7
. Элементы столбца можно получить с помощью метода item
.
minard.column(4).item(0)
145000
minard.column(4).item(5)
24000
Обработка данных в столбцах
Поскольку столбцы представляют собой массивы, мы можем использовать операции над массивами для получения новой информации. Например, мы можем создать новый столбец, содержащий процент выживших после Смоленска для каждого города.
initial = minard.column('Survivors').item(0)
minard = minard.with_columns(
'Percent Surviving', minard.column('Survivors')/initial
)
minard
Долгота | Широта | Название города | Направление | Выжившие | Процент выживших |
---|---|---|---|---|---|
32 | 54.8 | Смоленск | Наступление | 145 000 | 100.00% |
33.2 | 54.9 | Дорогобуж | Наступление | 140 000 | 96.55% |
34.4 | 55.5 | Чать | Наступление | 127 100 | 87.66% |
37.6 | 55.8 | Москва | Наступление | 100 000 | 68.97% |
34.3 | 55.2 | Вихма | Отступление | 55 000 | 37.93% |
32 | 54.6 | Смоленск | Отступление | 24 000 | 16.55% |
30.4 | 54.4 | Орша | Отступление | 20 000 | 13.79% |
26.8 | 54.3 | Мойодэкно | Отступление | 12 000 | 8.28% |
Чтобы отобразить проценты в виде процентов, мы используем опцию PercentFormatter
и вызываем метод set_format
. Метод set_format
принимает объект Formatter
, который может быть объектом DateFormatter
, CurrencyFormatter
, числовым или процентным.
minard.set_format('Percent Surviving', PercentFormatter)
Долгота | Широта | Название города | Направление | Выжившие | Процент выживших |
---|---|---|---|---|---|
32 | 54.8 | Смоленск | Наступление | 145 000 | 100.00% |
33.2 | 54.9 | Дорогобуж | Наступление | 140 000 | 96.55% |
34.4 | 55.5 | Чать | Наступление | 127 100 | 87.66% |
37.6 | 55.8 | Москва | Наступление | 100 000 | 68.97% |
34.3 | 55.2 | Вихма | Отступление | 55 000 | 37.93% |
32 | 54.6 | Смоленск | Отступление | 24 000 | 16.55% |
30.4 | 54.4 | Орша | Отступление | 20 000 | 13.79% |
26.8 | 54.3 | Мойодэкно | Отступление | 12 000 | 8.28% |
Выбор подмножества столбцов
Метод select
создаёт новую таблицу, содержащую только указанные столбцы.
minard.select('Longitude', 'Latitude')
Долгота | Широта |
---|---|
32 | 54.8 |
33.2 | 54.9 |
34.4 | 55.5 |
37.6 | 55.8 |
34.3 | 55.2 |
32 | 54.6 |
30.4 | 54.4 |
26.8 | 54.3 |
Используя индекс столбца вместо метки, можно выполнить тот же выбор.
minard.select(0, 1)
Долгота | Широта |
---|---|
32 | 54.8 |
33.2 | 54.9 |
34.4 | 55.5 |
37.6 | 55.8 |
34.3 | 55.2 |
32 | 54.6 |
30.4 | 54.4 |
26.8 | 54.3 |
Результат метода select
— это новая таблица, даже если вы выбираете один столбец.
minard.select('Survivors')
Выжившие |
---|
145 000 |
140 000 |
127 100 |
100 000 |
55 000 |
24 000 |
20 000 |
12 000 |
Обратите внимание, что результат представляет собой таблицу, а не массив, как в случае с методом column
.
minard.column('Survivors')
array([145000, 140000, 127100, 100000, 55000, 24000, 20000, 12000])
Другой способ создания новой таблицы, содержащей подмножество столбцов, — это удаление столбцов, которые вам не нужны.
minard.drop('Longitude', 'Latitude', 'Direction')
Название города | Выжившие | Процент выживших |
---|---|---|
Смоленск | 145 000 | 100.00% |
Дорогобуж | 140 000 | 96.55% |
Чать | 127 100 | 87.66% |
Москва | 100 000 | 68.97% |
Вихма | 55 000 | 37.93% |
Смоленск | 24 000 | 16.55% |
Орша | 20 000 | 13.79% |
Мойодэкно | 12 000 | 8.28% |
Методы select
и drop
не изменяют исходную таблицу. Напротив, они создают новые небольшие таблицы с общим набором данных. Исходная таблица остаётся полезной! Вы можете создавать множество различных таблиц, рассматривая только определённые столбцы, не беспокоясь о взаимном влиянии.
minard
Долгота | Широта | Название города | Направление | Выжившие | Процент выживших |
---|---|---|---|---|---|
32 | 54.8 | Смоленск | Наступление | 145 000 | 100.00% |
33.2 | 54.9 | Дорогобуж | Наступление | 140 000 | 96.55% |
34.4 | 55.5 | Чать | Наступление | 127 100 | 87.66% |
37.6 | 55.8 | Москва | Наступление | 100 000 | 68.97% |
34.3 | 55.2 | Вихма | Отступление | 55 000 | 37.93% |
32 | 54.6 | Смоленск | Отступление | 24 000 | 16.55% |
30.4 | 54.4 | Орша | Отступление | 20 000 | 13.79% |
26.8 | 54.3 | Мойодэкно | Отступление | 12 000 | 8.28% |
Все методы, которые мы использовали, могут быть применены к любой таблице. ascending order.
distinct
: если True, повторные значения в column_or_label
будут опущены.
Возвращает: экземпляр Table
, содержащий строки, отсортированные на основе значений в column_or_label
.
marbles = Table().with_columns( ... "Цвет", make_array("Красный", "Зелёный", "Синий", "Красный", "Зелёный", "Зелёный"), ... "Форма", make_array("Круглая", "Прямоугольная", "Прямоугольная", "Круглая", "Прямоугольная", "Круглая"), ... "Количество", make_array(4, 6, 12, 7, 9, 2), ... "Цена", make_array(1.30, 1.30, 2.00, 1.75, 1.40, 1.00)) marbles Цвет | Форма | Количество | Цена Красный | Круглая | 4 | 1.3 Зелёный | Прямоугольная | 6 | 1.3 Синий | Прямоугольная | 12 | 2 Красный | Круглая | 7 | 1.75 Зелёный | Прямоугольная | 9 | 1.4 Зелёный | Круглая | 2 | 1 marbles.sort("Количество") Цвет | Форма | Количество | Цена Зелёный | Круглая | 2 | 1 Красный | Круглая | 4 | 1.3 Зелёный | Прямоугольная | 6 | 1.3 Красный | Круглая | 7 | 1.75 Зелёный | Прямоугольная | 9 | 1.4 Синий | Прямоугольная | 12 | 2 marbles.sort("Количество", descending = True) Цвет | Форма | Количество | Цена Синий | Прямоугольная | 12 | 2 Зелёный | Прямоугольная | 9 | 1.4 Красный | Круглая | 7 | 1.75 Зелёный | Прямоугольная | 6 | 1.3 Красный | Круглая | 4 | 1.3 Зелёный | Круглая | 2 | 1 marbles.sort(3) # столбец «Цена» Цвет | Форма | Количество | Цена Зелёный | Круглая | 2 | 1 Красный | Круглая | 4 | 1.3 Зелёный | Прямоугольная | 6 | 1.3 Зелёный | Прямоугольная | 9 | 1.4 Красный | Круглая | 7 | 1.75 Синий | Прямоугольная | 12 | 2 marbles.sort(3, distinct = True) Цвет | Форма | Количество | Цена Зелёный | Круглая | 2 | 1 Красный | Круглая | 4 | 1.3 Зелёный | Прямоугольная | 9 | 1.4 Красный | Круглая | 7 | 1.75 Синий | Прямоугольная | 12 | 2 В таблице
help
в верхней части появляется сигнатура методаsort
.
sort(column_or_label, descending=False, distinct=False)
Это описывает три параметра позиции, имя и значение по умолчанию для sort
. При вызове этого метода можно использовать позиционные или именованные параметры, поэтому следующие три вызова полностью эквивалентны.
sort('SALARY', True)
sort('SALARY', descending=True)
sort(column_or_label='SALARY', descending=True)
Когда параметр является просто True
или False
, включение имени параметра является полезным соглашением, чтобы более явно указать значение параметра.
Обычно мы хотим извлечь только те строки, которые соответствуют определённому признаку. Например, нам могут понадобиться только строки, соответствующие воинам, или строки с зарплатой более миллиона долларов. Или мы можем захотеть только первые пять человек по зарплате.
Методы Table
делают это — им нужен набор указанных строк. Его параметром является индекс строки или массив индексов, он создаёт новую таблицу, содержащую только эти строки.
Например, если мы хотим только первую строку nba
, мы можем использовать take
.
PLAYER |
POSITION |
TEAM |
'15-'16 SALARY |
---|---|---|---|
Paul Millsap | PF | Atlanta Hawks | 18.6717 |
Al Horford | C | Atlanta Hawks | 12 |
Tiago Splitter | C | Atlanta Hawks | 9.75625 |
Jeff Teague | PG | Atlanta Hawks | 8 |
Kyle Korver | SG | Atlanta Hawks | 5.74648 |
Thabo Sefolosha | SF | Atlanta Hawks | 4 |
Mike Scott | PF | Atlanta Hawks | 3.33333 |
Kent Bazemore | SF | Atlanta Hawks | 2 |
Dennis Schroder | PG | Atlanta Hawks | 1.7634 |
Tim Hardaway Jr. | SG | Atlanta Hawks | 1.30452 |
(опущено 407 строк)
nba.take(0)
PLAYER |
POSITION |
TEAM |
'15-'16 SALARY |
---|---|---|---|
Paul Millsap | PF | Atlanta Hawks | 18.6717 |
Это новая таблица, содержащая только указанную нами единственную строку.
Указывая ряд индексов в качестве параметра, мы также можем получить четвёртую, пятую и шестую строки.
nba.take(np.arange(3, 6))
PLAYER |
POSITION |
TEAM |
'15-'16 SALARY |
---|---|---|---|
Jeff Teague | PG | Atlanta Hawks | 8 |
Kyle Korver | SG | Atlanta Hawks | 5.74648 |
Thabo Sefolosha | SF | Atlanta Hawks | 4 |
Если мы хотим первые пять строк самых высокооплачиваемых игроков, мы можем сначала отсортировать по зарплате, а затем взять первые пять строк:
nba.sort('SALARY', descending=True).take(np.arange(5))
PLAYER |
POSITION |
TEAM |
'15-'16 SALARY |
---|---|---|---|
Kobe Bryant | SF | Los Angeles Lakers | 25 |
Joe Johnson | SF | Brooklyn Nets | 24.8949 |
LeBron James | SF | Cleveland Cavaliers | 22.9705 |
Carmelo Anthony | SF | New York Knicks | 22.875 |
Dwight Howard | C | Houston Rockets | 22.3594 |
Метод where
может это сделать. Его вывод представляет собой таблицу, столбцы которой совпадают с исходной таблицей, но только строки с указанным признаком.
Первый параметр метода where
— это ярлык столбца, содержащего информацию о том, имеет ли строка интересующий нас признак. Если признак — «зарплата больше 10», то столбец будет SALARY
.
Второй параметр метода where
определяет способ указания признака. Некоторые примеры делают указанный способ более понятным.
В первом примере мы извлекаем данные обо всех игроках с зарплатой свыше 100 млн долларов.
nba.where('SALARY', are.above(10))
PLAYER | POSITION | TEAM | '15-'16 SALARY |
---|---|---|---|
Paul Millsap | PF | Atlanta Hawks | 18.6717 |
Al Horford | C | Atlanta Hawks | 12 |
Joe Johnson | SF | Brooklyn Nets | 24.8949 |
Thaddeus Young | PF | Brooklyn Nets | 11.236 |
Al Jefferson | C | Charlotte Hornets | 13.5 |
Nicolas Batum | SG | Charlotte Hornets | 13.1253 |
Kemba Walker | PG | Charlotte Hornets | 12 |
Derrick Rose | PG | Chicago Bulls | 20.0931 |
Jimmy Butler | SG | Chicago Bulls | 16.4075 |
Joakim Noah | C | Chicago Bulls | 13.4 |
(опущено 59 строк)
Параметр are.above(10)
гарантирует, что зарплата каждой выбранной строки превышает 10.
Новая таблица содержит 69 строк, что соответствует 69 игрокам с зарплатой в 100 млн. Последовательность этих строк облегчает анализ данных. Самый «бедный» игрок в этой группе (с зарплатой выше 100 млн) — Демар Дерозан из команды «Торонто Рэпторс».
nba.where('SALARY', are.above(10)).sort('SALARY')
PLAYER | POSITION | TEAM | '15-'16 SALARY |
---|---|---|---|
DeMar DeRozan | SG | Toronto Raptors | 10.05 |
Gerald Wallace | SF | Philadelphia 76ers | 10.1059 |
Luol Deng | SF | Miami Heat | 10.1516 |
Monta Ellis | SG | Indiana Pacers | 10.3 |
Wilson Chandler | SF | Denver Nuggets | 10.4494 |
Brendan Haywood | C | Cleveland Cavaliers | 10.5225 |
Jrue Holiday | PG | New Orleans Pelicans | 10.5955 |
Tyreke Evans | SG | New Orleans Pelicans | 10.7346 |
Marcin Gortat | C | Washington Wizards | 11.2174 |
Thaddeus Young | PF | Brooklyn Nets | 11.236 |
(опущено 59 строк)
Сколько зарабатывает Стивен Карри? Чтобы ответить на этот вопрос, нам нужно обратиться к строке, где значение в столбце PLAYER
равно Stephen Curry
. Это таблица, состоящая только из одной строки:
nba.where('PLAYER', are.equal_to('Stephen Curry'))
PLAYER | POSITION | TEAM | '15-'16 SALARY |
---|---|---|---|
Stephen Curry | PG | Golden State Warriors | 11.3708 |
Зарплата Карри составляет менее 11,4 млн долларов. Это большие деньги, но меньше половины зарплаты Леброна Джеймса. Вы можете найти зарплату в таблице «Топ-5» в начале этого раздела или вы можете найти её в коде выше, заменив 'Stephen Curry
на 'LeBron James'
.
Код снова использует are
, но на этот раз это предикат equal_to
, а не тот, который использовался ранее. Таким образом, например, вы можете получить таблицу со всеми воинами:
nba.where('TEAM', are.equal_to('Golden State Warriors')).show()
PLAYER | POSITION | TEAM | '15-'16 SALARY |
---|---|---|---|
Klay Thompson | SG | Golden State Warriors | 15.501 |
Draymond Green | PF | Golden State Warriors | 14.2609 |
Andrew Bogut | C | Golden State Warriors | 13.8 |
Andre Iguodala | SF | Golden State Warriors | 11.7105 |
Stephen Curry | PG | Golden State Warriors | 11.3708 |
Jason Thompson | PF | Golden State Warriors | 7.00847 |
Shaun Livingston | PG | Golden State Warriors | 5.54373 |
Harrison Barnes | SF | Golden State Warriors | 3.8734 |
Marreese Speights | C | Golden State Warriors | 3.815 |
Leandro Barbosa | SG | Golden State Warriors | 2.5 |
Festus Ezeli | C | Golden State Warriors | 2.00875 |
Brandon Rush | SF | Golden State Warriors | 1.27096 |
Kevon Looney | SF | Golden State Warriors | 1.13196 |
Anderson Varejao | PF | Golden State Warriors | 0.289755 |
Эта часть таблицы уже упорядочена по зарплате, потому что исходная таблица была упорядочена по зарплате и показывает игроков одной команды. Метод .show()
в конце строки гарантирует отображение всех строк, а не только первых 10 строк.
Запрос строки, в которой значение столбца равно определённому значению, очень распространён, поэтому вызов are.equal_to
является необязательным. Напротив, можно использовать только имя столбца и значение для вызова метода where
, чтобы достичь того же эффекта.
nba.where('TEAM', 'Denver Nuggets')
# эквивалентно nba.where('TEAM', are.equal_to('Denver Nuggets'))
PLAYER | POSITION | TEAM | '15-'16 SALARY |
---|---|---|---|
Danilo Gallinari | SF | Denver Nuggets | 14 |
Kenneth Faried | PF | Denver Nuggets | 11.236 |
Wilson Chandler | SF | Denver Nuggets | 10.4494 |
JJ Hickson | C | Denver Nuggets | 5.6135 |
Jameer Nelson | PG | Denver Nuggets | 4.345 |
Will Barton | SF | Denver Nuggets | 3.53333 |
Emmanuel Mudiay | PG | Denver Nuggets | 3.10224 |
Darrell Arthur | PF | Denver Nuggets | 2.814 |
Jusuf Nurkic | C | Denver Nuggets | 1.842 |
Joffrey Lauvergne | C | Denver Nuggets | 1.70972 |
(пропущено 4 строки)
Используя метод where
несколько раз, вы можете получать доступ к строкам, которые имеют несколько указанных признаков. Например, это один из способов извлечения данных всех защитников с зарплатой более 150 млн долларов. | Игрок | Позиция | Команда | Зарплата 2015-2016 |
| --- | --- | --- | --- |
| Деррик Роуз | PG | Чикаго Буллз | 20.0931 |
| Кайри Ирвинг | PG | Кливленд Кавальерс | 16.4075 |
| Крис Пол | PG | Лос-Анджелес Клипперс | 21.4687 |
| Рассел Уэстбрук | PG | Оклахома-Сити Тандер | 16.7442 |
| Джон Уолл | PG | Вашингтон Уизардс | 15.852 |
Общая форма
Теперь вы уже осознали, что для создания новой таблицы с использованием метода where
и are
, а также соответствующих условий, необходимо выбрать строки с заданными характеристиками:
original_table_name.where(column_label_string, are.condition)
nba.where('SALARY', are.between(10, 10.3))
Игрок | Позиция | Команда | Зарплата 2015–2016 |
---|---|---|---|
Луол Денг | SF | Майами Хит | 10.1516 |
Джеральд Уоллес | SF | Филадельфия Севенти Сиксерс | 10.1059 |
Дэнни Грин | SG | Сан-Антонио Спёрс | 10 |
Демар Дерозан | SG | Торонто Рэпторс | 10.05 |
Обратите внимание, что в таблице выше есть игрок Дэнни Грин, который заработал миллион долларов, но нет игрока Монты Эллиса, заработавшего 1,3 миллиона долларов. Как и в других местах Python, диапазон включает левую границу, но не включает правую.
Если мы укажем условие, которое не выполняется ни для одной строки, то получим таблицу с заголовками столбцов, но без строк.
nba.where('PLAYER', are.equal_to('Barack Obama'))
PLAYER | POSITION | TEAM | SALARY |
---|---|---|---|
Дополнительные условия
Вот некоторые предикаты, которые могут оказаться полезными. Обратите внимание, что x
и y
— это числа, STRING
— строка, а Z
может быть числом или строкой; вы должны указать их в зависимости от того, какой атрибут вы хотите использовать.
Предикат | Описание |
---|---|
are.equal_to(Z) |
Равно Z
|
are.above(x) |
Больше x
|
are.above_or_equal_to(x) |
Больше или равно x
|
are.below(x) |
Меньше x
|
are.below_or_equal_to(x) |
Меньше или равно x
|
are.between(x, y) |
Больше или равно x , меньше y
|
are.strictly_between(x, y) |
Больше x , меньше y
|
are.between_or_equal_to(x, y) |
Больше или равно x , меньше или равно y
|
are.containing(S) |
Содержит строку S
|
Вы также можете указать отрицание любого из этих условий, добавив .not_
перед условием.
Предикат | Описание |
---|---|
are.not_equal_to(Z) |
Не равно Z
|
are.not_above(x) |
Не больше x
|
И так далее. Обычно применяются обычные логические правила, например, «не больше x
» эквивалентно «меньше или равно x
».
Мы завершим этот раздел серией примеров.
Использование are.containing
помогает сократить количество набираемых символов. Например, вы можете указать Warriors
, а не Golden State Warriors
:
nba.where('TEAM', are.containing('Warriors')).show()
Игрок | Позиция | Команда | Зарплата 2015–2016 |
---|---|---|---|
Клэй Томпсон | SG | Голден Стэйт Уорриорз | 15,501 |
Дрэймонд Грин | PF | Голден Стэйт Уорриорз | 14,2609 |
Эндрю Богут | C | Голден Стэйт Уорриорз | 13,8 |
Андре Игудала | SF | Голден Стэйт Уорриорз | 11,7105 |
Стивен Карри | PG | Голден Стэйт Уорриорз | 11,3708 |
Джейсон Томпсон | PF | Голден Стэйт Уорриорз | 7,00847 |
Шон Ливингстон | PG | Голден Стэйт Уорриорз | 5,54373 |
Харрисон Барнс | SF | Голден Стэйт Уорриорз | 3,8734 |
Маррис Спейтс | C | Голден Стэйт Уорриорз | 3,815 |
Леандро Барбоза | SG | Голден Стэйт Уорриорз | 2,5 |
Фестус Эзели | C | Голден Стэйт Уорриорз | 2,00875 |
Брэндон Раш | SF | Голден Стэйт Уорриорз | 1,27096 |
Кевон Лунни | SF | Голден Стэйт Уорриорз | 1,13196 |
Андерсон Варежао | PF | Голден Стэйт Уорриорз | 0,289755 |
Можно извлечь данные всех защитников, включая разыгрывающих защитников и атакующих защитников.
nba.where('POSITION', are.containing('G'))
Игрок | Позиция | Команда | Зарплата 2015–2016 |
---|---|---|---|
Джефф Тиг | PG | Атланта Хоукс | 8 |
Кайл Корвер | SG | Атланта Хоукс | 5,74648 |
Деннис Шрёдер | PG | Атланта Хоукс | 1,7634 |
Тим Хардуэй-младший | SG | Атланта Хоукс | 1,30452 |
Джейсон Ричардсон | SG | Атланта Хоукс | 0,947276 |
Ламар Паттерсон | SG | Атланта Хоукс | 0,525093 |
Терран Петтуэй | SG | Атланта Хоукс | 0,525093 |
Эйвери Брэдли | PG | Бостон Селтикс | 7,73034 |
Айзея Томас | PG | Бостон Селтикс | 6,91287 |
Маркус Смарт | PG | Бостон Селтикс | 3,43104 |
(Опущено 171 строка)
Вы можете получить всех игроков, кроме тех, кто играет за команду Кливленд Кавальерс, и чья зарплата составляет не менее двух миллионов долларов:
other_than_Cavs = nba.where('TEAM', are.not_equal_to('Cleveland Cavaliers'))
other_than_Cavs.where('SALARY', are.not_below(20))
Игрок | Позиция | Команда | Зарплата 2015–2016 |
---|---|---|---|
Джо Джонсон | SF | Бруклин Нетс | 24,8949 |
Деррик Роуз | PG | Чикаго Буллз | 20,0931 |
Дуайт Ховард | C | Хьюстон Рокетс | 22,3594 |
Крис Пол | PG | Лос-Анджелес Клипперс | 21,4687 |
Коби Брайант | SF | Лос-Анджелес Лейкерс | 25 |
Криса Боша | PF | Майами Хит | 22,1927 |
Дуэйна Уэйда | SG | Майами Хит | 20 |
Кармело Энтони | SF | Нью-Йорк Никс | Если вы хотите узнать, сколько людей пожилого возраста, вы можете использовать Python для обнаружения: |
males.where('AGE', are.between(98, 100))
SEX | AGE | 2014 |
---|---|---|
1 | 98 | 13518 |
1 | 99 | 8951 |
females.where('AGE', are.between(98, 100))
SEX | AGE | 2014 |
---|---|---|
2 | 98 | 46208 |
2 | 99 | 32517 |
На рисунке ниже показано соотношение полов в зависимости от возраста. Синяя кривая показывает соотношение на 2014 год в зависимости от возраста.
От 0 до 60 лет это соотношение примерно равно 1 (что означает, что мужчин и женщин примерно поровну), но начиная с 65 лет оно начинает резко увеличиваться (женщин больше, чем мужчин).
В США женщин больше, чем мужчин, отчасти из-за значительного гендерного дисбаланса среди пожилых женщин.
ratios.plot('AGE')
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )