{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 3</font>\n",
    "\n",
    "## Download: http://github.com/dsacademybr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercícios - Métodos e Funções"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "4\n",
      "6\n",
      "8\n",
      "10\n",
      "12\n",
      "14\n",
      "16\n",
      "18\n",
      "20\n"
     ]
    }
   ],
   "source": [
    "# Exercício 1 - Crie uma função que imprima a sequência de números pares entre 1 e 20 (a função não recebe parâmetro) e \n",
    "# depois faça uma chamada à função para listar os números\n",
    "def listaPar():\n",
    "    for i in range(2, 21, 2): \n",
    "        print(i)\n",
    "        \n",
    "listaPar()        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RUMO À ANÁLISE DE DADOS\n"
     ]
    }
   ],
   "source": [
    "# Exercício 2 - Crie uam função que receba uma string como argumento e retorne a mesma string em letras maiúsculas.\n",
    "# Faça uma chamada à função, passando como parâmetro uma string\n",
    "def listaString(texto):\n",
    "    print(texto.upper())\n",
    "    return\n",
    "\n",
    "listaString('Rumo à Análise de Dados')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "None\n",
      "None\n",
      "[1, 2, 3, 4, 5, 6]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 3 - Crie uma função que receba como parâmetro uma lista de 4 elementos, adicione 2 elementos a lista e \n",
    "# imprima a lista\n",
    "def novaLista(lista):\n",
    "    print(lista.append(5))\n",
    "    print(lista.append(6))\n",
    "   \n",
    "lista1 = [1, 2, 3, 4]   \n",
    "novaLista(lista1)\n",
    "print(lista1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100\n",
      "A\n",
      "B\n",
      "C\n"
     ]
    }
   ],
   "source": [
    "# Exercício 4 - Crie uma função que receba um argumento formal e uma possível lista de elementos. Faça duas chamadas \n",
    "# à função, com apenas 1 elemento e na segunda chamada com 4 elementos\n",
    "def printNum( arg1, *lista ):\n",
    "    print (arg1)\n",
    "    for i in lista:\n",
    "        print (i)\n",
    "    return;\n",
    "\n",
    "# Chamada à função\n",
    "printNum( 100 )\n",
    "printNum( 'A', 'B', 'C' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A soma é :  750\n"
     ]
    }
   ],
   "source": [
    "# Exercício 5 - Crie uma função anônima e atribua seu retorno a uma variável chamada soma. A expressão vai receber 2 \n",
    "# números como parâmetro e retornar a soma deles\n",
    "soma = lambda arg1, arg2: arg1 + arg2\n",
    "print (\"A soma é : \", soma( 452, 298 ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dentro da função o total é:  30\n",
      "Fora da função o total é:  0\n"
     ]
    }
   ],
   "source": [
    "# Exercício 6 - Execute o código abaixo e certifique-se que compreende a diferença entre variável global e local\n",
    "\n",
    "total = 0\n",
    "def soma( arg1, arg2 ):\n",
    "    total = arg1 + arg2; \n",
    "    print (\"Dentro da função o total é: \", total)\n",
    "    return total;\n",
    "\n",
    "\n",
    "soma( 10, 20 );\n",
    "print (\"Fora da função o total é: \", total)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[102.56, 97.7, 99.14, 100.03999999999999]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 7 - Abaixo você encontra uma lista com temperaturas em graus Celsius\n",
    "# Crie uma função anônima que converta cada temperatura para Fahrenheit\n",
    "# Dica: para conseguir realizar este exercício, você deve criar sua função lambda, dentro de uma função \n",
    "# (que será estudada no próximo capítulo). Isso permite aplicar sua função a cada elemento da lista\n",
    "# Como descobrir a fórmula matemática que converte de Celsius para Fahrenheit? Pesquise!!!\n",
    "Celsius = [39.2, 36.5, 37.3, 37.8]\n",
    "Fahrenheit = map(lambda x: (float(9)/5)*x + 32, Celsius)\n",
    "print (list(Fahrenheit))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['__class__',\n",
       " '__contains__',\n",
       " '__delattr__',\n",
       " '__delitem__',\n",
       " '__dir__',\n",
       " '__doc__',\n",
       " '__eq__',\n",
       " '__format__',\n",
       " '__ge__',\n",
       " '__getattribute__',\n",
       " '__getitem__',\n",
       " '__gt__',\n",
       " '__hash__',\n",
       " '__init__',\n",
       " '__init_subclass__',\n",
       " '__iter__',\n",
       " '__le__',\n",
       " '__len__',\n",
       " '__lt__',\n",
       " '__ne__',\n",
       " '__new__',\n",
       " '__reduce__',\n",
       " '__reduce_ex__',\n",
       " '__repr__',\n",
       " '__setattr__',\n",
       " '__setitem__',\n",
       " '__sizeof__',\n",
       " '__str__',\n",
       " '__subclasshook__',\n",
       " 'clear',\n",
       " 'copy',\n",
       " 'fromkeys',\n",
       " 'get',\n",
       " 'items',\n",
       " 'keys',\n",
       " 'pop',\n",
       " 'popitem',\n",
       " 'setdefault',\n",
       " 'update',\n",
       " 'values']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Exercício 8\n",
    "# Crie um dicionário e liste todos os métodos e atributos do dicionário\n",
    "dic = {'k1': 'Natal', 'k2': 'Recife'}\n",
    "dir(dic)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Categorical',\n",
       " 'CategoricalIndex',\n",
       " 'DataFrame',\n",
       " 'DateOffset',\n",
       " 'DatetimeIndex',\n",
       " 'ExcelFile',\n",
       " 'ExcelWriter',\n",
       " 'Expr',\n",
       " 'Float64Index',\n",
       " 'Grouper',\n",
       " 'HDFStore',\n",
       " 'Index',\n",
       " 'IndexSlice',\n",
       " 'Int64Index',\n",
       " 'Interval',\n",
       " 'IntervalIndex',\n",
       " 'MultiIndex',\n",
       " 'NaT',\n",
       " 'Panel',\n",
       " 'Panel4D',\n",
       " 'Period',\n",
       " 'PeriodIndex',\n",
       " 'RangeIndex',\n",
       " 'Series',\n",
       " 'SparseArray',\n",
       " 'SparseDataFrame',\n",
       " 'SparseList',\n",
       " 'SparseSeries',\n",
       " 'Term',\n",
       " 'TimeGrouper',\n",
       " 'Timedelta',\n",
       " 'TimedeltaIndex',\n",
       " 'Timestamp',\n",
       " 'UInt64Index',\n",
       " 'WidePanel',\n",
       " '_DeprecatedModule',\n",
       " '__builtins__',\n",
       " '__cached__',\n",
       " '__doc__',\n",
       " '__docformat__',\n",
       " '__file__',\n",
       " '__loader__',\n",
       " '__name__',\n",
       " '__package__',\n",
       " '__path__',\n",
       " '__spec__',\n",
       " '__version__',\n",
       " '_hashtable',\n",
       " '_lib',\n",
       " '_libs',\n",
       " '_np_version_under1p10',\n",
       " '_np_version_under1p11',\n",
       " '_np_version_under1p12',\n",
       " '_np_version_under1p13',\n",
       " '_np_version_under1p14',\n",
       " '_np_version_under1p8',\n",
       " '_np_version_under1p9',\n",
       " '_tslib',\n",
       " '_version',\n",
       " 'api',\n",
       " 'bdate_range',\n",
       " 'compat',\n",
       " 'concat',\n",
       " 'core',\n",
       " 'crosstab',\n",
       " 'cut',\n",
       " 'date_range',\n",
       " 'datetime',\n",
       " 'datetools',\n",
       " 'describe_option',\n",
       " 'errors',\n",
       " 'eval',\n",
       " 'ewma',\n",
       " 'ewmcorr',\n",
       " 'ewmcov',\n",
       " 'ewmstd',\n",
       " 'ewmvar',\n",
       " 'ewmvol',\n",
       " 'expanding_apply',\n",
       " 'expanding_corr',\n",
       " 'expanding_count',\n",
       " 'expanding_cov',\n",
       " 'expanding_kurt',\n",
       " 'expanding_max',\n",
       " 'expanding_mean',\n",
       " 'expanding_median',\n",
       " 'expanding_min',\n",
       " 'expanding_quantile',\n",
       " 'expanding_skew',\n",
       " 'expanding_std',\n",
       " 'expanding_sum',\n",
       " 'expanding_var',\n",
       " 'factorize',\n",
       " 'get_dummies',\n",
       " 'get_option',\n",
       " 'get_store',\n",
       " 'groupby',\n",
       " 'infer_freq',\n",
       " 'interval_range',\n",
       " 'io',\n",
       " 'isnull',\n",
       " 'json',\n",
       " 'lib',\n",
       " 'lreshape',\n",
       " 'match',\n",
       " 'melt',\n",
       " 'merge',\n",
       " 'merge_asof',\n",
       " 'merge_ordered',\n",
       " 'notnull',\n",
       " 'np',\n",
       " 'offsets',\n",
       " 'option_context',\n",
       " 'options',\n",
       " 'ordered_merge',\n",
       " 'pandas',\n",
       " 'parser',\n",
       " 'period_range',\n",
       " 'pivot',\n",
       " 'pivot_table',\n",
       " 'plot_params',\n",
       " 'plotting',\n",
       " 'pnow',\n",
       " 'qcut',\n",
       " 'read_clipboard',\n",
       " 'read_csv',\n",
       " 'read_excel',\n",
       " 'read_feather',\n",
       " 'read_fwf',\n",
       " 'read_gbq',\n",
       " 'read_hdf',\n",
       " 'read_html',\n",
       " 'read_json',\n",
       " 'read_msgpack',\n",
       " 'read_pickle',\n",
       " 'read_sas',\n",
       " 'read_sql',\n",
       " 'read_sql_query',\n",
       " 'read_sql_table',\n",
       " 'read_stata',\n",
       " 'read_table',\n",
       " 'reset_option',\n",
       " 'rolling_apply',\n",
       " 'rolling_corr',\n",
       " 'rolling_count',\n",
       " 'rolling_cov',\n",
       " 'rolling_kurt',\n",
       " 'rolling_max',\n",
       " 'rolling_mean',\n",
       " 'rolling_median',\n",
       " 'rolling_min',\n",
       " 'rolling_quantile',\n",
       " 'rolling_skew',\n",
       " 'rolling_std',\n",
       " 'rolling_sum',\n",
       " 'rolling_var',\n",
       " 'rolling_window',\n",
       " 'scatter_matrix',\n",
       " 'set_eng_float_format',\n",
       " 'set_option',\n",
       " 'show_versions',\n",
       " 'stats',\n",
       " 'test',\n",
       " 'testing',\n",
       " 'timedelta_range',\n",
       " 'to_datetime',\n",
       " 'to_msgpack',\n",
       " 'to_numeric',\n",
       " 'to_pickle',\n",
       " 'to_timedelta',\n",
       " 'tools',\n",
       " 'tseries',\n",
       " 'tslib',\n",
       " 'unique',\n",
       " 'util',\n",
       " 'value_counts',\n",
       " 'wide_to_long']"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Exercício 9\n",
    "# Abaixo você encontra a importação do Pandas, um dos principais pacotes Python para análise de dados.\n",
    "# Analise atentamente todos os métodos disponíveis. Um deles você vai usar no próximo exercício.\n",
    "import pandas as pd\n",
    "dir(pd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>admit</th>\n",
       "      <th>gre</th>\n",
       "      <th>gpa</th>\n",
       "      <th>rank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.600000</td>\n",
       "      <td>616.000000</td>\n",
       "      <td>3.480000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.547723</td>\n",
       "      <td>185.148589</td>\n",
       "      <td>0.421307</td>\n",
       "      <td>1.224745</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>380.000000</td>\n",
       "      <td>2.930000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>520.000000</td>\n",
       "      <td>3.190000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>640.000000</td>\n",
       "      <td>3.610000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>660.000000</td>\n",
       "      <td>3.670000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>880.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          admit         gre       gpa      rank\n",
       "count  5.000000    5.000000  5.000000  5.000000\n",
       "mean   0.600000  616.000000  3.480000  3.000000\n",
       "std    0.547723  185.148589  0.421307  1.224745\n",
       "min    0.000000  380.000000  2.930000  1.000000\n",
       "25%    0.000000  520.000000  3.190000  3.000000\n",
       "50%    1.000000  640.000000  3.610000  3.000000\n",
       "75%    1.000000  660.000000  3.670000  4.000000\n",
       "max    1.000000  880.000000  4.000000  4.000000"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ************* Desafio ************* (pesquise na documentação Python)\n",
    "\n",
    "# Exercício 10 - Crie uma função que receba o arquivo abaixo como argumento e retorne um resumo estatístico descritivo \n",
    "# do arquivo. Dica, use Pandas e um de seus métodos, describe()\n",
    "# Arquivo: \"binary.csv\"\n",
    "import pandas as pd\n",
    "file_name = \"binary.csv\"\n",
    "\n",
    "def retornaArq(file_name):\n",
    "    df = pd.read_csv(file_name)\n",
    "    return df.describe()\n",
    "    \n",
    "retornaArq(file_name)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Obrigado - Data Science Academy - <a href=\"http://facebook.com/dsacademybr\">facebook.com/dsacademybr</a>"
   ]
  }
 ],
 "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.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
