{ "cells": [ { "cell_type": "markdown", "id": "1458258b", "metadata": {}, "source": [ "# How to Connect and Query PostgreSQL for Python\n", "\n", "This provides and example of how to use Python and Jupyer notebooks on SWAN to connect and query PostgreSQL databases at CERN. The example provided is about generating frequency histograms using SQL.\n", "\n", "\n", "## Setup and prerequisites\n", "\n", "Prerquites: you need to have credential to connect to an PostgreSQL database. It is recommended that you use a test account. Contact CERN Database on Demand service to request an account if needed." ] }, { "cell_type": "code", "execution_count": 1, "id": "81411b15", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Requirement already satisfied: psycopg2-binary in /eos/home-c/canali/.local/lib/python3.9/site-packages (2.9.6)\n" ] } ], "source": [ "# This notebook uses psycopg2 to connect to PostgreSQL\n", "# Install the driver\n", "!pip install psycopg2-binary\n", "\n", "import psycopg2" ] }, { "cell_type": "code", "execution_count": 2, "id": "078ea1dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "········\n" ] } ], "source": [ "# Edit DB credentials\n", "import getpass\n", "\n", "db_user = 'myaccount' #edit\n", "\n", "# To avoid storing connection passwords use getpas or db_config\n", "db_pass = getpass.getpass()\n", "\n", "db_name = 'testdb1'\n", "\n", "port = 6600\n", "\n", "host_name = 'dbod-mytestdb1.cern.ch' #edit" ] }, { "cell_type": "markdown", "id": "c02081ce", "metadata": {}, "source": [ "## Create the test table" ] }, { "cell_type": "code", "execution_count": 3, "id": "e0ddaadb", "metadata": {}, "outputs": [], "source": [ "# Connect to an existing database and create the test table\n", "\n", "with psycopg2.connect(f\"dbname={db_name} user={db_user} host={host_name} port={port} password={db_pass}\") as pg_conn:\n", " cur = pg_conn.cursor()\n", " \n", " # use this drop statement if you need to recreate the table\n", " cur.execute(\"DROP TABLE if exists data\")\n", "\n", " cur.execute(\"CREATE TABLE data as select random()*100 random_value from generate_series(1, 100);\")" ] }, { "cell_type": "markdown", "id": "b9337750", "metadata": {}, "source": [ "## Define the query to compute the histogram" ] }, { "cell_type": "code", "execution_count": 4, "id": "e844ab4d", "metadata": {}, "outputs": [], "source": [ "table_name = \"data\" # table or temporary view containing the data\n", "value_col = \"random_value\" # column name on which to compute the histogram\n", "min = -20 # min: minimum value in the histogram\n", "max = 90 # maximum value in the histogram\n", "bins = 11 # number of histogram buckets to compute\n", "step = (max - min) / bins\n", " \n", "query = f\"\"\"\n", "with hist as (\n", " select \n", " width_bucket({value_col}, {min}, {max}, {bins}) as bucket,\n", " count(*) as cnt\n", " from {table_name}\n", " group by bucket\n", "),\n", "buckets as (\n", " select generate_series as bucket from generate_series(1,{bins})\n", ")\n", "select\n", " bucket, {min} + (bucket - 0.5) * {step} as value,\n", " coalesce(cnt, 0) as count\n", "from hist right outer join buckets using(bucket)\n", "order by bucket\n", "\"\"\"" ] }, { "cell_type": "markdown", "id": "6b109925", "metadata": {}, "source": [ "## Fetch the histogram data into a Pandas dataframe using SQLAlchemy" ] }, { "cell_type": "code", "execution_count": 5, "id": "99b2ced8", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from sqlalchemy import create_engine\n", "\n", "# create SQLAlchemy engine\n", "engine = create_engine(f\"postgresql+psycopg2://{db_user}:{db_pass}@{host_name}:{port}/{db_name}\")\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "e416e3c7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
bucketvaluecount
01-15.00
12-5.00
235.010
3415.013
4525.010
5635.011
6745.08
7855.09
8965.012
91075.09
101185.08
\n", "
" ], "text/plain": [ " bucket value count\n", "0 1 -15.0 0\n", "1 2 -5.0 0\n", "2 3 5.0 10\n", "3 4 15.0 13\n", "4 5 25.0 10\n", "5 6 35.0 11\n", "6 7 45.0 8\n", "7 8 55.0 9\n", "8 9 65.0 12\n", "9 10 75.0 9\n", "10 11 85.0 8" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# query Oracle using ora_conn and put the result into a pandas Dataframe\n", "hist_pandasDF = pd.read_sql(query, engine)\n", "\n", "# Decription of the resulting dataframe\n", "#\n", "# BUCKET: the bucket number, range from 1 to bins (included)\n", "# VALUE: midpoint value of the given bucket\n", "# COUNT: number of values in the bucket \n", "\n", "hist_pandasDF\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "2c3b67b5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
bucketvaluecountfrequency
01-15.000.000000
12-5.000.000000
235.0100.111111
3415.0130.144444
4525.0100.111111
5635.0110.122222
6745.080.088889
7855.090.100000
8965.0120.133333
91075.090.100000
101185.080.088889
\n", "
" ], "text/plain": [ " bucket value count frequency\n", "0 1 -15.0 0 0.000000\n", "1 2 -5.0 0 0.000000\n", "2 3 5.0 10 0.111111\n", "3 4 15.0 13 0.144444\n", "4 5 25.0 10 0.111111\n", "5 6 35.0 11 0.122222\n", "6 7 45.0 8 0.088889\n", "7 8 55.0 9 0.100000\n", "8 9 65.0 12 0.133333\n", "9 10 75.0 9 0.100000\n", "10 11 85.0 8 0.088889" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Optionally normalize the event count into a frequency\n", "# dividing by the total number of events\n", " \n", "hist_pandasDF[\"frequency\"] = hist_pandasDF[\"count\"] / sum(hist_pandasDF[\"count\"]) \n", " \n", "hist_pandasDF\n" ] }, { "cell_type": "markdown", "id": "95f6a268", "metadata": {}, "source": [ "## Histogram plotting\n", "The first plot is a histogram with the event counts (number of events per bin). The second plot is a histogram of the events frequencies (number of events per bin normalized by the sum of the events)." ] }, { "cell_type": "code", "execution_count": 8, "id": "3fdf5ab1", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt \n", "\n", "plt.rcParams.update({'font.size': 20, 'figure.figsize': [14,10]})\n", "\n", "f, ax = plt.subplots()\n", "\n", "# histogram data\n", "x = hist_pandasDF[\"value\"]\n", "y = hist_pandasDF[\"count\"]\n", "\n", "# bar plot\n", "ax.bar(x, y, width = 3.0, color='red')\n", "\n", "ax.set_xlabel(\"Bucket values\")\n", "ax.set_ylabel(\"Event count\")\n", "ax.set_title(\"Distribution of event counts\")\n", "\n", "# Label for the resonances spectrum peaks\n", "txt_opts = {'horizontalalignment': 'center',\n", " 'verticalalignment': 'center',\n", " 'transform': ax.transAxes}\n", "\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "a702db74", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt \n", "plt.rcParams.update({'font.size': 20, 'figure.figsize': [14,10]})\n", "\n", "f, ax = plt.subplots()\n", "\n", "# histogram data\n", "x = hist_pandasDF[\"value\"]\n", "y = hist_pandasDF[\"frequency\"]\n", "\n", "# bar plot\n", "ax.bar(x, y, width = 3.0, color='blue')\n", "\n", "ax.set_xlabel(\"Bucket values\")\n", "ax.set_ylabel(\"Event frequency\")\n", "ax.set_title(\"Distribution of event frequencies\")\n", "\n", "# Label for the resonances spectrum peaks\n", "txt_opts = {'horizontalalignment': 'center',\n", " 'verticalalignment': 'center',\n", " 'transform': ax.transAxes}\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "18cdd652", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "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.12" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }