<jupyter_start><jupyter_text>Minicurso: (Introdução à) Análise de Dados com PandasRoteiro:<jupyter_code>##Bibliotecas úteis
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline<jupyter_output><empty_output><jupyter_text>Abrir o conjunto de dados<jupyter_code>ks_proj2018 = pd.read_csv('bases/ks-projects-201801-5000.csv', index_col=0)<jupyter_output><empty_output><jupyter_text>Métodos de Visualização dos Dados -- Visualizar os 5 primeiros exemplos: df.head()<jupyter_code>ks_proj2018.head()
### Sua vez!
### Mostre os 10 primeiros exemplos

ks_proj2018.head(10)<jupyter_output><empty_output><jupyter_text>-- Visualizar as colunas com dados numéricos<jupyter_code>ks_proj2018.dtypes
ks_proj2018.select_dtypes(include=[np.number]).head()
### Sua vez! 
### Identifique as colunas com dados numéricos, atribua-as a uma variável e em seguida imprima na tela

numeric_columns = ks_proj2018.select_dtypes(include=[np.number]).columns
numeric_columns<jupyter_output><empty_output><jupyter_text>-- Visualizar as colunas com dados categóricos<jupyter_code>ks_proj2018.select_dtypes(include=[np.object]).head()
### Sua vez!
### Identifique as colunas com dados categóricos, atribua-as a uma variável e em seguida imprima na tela

string_columns = ks_proj2018.select_dtypes(include=[np.object]).columns
string_columns<jupyter_output><empty_output><jupyter_text>-- Média<jupyter_code>ks_proj2018[['goal', 'pledged']].mean()
### Sua vez!
### Mostre a média para todas as colunas de dados numéricos

ks_proj2018.mean()<jupyter_output><empty_output><jupyter_text>-- Desvio padrão<jupyter_code>ks_proj2018['goal'].std()
### Sua vez!
### Mostre o desvio padrão para todas as colunas de dados numéricos

ks_proj2018.std()<jupyter_output><empty_output><jupyter_text>-- Máximo e mínimo<jupyter_code>ks_proj2018['goal'].max(), ks_proj2018['goal'].min()
### Sua vez!
### Mostre o valor máximo para todas as colunas de dados numéricos

ks_proj2018.select_dtypes(include=[np.number]).max()
### Sua vez!
### Mostre o valor mínimo para todas as colunas de dados numéricos

ks_proj2018.select_dtypes(include=[np.number]).min()<jupyter_output><empty_output><jupyter_text>-- Ou... ver tudo junto!<jupyter_code>ks_proj2018['goal'].describe()
### Sua vez!
### Descreva o conjunto de dados
ks_proj2018.select_dtypes(include=[np.number]).describe()<jupyter_output><empty_output><jupyter_text>-- Saber a quantidade de projetos por categoria<jupyter_code>pd.value_counts(ks_proj2018['category'])
### Sua vez! 
### Mostre a quantidade de projetos por estado (coluna 'state')

pd.value_counts(ks_proj2018['state'])<jupyter_output><empty_output><jupyter_text>-- Calcular a simetria dos dados em relação à média<jupyter_code>ks_proj2018['goal'].skew()
### Sua vez!
### Calcule a simetria de todos os dados numéricos em relação à média
ks_proj2018.skew()<jupyter_output><empty_output><jupyter_text>-- Calcular a correlação entre os dados<jupyter_code>ks_proj2018.corr()<jupyter_output><empty_output><jupyter_text>O que podemos inferir em relação à correlação entre os dados?  Ordenação  -- Ordenar o conjunto de dados por data de lançamento do projeto<jupyter_code>ks_proj2018.sort_values(by='launched', ascending=True)
### Ordene o dataset pelo 'name'

ks_proj2018.sort_values(by='name', ascending=False)<jupyter_output><empty_output><jupyter_text>-- Ordenar pelo número do índice<jupyter_code>ks_proj2018.sort_index()<jupyter_output><empty_output><jupyter_text>Vamos dar uma olhada no conjunto de dados para ver se a mudança persistiu:<jupyter_code>ks_proj2018.head()<jupyter_output><empty_output><jupyter_text>Ihh, parece que não!<jupyter_code>### Sua vez!
### Ordene o conjunto de dados pelo número do índice de forma definitiva
### Use o parâmetro 'inplace=True'

ks_proj2018.sort_index(inplace=True)
ks_proj2018.head()<jupyter_output><empty_output><jupyter_text>--Resetar a indexação do conjunto de dados, iniciando a contagem de 0<jupyter_code>ks_proj2018.reset_index(drop=True)<jupyter_output><empty_output><jupyter_text>Vamos dar uma olhada no conjunto de dados para ver se a mudança persistiu:<jupyter_code>ks_proj2018.head()<jupyter_output><empty_output><jupyter_text>Ihh, parece que não!<jupyter_code>### Sua vez!
### Resete a indexação do conjunto de dados de forma definitiva
### Use o parâmetro 'inplace==True'

ks_proj2018.reset_index(drop=True, inplace=True)
ks_proj2018.head()<jupyter_output><empty_output><jupyter_text>Seleção, atribuição e operações  -- Índices<jupyter_code>ks_proj2018.index
### Sua vez! 
### Mude o nome do índice de 'ID' para 'id'
### Use o atributo name do índice --> df.index.name
ks_proj2018.index.name = 'id'
ks_proj2018.head()<jupyter_output><empty_output><jupyter_text>-- Nomes das colunas<jupyter_code>ks_proj2018.columns<jupyter_output><empty_output><jupyter_text>-- Formato do conjunto de dados<jupyter_code>ks_proj2018.shape
len(ks_proj2018)<jupyter_output><empty_output><jupyter_text>-- Selecionar células utilizando método da biblioteca numpy: df['coluna']<jupyter_code>ks_proj2018['name'].head()
### Sua vez!
### Selecione a coluna 'pledged'

ks_proj2018['pledged'].head()
ks_proj2018['name'][0]
### Sua vez! 
### Selecione o 5o item da coluna 'pledged'

ks_proj2018['pledged'][5]
ks_proj2018[4:10]
### Sua vez! 
### Selecione os itens 25 a 37

ks_proj2018[25:37]<jupyter_output><empty_output><jupyter_text>-- Operação de subtração:<jupyter_code>ks_proj2018['gap'] = ks_proj2018['goal'] - ks_proj2018['usd pledged']
ks_proj2018['gap']
### Sua vez! 
### Mostre a diferença entre o arrecadado real em USD ('usd_pldeged_real') e o objetivo real
### de arrecadação em USD ('usd_goal_real')

ks_proj2018['usd_goal_real'] - ks_proj2018['usd_pledged_real']<jupyter_output><empty_output><jupyter_text>-- Atribuição<jupyter_code>ks_proj2018['gap'][0] = 10<jupyter_output><empty_output><jupyter_text>Vish... o que esse warning significa?  Utilizando métodos da biblioteca pandas<jupyter_code>ks_proj2018.loc[:,'name'].head()
### Sua vez!
### Selecione a coluna 'pledged'

ks_proj2018.loc[:,'pledged'].head()
ks_proj2018.loc[:,['name', 'category']].head()
### Sua vez!
### Selecione as colunas com dados numéricos. Lembre-se da lista numeric_columns

ks_proj2018.loc[:, numeric_columns]
ks_proj2018.loc[14:29,'main_category':'backers'].head()
### Sua vez!
### Selecione as colunas com dados categóricos de 100 a 125. Lembre-se da lista string_columns


ks_proj2018.loc[100:125, string_columns].head()
ks_proj2018.loc[:,'pledged']>500000
ks_proj2018[ks_proj2018.loc[:,'pledged']>500000].head()
ks_proj2018[((ks_proj2018.loc[:, 'backers']>4) & (ks_proj2018.loc[:, 'backers']<80))]
### Sua vez!
### Selecione os projetos com 'backers' entre 4 e 80.


ks_proj2018[((ks_proj2018.loc[:, 'backers']>4) & (ks_proj2018.loc[:, 'backers']<80))].head()<jupyter_output><empty_output><jupyter_text>Apply<jupyter_code>def maximo(linha):
    return linha.max()
ks_proj2018[numeric_columns].apply(maximo)
ks_proj2018[numeric_columns].apply(lambda coluna: coluna.max())
### Sua vez!
### Mostre a média das colunas numéricas utilizando apply()<jupyter_output><empty_output><jupyter_text>Padronizando a coluna 'name'<jupyter_code>### Sua vez!
### Ordene os projetos pelo nome em ordem alfabética. Lembre-se da função sort_values().
### A seguir, imprima os 5 primeiros itens do conjunto de dados.


ks_proj2018.loc[:,string_columns] = ks_proj2018[string_columns].apply(lambda coluna: coluna.str.replace('\"', ''))

ks_proj2018[string_columns].head()
### Sua vez!
### Mude todas as strings para iniciarem com letra maiúscula (função capitalize())<jupyter_output><empty_output><jupyter_text>Dados Temporais (Time Series)  -- Vamos verificar o tipo das colunas que representam datas<jupyter_code>ks_proj2018['launched'].dtype
### Sua vez!
### Verifique se o tipo da coluna 'deadline'<jupyter_output><empty_output><jupyter_text>-- Passar as colunas de datas para o tipo correto<jupyter_code>ks_proj2018['launched_parsed'] = pd.to_datetime(ks_proj2018['launched'])
ks_proj2018['launched_parsed'].head()
### Sua vez!
### Passe a coluna 'deadline' para o tipo datetime, atribua a uma nova coluna 'deadline_parsed
### e imprima os primeiros itens<jupyter_output><empty_output><jupyter_text>Vamos verificar o tipo da nova coluna<jupyter_code>ks_proj2018['launched_parsed'].dtype<jupyter_output><empty_output><jupyter_text>Certo, agora 'launched_parsed' é do tipo datetime!<jupyter_code>### Sua vez!
### Verifique se a coluna 'deadline_parsed' está com o tipo data<jupyter_output><empty_output><jupyter_text>-- Pegar parte da data<jupyter_code>launched_parsed_days = ks_proj2018['launched_parsed'].dt.day
launched_parsed_days.head()
### Sua vez! 
### Pegue o dia da coluna 'deadline_parsed' e atribua a uma variável
### Imprima a variável<jupyter_output><empty_output><jupyter_text>-- Plotar datas para verificar se o parsing ocorreu corretamente<jupyter_code>launched_parsed_days.hist(bins=31)
### Sua vez!
### Plote o histograma de frequência dos 31 dias do mês da coluna 'deadline_parsed'<jupyter_output><empty_output><jupyter_text>Dados categóricos -- Mudando dados nominais para categóricos<jupyter_code>categorical_columns = ['main_category', 'currency', 'state', 'country']
ks_proj2018[categorical_columns] = ks_proj2018[categorical_columns].apply(lambda coluna: coluna.astype("category"))
ks_proj2018['main_category'].cat.categories
### Sua vez!
### Mostre as categorias da coluna 'state'


### Sua vez!
### Mostre as categorias da coluna 'currency'<jupyter_output><empty_output><jupyter_text>-- Re-ordenando a importância dos estados dos projetos<jupyter_code>ks_proj2018['state'].cat.set_categories(['canceled', 'failed', 'suspended','live', 'successful'])<jupyter_output><empty_output><jupyter_text>Vamos dar uma olhada no conjunto de dados para ver se a mudança persistiu:<jupyter_code>### Sua vez! 
### Mostre os 5 primeiros itens do conjunto de dados<jupyter_output><empty_output><jupyter_text>Ihh, parece que não!<jupyter_code>### Sua vez!
### Modifique a ordem da importância dos estados de maneira definitiva
### Use use inplace=True<jupyter_output><empty_output><jupyter_text>Agrupamento<jupyter_code>ks_proj2018.groupby('state').size()
### Sua vez!
### Agrupe o conjunto de dados por moeda mostre o tamanho.


ks_proj2018.groupby('state').median()
### Sua vez!
### Agrupe o conjunto de dados por moeda mostre a mediana.


ks_proj2018.groupby('state').count().T
### Sua vez!
### Agrupe o conjunto de dados por moeda mostre quantos pertencem a cada moeda.


pd.set_option('display.max_columns', 500)
ks_proj2018.groupby('state').describe().T
### Sua vez! Agrupe pela moeda e descreva o conjunto de dados.<jupyter_output><empty_output><jupyter_text>Gráficos<jupyter_code>ks_proj2018['goal'].plot()
### Sua vez!
### Plote apenas os exemplos com 'goal' menor que 1000



ks_proj2018.loc[ks_proj2018['usd pledged']<100000, 'usd pledged'].plot.hist(bins=10)
### Sua vez!
### Plote apenas os exemplos com 'usd pledged' menor que 40000


ks_proj2018[ks_proj2018['goal'] < 100000].boxplot('goal')
### Sua vez!
### Faça um boxplot com 'usd pledged' menor que 10000


ks_proj2018.plot(x='backers',y='pledged',kind='scatter', title='Backers x Pledged',color='b')
### Sua vez!
### Plote o 'backers' pelo 'gap'

ks_proj2018.plot(x='backers',y='gap',kind='scatter', title='Backers x Pledged',color='b')<jupyter_output><empty_output><jupyter_text>Salvar dados<jupyter_code>ks_proj2018.to_csv('ks-projects-201801-v-processada.csv')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13325780024402997, 'fraction_numerical': 0.04270524664458776, 'mean_word_length': 8.02122641509434, 'pattern_counts': {'":': 0, '<': 169, '<?xml version=': 0, '>': 170, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '41', 'dir': 'jupyter-structured-clean-dedup', 'id': '450758', 'license': 'MIT', 'n_tokens_mistral': 4844, 'n_tokens_neox': 4347, 'n_words': 898, 'path': '01_introducao_pandas.ipynb', 'repo_name': 'allexlima/MinicursoDataScience', 'size': '11474'}