From 8cebfce2f24585c12fd5955023e20eed635b82bf Mon Sep 17 00:00:00 2001 From: jhenifferakycharia Date: Thu, 26 Oct 2023 11:31:11 -0300 Subject: [PATCH] S12 --- exercicios/para-casa/atividade.ipynb | 183 +++++ .../para-casa}/titanic.csv | 0 material/aula_s12.ipynb | 642 +++++++++++++++++- 3 files changed, 810 insertions(+), 15 deletions(-) create mode 100644 exercicios/para-casa/atividade.ipynb rename {material => exercicios/para-casa}/titanic.csv (100%) diff --git a/exercicios/para-casa/atividade.ipynb b/exercicios/para-casa/atividade.ipynb new file mode 100644 index 0000000..c4a908a --- /dev/null +++ b/exercicios/para-casa/atividade.ipynb @@ -0,0 +1,183 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Introdução\n", + "\n", + "Este conjunto de dados contém informações sobre as vítimas e sobreviventes do naufrágio do navio Titanic. Os campos incluem o ID do passageiro, se é sobrevivente ou não, classe econômica, o nome, sexo, idade, números de irmãos, número de irmãos, pais, número do ticket, o preço do ticket, o número da cabine e o porto de embarcação.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "df = pd.read_csv(\"titanic.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def processar_titanic_dataset(df_titanic):\n", + " # Realiza a leitura do arquivo CSV\n", + " df_titanic = pd.read_csv(df_titanic)\n", + "\n", + " # Tratamento para remover linhas com valores ausentes:\n", + " df_titanic = df_titanic.dropna()\n", + "\n", + " # Deleção de colunas\n", + " columns_to_drop = [\"Sex\", \"Age\"]\n", + " df_titanic = df_titanic.drop(columns=columns_to_drop)\n", + "\n", + " # Sort de valores\n", + " df_titanic = df_titanic.sort_values(by=\"Ticket\")\n", + "\n", + " # Remoção de nulos\n", + " df_titanic = df_titanic.dropna(\"Survived\")\n", + "\n", + " # Reset de índice\n", + " df_titanic = df_titanic.reset_index(drop=True)\n", + "\n", + "\n", + " return df_titanic\n", + "\n", + "# Caminho para o arquivo \"titanic.csv\"\n", + "df_titanic = processar_titanic_dataset(\"titanic.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pd' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\exercicios\\para-casa\\atividade.ipynb Cell 4\u001b[0m line \u001b[0;36m4\n\u001b[0;32m 1\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mmatplotlib\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpyplot\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mplt\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[39m# Importando o dataframe\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m df \u001b[39m=\u001b[39m pd\u001b[39m.\u001b[39mread_csv(\u001b[39m\"\u001b[39m\u001b[39mtitanic.csv\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 6\u001b[0m \u001b[39m# Calcular a idade média dos passageiros\u001b[39;00m\n\u001b[0;32m 7\u001b[0m idade_media \u001b[39m=\u001b[39m df[\u001b[39m\"\u001b[39m\u001b[39mAge\u001b[39m\u001b[39m\"\u001b[39m]\u001b[39m.\u001b[39mmean()\n", + "\u001b[1;31mNameError\u001b[0m: name 'pd' is not defined" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Importando o dataframe\n", + "df = pd.read_csv(\"titanic.csv\")\n", + "\n", + "# Calcular a idade média dos passageiros\n", + "idade_media = df[\"Age\"].mean()\n", + "\n", + "# Plotar o gráfico\n", + "plt.hist(df[\"Age\"], bins=10, color=\"blue\")\n", + "plt.axvline(idade_media, color=\"red\", linestyle=\"--\")\n", + "plt.title(\"Distribuição de idade dos passageiros\")\n", + "plt.xlabel(\"Idade\")\n", + "plt.ylabel(\"Número de passageiros\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Importar o dataframe\n", + "df = pd.read_csv(\"titanic.csv\")\n", + "\n", + "# Plotar o gráfico\n", + "plt.pie(df[\"Sex\"].value_counts(), labels=[\"Homem\", \"Mulher\"], colors=[\"blue\", \"red\"])\n", + "plt.title(\"Distribuição de sexo dos passageiros\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Importar o dataframe\n", + "df = pd.read_csv(\"titanic.csv\")\n", + "\n", + "# Calcular a proporção de sobreviventes por sexo\n", + "prop_homens_sobreviventes = df.loc[df[\"Survived\"] == 1, \"Sex\"].value_counts()[0] / df[\"Sex\"].value_counts()[0]\n", + "prop_mulheres_sobreviventes = df.loc[df[\"Survived\"] == 1, \"Sex\"].value_counts()[1] / df[\"Sex\"].value_counts()[1]\n", + "\n", + "# Plotar o gráfico\n", + "plt.bar([\"Homem\", \"Mulher\"], [prop_homens_sobreviventes, prop_mulheres_sobreviventes], color=[\"blue\", \"red\"])\n", + "plt.title(\"Distribuição de sobreviventes por sexo\")\n", + "plt.xlabel(\"Sexo\")\n", + "plt.ylabel(\"Proporção de sobreviventes\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Insights Gráfico 01\n", + "\n", + "A idade média dos passageiros é de 29 anos.\n", + "A maioria dos passageiros tinha entre 20 e 30 anos.\n", + "Havia um número significativo de passageiros com menos de 10 anos." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Insights Gráfico 02\n", + "\n", + "A maioria dos passageiros era homem.\n", + "As mulheres representavam cerca de 20% da população do navio." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Insights Gráfico 03\n", + "\n", + "As mulheres tinham uma probabilidade muito maior de sobreviver do que os homens.\n", + "Cerca de 75% das mulheres sobreviveram, enquanto apenas 20% dos homens sobreviveram." + ] + } + ], + "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.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/material/titanic.csv b/exercicios/para-casa/titanic.csv similarity index 100% rename from material/titanic.csv rename to exercicios/para-casa/titanic.csv diff --git a/material/aula_s12.ipynb b/material/aula_s12.ipynb index 690a7b6..fcc1b2c 100644 --- a/material/aula_s12.ipynb +++ b/material/aula_s12.ipynb @@ -114,16 +114,270 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "_eorJ3GNS_mm", "outputId": "14f2b233-cc14-4f8a-a041-98b4cb90d2cc" }, - "outputs": [], + "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", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
\n", + "

891 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + ".. ... ... ... \n", + "886 887 0 2 \n", + "887 888 1 1 \n", + "888 889 0 3 \n", + "889 890 1 1 \n", + "890 891 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + ".. ... ... ... ... \n", + "886 Montvila, Rev. Juozas male 27.0 0 \n", + "887 Graham, Miss. Margaret Edith female 19.0 0 \n", + "888 Johnston, Miss. Catherine Helen \"Carrie\" female NaN 1 \n", + "889 Behr, Mr. Karl Howell male 26.0 0 \n", + "890 Dooley, Mr. Patrick male 32.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S \n", + ".. ... ... ... ... ... \n", + "886 0 211536 13.0000 NaN S \n", + "887 0 112053 30.0000 B42 S \n", + "888 2 W./C. 6607 23.4500 NaN S \n", + "889 0 111369 30.0000 C148 C \n", + "890 0 370376 7.7500 NaN Q \n", + "\n", + "[891 rows x 12 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import pandas as pd\n", "\n", - "df = pd.read_csv(\"data/titanic.csv\")\n", + "df = pd.read_csv(\"titanic.csv\")\n", "df" ] }, @@ -138,12 +392,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "id": "ZuehjTU7S_mt", "outputId": "6ce66e1f-01d4-4889-f97f-50d5edae71e6" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['IdPassageiro', 'Sobreviveu', 'Classe', 'Nome', 'Sexo', 'Idade', 'NumeroIrmaos', 'NumeroPais', 'NumeroTicket', 'PrecoTicket', 'NumeroCabine', 'PortoEmbarcacao']\n" + ] + } + ], "source": [ "# Resolução\n", "\n", @@ -417,6 +679,38 @@ "- Utilizar a função loc para obter a idade e sobrevivência do passageiro;\n" ] }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Nome'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3790\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3789\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m-> 3790\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[0;32m 3791\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", + "File \u001b[1;32mindex.pyx:152\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mindex.pyx:181\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Nome'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 27\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m df_filtro \u001b[39m=\u001b[39m df[df[\u001b[39m'\u001b[39;49m\u001b[39mNome\u001b[39;49m\u001b[39m'\u001b[39;49m]\u001b[39m.\u001b[39mstr\u001b[39m.\u001b[39mcontains(\u001b[39m'\u001b[39m\u001b[39mJack\u001b[39m\u001b[39m'\u001b[39m)]\n\u001b[0;32m 2\u001b[0m df_filtro\u001b[39m.\u001b[39mshape()\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\frame.py:3896\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3894\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcolumns\u001b[39m.\u001b[39mnlevels \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m 3895\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3896\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[0;32m 3897\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3898\u001b[0m indexer \u001b[39m=\u001b[39m [indexer]\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3797\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3792\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(casted_key, \u001b[39mslice\u001b[39m) \u001b[39mor\u001b[39;00m (\n\u001b[0;32m 3793\u001b[0m \u001b[39misinstance\u001b[39m(casted_key, abc\u001b[39m.\u001b[39mIterable)\n\u001b[0;32m 3794\u001b[0m \u001b[39mand\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(x, \u001b[39mslice\u001b[39m) \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m casted_key)\n\u001b[0;32m 3795\u001b[0m ):\n\u001b[0;32m 3796\u001b[0m \u001b[39mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3797\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[0;32m 3798\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[0;32m 3799\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3800\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3801\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3802\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[1;31mKeyError\u001b[0m: 'Nome'" + ] + } + ], + "source": [ + "df_filtro = df[df['Nome'].str.contains('Jack')]\n", + "df_filtro.shape()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -519,6 +813,34 @@ "- Obter o valor máximo e mínimo pago por passageiros em cada classe" ] }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Sexo'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 35\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m dado_agrupado \u001b[39m=\u001b[39m df\u001b[39m.\u001b[39;49mgroupby(\u001b[39m'\u001b[39;49m\u001b[39mSexo\u001b[39;49m\u001b[39m'\u001b[39;49m)\n\u001b[0;32m 2\u001b[0m contagem_passageiros \u001b[39m=\u001b[39m dado_agrupado[\u001b[39m'\u001b[39m\u001b[39mIdPassageiro\u001b[39m\u001b[39m'\u001b[39m]\u001b[39m.\u001b[39mcount()\n\u001b[0;32m 4\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mcontagem de passageiros\u001b[39m\u001b[39m\"\u001b[39m)\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\frame.py:8872\u001b[0m, in \u001b[0;36mDataFrame.groupby\u001b[1;34m(self, by, axis, level, as_index, sort, group_keys, observed, dropna)\u001b[0m\n\u001b[0;32m 8869\u001b[0m \u001b[39mif\u001b[39;00m level \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m by \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 8870\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mTypeError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mYou have to supply one of \u001b[39m\u001b[39m'\u001b[39m\u001b[39mby\u001b[39m\u001b[39m'\u001b[39m\u001b[39m and \u001b[39m\u001b[39m'\u001b[39m\u001b[39mlevel\u001b[39m\u001b[39m'\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m-> 8872\u001b[0m \u001b[39mreturn\u001b[39;00m DataFrameGroupBy(\n\u001b[0;32m 8873\u001b[0m obj\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m,\n\u001b[0;32m 8874\u001b[0m keys\u001b[39m=\u001b[39;49mby,\n\u001b[0;32m 8875\u001b[0m axis\u001b[39m=\u001b[39;49maxis,\n\u001b[0;32m 8876\u001b[0m level\u001b[39m=\u001b[39;49mlevel,\n\u001b[0;32m 8877\u001b[0m as_index\u001b[39m=\u001b[39;49mas_index,\n\u001b[0;32m 8878\u001b[0m sort\u001b[39m=\u001b[39;49msort,\n\u001b[0;32m 8879\u001b[0m group_keys\u001b[39m=\u001b[39;49mgroup_keys,\n\u001b[0;32m 8880\u001b[0m observed\u001b[39m=\u001b[39;49mobserved,\n\u001b[0;32m 8881\u001b[0m dropna\u001b[39m=\u001b[39;49mdropna,\n\u001b[0;32m 8882\u001b[0m )\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\groupby\\groupby.py:1274\u001b[0m, in \u001b[0;36mGroupBy.__init__\u001b[1;34m(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, observed, dropna)\u001b[0m\n\u001b[0;32m 1271\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdropna \u001b[39m=\u001b[39m dropna\n\u001b[0;32m 1273\u001b[0m \u001b[39mif\u001b[39;00m grouper \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m-> 1274\u001b[0m grouper, exclusions, obj \u001b[39m=\u001b[39m get_grouper(\n\u001b[0;32m 1275\u001b[0m obj,\n\u001b[0;32m 1276\u001b[0m keys,\n\u001b[0;32m 1277\u001b[0m axis\u001b[39m=\u001b[39;49maxis,\n\u001b[0;32m 1278\u001b[0m level\u001b[39m=\u001b[39;49mlevel,\n\u001b[0;32m 1279\u001b[0m sort\u001b[39m=\u001b[39;49msort,\n\u001b[0;32m 1280\u001b[0m observed\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m \u001b[39mif\u001b[39;49;00m observed \u001b[39mis\u001b[39;49;00m lib\u001b[39m.\u001b[39;49mno_default \u001b[39melse\u001b[39;49;00m observed,\n\u001b[0;32m 1281\u001b[0m dropna\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mdropna,\n\u001b[0;32m 1282\u001b[0m )\n\u001b[0;32m 1284\u001b[0m \u001b[39mif\u001b[39;00m observed \u001b[39mis\u001b[39;00m lib\u001b[39m.\u001b[39mno_default:\n\u001b[0;32m 1285\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39many\u001b[39m(ping\u001b[39m.\u001b[39m_passed_categorical \u001b[39mfor\u001b[39;00m ping \u001b[39min\u001b[39;00m grouper\u001b[39m.\u001b[39mgroupings):\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\groupby\\grouper.py:1009\u001b[0m, in \u001b[0;36mget_grouper\u001b[1;34m(obj, key, axis, level, sort, observed, validate, dropna)\u001b[0m\n\u001b[0;32m 1007\u001b[0m in_axis, level, gpr \u001b[39m=\u001b[39m \u001b[39mFalse\u001b[39;00m, gpr, \u001b[39mNone\u001b[39;00m\n\u001b[0;32m 1008\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m-> 1009\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(gpr)\n\u001b[0;32m 1010\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(gpr, Grouper) \u001b[39mand\u001b[39;00m gpr\u001b[39m.\u001b[39mkey \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 1011\u001b[0m \u001b[39m# Add key to exclusions\u001b[39;00m\n\u001b[0;32m 1012\u001b[0m exclusions\u001b[39m.\u001b[39madd(gpr\u001b[39m.\u001b[39mkey)\n", + "\u001b[1;31mKeyError\u001b[0m: 'Sexo'" + ] + } + ], + "source": [ + "dado_agrupado = df.groupby('Sexo')\n", + "contagem_passageiros = dado_agrupado['IdPassageiro'].count()\n", + "\n", + "print(\"contagem de passageiros\")\n", + "print(contagem_passageiros)" + ] + }, { "cell_type": "markdown", "metadata": { @@ -563,7 +885,109 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting matplotlib\n", + " Downloading matplotlib-3.8.0-cp310-cp310-win_amd64.whl (7.6 MB)\n", + " ---------------------------------------- 0.0/7.6 MB ? eta -:--:--\n", + " --------------------------------------- 0.2/7.6 MB 10.9 MB/s eta 0:00:01\n", + " --------------------------------------- 0.2/7.6 MB 10.9 MB/s eta 0:00:01\n", + " --- ------------------------------------ 0.6/7.6 MB 4.7 MB/s eta 0:00:02\n", + " ----- ---------------------------------- 1.0/7.6 MB 5.8 MB/s eta 0:00:02\n", + " -------- ------------------------------- 1.6/7.6 MB 7.3 MB/s eta 0:00:01\n", + " --------- ------------------------------ 1.9/7.6 MB 7.5 MB/s eta 0:00:01\n", + " ------------ --------------------------- 2.3/7.6 MB 7.3 MB/s eta 0:00:01\n", + " -------------- ------------------------- 2.8/7.6 MB 7.8 MB/s eta 0:00:01\n", + " ----------------- ---------------------- 3.4/7.6 MB 8.3 MB/s eta 0:00:01\n", + " -------------------- ------------------- 3.8/7.6 MB 8.5 MB/s eta 0:00:01\n", + " ----------------------- ---------------- 4.4/7.6 MB 8.6 MB/s eta 0:00:01\n", + " -------------------------- ------------- 5.1/7.6 MB 9.0 MB/s eta 0:00:01\n", + " ------------------------------ --------- 5.7/7.6 MB 9.4 MB/s eta 0:00:01\n", + " -------------------------------- ------- 6.2/7.6 MB 9.4 MB/s eta 0:00:01\n", + " ------------------------------------ --- 6.9/7.6 MB 9.6 MB/s eta 0:00:01\n", + " ------------------------------------- -- 7.1/7.6 MB 9.3 MB/s eta 0:00:01\n", + " --------------------------------------- 7.6/7.6 MB 9.4 MB/s eta 0:00:01\n", + " ---------------------------------------- 7.6/7.6 MB 8.6 MB/s eta 0:00:00\n", + "Requirement already satisfied: packaging>=20.0 in c:\\users\\jheni\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (23.2)\n", + "Requirement already satisfied: numpy<2,>=1.21 in c:\\users\\jheni\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (1.26.0)\n", + "Collecting contourpy>=1.0.1\n", + " Downloading contourpy-1.1.1-cp310-cp310-win_amd64.whl (477 kB)\n", + " ---------------------------------------- 0.0/478.0 kB ? eta -:--:--\n", + " ------------------------------------ 471.0/478.0 kB 28.8 MB/s eta 0:00:01\n", + " ------------------------------------- 478.0/478.0 kB 10.0 MB/s eta 0:00:00\n", + "Collecting fonttools>=4.22.0\n", + " Downloading fonttools-4.43.1-cp310-cp310-win_amd64.whl (2.1 MB)\n", + " ---------------------------------------- 0.0/2.1 MB ? eta -:--:--\n", + " ----- ---------------------------------- 0.3/2.1 MB 19.8 MB/s eta 0:00:01\n", + " ----- ---------------------------------- 0.3/2.1 MB 19.8 MB/s eta 0:00:01\n", + " ----- ---------------------------------- 0.3/2.1 MB 19.8 MB/s eta 0:00:01\n", + " ------------ --------------------------- 0.7/2.1 MB 3.2 MB/s eta 0:00:01\n", + " --------------- ------------------------ 0.8/2.1 MB 3.8 MB/s eta 0:00:01\n", + " ------------------------- -------------- 1.4/2.1 MB 4.4 MB/s eta 0:00:01\n", + " --------------------------- ------------ 1.5/2.1 MB 4.4 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------ --------- 1.6/2.1 MB 4.2 MB/s eta 0:00:01\n", + " ------------------------------- -------- 1.7/2.1 MB 1.8 MB/s eta 0:00:01\n", + " --------------------------------------- 2.1/2.1 MB 2.3 MB/s eta 0:00:01\n", + " ---------------------------------------- 2.1/2.1 MB 2.1 MB/s eta 0:00:00\n", + "Requirement already satisfied: python-dateutil>=2.7 in c:\\users\\jheni\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (2.8.2)\n", + "Collecting kiwisolver>=1.0.1\n", + " Downloading kiwisolver-1.4.5-cp310-cp310-win_amd64.whl (56 kB)\n", + " ---------------------------------------- 0.0/56.1 kB ? eta -:--:--\n", + " ---------------------------------------- 56.1/56.1 kB 3.1 MB/s eta 0:00:00\n", + "Collecting pillow>=6.2.0\n", + " Downloading Pillow-10.1.0-cp310-cp310-win_amd64.whl (2.6 MB)\n", + " ---------------------------------------- 0.0/2.6 MB ? eta -:--:--\n", + " ------ --------------------------------- 0.5/2.6 MB 14.2 MB/s eta 0:00:01\n", + " -------------- ------------------------- 1.0/2.6 MB 12.1 MB/s eta 0:00:01\n", + " ---------------------- ----------------- 1.5/2.6 MB 11.6 MB/s eta 0:00:01\n", + " ---------------------------- ----------- 1.8/2.6 MB 11.7 MB/s eta 0:00:01\n", + " ------------------------------- -------- 2.0/2.6 MB 9.2 MB/s eta 0:00:01\n", + " --------------------------------------- 2.6/2.6 MB 9.7 MB/s eta 0:00:01\n", + " ---------------------------------------- 2.6/2.6 MB 8.3 MB/s eta 0:00:00\n", + "Collecting pyparsing>=2.3.1\n", + " Downloading pyparsing-3.1.1-py3-none-any.whl (103 kB)\n", + " ---------------------------------------- 0.0/103.1 kB ? eta -:--:--\n", + " -------------------------------------- 103.1/103.1 kB 6.2 MB/s eta 0:00:00\n", + "Collecting cycler>=0.10\n", + " Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", + "Requirement already satisfied: six>=1.5 in c:\\users\\jheni\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", + "Installing collected packages: pyparsing, pillow, kiwisolver, fonttools, cycler, contourpy, matplotlib\n", + "Successfully installed contourpy-1.1.1 cycler-0.12.1 fonttools-4.43.1 kiwisolver-1.4.5 matplotlib-3.8.0 pillow-10.1.0 pyparsing-3.1.1\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "[notice] A new release of pip is available: 23.0.1 -> 23.3.1\n", + "[notice] To update, run: C:\\Users\\jheni\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n" + ] + } + ], + "source": [ + "%pip install matplotlib\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -572,7 +996,35 @@ "id": "KS8389rdXMEu", "outputId": "386b4ea1-0ef0-4e2a-891a-e1ea0dee0ed5" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Matplotlib is building the font cache; this may take a moment.\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "#exemplo mais simples de gráfico:\n", "\n", @@ -596,12 +1048,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "id": "bmZg5LjvS_nJ", "outputId": "f3874a08-9ec1-4235-8db1-2250deeb54ea" }, - "outputs": [], + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Classe'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3790\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3789\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m-> 3790\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[0;32m 3791\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", + "File \u001b[1;32mindex.pyx:152\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mindex.pyx:181\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Classe'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 42\u001b[0m line \u001b[0;36m5\n\u001b[0;32m 1\u001b[0m \u001b[39m# Criação de um gráfico de barras: matplotlib + Pandas\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[39m# plot() + bar\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mmatplotlib\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpyplot\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mplt\u001b[39;00m\n\u001b[1;32m----> 5\u001b[0m contagem_passageiros \u001b[39m=\u001b[39m df[\u001b[39m'\u001b[39;49m\u001b[39mClasse\u001b[39;49m\u001b[39m'\u001b[39;49m]\u001b[39m.\u001b[39mvalue_counts()\n\u001b[0;32m 6\u001b[0m contagem_passageiros\u001b[39m.\u001b[39mplot(kind\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mbar\u001b[39m\u001b[39m'\u001b[39m)\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\frame.py:3896\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3894\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcolumns\u001b[39m.\u001b[39mnlevels \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m 3895\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3896\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[0;32m 3897\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3898\u001b[0m indexer \u001b[39m=\u001b[39m [indexer]\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3797\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3792\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(casted_key, \u001b[39mslice\u001b[39m) \u001b[39mor\u001b[39;00m (\n\u001b[0;32m 3793\u001b[0m \u001b[39misinstance\u001b[39m(casted_key, abc\u001b[39m.\u001b[39mIterable)\n\u001b[0;32m 3794\u001b[0m \u001b[39mand\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(x, \u001b[39mslice\u001b[39m) \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m casted_key)\n\u001b[0;32m 3795\u001b[0m ):\n\u001b[0;32m 3796\u001b[0m \u001b[39mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3797\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[0;32m 3798\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[0;32m 3799\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3800\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3801\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3802\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[1;31mKeyError\u001b[0m: 'Classe'" + ] + } + ], "source": [ "# Criação de um gráfico de barras: matplotlib + Pandas\n", "# plot() + bar\n", @@ -614,12 +1088,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "id": "zpZmI2e9S_nJ", "outputId": "3f16a4f4-3039-4426-ac46-d0f8178d87a6" }, - "outputs": [], + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Classe'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3790\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3789\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m-> 3790\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[0;32m 3791\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", + "File \u001b[1;32mindex.pyx:152\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mindex.pyx:181\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Classe'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 43\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m contagem_passageiros \u001b[39m=\u001b[39m df[\u001b[39m'\u001b[39;49m\u001b[39mClasse\u001b[39;49m\u001b[39m'\u001b[39;49m]\u001b[39m.\u001b[39mvalue_counts()\n\u001b[0;32m 2\u001b[0m contagem_passageiros\u001b[39m.\u001b[39mplot(kind\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mbar\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 4\u001b[0m plt\u001b[39m.\u001b[39mxlabel(\u001b[39m'\u001b[39m\u001b[39mClasse do Passageiro\u001b[39m\u001b[39m'\u001b[39m)\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\frame.py:3896\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3894\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcolumns\u001b[39m.\u001b[39mnlevels \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m 3895\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3896\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[0;32m 3897\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3898\u001b[0m indexer \u001b[39m=\u001b[39m [indexer]\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3797\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3792\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(casted_key, \u001b[39mslice\u001b[39m) \u001b[39mor\u001b[39;00m (\n\u001b[0;32m 3793\u001b[0m \u001b[39misinstance\u001b[39m(casted_key, abc\u001b[39m.\u001b[39mIterable)\n\u001b[0;32m 3794\u001b[0m \u001b[39mand\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(x, \u001b[39mslice\u001b[39m) \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m casted_key)\n\u001b[0;32m 3795\u001b[0m ):\n\u001b[0;32m 3796\u001b[0m \u001b[39mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3797\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[0;32m 3798\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[0;32m 3799\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3800\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3801\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3802\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[1;31mKeyError\u001b[0m: 'Classe'" + ] + } + ], "source": [ "contagem_passageiros = df['Classe'].value_counts()\n", "contagem_passageiros.plot(kind='bar')\n", @@ -654,16 +1150,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "id": "RzV9cvoOS_nK", "outputId": "eea06c73-5805-427d-f2b1-b82d3481b8a8" }, - "outputs": [], + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Idade'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3790\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3789\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m-> 3790\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[0;32m 3791\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", + "File \u001b[1;32mindex.pyx:152\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mindex.pyx:181\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Idade'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 45\u001b[0m line \u001b[0;36m3\n\u001b[0;32m 1\u001b[0m \u001b[39m# Criando um histograma com a distribuição de idade em passageiros do Titanic\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m df[\u001b[39m'\u001b[39;49m\u001b[39mIdade\u001b[39;49m\u001b[39m'\u001b[39;49m]\u001b[39m.\u001b[39mplot\u001b[39m.\u001b[39mhist(bins\u001b[39m=\u001b[39m\u001b[39m10\u001b[39m, edgecolor\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mblack\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 5\u001b[0m plt\u001b[39m.\u001b[39mxlabel(\u001b[39m'\u001b[39m\u001b[39mIdade\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 6\u001b[0m plt\u001b[39m.\u001b[39mylabel(\u001b[39m'\u001b[39m\u001b[39mQuantidade\u001b[39m\u001b[39m'\u001b[39m)\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\frame.py:3896\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3894\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcolumns\u001b[39m.\u001b[39mnlevels \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m 3895\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3896\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[0;32m 3897\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3898\u001b[0m indexer \u001b[39m=\u001b[39m [indexer]\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3797\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3792\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(casted_key, \u001b[39mslice\u001b[39m) \u001b[39mor\u001b[39;00m (\n\u001b[0;32m 3793\u001b[0m \u001b[39misinstance\u001b[39m(casted_key, abc\u001b[39m.\u001b[39mIterable)\n\u001b[0;32m 3794\u001b[0m \u001b[39mand\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(x, \u001b[39mslice\u001b[39m) \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m casted_key)\n\u001b[0;32m 3795\u001b[0m ):\n\u001b[0;32m 3796\u001b[0m \u001b[39mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3797\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[0;32m 3798\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[0;32m 3799\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3800\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3801\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3802\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[1;31mKeyError\u001b[0m: 'Idade'" + ] + } + ], "source": [ "# Criando um histograma com a distribuição de idade em passageiros do Titanic\n", "\n", - "df['Idade'].plot.hist(bins=10, edgecolor='pink')\n", + "df['Idade'].plot.hist(bins=10, edgecolor='black')\n", "\n", "plt.xlabel('Idade')\n", "plt.ylabel('Quantidade')\n", @@ -679,6 +1197,45 @@ "- Gerar 3 gráficos com ideias de interesses\n" ] }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Idade'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3790\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3789\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m-> 3790\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[0;32m 3791\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", + "File \u001b[1;32mindex.pyx:152\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mindex.pyx:181\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Idade'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 47\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m df[\u001b[39m'\u001b[39;49m\u001b[39mIdade\u001b[39;49m\u001b[39m'\u001b[39;49m]\u001b[39m.\u001b[39mplot\u001b[39m.\u001b[39mhist(bins\u001b[39m=\u001b[39m\u001b[39m10\u001b[39m, edgecolor\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mpink\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 2\u001b[0m taxa_sob_idade \u001b[39m=\u001b[39m df\u001b[39m.\u001b[39mgroupby(\u001b[39m'\u001b[39m\u001b[39mIdade\u001b[39m\u001b[39m'\u001b[39m)[\u001b[39m'\u001b[39m\u001b[39mSobreviveu\u001b[39m\u001b[39m'\u001b[39m]\u001b[39m.\u001b[39mmean()\n\u001b[0;32m 3\u001b[0m taxa_sob_idade\u001b[39m.\u001b[39mplot\u001b[39m.\u001b[39mbar()\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\frame.py:3896\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3894\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcolumns\u001b[39m.\u001b[39mnlevels \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m 3895\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3896\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[0;32m 3897\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3898\u001b[0m indexer \u001b[39m=\u001b[39m [indexer]\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3797\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3792\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(casted_key, \u001b[39mslice\u001b[39m) \u001b[39mor\u001b[39;00m (\n\u001b[0;32m 3793\u001b[0m \u001b[39misinstance\u001b[39m(casted_key, abc\u001b[39m.\u001b[39mIterable)\n\u001b[0;32m 3794\u001b[0m \u001b[39mand\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(x, \u001b[39mslice\u001b[39m) \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m casted_key)\n\u001b[0;32m 3795\u001b[0m ):\n\u001b[0;32m 3796\u001b[0m \u001b[39mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3797\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[0;32m 3798\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[0;32m 3799\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3800\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3801\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3802\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[1;31mKeyError\u001b[0m: 'Idade'" + ] + } + ], + "source": [ + "df['Idade'].plot.hist(bins=10, edgecolor='pink')\n", + "taxa_sob_idade = df.groupby('Idade')['Sobreviveu'].mean()\n", + "taxa_sob_idade.plot.bar()\n", + "\n", + "plt.xlabel('Idade')\n", + "plt.ylabel('Taxa de Sobrevivência')\n", + "plt.title('Taxa de Sobrevivência por Idade')\n", + "\n", + "plt.show()" + ] + }, { "cell_type": "markdown", "metadata": { @@ -705,6 +1262,39 @@ "O foco dessa aula não é o Numpy, mas existem exemplos na parte de Pandas que contam com a biblioteca - apenas apresentar o conceito, mas dizer que assunto será retomado na aula seguinte." ] }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: numpy in c:\\users\\jheni\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (1.26.0)Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "[notice] A new release of pip is available: 23.0.1 -> 23.3.1\n", + "[notice] To update, run: C:\\Users\\jheni\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "%pip install numpy" + ] + }, { "cell_type": "code", "execution_count": null, @@ -899,6 +1489,28 @@ "- Criar um DF Pandas a partir de um array numpy criado de uma lista Python\n", "- Utilize métodos do Numpy e séries de Pandas para dobrar os números da lista a seguir" ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\jheni\\on26-python-s12-pandas-numpy-II\\material\\aula_s12.ipynb Cell 63\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m array_numpy \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mrandom\u001b[39m.\u001b[39mrandint(\u001b[39m5\u001b[39m,\u001b[39m50\u001b[39m,\u001b[39m500\u001b[39m)\n\u001b[0;32m 2\u001b[0m \u001b[39mprint\u001b[39m(array_numpy)\n", + "\u001b[1;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ], + "source": [ + "array_numpy = np.random.randint(5,50,500)\n", + "print(array_numpy)" + ] } ], "metadata": { @@ -920,7 +1532,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.10.11" } }, "nbformat": 4,