{ "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", "\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": {}, "source": [ "## Installing libraries\n", "\n", "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a 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. \n", "\n", "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", "\n", "TODO: Add a link to the instructions." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "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", "\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": [ "
" ] }, "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", "if IN_COLAB:\n", " coords = None\n", "else:\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.2150537634408602, 17.548197203826344),\n", " (0.3897849462365591, 18.94628403237675),\n", " (0.5376344086021505, 19.902869757174393),\n", " (0.7034050179211468, 20.601913171449596),\n", " (0.8288530465949819, 21.300956585724798),\n", " (0.6630824372759856, 21.52170713760118),\n", " (0.4301075268817204, 20.785871964679913),\n", " (0.27329749103942647, 19.71891096394408),\n", " (0.17473118279569888, 18.688741721854306),\n", " (0.17473118279569888, 17.95290654893304)]" ] }, "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.21505376, 0.38978495, 0.53763441, 0.70340502, 0.82885305,\n", " 0.66308244, 0.43010753, 0.27329749, 0.17473118, 0.17473118]),\n", " array([17.5481972 , 18.94628403, 19.90286976, 20.60191317, 21.30095659,\n", " 21.52170714, 20.78587196, 19.71891096, 18.68874172, 17.95290655]))" ] }, "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": [ "
" ] }, "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.21505376, 17.5481972 ],\n", " [ 0.38978495, 18.94628403],\n", " [ 0.53763441, 19.90286976],\n", " [ 0.70340502, 20.60191317],\n", " [ 0.82885305, 21.30095659],\n", " [ 0.66308244, 21.52170714],\n", " [ 0.43010753, 20.78587196],\n", " [ 0.27329749, 19.71891096],\n", " [ 0.17473118, 18.68874172],\n", " [ 0.17473118, 17.95290655]]), 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": [ "
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2g_mean_psf_magi_mean_psf_mag
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633NaNNaN
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.74877917.897817.517401
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.74180019.287317.678101
3635535454774983040137.83775218.864007-4.335041-14.4923090.3145140.102775NaN-59.785300-1.594569-9.357536-1.21849216.923816.478100
4635497276810313600138.04451619.009471-7.172931-12.2914990.4254040.337689NaN-59.557744-1.682147-9.0008312.33440719.924218.334000
\n", "
" ], "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": [ "
\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", "
colormag
0NaNNaN
10.380417.8978
21.609219.2873
30.445716.9238
41.590219.9242
\n", "
" ], "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": [ "496" ] }, "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": [ "selected = 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": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_cmd(photo_table)\n", "plt.plot(xs, ys)\n", "\n", "plt.plot(selected['color'], selected['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": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,2.5))\n", "\n", "x = selected['phi1']\n", "y = selected['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", "selected.to_hdf(filename, 'selected')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-rw-r-- 1 downey downey 2.0M Oct 19 17:21 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": { "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 }