탐색 건너뛰기

San Francisco Safety Data

San Francisco 911 Fire 311 Public Safety

샌프란시스코 소방서에서 서비스 및 311 사례를 요청합니다.

Fire Calls-For-Service에는 통화에 대한 모든 소방대원 응답이 포함됩니다. 각 레코드에는 전화번호, 사건 번호, 주소, 대원 식별자, 통화 유형 및 처리 상태가 포함됩니다. 모든 관련 시간 간격도 포함됩니다. 이 데이터 세트는 응답을 기반으로 하고 대부분의 통화가 여러 대원과 관련되므로 각 전화번호에 대한 레코드가 여러 개 있습니다. 주소는 특정 주소가 아닌 블록 번호, 교차로 또는 공중전화 박스와 관련이 있습니다.

311 사례에는 일반적으로 장소 또는 사물(예: 공원, 거리 또는 건물)과 관련되고 2008년 7월 1일 이후에 생성된 사례가 포함됩니다. 일반적으로 사용자가 자신의 요구와 관련하여 로깅한 사례(예: 재산 또는 영업세 질문, 주차증 요청)는 포함되지 않습니다. 자세한 내용은 프로그램 링크를 참조하세요.

볼륨 및 보존

이 데이터 세트는 Parquet 형식으로 저장됩니다. 이 데이터 세트는 매일 업데이트되며 2019년 기준 약 600만 개의 행(400MB)을 포함합니다.

이 데이터 세트는 2015년부터 현재까지 누적된 기록 레코드를 포함합니다. SDK의 매개 변수 설정을 사용하여 특정 시간 범위의 데이터를 가져올 수 있습니다.

스토리지 위치

이 데이터 세트는 미국 동부 Azure 지역에 저장됩니다. 선호도를 위해 미국 동부에 컴퓨팅 리소스를 할당하는 것이 좋습니다.

추가 정보

이 데이터 세트는 샌프란시스코시 정부에서 제공됩니다. 자세한 내용은 다음 링크에서 확인할 수 있습니다. 소방서 신고 전화, 311건.

이 데이터 세트 사용과 관련된 사용 약관은 여기를 참조하세요.

알림

Microsoft는 Azure Open Datasets를 “있는 그대로” 제공합니다. Microsoft는 귀하의 데이터 세트 사용과 관련하여 어떠한 명시적이거나 묵시적인 보증, 보장 또는 조건을 제공하지 않습니다. 귀하가 거주하는 지역의 법규가 허용하는 범위 내에서 Microsoft는 귀하의 데이터 세트 사용으로 인해 발생하는 일체의 직접적, 결과적, 특별, 간접적, 부수적 또는 징벌적 손해 또는 손실을 비롯한 모든 손해 또는 손실에 대한 모든 책임을 부인합니다.

이 데이터 세트는 Microsoft가 원본 데이터를 받은 원래 사용 약관에 따라 제공됩니다. 데이터 세트에는 Microsoft가 제공한 데이터가 포함될 수 있습니다.

Access

Available inWhen to use
Azure Notebooks

Quickly explore the dataset with Jupyter notebooks hosted on Azure or your local machine.

Azure Databricks

Use this when you need the scale of an Azure managed Spark cluster to process the dataset.

Azure Synapse

Use this when you need the scale of an Azure managed Spark cluster to process the dataset.

Preview

dataType dataSubtype dateTime category subcategory status address source extendedProperties
Safety 911_Fire 11/26/2020 2:50:27 AM Non Life-threatening Medical Incident null MARKET ST/BUSH ST null
Safety 911_Fire 11/26/2020 2:49:42 AM Alarm Citizen Assist / Service Call null 1500 Block of GALVEZ AV null
Safety 911_Fire 11/26/2020 2:46:38 AM Alarm Other null 3700 Block of SCOTT ST null
Safety 911_Fire 11/26/2020 2:45:37 AM Potentially Life-Threatening Medical Incident null 2400 Block of POST ST null
Safety 911_Fire 11/26/2020 2:45:37 AM Potentially Life-Threatening Medical Incident null 2400 Block of POST ST null
Safety 911_Fire 11/26/2020 2:44:06 AM Non Life-threatening Medical Incident null 0 Block of JONES ST null
Safety 911_Fire 11/26/2020 2:44:06 AM Non Life-threatening Medical Incident null 0 Block of JONES ST null
Safety 911_Fire 11/26/2020 2:35:56 AM Potentially Life-Threatening Medical Incident null 500 Block of JONES ST null
Safety 911_Fire 11/26/2020 2:35:56 AM Potentially Life-Threatening Medical Incident null 500 Block of JONES ST null
Safety 911_Fire 11/26/2020 2:35:12 AM Non Life-threatening Medical Incident null 1700 Block of EDDY ST null
Name Data type Unique Values (sample) Description
address string 265,527 Not associated with a specific address
0 Block of 6TH ST

사건의 주소(참고: 발신자 프라이버시를 보호하기 위해 주소 및 위치는 거리의 중간 블록, 교차로 또는 가장 가까운 공중전화 박스 위치로 일반화됨)입니다.

category string 108 Street and Sidewalk Cleaning
Potentially Life-Threatening

911 화재 신고 전화의 통화 유형 그룹 또는 311 서비스 요청 유형의 사람이 읽을 수 있는 이름입니다.

dataSubtype string 2 311_All
911_Fire

“911_Fire” 또는 “311_All”입니다.

dataType string 1 Safety

“안전”

dateTime timestamp 5,951,450 2020-10-19 12:28:08
2020-07-28 06:40:26

서비스 요청이 수행되고 화재 신고 전화를 받은 날짜 및 시간입니다.

latitude double 1,465,967 37.777624238929
37.786117211838

위치의 위도로, WGS84 프로젝션을 사용합니다.

longitude double 1,410,519 -122.39998111124
-122.419854245692

위치의 경도로, WGS84 프로젝션을 사용합니다.

source string 9 Phone
Mobile/Open311

서비스 요청을 받은 메커니즘 또는 경로(일반적으로 “전화”, “문자/SMS”, “웹 사이트”, “모바일 앱”, “Twitter” 등)이지만 용어는 시스템에 따라 달라질 수 있습니다.

status string 3 Closed
Open

서비스 요청의 현재 상태에 대한 단일 단어 표시입니다. (참고: GeoReport V2는 “미해결”과 “종결됨”만 허용합니다.)

subcategory string 1,269 Medical Incident
Bulky Items

911 화재 신고 전화의 통화 유형 또는 311 사례에 대한 서비스 요청 하위 유형의 사람이 읽을 수 있는 이름입니다.

Select your preferred service:

Azure Notebooks

Azure Databricks

Azure Synapse

Azure Notebooks

Package: Language: Python Python
In [1]:
# This is a package in preview.
from azureml.opendatasets import SanFranciscoSafety

from datetime import datetime
from dateutil import parser


end_date = parser.parse('2016-01-01')
start_date = parser.parse('2015-05-01')
safety = SanFranciscoSafety(start_date=start_date, end_date=end_date)
safety = safety.to_pandas_dataframe()
ActivityStarted, to_pandas_dataframe Looking for parquet files... Reading them into Pandas dataframe... Reading Safety/Release/city=SanFrancisco/part-00125-tid-8598556649077331715-e7875271-3301-48fe-88c1-a6ce35841072-136781.c000.snappy.parquet under container citydatacontainer Done. ActivityCompleted: Activity=to_pandas_dataframe, HowEnded=Success, Duration=58673.14 [ms]
In [2]:
safety.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 361411 entries, 10 to 5821034 Data columns (total 11 columns): dataType 361411 non-null object dataSubtype 361411 non-null object dateTime 361411 non-null datetime64[ns] category 361409 non-null object subcategory 361411 non-null object status 231935 non-null object address 361411 non-null object latitude 361411 non-null float64 longitude 361411 non-null float64 source 231935 non-null object extendedProperties 117871 non-null object dtypes: datetime64[ns](1), float64(2), object(8) memory usage: 33.1+ MB
In [1]:
# Pip install packages
import os, sys

!{sys.executable} -m pip install azure-storage-blob
!{sys.executable} -m pip install pyarrow
!{sys.executable} -m pip install pandas
In [2]:
# Azure storage access info
azure_storage_account_name = "azureopendatastorage"
azure_storage_sas_token = r""
container_name = "citydatacontainer"
folder_name = "Safety/Release/city=SanFrancisco"
In [3]:
from azure.storage.blob import BlockBlobServicefrom azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

if azure_storage_account_name is None or azure_storage_sas_token is None:
    raise Exception(
        "Provide your specific name and key for your Azure Storage account--see the Prerequisites section earlier.")

print('Looking for the first parquet under the folder ' +
      folder_name + ' in container "' + container_name + '"...')
container_url = f"https://{azure_storage_account_name}.blob.core.windows.net/"
blob_service_client = BlobServiceClient(
    container_url, azure_storage_sas_token if azure_storage_sas_token else None)

container_client = blob_service_client.get_container_client(container_name)
blobs = container_client.list_blobs(folder_name)
sorted_blobs = sorted(list(blobs), key=lambda e: e.name, reverse=True)
targetBlobName = ''
for blob in sorted_blobs:
    if blob.name.startswith(folder_name) and blob.name.endswith('.parquet'):
        targetBlobName = blob.name
        break

print('Target blob to download: ' + targetBlobName)
_, filename = os.path.split(targetBlobName)
blob_client = container_client.get_blob_client(targetBlobName)
with open(filename, 'wb') as local_file:
    blob_client.download_blob().download_to_stream(local_file)
In [4]:
# Read the parquet file into Pandas data frame
import pandas as pd

print('Reading the parquet file into Pandas data frame')
df = pd.read_parquet(filename)
In [5]:
# you can add your filter at below
print('Loaded as a Pandas data frame: ')
df
In [6]:
 

Azure Databricks

Package: Language: Python Python
In [1]:
# This is a package in preview.
# You need to pip install azureml-opendatasets in Databricks cluster. https://docs.microsoft.com/en-us/azure/data-explorer/connect-from-databricks#install-the-python-library-on-your-azure-databricks-cluster
from azureml.opendatasets import SanFranciscoSafety

from datetime import datetime
from dateutil import parser


end_date = parser.parse('2016-01-01')
start_date = parser.parse('2015-05-01')
safety = SanFranciscoSafety(start_date=start_date, end_date=end_date)
safety = safety.to_spark_dataframe()
ActivityStarted, to_spark_dataframe ActivityStarted, to_spark_dataframe_in_worker ActivityCompleted: Activity=to_spark_dataframe_in_worker, HowEnded=Success, Duration=3754.51 [ms] ActivityCompleted: Activity=to_spark_dataframe, HowEnded=Success, Duration=3757.76 [ms]
In [2]:
display(safety.limit(5))
dataTypedataSubtypedateTimecategorysubcategorystatusaddresslatitudelongitudesourceextendedProperties
Safety911_Fire2015-11-07T19:49:04.000+0000Potentially Life-ThreateningMedical IncidentnullMISSION ST/23RD ST37.753836588542-122.418593946321nullnull
Safety911_Fire2015-08-06T05:23:02.000+0000AlarmAlarmsnull200 Block of 10TH ST37.773466489733-122.413546904215nullnull
Safety911_Fire2015-07-28T13:34:52.000+0000Potentially Life-ThreateningMedical IncidentnullHOWARD ST/MAIN ST37.790612669554-122.393407939021nullnull
Safety911_Fire2015-06-24T10:39:57.000+0000Non Life-threateningMedical Incidentnull200 Block of BRIDGEVIEW DR37.734209339882-122.397590096788nullnull
Safety911_Fire2015-06-22T15:58:28.000+0000AlarmAlarmsnull100 Block of POST ST37.788796325286-122.403991276137nullnull
In [1]:
# Azure storage access info
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=SanFrancisco"
blob_sas_token = r""
In [2]:
# Allow SPARK to read from Blob remotely
wasbs_path = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set(
  'fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name),
  blob_sas_token)
print('Remote blob path: ' + wasbs_path)
In [3]:
# SPARK read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path)
print('Register the DataFrame as a SQL temporary view: source')
df.createOrReplaceTempView('source')
In [4]:
# Display top 10 rows
print('Displaying top 10 rows: ')
display(spark.sql('SELECT * FROM source LIMIT 10'))

Azure Synapse

Package: Language: Python Python
In [18]:
# This is a package in preview.
from azureml.opendatasets import SanFranciscoSafety

from datetime import datetime
from dateutil import parser


end_date = parser.parse('2016-01-01')
start_date = parser.parse('2015-05-01')
safety = SanFranciscoSafety(start_date=start_date, end_date=end_date)
safety = safety.to_spark_dataframe()
In [19]:
# Display top 5 rows
display(safety.limit(5))
Out[19]:
In [1]:
# Azure storage access info
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=SanFrancisco"
blob_sas_token = r""
In [2]:
# Allow SPARK to read from Blob remotely
wasbs_path = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set(
  'fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name),
  blob_sas_token)
print('Remote blob path: ' + wasbs_path)
In [3]:
# SPARK read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path)
print('Register the DataFrame as a SQL temporary view: source')
df.createOrReplaceTempView('source')
In [4]:
# Display top 10 rows
print('Displaying top 10 rows: ')
display(spark.sql('SELECT * FROM source LIMIT 10'))

City Safety

From the Urban Innovation Initiative at Microsoft Research, databricks notebook for analytics with safety data (311 and 911 call data) from major U.S. cities. Analyses show frequency distributions and geographic clustering of safety issues within cities.