{
"cells": [
{
"cell_type": "markdown",
"id": "5d33b407-e33c-41ad-9502-4a3ccb776a84",
"metadata": {},
"source": [
"# 800100715151 Astronomide Veritabanları #\n",
"## Ders - 05c Astronomi Verisi İçin Özelleştirilmiş Bir Sorgulama Dili: ##\n",
"## Astronomical Data Query Language (ADQL) ##"
]
},
{
"cell_type": "markdown",
"id": "c0f0e3d5-060d-4374-b256-594df69d0c9d",
"metadata": {},
"source": [
"# Bu derste neler öğreneceksiniz? #\n",
"## Astronomi Verisi için Özelleştirilmiş Bir Sorgulama Dili ADQL ##\n",
"\n",
"* [Astronomical Data Query Language: ADQL](#Astronomical-Data-Query-Language:-ADQL)\n",
" * [Matematiksel Fonksiyon ve Operatörler](#Matematiksel-Fonksiyon-ve-Operatörler)\n",
" * [Geometrik Fonksiyon ve Operatörler](#Geometrik-Fonksiyon-ve-Operatörler)\n",
" * [Alt sorgular (Subqueries)](#Alt-sorgular-(Subqueries))\n",
" * [Sorgu Birleştirme İşlemleri](#Sorgu-Birleştirme-İşlemleri)\n",
" * [Koşullu Sorgular](#Koşullu-Sorgular)\n",
"* [ADQL Örnekleri](#ADQL-Örnekleri)\n",
" * [Simbad Veritabanı ADQL Örnekleri](#Simbad-Veritabanı-ADQL-Örnekleri)\n",
" * [Gaia Veritabanı ADQL Örnekleri](#Gaia-Veritabanı-ADQL-Örnekleri)\n",
"* [Kaynaklar](#Kaynaklar)"
]
},
{
"cell_type": "markdown",
"id": "9d6300e5-306b-4118-9825-9ab2a3a1f191",
"metadata": {},
"source": [
"## Astronomical Data Query Language: ADQL ##\n",
"\n",
"[Astronomical Data Query Language (ADQL)](https://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html), Uluslararası Sanal Gözlemevleri Birliği (IVOA) tarafından sanal gözlemevi (VO) servislerine gönderilen astronomiye özgü sorguları için kullanılan, yapısal sorgulama dilinin (SQL) özelleştirilmiş bir versiyonudur. IVOA, astronomi verilerine erişmek için çeşitli standartlaştırılmış protokoller geliştirmiştir. Örnek olarak görüntü ve tayfsal verilere erişim için için kullanılan Basit Görüntü Erişimi (Simple Image Access, SIA) ve Basit Tayfsal Veri Erişimi (Simple Spectral Access, SSA) protokolleri verilebilir. Bu protokoller aracılığıyla veri sorgulamak ve farklı VO servislerinin sorgu karmaşıklığına, astronomiye özgü bazı fonksiyonları da kullanarak kolaylık getirmek amacıyla geliştirilmiştir.\n",
"\n",
"ADQL, bazı astronomi verisini sorgularken çok kullanılan bazı fonksiyonları içermektedir. Bunlar;\n",
"\n",
"### Matematiksel Fonksiyon ve Operatörler ###\n",
"ABS, ACOS, ASIN, ATAN, ATAN2, CEILING, COS, DEGREES, EXP, FLOOR, LOG, LOG10, MOD, PI, POWER, RADIANS, RAND, ROUND, SIN, SQRT, TAN, TOP, TRUNCATE\n",
"\n",
"### Geometrik Fonksiyon ve Operatörler ###\n",
"AREA, BOX, CENTROID, CIRCLE, CONTAINS, COORD1, COORD2, COORDSYS, DISTANCE, INTERSECTS, POINT, POLYGON, REGION\n",
"\n",
"Bir ADQL sorgusunun temel yapısı;\n",
"\n",
"```\n",
"SELECT\n",
" [ ALL | DISTINCT ]\n",
" [ TOP unsigned_decimal ]\n",
" {\n",
" * |\n",
" { value_expression [ [AS] column_name ] }, ...\n",
" }\n",
" FROM {\n",
" {\n",
" table_name [ [AS] identifier ] |\n",
" ( SELECT ....) [ [AS] identifier ] |\n",
" table_name [NATURAL]\n",
" [ INNER | { LEFT | RIGHT | FULL [OUTER] } ]\n",
" JOIN table_name\n",
" [ON search_condition | USING ( column_name,...) ]\n",
" },\n",
" ...\n",
" }\n",
"\n",
" [ WHERE search_condition ]\n",
" [ GROUP BY group_by_term, ... ]\n",
" [ HAVING search_condition ]\n",
" [ ORDER BY\n",
" { order_by_expression } [ ASC | DESC],\n",
" ...\n",
" ]\n",
" [ OFFSET unsigned_decimal ]\n",
"```\n",
"şeklindedir."
]
},
{
"cell_type": "markdown",
"id": "9ba7883c-870c-4a6e-8d5f-88538f990456",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "0ba4857a-8f97-4e07-9902-a859f5314b1f",
"metadata": {},
"source": [
"### Alt sorgular (Subqueries) ###\n",
"Tablo alt sorguları, bir sorgunun `WHERE` ile verilen bir koşul için `IN` ve `EXISTS` gibi yapılar ile birleştirilmesiyle kurgulanabilir.\n",
"\n",
"```\n",
"SELECT\n",
" alpha_source.id\n",
" FROM \n",
" alpha_source\n",
" WHERE\n",
" alpha_sourceid >=5\n",
" AND\n",
" alpha_sourceid IN \n",
" (\n",
" SELECT id FROM alpha_source WHERE id < 10\n",
" )\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "b7ad504c-b4a0-43ab-8f87-a49d35ccaf64",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "43e5459d-226b-4a40-91dd-3b84359c6fd0",
"metadata": {},
"source": [
"### Sorgu Birleştirme İşlemleri ###\n",
"\n",
"ADQL, `INNER` ve `OUTER` (`LEFT`, `RIGHT` ve `FULL`) birleştirmelerini destekler. Herhangi bir tür belirtilmezse varsayılan değer `INNER` olur. "
]
},
{
"cell_type": "markdown",
"id": "11dd254b-9db5-4dbd-b35a-a6ef86e06d3a",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "9a09f76d-600a-4c75-a79e-c3f436baab58",
"metadata": {},
"source": [
"### Koşullu Sorgular ###\n",
"\n",
"SQL dilinin yapıları olan `JOIN`, `HAVING` ve `WHERE` ifadeleri kullanılarak sorgular koşullara bağlanabilir. Bu amaçla karşılaştırma operatörleri (\"=, !=, <>, <, >, <=, >=\") gibi yapılardan, `NOT`,`BETWEEN`, `LIKE`, `ILIKE` gibi ifadelerden, `IS NULL`, `IS NOT NULL` ve `EXISTS` gibi kontrol yapılarından faydalanılabilir."
]
},
{
"cell_type": "markdown",
"id": "ed449d96-baed-4fb6-9ea6-d3465a009668",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "4064e1c4-91ae-47bb-8324-2eb51333429b",
"metadata": {},
"source": [
"# ADQL Örnekleri #\n",
"\n",
"ADQL kullanımıı örneklendirmek üzere aşağıda Simbad ve Gaia veritabanlarını sorgulamak üzere seçilmiş bazı örnekler yer almaktadır. Bu örnekler için ilgili veritabanlarına `astroquery` modülü fonksiyonları aracılığıyla bağlanılacaktır."
]
},
{
"cell_type": "markdown",
"id": "1fcaea61-fd0f-4f9d-8515-f0e1d59da8d5",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "0a893002-df83-4834-98c6-dace06ec1058",
"metadata": {},
"source": [
"## Simbad Veritabanı ADQL Örnekleri ##\n",
"\n",
"Simbad veritabanında ADQL sorguları [Table Access Protocol (TAP)](https://simbad.cds.unistra.fr/simbad/sim-tap/) servisi aracılığyla gerçekleştirilir. `astroquery.simbad` modülü bu servise string formatında kurgulanan sorguları `query_tap` fonksiyonu ile gönderir. Dönen sonuç bir `astropy` tablosudur."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f8ee5b80-9384-4230-9e37-98ce87267d9e",
"metadata": {},
"outputs": [],
"source": [
"import astroquery\n",
"from astroquery.gaia import Gaia\n",
"from astroquery.simbad import Simbad"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6989761a-fc5b-4f2b-965a-70d7080bdc33",
"metadata": {},
"outputs": [],
"source": [
"Simbad.ROW_LIMIT = -1"
]
},
{
"cell_type": "markdown",
"id": "1eee0d14-ae16-458e-863a-89c835acad99",
"metadata": {},
"source": [
"#### Örnek-1: İsimlerinden biri sağlanan bir nesnenin temel parametrelerinin çekilmesi\n",
"\n",
"Aşağıdaki sorguda M13'ün `OID`, `RA`, `DEC`, `main_id` gibi bazı temel parametrelerinin yanısıra `galdim_majaxix`, `galdim_minaxis`, `galdim_angle` gibi galaksinin şeklini tanımalayan parametreleri Simbad veritabanının [\"Basic Search\"](http://simbad.cds.unistra.fr/simbad/sim-fbasic) ile erişilen $basic$ ile [\"By Identifier Search\"](http://simbad.cds.unistra.fr/simbad/sim-fid) ile erişilen $ident$ tabloları sırasıyla `OID` ve `OIDREF` sütunları üzerinden bağlanarak sorgulanmasıyla elde edilmektedir."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "28125c24-70bf-48a3-8c38-d6c93e50a761",
"metadata": {},
"outputs": [],
"source": [
"# Basic data from an object given one of its identifiers.\n",
"adql_simbad_sorgu1 = \"\"\"SELECT basic.OID,\n",
" RA,\n",
" DEC,\n",
" main_id AS \"Main identifier\",\n",
" coo_bibcode AS \"Coord Reference\",\n",
" nbref AS \"Number of References\",\n",
" plx_value as \"Parallax\",\n",
" rvz_radvel as \"Radial velocity\",\n",
" galdim_majaxis,\n",
" galdim_minaxis,\n",
" galdim_angle AS \"Galaxy ellipse angle\"\n",
"FROM basic JOIN ident ON oidref = oid\n",
"WHERE id = 'm13';\"\"\"\n",
"r = Simbad.query_tap(adql_simbad_sorgu1)\n",
"print(r['Main identifier','galdim_majaxis','galdim_minaxis','Galaxy ellipse angle'])"
]
},
{
"cell_type": "markdown",
"id": "88df4433-2cca-46d4-9b34-187bcd9941c1",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "77794e7f-e760-4600-8ab5-7f723ed0ef07",
"metadata": {},
"source": [
"#### Örnek-2: Bibliyografik referansı (künyesi) verilen bir yayında yer alan nesnelerin çekilmesi ####\n",
"\n",
"Aşağıdaki sorguda $2006AJ.131.1163S$ referansında yer alan nesneler [\"Reference Query\"](http://simbad.cds.unistra.fr/simbad/sim-fref) yoluyla erişilen $has\\_ref$ ve [\"Basic Query\"](http://simbad.cds.unistra.fr/simbad/sim-fbasic) yoluyla erişilen $basic$ tablolarının sırasıyla `oidref` ve `oid` sütunları üzerinden bağlanmasıyla elde edilen ve `basic.OID` ve `main_id` sütunlarından oluşan tablo, `main_id` (sorgudaki lakabı `Identifier` olarak belirlenmektedir) sütununa göre sıralanmaktadır."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fef6baaf-84ea-4064-8e7b-166139940498",
"metadata": {},
"outputs": [],
"source": [
"# Display objects contained in a given bibliographic reference.\n",
"adql_simbad_sorgu2 = \"\"\"SELECT basic.OID, main_id AS \"Identifier\"\n",
"FROM has_ref JOIN basic ON oidref = oid JOIN ref ON oidbibref = oidbib\n",
"WHERE bibcode = '2006AJ.131.1163S'\n",
"ORDER BY \"Identifier\";\"\"\"\n",
"r = Simbad.query_tap(adql_simbad_sorgu2)\n",
"r"
]
},
{
"cell_type": "markdown",
"id": "6afd360b-055c-4947-b5ba-c5c6a11b76a7",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "c10daa62-b6e5-4d54-829b-8442c948d7cd",
"metadata": {},
"source": [
"#### Örnek-3: Bir nesnenin çeşitli fotometrik bantlardaki parlaklıklarının çekilmesi ####\n",
"\n",
"Aşağıdaki ADQL sorgusunda Simbad veritabanının $allfluxes$ tablosundan `B`,`V`,`R`,`I`,`J` sütunları, bu tablonun [\"Identifier Query\"](http://simbad.cds.unistra.fr/simbad/sim-fid) ile erişilen $ident$ tablosunun `oidref` sütunları üzerinden bağlanmasıyla M13 cismi için elde edilmektedir."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "faca9dfe-90c5-4b3f-9a56-007d3343ac52",
"metadata": {},
"outputs": [],
"source": [
"# Basic magnitudes of an object (from one identifier)\n",
"adql_simbad_sorgu3 = \"\"\"SELECT B, V, R ,I , J from allfluxes\n",
"JOIN ident USING(oidref)\n",
"WHERE id = 'm13';\"\"\"\n",
"r = Simbad.query_tap(adql_simbad_sorgu3)\n",
"r"
]
},
{
"cell_type": "markdown",
"id": "e6d178fd-e25d-4ab0-816e-2c74d07daa20",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "dd882f5f-f135-4ebf-abac-36aa6d9e5f5d",
"metadata": {},
"source": [
"## Gaia Veritabanı ADQL Örnekleri ##\n",
"\n",
"Gaia veritabanında ADQL sorguları [Gaia Veri Arşivi](https://gea.esac.esa.int/archive/) \"Advanced ADQL\" servisi aracılığyla gerçekleştirilir. `astroquery.gaia` modülü bu servise string formatında kurgulanan sorguları `launch_job` fonksiyonu ile gönderir. Sorgu nesnesinin `get_results()` metodu, istenen sorgu sonucunu, bir `astropy` tablosu olarak verir."
]
},
{
"cell_type": "markdown",
"id": "1cece26e-bcfd-455d-a219-c911705df6c9",
"metadata": {},
"source": [
"#### Örnek-1: Belirli bir dairesel alandan seçilen noktaların bir gökyüzü koordinatına açısal uzaklıkları\n",
"\n",
"Aşağıdaki sorguda koordinatları $RA = 81^{\\circ}.28$ ve $DEC = -69^{\\circ}.78$ olan bir noktaya, bu sağaçıklık ve dikaçıklık merkezli, 5 yaydakikası yarıçapında bir çemberin içinde kalan `gaiadr3.gaia_source` Gaia DR3 cisimlerinden 20.5 kadirden daha parlak ve paralaks değeri ölçülmüş olanlarının tüm sütunları ve bu noktaya olan açısal uzaklıklıklarından oluşan bir tablo elde edilmektedir."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "96075353-c857-464a-b0f9-c13c721be43a",
"metadata": {},
"outputs": [],
"source": [
"# Cone search sorted by angular separation\n",
"adql_gaia_sorgu1 = \"\"\"SELECT *, DISTANCE(POINT(81.28, -69.78), POINT(ra, dec)) AS ang_sep\n",
"FROM gaiadr3.gaia_source WHERE 1 = CONTAINS(\n",
"POINT(81.28, -69.78),CIRCLE(ra, dec, 5./60.))\n",
"AND phot_g_mean_mag < 20.5\n",
"AND parallax IS NOT NULL\n",
"ORDER BY ang_sep ASC\"\"\"\n",
"job = Gaia.launch_job(adql_gaia_sorgu1)\n",
"r = job.get_results()\n",
"#r['DESIGNATION','ra','dec','ang_sep'].pprint_all()"
]
},
{
"cell_type": "markdown",
"id": "0e23caa4-f35c-4393-beb2-f1ef4fea9ed0",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "9bb0c7e4-f120-4101-a16d-84f6f108f5c4",
"metadata": {},
"source": [
"#### Örnek-2: HIPPARCOS ve Gaia Veritabanlarının Çapraz Eşleştirmesi ####\n",
"\n",
"Aşağıdaki sorguda `public.hipparcos` tablosunun `gaiadr3.gaia_source` tablosuyla $0^{\\circ}.00028$'lik bir tolerans değeri ile çapraz eşleştirilmesi sonrası biribiriyle eşleşen ilk 1000 satırın tüm sütunları ve her iki katalogdaki konumları arası açısal uzaklık ($ang\\_sep$) değerlerinden oluşan bir tablo elde edilmektedir."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ef223f8e-8e34-48f2-bff0-0219689b620e",
"metadata": {},
"outputs": [],
"source": [
"# Basic positional cross-match between HIPPARCOS & Gaia\n",
"adql_gaia_sorgu2 = \"\"\"SELECT TOP 1000 *, DISTANCE(POINT(hip.ra, hip.de),\n",
"POINT(gaia.ra, gaia.dec)) AS ang_sep\n",
"FROM public.hipparcos AS hip\n",
"JOIN gaiadr3.gaia_source AS gaia \n",
"ON 1 = CONTAINS(\n",
" POINT(hip.ra, hip.de),\n",
" CIRCLE(gaia.ra, gaia.dec, 0.00028))\"\"\"\n",
"job = Gaia.launch_job(adql_gaia_sorgu2)\n",
"r = job.get_results()\n",
"#r['DESIGNATION','hip','ang_sep'].pprint_all()"
]
},
{
"cell_type": "markdown",
"id": "34f7804e-1c1a-42cc-88d1-6d0ec82a3def",
"metadata": {},
"source": [
"#### Örnek-3: Gaia DR2 ve EDR3'nin Çapraz Eşleştirmesi\n",
"\n",
"Aşağıdaki sorguda Gaia Data-Release 2 (DR2) ($gaiadr2.gaia\\_source$) ve Early Data Release-3 (EDR3) ($gaiadr3.dr2\\_neighbourhood$) tablolarının sırasıyla `dr2.source_id` ve `dr3.dr2_source_id` sütunları üzerinden bağlanması sonucu $G$ bandında ortalama olarak 5 kadirden parlak cisimlerin her iki katalogdaki ID numaraları ve parlaklıklarının artan sırada sıralandığı bir tablo oluşmaktadır."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fd0de285-bf00-4c38-888e-ced244836781",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# Bright sources in DR2 and EDR3\n",
"adql_gaia_sorgu3 = \"\"\"SELECT dr2.source_id, dr2.phot_g_mean_mag, dr3.*\n",
"FROM gaiadr2.gaia_source AS dr2\n",
"JOIN gaiadr3.dr2_neighbourhood AS dr3 ON dr2.source_id = dr3.dr2_source_id\n",
"WHERE dr2.phot_g_mean_mag < 5\n",
"ORDER BY dr2.source_id ASC\"\"\"\n",
"job = Gaia.launch_job(adql_gaia_sorgu3)\n",
"r = job.get_results()\n",
"r['source_id','dr2_source_id','phot_g_mean_mag']"
]
},
{
"cell_type": "markdown",
"id": "607fc074-4a71-4073-8084-f81cc993de8d",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
},
{
"cell_type": "markdown",
"id": "e157ae03-a4bd-49f9-8697-09d1ad2a27b2",
"metadata": {},
"source": [
"# Kaynaklar\n",
"\n",
"1. [Astronomical Data Query Language](https://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#sec:features)\n",
"2. [Simbad Table Access Protocol (TAP) Servisi](http://simbad.cds.unistra.fr/simbad/sim-tap/)\n",
"3. [ESA Gaia Veri Arşivi](http://simbad.cds.unistra.fr/simbad/sim-tap/)\n",
"4. [astroquery Dokümantasyonu](https://astroquery.readthedocs.io/en/latest/)"
]
},
{
"cell_type": "markdown",
"id": "445cc802-1f94-4e8d-8e61-85a2dfda423b",
"metadata": {},
"source": [
"[Başa Dön](#Bu-derste-neler-öğreneceksiniz?)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}