{ "cells": [ { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "s1 = pd.Series(np.random.randn(10))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 -1.114610\n", "1 -0.016532\n", "2 -0.483466\n", "3 -0.181992\n", "4 -0.850196\n", "5 -0.141419\n", "6 0.775546\n", "7 -0.442790\n", "8 0.457040\n", "9 0.376961\n", "dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.series.Series" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(s1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 7698 entries, 0 to 7697\n", "Data columns (total 14 columns):\n", "0 7698 non-null int64\n", "1 7698 non-null object\n", "2 7649 non-null object\n", "3 7698 non-null object\n", "4 7698 non-null object\n", "5 7698 non-null object\n", "6 7698 non-null float64\n", "7 7698 non-null float64\n", "8 7698 non-null int64\n", "9 7698 non-null object\n", "10 7698 non-null object\n", "11 7698 non-null object\n", "12 7698 non-null object\n", "13 7698 non-null object\n", "dtypes: float64(2), int64(2), object(10)\n", "memory usage: 842.1+ KB\n" ] } ], "source": [ "airports = pd.read_csv(r\"G:\\X-Lab\\LearningFiles\\DataSci\\data\\airports.dat\", header=None)\n", "airports.info()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "airports.columns = [\"airport_id\", \"name\", \"city\", \"country\", \"IATA\", \"ICAO\", \"lat\", \"lon\", \"altitude\", \"timezone\", \"DST\", \"Tz database timezone\", \"type\", \"source\"]" ] }, { "cell_type": "code", "execution_count": 13, "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", " \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", "
airport_idnamecitycountryIATAICAOlatlonaltitudetimezoneDSTTz database timezonetypesource
768814101Rustaq AirportAl Masna'ahOmanMNHOORQ23.64055657.487500349\\N\\N\\NairportOurAirports
768914102Laguindingan AirportCagayan de Oro CityPhilippinesCGYRPMY8.612203124.456496190\\N\\N\\NairportOurAirports
769014103Kostomuksha AirportKostomukshaRussia\\NULPM64.61799630.687000681\\N\\N\\NairportOurAirports
769114104Privolzhskiy Air BaseAstrakhanRussia\\NXRAP46.39600047.893000-66\\N\\N\\NairportOurAirports
769214105Kubinka Air BaseKubinkaRussia\\NUUMB55.61169536.650002614\\N\\N\\NairportOurAirports
769314106Rogachyovo Air BaseBelayaRussia\\NULDA71.61669952.478298272\\N\\N\\NairportOurAirports
769414107Ulan-Ude East AirportUlan UdeRussia\\NXIUW51.849998107.7379991670\\N\\N\\NairportOurAirports
769514108Krechevitsy Air BaseNovgorodRussia\\NULLK58.62500031.38500085\\N\\N\\NairportOurAirports
769614109Desierto de Atacama AirportCopiapoChileCPOSCAT-27.261200-70.779198670\\N\\N\\NairportOurAirports
769714110Melitopol Air BaseMelitopolUkraine\\NUKDM46.88000135.3050000\\N\\N\\NairportOurAirports
\n", "
" ], "text/plain": [ " airport_id name city \\\n", "7688 14101 Rustaq Airport Al Masna'ah \n", "7689 14102 Laguindingan Airport Cagayan de Oro City \n", "7690 14103 Kostomuksha Airport Kostomuksha \n", "7691 14104 Privolzhskiy Air Base Astrakhan \n", "7692 14105 Kubinka Air Base Kubinka \n", "7693 14106 Rogachyovo Air Base Belaya \n", "7694 14107 Ulan-Ude East Airport Ulan Ude \n", "7695 14108 Krechevitsy Air Base Novgorod \n", "7696 14109 Desierto de Atacama Airport Copiapo \n", "7697 14110 Melitopol Air Base Melitopol \n", "\n", " country IATA ICAO lat lon altitude timezone DST \\\n", "7688 Oman MNH OORQ 23.640556 57.487500 349 \\N \\N \n", "7689 Philippines CGY RPMY 8.612203 124.456496 190 \\N \\N \n", "7690 Russia \\N ULPM 64.617996 30.687000 681 \\N \\N \n", "7691 Russia \\N XRAP 46.396000 47.893000 -66 \\N \\N \n", "7692 Russia \\N UUMB 55.611695 36.650002 614 \\N \\N \n", "7693 Russia \\N ULDA 71.616699 52.478298 272 \\N \\N \n", "7694 Russia \\N XIUW 51.849998 107.737999 1670 \\N \\N \n", "7695 Russia \\N ULLK 58.625000 31.385000 85 \\N \\N \n", "7696 Chile CPO SCAT -27.261200 -70.779198 670 \\N \\N \n", "7697 Ukraine \\N UKDM 46.880001 35.305000 0 \\N \\N \n", "\n", " Tz database timezone type source \n", "7688 \\N airport OurAirports \n", "7689 \\N airport OurAirports \n", "7690 \\N airport OurAirports \n", "7691 \\N airport OurAirports \n", "7692 \\N airport OurAirports \n", "7693 \\N airport OurAirports \n", "7694 \\N airport OurAirports \n", "7695 \\N airport OurAirports \n", "7696 \\N airport OurAirports \n", "7697 \\N airport OurAirports " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "airports.tail(10)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "237" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 哪个国家拥有的机场最多\n", "airports.country.unique().size" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "max_airports_num = airports.groupby(\"country\")" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "max_airports_countries = max_airports_num[\"airport_id\"].agg(np.size).sort_values(ascending=False)[0:10]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.series.Series" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(max_airports_countries)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "country\n", "United States 1512\n", "Canada 430\n", "Australia 334\n", "Brazil 264\n", "Russia 264\n", "Germany 249\n", "China 241\n", "France 217\n", "United Kingdom 167\n", "India 148\n", "Name: airport_id, dtype: int64" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max_airports_countries" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Those countries owns most airports')" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "plt.style.use(\"seaborn-dark\")\n", "plt.bar(data=max_airports_countries, x=max_airports_countries.index, height=max_airports_countries.values, facecolor = 'lightskyblue')\n", "plt.xticks(rotation=45)\n", "plt.xlabel(\"Country\")\n", "plt.ylabel(\"Airport Number\")\n", "plt.title(\"Those countries owns most airports\")" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "min_alt_agg = airports.groupby(\"country\")" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "min_alt_countries = min_alt_agg[\"altitude\"].agg(np.mean).sort_values(ascending=True)[0:10]" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "country\n", "Kiribati 4.611111\n", "Cayman Islands 6.333333\n", "Johnston Atoll 7.000000\n", "Maldives 8.090909\n", "Tuvalu 9.000000\n", "British Indian Ocean Territory 9.000000\n", "Turks and Caicos Islands 9.333333\n", "Seychelles 9.500000\n", "Marshall Islands 9.875000\n", "Cocos (Keeling) Islands 10.000000\n", "Name: altitude, dtype: float64" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "min_alt_countries" ] } ], "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }