Добавить в корзинуПозвонить
Найти в Дзене
Python Lounge

Анализ данных с помощью pandas. Часть 2: Выбор данных и нахождение наиболее частых жалоб

В этой части мы будем использовать новый набор данных, чтобы показать, как быть с большими объёмами данных. Это данные о 311 сервисных запросов (или жалоб) жителей, предоставленные NYC Open Data (скачать данные). In [1]: %matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (10, 5) In [2]: 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 столкнулся с проблемой чтения в наших данных. В нашем случае это почти наверняка означает, что данные имеют столбцы, где некоторые записи являются строками, а некоторые представляют собой це
Оглавление

В этой части мы будем использовать новый набор данных, чтобы показать, как быть с большими объёмами данных. Это данные о 311 сервисных запросов (или жалоб) жителей, предоставленные NYC Open Data (скачать данные).

In [1]:

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

plt.style.use('ggplot')

plt.rcParams['figure.figsize'] = (10, 5)

In [2]:

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].

In [3]:

complaints[:5]

Выбор строк и столбцов

Чтобы выбрать столбец, мы берём имя столбца в качестве индекса (как в словаре), например так:

In [4]:

complaints['Complaint Type'][:5]

Out[4]:

0 Noise - Street/Sidewalk
1 Illegal Parking
2 Noise - Commercial
3 Noise - Vehicle
4 Rodent
Name: Complaint Type, dtype: object

неважно, в каком порядке мы это сделаем (взять первые 5 строк у столбца или столбец у первых 5 строк)

In [5]:

complaints[:5]['Complaint Type']
Out[5]:
0 Noise - Street/Sidewalk
1 Illegal Parking
2 Noise - Commercial
3 Noise - Vehicle
4 Rodent
Name: Complaint Type, dtype: object

Выбор нескольких столбцов

Что если мы хотим знать только тип жалобы и район, а остальное нам неинтересно? Pandas позволяет легко выбрать подмножество столбцов: просто проиндексируйте списком столбцов.

Какой самый частый тип жалобы?

Это очень простой вопрос для pandas! Используем метод .value_counts():

In [8]:

complaints['Complaint Type'].value_counts()

Out[8]:

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 наиболее частых типов:

In [9]:

complaint_counts = complaints['Complaint Type'].value_counts()
complaint_counts[:10]

Out[9]:

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

Теперь мы можем построить график!

In [10]:

complaint_counts[:10].plot(kind='bar')

Out[10]:

-2