In [1]:
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import timeit
import warnings
from itertools import product
warnings.filterwarnings("ignore")
pd.options.mode.chained_assignment = None # default='warn'
In [2]:
from ipyleaflet import (
Map,
Marker,
TileLayer, ImageOverlay,
Polyline, Polygon, Rectangle, Circle, CircleMarker,
GeoJSON,
DrawControl
)
In [3]:
import matplotlib as mpl
import matplotlib.cm
import matplotlib.colors
import numpy as np
def n_colors(n, colormap=mpl.cm.Blues):
data = np.linspace(0.0,1.0,n)
c = [mpl.colors.rgb2hex(d[0:3]) for d in colormap(data)]
return c
def data_to_colors(data, colormap=mpl.cm.Blues):
c = [mpl.colors.rgb2hex(d[0:3]) for d in colormap(mpl.colors.Normalize()(data))]
return c
In [4]:
#Функция возвращает код региона по координатам
#0- когда нет региона
def get_region(lon,lat):
r=0
r=regions.loc[(regions.west<lon)&
(regions.east>lon)&
(regions.south<lat)&
(regions.north>lat)
,'region'].values
if r.shape[0]==0:
return 0
return r[0]
In [5]:
# загружаем данные регионов
regions=pd.read_csv('g:/python_kurs/kurs6/taxi/regions.csv',sep=';')
regions.head(6)
Out[5]:
In [6]:
# загружаем агрегированные данные за май 2016
data=pd.read_csv('g:/python_kurs/kurs6/taxi/data_05_2016.csv')
data.head(6)
Out[6]:
Просуммируйте общее количество поездок такси из каждой географической зоны и посчитайте количество ячеек, из которых в мае не было совершено ни одной поездки.
In [7]:
data_region=data.groupby(by=['region_pickup'],axis=0)[['vcount']].sum().reset_index()
print 'Количество ячеек, из которых в мае не было совершено ни одной поездки ',len(data_region[data_region.vcount==0])
In [8]:
data_region.head()
Out[8]:
In [9]:
#Координаты Empire State Building
lat = 40.748445
lon = -73.985664
region = get_region(lon,lat)
print region
In [10]:
center = [lat, lon]
zoom = 20
In [11]:
mark = Marker(location=center)
In [12]:
#Нарисуйте статическую карту Нью-Йорка. Поставьте на карте точку там, где находится Эмпайр-Стейт-Билдинг.
m = Map(center=center, zoom=zoom)
m += mark
m.dragging=False
m.double_click_zoom=False
m.keyboard=False
m.tap=False
m.touch_zoom=False
m.zoom_control=False
m
Поверх статической карты Нью-Йорка визуализируйте данные о поездках из каждой ячейки так, чтобы цветовая шкала, в которую вы окрашиваете каждую ячейку, показывала суммарное количество поездок такси из неё.
In [13]:
zoom = 10
m = Map(default_tiles=TileLayer(opacity=1.0), center=center, zoom=zoom)
m += mark
m.dragging=False
m.double_click_zoom=False
m.keyboard=False
m.tap=False
m.touch_zoom=False
m.zoom_control=False
In [14]:
colors1 = data_to_colors(data_region['vcount'])
In [15]:
%%time
dr=data_region['region_pickup']
dr=np.arange(1,2500,1)
for region, color in zip(dr, colors1):
#print region,color
r=regions.loc[regions.region==region]
bounds = [(r.north.values[0],r.west.values[0]),
(r.north.values[0],r.east.values[0]),
(r.south.values[0],r.east.values[0]),
(r.south.values[0],r.west.values[0])
]
#print r,bounds
pg = Polygon(locations=bounds, weight=3,
color=color, opacity=0.8, fill_opacity=0.5,
fill_color=color)
m += pg
In [16]:
m