Как вы конвертируете форматированную «эпи-неделю» в дату с помощью Python? - PullRequest
1 голос
/ 24 мая 2019

В настоящее время я пытаюсь научиться применять навыки Data Science, которые я изучаю с помощью Coursera и Dataquest, к небольшим личным проектам.

Я нашел набор данных в Google BigQuery от Министерства здравоохранения и социальных служб США, который включает все еженедельные отчеты по эпиднадзору за болезнями, подлежащими уведомлению на национальном уровне по всем городам и штатам США, опубликованные в период с 1888 по 2013 год.

Я экспортировал данные в файл .csv и импортировал их в блокнот Jupyter, который я запускаю через Anaconda. Посмотрев на заголовок набора данных, я заметил, что даты / недели отображаются как «epi_week».

Я пытаюсь сделать данные более читабельными и пригодными для некоторого анализа, для этого я надеялся преобразовать их во что-то вроде ДД / ММ / ГГГГ или Неделя / Месяц / Год и т. Д.

Я провел некоторое исследование, по-видимому, эпи-недели также называют неделями CDC, и до сих пор я нашел расширение / пакет для Python 3, который называется "эпивенами".

Используя пакет epiweeks, я могу превратить некоторые «нормальные» даты в то, на что ссылается создатель пакета, в какую-то форму эпи-недели, но они не похожи на то, что я вижу в наборе данных.


Например, если я использую сегодняшнюю дату, 24 мая 2019 года (24/05/2019), то получится: «Неделя 21 года 2019», но это то, что первые четыре записи в данных (и после того же формата, все остальные) выглядят так:

epi_week

'197006'

'197007'

'197008'

'197012'


In [1]: disease_header

Out [1]: 
[['epi_week', 'state', 'loc', 'loc_type', 'disease', 'cases', 'incidence_per_100000']]

In [2]: disease[:4]

Out [2]:
[['197006', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
['197007', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
['197008', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
['197012', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0']]

1 Ответ

0 голосов
/ 27 июня 2019

Пакет epiweeks был разработан для решения таких проблем, как у вас здесь.

На примере предоставленных вами данных давайте создадим новый столбец с датой окончания недели:

import pandas as pd
from epiweeks import Week

columns = ['epi_week', 'state', 'loc', 'loc_type',
           'disease', 'cases', 'incidence_per_100000']
data = [
    ['197006', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
    ['197007', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
    ['197008', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
    ['197012', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0']
]

df = pd.DataFrame(data, columns=columns)

# Now create a new column with week ending date in ISO format
df['week_ending'] = df['epi_week'].apply(lambda x: Week.fromstring(x).enddate())

В результате получается что-то вроде:

enter image description here

Я рекомендую вам ознакомиться с пакетом epiweeks Документация , чтобы найти больше примеров.

Если вам нужны только столбцы года и недели, это можно сделать без использования пакета epiweeks:

df['year'] = df['epi_week'].apply(lambda x: int(x[:4]))
df['week'] = df['epi_week'].apply(lambda x: int(x[4:6]))

В результате получается что-то вроде:

enter image description here

...