Рубрики
Без рубрики

Визуализация данных Python – данные преступности Атланты (часть 2)

В части 1 мы сделали простые, 2 слоя сюжета данных преступности Атланты в 2021 году. Это было сделано путем импорта … Теги с Python, наукой данных, программированием.

В Часть 1 Мы сделали простые, 2 слоя данных преступности Атланты в 2021 году. Это было сделано путем импортирования CSV, который обновляет полицейский отдел Атланты еженедельно, в форме Atlanta Roads и создания экземпляра участка оси. Хотя мы смогли создать впечатляющую графику примерно в 25 строках кода, данные ничего не раскрывают. Проверьте мой ноутбук здесь Отказ

Это больше преступлений в этом году, чем последний? Как мы можем интуитивно использовать код, чтобы найти ответы? Давайте начнем, импортируя данные преступности 2020. Сразу же, что мы можем подумать о том, как наши 2021 данные неполны. В настоящее время 9 сентября 2021 года, поэтому мы всего более 2/3 прохождения прохождения прохождения.

Способ легко отфильтровать данные вашей таблицы – установить новый индекс. Естественно, ваш индекс с целым числом, которое увеличивается на один. Здесь мы собираемся использовать age_date в качестве каждого индекса строк. Что нам также нужно сделать, это преобразовать строку в тип DateTime. Это позволяет легко отфильтровать или данные по дате.

df2020 = pd.read_csv("https://github.com/nicholasoxford/pythonViz/blob/main/2020-old.csv?raw=true")
df2020.index = pd.to_datetime(df2020["occur_date"])
df2020 = df2020[(df2020.index < "2020-09-10")]
df2020

Если вы используете Google Collab, который вы должны, вы увидите распечаток кадра данных. Если вы прокомментируете линию фильтра, df2020 [(df2020.index <"2020-09-10")] , вы увидите весь объем файла. Вы также заметите, что это только до 30 сентября. Остальные данные – это еще один CSV, названный преступностью-2020. В строке read_csv выключите имя файла в конце для остальных лет данных.

Как и в части 1, нам нужно преобразовать этот кадр данных в геодатaframe с использованием геопандов. Теперь, когда мы двигаемся в нашей карьере Python, давайте создадим многоразовую функцию. Мы могли бы просто скопировать и вставить, но я чувствую, что это не в последний раз, когда нам нужно будет трансформировать датафарам.

def dfGeoTransfer(df):
  return  gpd.GeoDataFrame(df2021, crs="EPSG:4326", geometry=[Point(xy) for xy in zip(df2021['long'], df2021['lat'])])

geo_df20 = dfGeoTransfer(df2020)
geo_df20

Вы можете видеть, что мы объединили две строки в более длительный оператор возврата. Вы могли бы сохранить его два, я думаю, что это зависит от вас действительно. Не стреляй меня. Наконец, мы устанавливаем возвращаемое значение функции, Geodataframe, к новой переменной, называемой GEO_DF20.

Далее нам нужно отфильтровать наши данные для долготы и широты нашего уличного участка. Мы не можем сделать то же самое сюжет. Хитрость, у нас в прошлый раз. Хотя мы создаем этот метод фильтрации, я думаю, что мы должны создать всеобъемлющий метод. Наша цель этой функции состоит в том, что она принимает ссылку на CSV и возвращает GeodataTaframe с надлежащей фильтрацией и преобразованием.

def prepareGeoDataFrame(url):
  df = pd.read_csv(url)
  df.index = pd.to_datetime(df["occur_date"])
  df = df[(df.index < "2020-09-10")]
  filter = df["long"] > -84.425
  filter2 = df["long"] < -84.35
  filter3 = df["lat"] > 33.745
  filter4 = df["lat"] <  33.813
  df = df[(filter) &(filter2) & (filter3) & (filter4)]
  return  gpd.GeoDataFrame(df, crs="EPSG:4326", geometry=[Point(xy) for xy in zip(df['long'], df['lat'])])

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

Давайте также передам наши 2021 данные через нашу Prefaregeodatafarame функция. Убедитесь, что наши данные структурированы то же самое, что поможет идти вперед. Плюс, теперь все, что нам нужно сделать, это пройти в URL, а тяжелая работа сделана для нас.

Очень-глаза среди вас заметит одну проблему с нашим кодом выше. Если мы пройдем в 2021 данные, мы в основном ничего не верну. Я сделал быстрое и легкое, если заявление, чтобы справиться с этой ситуацией.

df.index = pd.to_datetime(df["occur_date"])
  if(df.index.max().year == 2020):
    df = df[(df.index < "2020-09-10")]
  if(df.index.max().year == 2021):
    df = df[(df.index < "2021-09-10")]
  filter = df["long"] > -84.425

Я сказал, прежде чем мы не сможем использовать XLIM-и юридические методы, это потому, что мы будем построить наши графики бок о бок. Для этого мы начнем то же самое, за исключением мы добавим два свойства на нашими подломам. Ряды и колонны. Теперь подломы вернут массив экземпляров осей. Быть ясным, мы будем использовать одну и ту же карту улицы для обоих, просто разных CSV.

С нашей новой функцией подготовить Geodataframe, все, что нам нужно:

street_map = gpd.read_file('/content/drive/MyDrive/GC_Roads/GC_RD_GA/Roads_Atlanta_GA.shp')
geo_df20 = prepareGeoDataFrame("https://github.com/nicholasoxford/pythonViz/blob/main/2020-old.csv?raw=true")
geo_df21 = prepareGeoDataFrame("https://github.com/nicholasoxford/pythonViz/blob/main/COBRA-2021%203.csv?raw=true")
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2,figsize=(9,9))
#plot both streetmap and and long/lat points
# fig, ax = plt.subplots(figsize=(15,15))
geo_df21.plot(column="UC2_Literal", ax=ax1,alpha=0.5, legend=True,markersize=30)
street_map.to_crs(4326).plot(ax=ax1, alpha=0.4,color='grey')
geo_df20.plot(column="UC2_Literal", ax=ax2,alpha=0.5, legend=True,markersize=30)
street_map.to_crs(4326).plot(ax=ax2, alpha=0.4,color='grey')
fig.tight_layout()

а также мы получаем

Очевидно, что это не идеально, цвета не выпускаются, например. Тем не менее, мы упростим наш код, и у нас есть экземпляр графика нескольких столбцов. Вы, как кодер, также должны иметь гораздо лучшее понимание определения функции и если заявления. Пандас и геопандас делает его таким легким. Я чувствую, что это будет почти невозможно иначе.

Проверьте часть 3, где мы делаем статистический анализ и сломайте его преступлением.

Николас Оксфорд

Оригинал: “https://dev.to/nicholasoxford/python-data-visualization-atlanta-crime-data-part-2-h1c”