pysondehub/examples/sondehub-athena.ipynb

456 wiersze
44 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "velvet-valley",
"metadata": {},
"source": [
"# Imports\n",
"Next we import the python libraries we'll be using."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "attractive-korea",
"metadata": {},
"outputs": [],
"source": [
"# AWS SDK\n",
"import boto3\n",
"\n",
"#numpy, matplotlib and scipy to help us graph and process some of the data\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.stats as stats\n",
"\n",
"import datetime"
]
},
{
"cell_type": "markdown",
"id": "nuclear-halifax",
"metadata": {},
"source": [
"# Create Athena Data Catalog and Table\n",
"Athena lets us query large datasets quickly. We need to create a table to query against."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "pacific-content",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ResponseMetadata': {'RequestId': '2F0CD07F90744DD1',\n",
" 'HostId': '931DypU3uiY5Je0Lncke/D752W7TL+to/vwO7cJCRNADpoSP7fZhPUuZCnaCMh02VhtYnvEZ69M=',\n",
" 'HTTPStatusCode': 200,\n",
" 'HTTPHeaders': {'x-amz-id-2': '931DypU3uiY5Je0Lncke/D752W7TL+to/vwO7cJCRNADpoSP7fZhPUuZCnaCMh02VhtYnvEZ69M=',\n",
" 'x-amz-request-id': '2F0CD07F90744DD1',\n",
" 'date': 'Wed, 10 Feb 2021 09:15:01 GMT',\n",
" 'location': '/sondehub-temp-athena',\n",
" 'content-length': '0',\n",
" 'server': 'AmazonS3'},\n",
" 'RetryAttempts': 0},\n",
" 'Location': '/sondehub-temp-athena'}"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"athena = boto3.client('athena', region_name=\"us-east-1\")\n",
"s3 = boto3.client('s3', region_name=\"us-east-1\")\n",
"\n",
"athena_bucket_name = \"sondehub-temp-athena\" # change this to be a unique name for you\n",
"# Create a bucket where we are going to store the results\n",
"s3.create_bucket(Bucket=athena_bucket_name) \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "collected-partition",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ResultSet': {'Rows': [], 'ResultSetMetadata': {'ColumnInfo': []}},\n",
" 'ResponseMetadata': {'RequestId': '28342d38-3090-4d9c-8f89-0df5ce953d1c',\n",
" 'HTTPStatusCode': 200,\n",
" 'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
" 'date': 'Wed, 10 Feb 2021 09:33:21 GMT',\n",
" 'x-amzn-requestid': '28342d38-3090-4d9c-8f89-0df5ce953d1c',\n",
" 'content-length': '108',\n",
" 'connection': 'keep-alive'},\n",
" 'RetryAttempts': 0}}"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create database\n",
"create_database = athena.start_query_execution(\n",
" QueryString='CREATE DATABASE sondehub',\n",
" ResultConfiguration={\n",
" 'OutputLocation': f\"s3://{athena_bucket_name}/\"\n",
" }\n",
"\n",
" )\n",
"\n",
"# wait for query to finish\n",
"waiter = s3.get_waiter(\"object_exists\")\n",
"waiter.wait(\n",
" Bucket=athena_bucket_name,\n",
" Key=f\"{create_database['QueryExecutionId']}.txt\"\n",
")\n",
"\n",
"#\n",
"athena.get_query_results(\n",
" QueryExecutionId=create_database['QueryExecutionId']\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "respiratory-harmony",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ResultSet': {'Rows': [], 'ResultSetMetadata': {'ColumnInfo': []}},\n",
" 'ResponseMetadata': {'RequestId': '65315949-56cc-403a-9815-a5995ab05d85',\n",
" 'HTTPStatusCode': 200,\n",
" 'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
" 'date': 'Wed, 10 Feb 2021 09:50:50 GMT',\n",
" 'x-amzn-requestid': '65315949-56cc-403a-9815-a5995ab05d85',\n",
" 'content-length': '108',\n",
" 'connection': 'keep-alive'},\n",
" 'RetryAttempts': 0}}"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create table\n",
"\n",
"create_table_query = \"\"\"CREATE EXTERNAL TABLE IF NOT EXISTS sondehub.S4620525 (\n",
" `datetime` string,\n",
" `software_name` string,\n",
" `software_version` string,\n",
" `uploader_callsign` string,\n",
" `time_received` string,\n",
" `manufacturer` string,\n",
" `type` string,\n",
" `serial` string,\n",
" `frame` int,\n",
" `lat` float,\n",
" `lon` float,\n",
" `alt` float,\n",
" `subtype` string,\n",
" `temp` float,\n",
" `humidity` float,\n",
" `pressure` float,\n",
" `vel_h` float,\n",
" `vel_v` float,\n",
" `heading` float,\n",
" `sats` int,\n",
" `batt` float,\n",
" `burst_timer` int,\n",
" `xdata` string,\n",
" `frequency` float,\n",
" `snr` float,\n",
" `uploader_position` string,\n",
" `uploader_antenna` string \n",
")\n",
"ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'\n",
"WITH SERDEPROPERTIES (\n",
" 'serialization.format' = '1'\n",
") LOCATION 's3://sondehub-open-data/serial/S4620525/'\n",
"TBLPROPERTIES ('has_encrypted_data'='false');\n",
"\"\"\" # To save costs we are just going to look at one particular serial number S4620525\n",
"create_table = athena.start_query_execution(\n",
" QueryString=create_table_query,\n",
" QueryExecutionContext={\n",
" 'Database': 'sondehub' },\n",
" ResultConfiguration={\n",
" 'OutputLocation': f\"s3://{athena_bucket_name}/\"\n",
" }\n",
"\n",
" )\n",
"\n",
"# wait for query to finish\n",
"waiter = s3.get_waiter(\"object_exists\")\n",
"waiter.wait(\n",
" Bucket=athena_bucket_name,\n",
" Key=f\"{create_table['QueryExecutionId']}.txt\"\n",
")\n",
"\n",
"#\n",
"athena.get_query_results(\n",
" QueryExecutionId=create_table['QueryExecutionId']\n",
")\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "grave-activation",
"metadata": {},
"source": [
"# Query the Athena database"
]
},
{
"cell_type": "code",
"execution_count": 75,
"id": "hindu-paper",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'QueryExecutionId': 'baddaa58-e67c-49f6-aad5-0deb91d165f8', 'ResponseMetadata': {'RequestId': '57c956de-ec94-4d4b-b29c-8eaa25101940', 'HTTPStatusCode': 200, 'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1', 'date': 'Wed, 10 Feb 2021 10:06:00 GMT', 'x-amzn-requestid': '57c956de-ec94-4d4b-b29c-8eaa25101940', 'content-length': '59', 'connection': 'keep-alive'}, 'RetryAttempts': 0}}\n"
]
}
],
"source": [
"# query data\n",
"data_query = \"\"\"\n",
"SELECT datetime,alt,snr FROM \"sondehub\".\"S4620525\" \n",
"\"\"\" \n",
"data_athena = athena.start_query_execution(\n",
" QueryString=data_query,\n",
" QueryExecutionContext={\n",
" 'Database': 'sondehub'\n",
" },\n",
" ResultConfiguration={\n",
" 'OutputLocation': f\"s3://{athena_bucket_name}/\"\n",
" }\n",
"\n",
" )\n",
"print(data_athena)\n",
"# wait for query to finish\n",
"waiter = s3.get_waiter(\"object_exists\")\n",
"waiter.wait(\n",
" Bucket=athena_bucket_name,\n",
" Key=f\"{data_athena['QueryExecutionId']}.csv\"\n",
")\n",
"\n",
"#\n",
"query_output = []\n",
"paginator = athena.get_paginator('get_query_results')\n",
"response_iterator = paginator.paginate(\n",
" QueryExecutionId=data_athena['QueryExecutionId']\n",
")\n",
"for query_page in response_iterator:\n",
" query_output = query_output + query_page[\"ResultSet\"][\"Rows\"]\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 76,
"id": "western-strap",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Data': [{'VarCharValue': 'datetime'}, {'VarCharValue': 'alt'}, {'VarCharValue': 'snr'}]}\n",
"{'Data': [{'VarCharValue': '2021-02-09T22:38:45.001000Z'}, {'VarCharValue': '4.09143'}, {'VarCharValue': '13.6'}]}\n"
]
}
],
"source": [
"# explore the data\n",
"print(query_output[0])\n",
"print(query_output[1])"
]
},
{
"cell_type": "markdown",
"id": "addressed-superior",
"metadata": {},
"source": [
"# Parse data\n",
"To make things easier we use numpy to make an array out of the data. This will help us when we go to graph the data.\n",
"\n",
"In this case we are going to graph altitude, snr vs time"
]
},
{
"cell_type": "code",
"execution_count": 77,
"id": "liquid-draft",
"metadata": {},
"outputs": [],
"source": [
"data = np.array(\n",
" [\n",
" [ \n",
" datetime.datetime.strptime(each[\"Data\"][0][\"VarCharValue\"],\"%Y-%m-%dT%H:%M:%S.%fZ\"),\n",
" float(each[\"Data\"][1][\"VarCharValue\"]),\n",
" float(each[\"Data\"][2][\"VarCharValue\"]) if \"VarCharValue\" in each[\"Data\"][2] else None\n",
" ]\n",
" for each in query_output[1:]\n",
" ]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 78,
"id": "polish-heritage",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[datetime.datetime(2021, 2, 9, 22, 30, 16, 1000), -6.80747, 7.8],\n",
" [datetime.datetime(2021, 2, 9, 22, 30, 18, 179618), -4.0, None],\n",
" [datetime.datetime(2021, 2, 9, 22, 30, 28, 1000), -7.21371, 10.3],\n",
" ...,\n",
" [datetime.datetime(2021, 2, 10, 4, 43, 0, 118196), 277.0, None],\n",
" [datetime.datetime(2021, 2, 10, 4, 43, 30, 212890), 277.0, None],\n",
" [datetime.datetime(2021, 2, 10, 4, 44, 0, 188437), 277.0, None]],\n",
" dtype=object)"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = data[np.argsort(data[:, 0])] # order the data by the datetime\n",
"\n",
"data # have a look at the data"
]
},
{
"cell_type": "markdown",
"id": "lesbian-halifax",
"metadata": {},
"source": [
"# Graph the data"
]
},
{
"cell_type": "code",
"execution_count": 79,
"id": "working-membrane",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sonde_time = data[:,0] # get the datetime from the ndarray\n",
"alt = data[:,1] # get the altitude from the ndarray\n",
"\n",
"\n",
"plt.plot(sonde_time, alt)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 80,
"id": "rational-maldives",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot SNR along side\n",
"\n",
"sonde_time = data[:,0] # get the datetime from the ndarray\n",
"alt = data[:,1] # get the altitude from the ndarray\n",
"snr = data[:,2] # get the altitude from the ndarray\n",
"\n",
"fig,ax = plt.subplots()\n",
"\n",
"ax.plot(sonde_time, alt) # plot altitude on the first axis\n",
"ax.set_ylabel(\"Alt\",fontsize=14)\n",
"\n",
"ax2=ax.twinx() # get a second axis\n",
"ax2.set_ylabel(\"SNR\",fontsize=14)\n",
"ax2.plot(sonde_time, snr, color=\"red\")\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "clean-tractor",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}