В этом разделе мы будем использовать обновлённый набор данных, чтобы научиться работать с большими объёмами информации. Рассматриваемые данные касаются обращений (или жалоб) жителей по номеру 311. Этот массив представлен ресурсом NYC Open Data; скачать данные.
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (10, 5)
complaints = pd.read_csv('data/311-service-requests.csv')
/usr/local/lib/python3.5/dist-packages/IPython/core/interactiveshell.py:2717: DtypeWarning: Columns (8) have mixed types. Specify dtype option on import or set low_memory=False.
interactivity=interactivity, compiler=compiler, result=result)
В некоторых версиях pandas может появляться предупреждение "DtypeWarning: Columns (8) have mixed types". Это говорит о том, что pandas испытывает трудности с интерпретацией данных. Вероятно, в одной из колонок встречаются записи как текстового, так и числового типа.
На данном этапе мы охотно проигнорируем данное предупреждение, надеясь избежать последствий, но в дальнейшем стоит его исследовать или исправить.
Что за объект? (краткий обзор)
При выводе крупного dataframe отображаются лишь первые несколько строк данных.
Чтобы вывести первые 5 строк dataframe, можно использовать срез: df[:5]
.
complaints[:5]
Выделение строк и столбцов
Чтобы выбрать определённый столбец, его название можно использовать как индекс (подобно ключу в словаре). Пример:
complaints['Complaint Type'][:5]
0 Noise - Street/Sidewalk
1 Illegal Parking
2 Noise - Commercial
3 Noise - Vehicle
4 Rodent
Name: Complaint Type, dtype: object
Это работает независимо от порядка действия - можно взять как первые 5 строк определённого столбца, так и столбец из первых 5 строк.
complaints[:5]['Complaint Type']
0 Noise - Street/Sidewalk
1 Illegal Parking
2 Noise - Commercial
3 Noise - Vehicle
4 Rodent
Name: Complaint Type, dtype: object
Выбор нескольких столбцов
Что, если мы заинтересованы только в типе жалобы и районе? Остальные данные для нас неактуальны. С помощью Pandas можно легко выделить подмножество столбцов, используя список их названий.
complaints[:5][['Complaint Type', 'Borough']]
Рассмотрим первые 10 записей:
complaints[['Complaint Type', 'Borough']][:10]
Какой вид жалобы встречается чаще всего?
Насколько просто решить эту задачу с pandas! Применим метод .value_counts() для анализа:
complaints['Complaint Type'].value_counts()
HEATING 14200
GENERAL CONSTRUCTION 7471
Street Light Condition 7117
DOF Literature Request 5797
PLUMBING 5373
PAINT - PLASTER 5149
Blocked Driveway 4590
NONCONST 3998
Street Condition 3473
Illegal Parking 3343
Noise 3321
Traffic Signal Condition 3145
Dirty Conditions 2653
Water System 2636
Noise - Commercial 2578
ELECTRIC 2350
Broken Muni Meter 2070
Noise - Street/Sidewalk 1928
Sanitation Condition 1824
Rodent 1632
Sewer 1627
Taxi Complaint 1227
Consumer Complaint 1227
Damaged Tree 1180
Overgrown Tree/Branches 1083
Missed Collection (All Materials) 973
Graffiti 973
Building/Use 942
Root/Sewer/Sidewalk Condition 836
Derelict Vehicle 803
...
Fire Alarm - Modification 5
Posting Advertisement 5
Internal Code 5
Poison Ivy 5
Miscellaneous Categories 5
Ferry Complaint 4
Transportation Provider Complaint 4
Special Natural Area District (SNAD) 4
Illegal Animal Sold 4
Illegal Fireworks 3
Invitation 3
Fire Alarm - Replacement 3
Adopt-A-Basket 3
Misc. Comments 2
Legal Services Provider Complaint 2
DFTA Literature Request 2
Opinion for the Mayor 2
Public Assembly 2
Window Guard 2
Tunnel Condition 1
Snow 1
X-Ray Machine/Equipment 1
Stalled Sites 1
Municipal Parking Facility 1
Open Flame Permit 1
Trans Fat 1
Ferry Permit 1
DWD 1
Highway Sign - Damaged 1
DHS Income Savings Requirement 1
Name: Complaint Type, dtype: int64
Топ-10 наиболее часто встречающихся жалоб:
complaint_counts = complaints['Complaint Type'].value_counts()
complaint_counts[:10]
HEATING 14200
GENERAL CONSTRUCTION 7471
Street Light Condition 7117
DOF Literature Request 5797
PLUMBING 5373
PAINT - PLASTER 5149
Blocked Driveway 4590
NONCONST 3998
Street Condition 3473
Illegal Parking 3343
Name: Complaint Type, dtype: int64
Давайте создадим графическое представление данных!
complaint_counts[:10].plot(kind='bar')