Original size 853x1280

Такси в NYC

PROTECT STATUS: not protected
The project is taking part in the competition

Мой проект по применению программирования в креативных индустриях посвящен анализу данных о такси в Нью-Йорке.

Такси — неотъемлемая часть крупных и динамичных городов во всем мире, так как этот вид транспортных услуг экономит много времени и сил. Исследование данных такси мне показалось интересно тем, что уникальные маршруты и поездки людей в одном из самых насыщенных по ритму жизни городов планеты могут позволить визуализировать Нью-Йорк как целую живую и неравномерную систему, узнать особенности и контрасты районов, а также отразить реальную городскую среду.

Для визуализации данных я планирую использовать следующие типы графиков: 1. Геопространственная карта плотности (хлороплентная) 2. Столбчатая диаграмма 3. Пузырьковая диаграмма 4. Линейный график 5. График распределения

Стилизация визуала

big
Original size 2640x432

Для работы я импортировала библиотеки pandas и numpy для анализа данных, geopandas для работы с географией, folium и branca.colormap для создания интерактивной карты, matplotlib для построения графиков, а также csv-файл с информацией о поездках такси. Дополнительно использова json с границами зон такси Нью-Йорка.

import numpy as np import pandas as pd import geopandas as gpd import folium from branca.colormap import linear import matplotlib.pyplot as plt import json

df = pd.read_csv («taxi_tripdata.csv») zones = gpd.read_file («NYC Taxi Zones.geojson»)

1. Интерактивная карта интенсивности поездок

Original size 2186x1306

Сначала я обобщила данные о поездках по зонам посадки пассажиров, и для каждой из них было подсчитано количество поездок такси.

pickups = df.groupby («pulocationid»).size ().reset_index (name="pickups»)

Затем я объединила данные о количестве поездок с географическими данными зон города, а для улучшения визуального восприятия я ограничила экстремальные значения и применила логарифмическое преобразование.

p99 = zones[«pickups»].quantile (0.99) zones[«pickups_vis»] = np.log1p (zones[«pickups»].clip (0, p99))

После этого я построила интерактивную карту, где цвет зоны показывает интенсивность поездок.

folium.GeoJson ( zones, style_function=style_fn, tooltip=folium.GeoJsonTooltip (fields=[«borough», «zone», «pickups»]) ).add_to (m)

0

Код для анализа датасета и создания карты

Original size 1280x688

Код для аналитической визуализации

2. Столбчатая диаграмма

Original size 2380x1368

Чтобы понять, в каких районах такси используют чаще всего, я сгруппировала поездки по боро и посчитала их количество.

counts = df[«borough»].value_counts ()

Затем я задала порядок районов, чтобы диаграмма выглядела логично.

counts = counts.reindex ([«Manhattan», «Brooklyn», «Queens», «Bronx», «Staten Island»])

После этого я построила столбчатую диаграмму, где каждый столбец является отдельным районом города.

ax.bar (counts.index, counts.values, color=colors)

0

Код для анализа датасета и создания столбчатой диаграммы

3. Пузырьковая диаграмма

Original size 2242x1426

Сначала я рассчитала длительность каждой поездки в минутах.

df[«duration_min»] = (df[dropoff] — df[pickup]).dt.total_seconds () / 60

Потом я объединила данные по боро и посчитала типичную дистанцию, медианную длительность и количество поездок.

agg = df.groupby («borough»).agg ( trips=(«borough», «size»), med_distance=(«distance_miles», «median»), med_duration=(«duration_min», «median»)

На основе этих данных я сделала пузырьковую диаграмму, где положение пузыря показывает типичную поездку, а его размер соотвествует популярности такси в районе.

ax.scatter (agg[«med_distance»], agg[«med_duration»], s=agg[«bubble»])

0

Код для анализа датасета и создания пузырьковой диаграммы

4. Линейный график

Original size 2242x1262

Чтобы посмотреть, как меняется спрос на такси в течение суток, я выделила час посадки из времени поездки.

tmp[«hour»] = tmp[pickup].dt.hour

Дальше я посчитала количество поездок по часам и боро и немного упростила значения.

hourly = tmp.groupby ([«hour», «borough»]).size ().reset_index (name="trips») hourly[«trips_smooth»] = hourly.groupby («borough»)[«trips»].rolling (3, center=True).mean ()

После этого я построила линейный график, который показывает, в какое время суток такси используют чаще всего в разных районах.

ax.plot (d[«hour»], d[«trips_smooth»])

Original size 1952x1298

Код для анализа датасета и создания линейного графика

5. График распределения

Original size 2252x1268

Для анализа длины поездок я задала интервалы дистанций.

bins = np.linspace (0, 30, 61)

Затем я посчитала распределение дистанций поездок для каждого боро.

hist, _ = np.histogram (d, bins=bins) dens = hist / hist.sum ()

После этого я построила график распределений, который показывает, где чаще встречаются короткие и длинные поездки.

ax.plot (centers, dens)

Original size 2056x964

Код для анализа датасета и создания графика распределения

В рамках данного проекта был проведен анализ данных о такси в Нью-Йорке, который позволил изучить ключевую информацию по теме. Благодаря использованию современных методов анализа данных и визуализации, удалось ответить на ряд важных вопросов о районах, загруженности и особенностях маршрутов.

В проекте была использована нейросеть ChatGPT с целью проверки кода и объяснения, как создать нетипичиную интерактивную карту (график первый), а также для генерации обложки

We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more