Files
AstronomicalData/_sources/06_photo.ipynb
2020-11-18 19:32:36 -05:00

1378 lines
151 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Chapter 6\n",
"\n",
"This is the sixth in a series of notebooks related to astronomy data.\n",
"\n",
"As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n",
"\n",
"In the previous lesson we downloaded photometry data from Pan-STARRS, which is available from the same server we've been using to get Gaia data. \n",
"\n",
"The next step in the analysis is to select candidate stars based on the photometry data. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:\n",
"\n",
"<img width=\"300\" src=\"https://github.com/datacarpentry/astronomy-python/raw/gh-pages/fig/gd1-3.png\">\n",
"\n",
"In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. \n",
"\n",
"By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Outline\n",
"\n",
"Here are the steps in this notebook:\n",
"\n",
"1. We'll reload the data from the previous notebook and make a color-magnitude diagram.\n",
"\n",
"2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect.\n",
"\n",
"3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`.\n",
"\n",
"After completing this lesson, you should be able to\n",
"\n",
"* Use Matplotlib to specify a `Polygon` and determine which points fall inside it.\n",
"\n",
"* Use Pandas to merge data from multiple `DataFrames`, much like a database `JOIN` operation."
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"remove-cell"
]
},
"source": [
"## Installing libraries\n",
"\n",
"If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n",
"\n",
"If you are running this notebook on your own computer, you might have to install these libraries yourself. See the instructions in the preface."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# If we're running on Colab, install libraries\n",
"\n",
"import sys\n",
"IN_COLAB = 'google.colab' in sys.modules\n",
"\n",
"if IN_COLAB:\n",
" !pip install astroquery astro-gala pyia python-wget"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reload the data\n",
"\n",
"The following cell downloads the photometry data we created in the previous notebook."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"from wget import download\n",
"\n",
"filename = 'gd1_photo.fits'\n",
"filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n",
"\n",
"if not os.path.exists(filename):\n",
" print(download(filepath+filename))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can read the data back into an Astropy `Table`."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from astropy.table import Table\n",
"\n",
"photo_table = Table.read(filename)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting photometry data\n",
"\n",
"Now that we have photometry data from Pan-STARRS, we can replicate the [color-magnitude diagram](https://en.wikipedia.org/wiki/Galaxy_color%E2%80%93magnitude_diagram) from the original paper:\n",
"\n",
"<img width=\"300\" src=\"https://github.com/datacarpentry/astronomy-python/raw/gh-pages/fig/gd1-3.png\">\n",
"\n",
"The y-axis shows the apparent magnitude of each source with the [g filter](https://en.wikipedia.org/wiki/Photometric_system).\n",
"\n",
"The x-axis shows the difference in apparent magnitude between the g and i filters, which indicates color.\n",
"\n",
"Stars with lower values of (g-i) are brighter in g-band than in i-band, compared to other stars, which means they are bluer.\n",
"\n",
"Stars in the lower-left quadrant of this diagram are less bright and less metallic than the others, which means they are [likely to be older](http://spiff.rit.edu/classes/ladder/lectures/ordinary_stars/ordinary.html).\n",
"\n",
"Since we expect the stars in GD-1 to be older than the background stars, the stars in the lower-left are more likely to be in GD-1."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"def plot_cmd(table):\n",
" \"\"\"Plot a color magnitude diagram.\n",
" \n",
" table: Table or DataFrame with photometry data\n",
" \"\"\"\n",
" y = table['g_mean_psf_mag']\n",
" x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']\n",
"\n",
" plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n",
"\n",
" plt.xlim([0, 1.5])\n",
" plt.ylim([14, 22])\n",
" plt.gca().invert_yaxis()\n",
"\n",
" plt.ylabel('$g_0$')\n",
" plt.xlabel('$(g-i)_0$')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`plot_cmd` uses a new function, `invert_yaxis`, to invert the `y` axis, which is conventional when plotting magnitudes, since lower magnitude indicates higher brightness.\n",
"\n",
"`invert_yaxis` is a little different from the other functions we've used. You can't call it like this:\n",
"\n",
"```\n",
"plt.invert_yaxis() # doesn't work\n",
"```\n",
"\n",
"You have to call it like this:\n",
"\n",
"```\n",
"plt.gca().invert_yaxis() # works\n",
"```\n",
"\n",
"`gca` stands for \"get current axis\". It returns an object that represents the axes of the current figure, and that object provides `invert_yaxis`.\n",
"\n",
"**In case anyone asks:** The most likely reason for this inconsistency in the interface is that `invert_yaxis` is a lesser-used function, so it's not made available at the top level of the interface."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's what the results look like."
]
},
{
"cell_type": "code",
"execution_count": 5,
"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": [
"plot_cmd(photo_table)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our figure does not look exactly like the one in the paper because we are working with a smaller region of the sky, so we don't have as many stars. But we can see an overdense region in the lower left that contains stars with the photometry we expect for GD-1.\n",
"\n",
"The authors of the original paper derive a detailed polygon that defines a boundary between stars that are likely to be in GD-1 or not.\n",
"\n",
"As a simplification, we'll choose a boundary by eye that seems to contain the overdense region."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Drawing a polygon\n",
"\n",
"Matplotlib provides a function called `ginput` that lets us click on the figure and make a list of coordinates.\n",
"\n",
"It's a little tricky to use `ginput` in a Jupyter notebook. \n",
"Before calling `plt.ginput` we have to tell Matplotlib to use `TkAgg` to draw the figure in a new window.\n",
"\n",
"When you run the following cell, a figure should appear in a new window. Click on it 10 times to draw a polygon around the overdense area. A red cross should appear where you click."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib as mpl\n",
"\n",
"coords = None\n",
"\n",
"if not IN_COLAB:\n",
" mpl.use('TkAgg')\n",
" plot_cmd(photo_table)\n",
" coords = plt.ginput(10)\n",
" mpl.use('agg')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The argument to `ginput` is the number of times the user has to click on the figure.\n",
"\n",
"The result from `ginput` is a list of coordinate pairs."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(0.2643369175627239, 17.84253127299485),\n",
" (0.3539426523297491, 18.799116997792495),\n",
" (0.47491039426523296, 19.682119205298015),\n",
" (0.6317204301075269, 20.454746136865342),\n",
" (0.7661290322580645, 20.785871964679913),\n",
" (0.8064516129032258, 21.41133186166299),\n",
" (0.5869175627240143, 21.300956585724798),\n",
" (0.39426523297491034, 20.565121412803535),\n",
" (0.22401433691756267, 19.240618101545255),\n",
" (0.19713261648745517, 18.02649006622517)]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coords"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If `ginput` doesn't work for you, you could use the following coordinates."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"if coords is None:\n",
" coords = [(0.2, 17.5), \n",
" (0.2, 19.5), \n",
" (0.65, 22),\n",
" (0.75, 21),\n",
" (0.4, 19),\n",
" (0.4, 17.5)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The next step is to convert the coordinates to a format we can use to plot them, which is a sequence of `x` coordinates and a sequence of `y` coordinates. The NumPy function `transpose` does what we want. "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0.26433692, 0.35394265, 0.47491039, 0.63172043, 0.76612903,\n",
" 0.80645161, 0.58691756, 0.39426523, 0.22401434, 0.19713262]),\n",
" array([17.84253127, 18.799117 , 19.68211921, 20.45474614, 20.78587196,\n",
" 21.41133186, 21.30095659, 20.56512141, 19.2406181 , 18.02649007]))"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"xs, ys = np.transpose(coords)\n",
"xs, ys"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To display the polygon, we'll draw the figure again and use `plt.plot` to draw the polygon."
]
},
{
"cell_type": "code",
"execution_count": 10,
"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": [
"plot_cmd(photo_table)\n",
"plt.plot(xs, ys);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If it looks like your polygon does a good job surrounding the overdense area, go on to the next section. Otherwise you can try again.\n",
"\n",
"If you want a polygon with more points (or fewer), you can change the argument to `ginput`.\n",
"\n",
"The polygon does not have to be \"closed\". When we use this polygon in the next section, the last and first points will be connected by a straight line.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Which points are in the polygon?\n",
"\n",
"Matplotlib provides a `Path` object that we can use to check which points fall in the polygon we selected.\n",
"\n",
"Here's how we make a `Path` using a list of coordinates."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Path(array([[ 0.26433692, 17.84253127],\n",
" [ 0.35394265, 18.799117 ],\n",
" [ 0.47491039, 19.68211921],\n",
" [ 0.63172043, 20.45474614],\n",
" [ 0.76612903, 20.78587196],\n",
" [ 0.80645161, 21.41133186],\n",
" [ 0.58691756, 21.30095659],\n",
" [ 0.39426523, 20.56512141],\n",
" [ 0.22401434, 19.2406181 ],\n",
" [ 0.19713262, 18.02649007]]), None)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from matplotlib.path import Path\n",
"\n",
"path = Path(coords)\n",
"path"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Path` provides `contains_points`, which figures out which points are inside the polygon.\n",
"\n",
"To test it, we'll create a list with two points, one inside the polygon and one outside."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"points = [(0.4, 20), \n",
" (0.4, 30)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can make sure `contains_points` does what we expect."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ True, False])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inside = path.contains_points(points)\n",
"inside"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is an array of Boolean values.\n",
"\n",
"We are almost ready to select stars whose photometry data falls in this polygon. But first we need to do some data cleaning."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reloading the data\n",
"\n",
"Now we need to combine the photometry data with the list of candidate stars we identified in a previous notebook. The following cell downloads it:\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"from wget import download\n",
"\n",
"filename = 'gd1_candidates.hdf5'\n",
"filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n",
"\n",
"if not os.path.exists(filename):\n",
" print(download(filepath+filename))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"candidate_df = pd.read_hdf(filename, 'candidate_df')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`candidate_df` is the Pandas DataFrame that contains the results from Notebook XX, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Merging photometry data\n",
"\n",
"Before we select stars based on photometry data, we have to solve two problems:\n",
"\n",
"1. We only have Pan-STARRS data for some stars in `candidate_df`.\n",
"\n",
"2. Even for the stars where we have Pan-STARRS data in `photo_table`, some photometry data is missing.\n",
"\n",
"We will solve these problems in two step:\n",
"\n",
"1. We'll merge the data from `candidate_df` and `photo_table` into a single Pandas `DataFrame`.\n",
"\n",
"2. We'll use Pandas functions to deal with missing data.\n",
"\n",
"`candidate_df` is already a `DataFrame`, but `results` is an Astropy `Table`. Let's convert it to Pandas:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"source_id\n",
"g_mean_psf_mag\n",
"i_mean_psf_mag\n"
]
}
],
"source": [
"photo_df = photo_table.to_pandas()\n",
"\n",
"for colname in photo_df.columns:\n",
" print(colname)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we want to combine `candidate_df` and `photo_df` into a single table, using `source_id` to match up the rows.\n",
"\n",
"You might recognize this task; it's the same as the JOIN operation in ADQL/SQL.\n",
"\n",
"Pandas provides a function called `merge` that does what we want. Here's how we use it."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>source_id</th>\n",
" <th>ra</th>\n",
" <th>dec</th>\n",
" <th>pmra</th>\n",
" <th>pmdec</th>\n",
" <th>parallax</th>\n",
" <th>parallax_error</th>\n",
" <th>radial_velocity</th>\n",
" <th>phi1</th>\n",
" <th>phi2</th>\n",
" <th>pm_phi1</th>\n",
" <th>pm_phi2</th>\n",
" <th>g_mean_psf_mag</th>\n",
" <th>i_mean_psf_mag</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>635559124339440000</td>\n",
" <td>137.586717</td>\n",
" <td>19.196544</td>\n",
" <td>-3.770522</td>\n",
" <td>-12.490482</td>\n",
" <td>0.791393</td>\n",
" <td>0.271754</td>\n",
" <td>NaN</td>\n",
" <td>-59.630489</td>\n",
" <td>-1.216485</td>\n",
" <td>-7.361363</td>\n",
" <td>-0.592633</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>635860218726658176</td>\n",
" <td>138.518707</td>\n",
" <td>19.092339</td>\n",
" <td>-5.941679</td>\n",
" <td>-11.346409</td>\n",
" <td>0.307456</td>\n",
" <td>0.199466</td>\n",
" <td>NaN</td>\n",
" <td>-59.247330</td>\n",
" <td>-2.016078</td>\n",
" <td>-7.527126</td>\n",
" <td>1.748779</td>\n",
" <td>17.8978</td>\n",
" <td>17.517401</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>635674126383965568</td>\n",
" <td>138.842874</td>\n",
" <td>19.031798</td>\n",
" <td>-3.897001</td>\n",
" <td>-12.702780</td>\n",
" <td>0.779463</td>\n",
" <td>0.223692</td>\n",
" <td>NaN</td>\n",
" <td>-59.133391</td>\n",
" <td>-2.306901</td>\n",
" <td>-7.560608</td>\n",
" <td>-0.741800</td>\n",
" <td>19.2873</td>\n",
" <td>17.678101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>635535454774983040</td>\n",
" <td>137.837752</td>\n",
" <td>18.864007</td>\n",
" <td>-4.335041</td>\n",
" <td>-14.492309</td>\n",
" <td>0.314514</td>\n",
" <td>0.102775</td>\n",
" <td>NaN</td>\n",
" <td>-59.785300</td>\n",
" <td>-1.594569</td>\n",
" <td>-9.357536</td>\n",
" <td>-1.218492</td>\n",
" <td>16.9238</td>\n",
" <td>16.478100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>635497276810313600</td>\n",
" <td>138.044516</td>\n",
" <td>19.009471</td>\n",
" <td>-7.172931</td>\n",
" <td>-12.291499</td>\n",
" <td>0.425404</td>\n",
" <td>0.337689</td>\n",
" <td>NaN</td>\n",
" <td>-59.557744</td>\n",
" <td>-1.682147</td>\n",
" <td>-9.000831</td>\n",
" <td>2.334407</td>\n",
" <td>19.9242</td>\n",
" <td>18.334000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" source_id ra dec pmra pmdec parallax \\\n",
"0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 0.791393 \n",
"1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 0.307456 \n",
"2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 0.779463 \n",
"3 635535454774983040 137.837752 18.864007 -4.335041 -14.492309 0.314514 \n",
"4 635497276810313600 138.044516 19.009471 -7.172931 -12.291499 0.425404 \n",
"\n",
" parallax_error radial_velocity phi1 phi2 pm_phi1 pm_phi2 \\\n",
"0 0.271754 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n",
"1 0.199466 NaN -59.247330 -2.016078 -7.527126 1.748779 \n",
"2 0.223692 NaN -59.133391 -2.306901 -7.560608 -0.741800 \n",
"3 0.102775 NaN -59.785300 -1.594569 -9.357536 -1.218492 \n",
"4 0.337689 NaN -59.557744 -1.682147 -9.000831 2.334407 \n",
"\n",
" g_mean_psf_mag i_mean_psf_mag \n",
"0 NaN NaN \n",
"1 17.8978 17.517401 \n",
"2 19.2873 17.678101 \n",
"3 16.9238 16.478100 \n",
"4 19.9242 18.334000 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged = pd.merge(candidate_df, \n",
" photo_df, \n",
" on='source_id', \n",
" how='left')\n",
"merged.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first argument is the \"left\" table, the second argument is the \"right\" table, and the keyword argument `on='source_id'` specifies a column to use to match up the rows.\n",
"\n",
"The argument `how='left'` means that the result should have all rows from the left table, even if some of them don't match up with a row in the right table.\n",
"\n",
"If you are interested in the other options for `how`, you can [read the documentation of `merge`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html).\n",
"\n",
"You can also do different types of join in ADQL/SQL; [you can read about that here](https://www.w3schools.com/sql/sql_join.asp).\n",
"\n",
"The result is a `DataFrame` that contains the same number of rows as `candidate_df`. "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(7346, 3724, 7346)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(candidate_df), len(photo_df), len(merged)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And all columns from both tables."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"source_id\n",
"ra\n",
"dec\n",
"pmra\n",
"pmdec\n",
"parallax\n",
"parallax_error\n",
"radial_velocity\n",
"phi1\n",
"phi2\n",
"pm_phi1\n",
"pm_phi2\n",
"g_mean_psf_mag\n",
"i_mean_psf_mag\n"
]
}
],
"source": [
"for colname in merged.columns:\n",
" print(colname)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Detail** You might notice that Pandas also provides a function called `join`; it does almost the same thing, but the interface is slightly different. We think `merge` is a little easier to use, so that's what we chose. It's also more consistent with JOIN in SQL, so if you learn how to use `pd.merge`, you are also learning how to use SQL JOIN.\n",
"\n",
"Also, someone might ask why we have to use Pandas to do this join; why didn't we do it in ADQL. The answer is that we could have done that, but since we already have the data we need, we should probably do the computation locally rather than make another round trip to the Gaia server."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Missing data\n",
"\n",
"Let's add columns to the merged table for magnitude and color."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"merged['mag'] = merged['g_mean_psf_mag']\n",
"merged['color'] = merged['g_mean_psf_mag'] - merged['i_mean_psf_mag']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These columns contain the special value `NaN` where we are missing data.\n",
"\n",
"We can use `notnull` to see which rows contain value data, that is, not null values."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 False\n",
"1 True\n",
"2 True\n",
"3 True\n",
"4 True\n",
" ... \n",
"7341 True\n",
"7342 False\n",
"7343 False\n",
"7344 True\n",
"7345 False\n",
"Name: color, Length: 7346, dtype: bool"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged['color'].notnull()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And `sum` to count the number of valid values."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3724"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged['color'].notnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For scientific purposes, it's not obvious what we should do with candidate stars if we don't have photometry data. Should we give them the benefit of the doubt or leave them out?\n",
"\n",
"In part the answer depends on the goal: are we trying to identify more stars that might be in GD-1, or a smaller set of stars that have higher probability?\n",
"\n",
"In the next section, we'll leave them out, but you can experiment with the alternative."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Selecting based on photometry\n",
"\n",
"Now let's see how many of these points are inside the polygon we chose.\n",
"\n",
"We can use a list of column names to select `color` and `mag`."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>color</th>\n",
" <th>mag</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.3804</td>\n",
" <td>17.8978</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.6092</td>\n",
" <td>19.2873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.4457</td>\n",
" <td>16.9238</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.5902</td>\n",
" <td>19.9242</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" color mag\n",
"0 NaN NaN\n",
"1 0.3804 17.8978\n",
"2 1.6092 19.2873\n",
"3 0.4457 16.9238\n",
"4 1.5902 19.9242"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"points = merged[['color', 'mag']]\n",
"points.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is a `DataFrame` that can be treated as a sequence of coordinates, so we can pass it to `contains_points`:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, ..., False, False, False])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inside = path.contains_points(points)\n",
"inside"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is a Boolean array. We can use `sum` to see how many stars fall in the polygon."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"481"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inside.sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can use `inside` as a mask to select stars that fall inside the polygon."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"selected2 = merged[inside]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's make a color-magnitude plot one more time, highlighting the selected stars with green `x` marks."
]
},
{
"cell_type": "code",
"execution_count": 27,
"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": [
"plot_cmd(photo_table)\n",
"plt.plot(xs, ys)\n",
"\n",
"plt.plot(selected2['color'], selected2['mag'], 'gx');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It looks like the selected stars are, in fact, inside the polygon, which means they have photometry data consistent with GD-1.\n",
"\n",
"Finally, we can plot the coordinates of the selected stars:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x180 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,2.5))\n",
"\n",
"x = selected2['phi1']\n",
"y = selected2['phi2']\n",
"\n",
"plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)\n",
"\n",
"plt.xlabel('ra (degree GD1)')\n",
"plt.ylabel('dec (degree GD1)')\n",
"\n",
"plt.axis('equal');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This example includes two new Matplotlib commands:\n",
"\n",
"* `figure` creates the figure. In previous examples, we didn't have to use this function; the figure was created automatically. But when we call it explicitly, we can provide arguments like `figsize`, which sets the size of the figure.\n",
"\n",
"* `axis` with the parameter `equal` sets up the axes so a unit is the same size along the `x` and `y` axes.\n",
"\n",
"In an example like this, where `x` and `y` represent coordinates in space, equal axes ensures that the distance between points is represented accurately. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Write the data\n",
"\n",
"Let's write the merged DataFrame to a file."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"filename = 'gd1_merged.hdf5'\n",
"\n",
"merged.to_hdf(filename, 'merged')\n",
"selected2.to_hdf(filename, 'selected2')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-rw-r-- 1 downey downey 2.0M Nov 18 19:28 gd1_merged.hdf5\r\n"
]
}
],
"source": [
"!ls -lh gd1_merged.hdf5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If you are using Windows, `ls` might not work; in that case, try:\n",
"\n",
"```\n",
"!dir gd1_merged.hdf5\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Save the polygon\n",
"\n",
"[Reproducibile research](https://en.wikipedia.org/wiki/Reproducibility#Reproducible_research) is \"the idea that ... the full computational environment used to produce the results in the paper such as the code, data, etc. can be used to reproduce the results and create new work based on the research.\"\n",
"\n",
"This Jupyter notebook is an example of reproducible research because it contains all of the code needed to reproduce the results, including the database queries that download the data and and analysis.\n",
"\n",
"However, when we used `ginput` to define a polygon by hand, we introduced a non-reproducible element to the analysis. If someone running this notebook chooses a different polygon, they will get different results. So it is important to record the polygon we chose as part of the data analysis pipeline.\n",
"\n",
"Since `coords` is a NumPy array, we can't use `to_hdf` to save it in a file. But we can convert it to a Pandas `DataFrame` and save that.\n",
"\n",
"As an alternative, we could use [PyTables](http://www.pytables.org/index.html), which is the library Pandas uses to read and write files. It is a powerful library, but not easy to use directly. So let's take advantage of Pandas."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"coords_df = pd.DataFrame(coords)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"filename = 'gd1_polygon.hdf5'\n",
"coords_df.to_hdf(filename, 'coords_df')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can read it back like this."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"coords2_df = pd.read_hdf(filename, 'coords_df')\n",
"coords2 = coords2_df.to_numpy()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And verify that the data we read back is the same."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.all(coords2 == coords)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary\n",
"\n",
"In this notebook, we worked with two datasets: the list of candidate stars from Gaia and the photometry data from Pan-STARRS.\n",
"\n",
"We drew a color-magnitude diagram and used it to identify stars we think are likely to be in GD-1.\n",
"\n",
"Then we used a Pandas `merge` operation to combine the data into a single `DataFrame`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Best practices\n",
"\n",
"* If you want to perform something like a database `JOIN` operation with data that is in a Pandas `DataFrame`, you can use the `join` or `merge` function. In many cases, `merge` is easier to use because the arguments are more like SQL.\n",
"\n",
"* Use Matplotlib options to control the size and aspect ratio of figures to make them easier to interpret. In this example, we scaled the axes so the size of a degree is equal along both axes.\n",
"\n",
"* Matplotlib also provides operations for working with points, polygons, and other geometric entities, so it's not just for making figures.\n",
"\n",
"* Be sure to record every element of the data analysis pipeline that would be needed to replicate the results."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"celltoolbar": "Tags",
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}