<jupyter_start><jupyter_text>Usando os Diferentes Contadores<jupyter_code>import pandas as pd
s = pd.Series(list('asdeasdeasdeasdea'))
s<jupyter_output><empty_output><jupyter_text>Verifica cada valor que aparece pelo menos uma vez<jupyter_code>s.unique()<jupyter_output><empty_output><jupyter_text>Conta quantas vezes cada valor aparece<jupyter_code>s.value_counts()<jupyter_output><empty_output><jupyter_text>Usando os mesmos contadores para Dataframe<jupyter_code>dados = pd.read_csv('../dados/aluguel_residencial.csv', sep=';')
dados.Tipo.unique()
dados.Tipo.value_counts()<jupyter_output><empty_output><jupyter_text>Exercício Suponha que estejamos testando as moedas que serão utilizadas por árbitros de futebol nas competições da Copa do Mundo. Atualmente, estas moedas são personalizadas e utilizadas em certos momentos dos jogos para decidir, na sorte, uma disputa. Nosso objetivo é verificar se as moedas que serão utilizadas nas competições não sejam viciadas.Para isso testes foram realizados com cinco moedas e os resultados foram os seguintes:<jupyter_code>m1 = 'CCcCCccCCCccCcCccCcCcCCCcCCcccCCcCcCcCcccCCcCcccCc'
m2 = 'CCCCCccCccCcCCCCccCccccCccCccCCcCccCcCcCCcCccCccCc'
m3 = 'CccCCccCcCCCCCCCCCCcccCccCCCCCCccCCCcccCCCcCCcccCC'
m4 = 'cCCccCCccCCccCCccccCcCcCcCcCcCcCCCCccccCCCcCCcCCCC'
m5 = 'CCCcCcCcCcCCCcCCcCcCCccCcCCcccCccCCcCcCcCcCcccccCc'<jupyter_output><empty_output><jupyter_text>Acima, temos o resultado de 50 lançamentos de cada moeda (m1, m2, m3, m4 e m5), onde c representa a ocorrência do evento CARA e C representa a ocorrência do evento COROA.Para tirarmos nossas conclusões, precisamos montar o seguinte DataFrame: ![](../dados/exercicio3.JPG) * obs: para carregar imagens e links no markdown não se usa áspas para passar o caminho Onde Freq. C e Freq. c são, respectivamente, as frequências de COROAS e de CARAS em cada teste.Qual o código necessário para realizar tal tarefa?<jupyter_code>df = pd.DataFrame({'m1': list(m1),
                 'm2': list(m2),
                 'm3': list(m3),
                 'm4': list(m4),
                 'm5': list(m5)})
df = pd.DataFrame({'m1': dict(df.m1.value_counts()),
                              'm2': dict(df.m2.value_counts()), 
                                          'm3': dict(df.m3.value_counts()), 
                                                     'm4': dict(df.m4.value_counts()), 
                                                                'm5': dict(df.m5.value_counts())})
df
df['Faces'] = ['Cara', 'Coroa']
df.sort_index(axis=1, inplace=True)
df
df.sort_index(inplace=True)
df<jupyter_output><empty_output><jupyter_text>Resolução proposta<jupyter_code>eventos = pd.DataFrame({'m1': list(m1),
                 'm2': list(m2),
                 'm3': list(m3),
                 'm4': list(m4),
                 'm5': list(m5)})
moedas = pd.DataFrame(eventos)
# para concatenar dataframes é necessário passar uma lista deles
# de mesmo tamanho e index
df = pd.DataFrame(data = ['Cara', 'Coroa'], 
                    index = ['c', 'C'], 
                    columns = ['Faces'])
for item in moedas:
    df = pd.concat([df, moedas[item].value_counts()], 
                    axis = 1)
df<jupyter_output><empty_output><jupyter_text>Passo a passo<jupyter_code>df = pd.DataFrame(data = ['Cara', 'Coroa'], 
                    index = ['c', 'C'], 
                    columns = ['Faces'])
df<jupyter_output><empty_output><jupyter_text>Concatenando lado a lado<jupyter_code>for i in moedas:
    df = pd.concat([df, moedas[i].value_counts()], axis=1)
df<jupyter_output><empty_output><jupyter_text>Utilizando outro index como exemplo<jupyter_code>n1 = 'AAAAAAAAAAAAAAaaaaaaaaaaaaaaaaa'
n2 = 'AAAAAAAAAAAAaaaaaaaaaaaaaaaaAAa'
n3 = 'aaaaaaaaaaaaAAAAaaaaAAAAaaaaaaa'
events = pd.DataFrame({'n1': list(n1),
                       'n2': list(n2),
                       'n3': list(n3)})
df2 = pd.DataFrame(data = ['Maiúsc', 'Minúsc'], index = ['A', 'a'], columns = ['Letra'])
df2
for lista in events:
    df2 = pd.concat([df2, events[lista].value_counts()], axis=1)
df2<jupyter_output><empty_output><jupyter_text>* não importa a ordem que colocarmos o index* o pandas relacionará automaticamente o index com o dicionário passado* repare o exemplo abaixo:<jupyter_code>events.n1.value_counts()<jupyter_output><empty_output><jupyter_text>Repare agora como ficaria o dataframe se invertêssemos a oredem do index<jupyter_code>df3 = pd.DataFrame(data = ['Minúsc', 'Maiúsc'], index = ['a', 'A'], columns = ['Letra'])
df3
for item in events:
    df3 = pd.concat([df3, events[item].value_counts()], axis=1)
df3
df2<jupyter_output><empty_output><jupyter_text>Podemos também reorganizar o index a qualquer momento<jupyter_code># lembrando que para fixar o método, deve-se utilizar o inplace=True
# no python a letra maiúscula sempre vem primeiro na ordem alfabética
df3.sort_index()
df3
df2
# df2 já esta na ordem crescente, portanto o método não tem efeito
df2.sort_index()
# para trocar a ordem de crescente para decrescente usa-se ascending=False
df2.sort_index(ascending=False)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11312217194570136, 'fraction_numerical': 0.014755065905961047, 'mean_word_length': 3.9551656920077973, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 53, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 7, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '130410', 'license': 'MIT', 'n_tokens_mistral': 1943, 'n_tokens_neox': 1876, 'n_words': 427, 'path': '02_fundamentos_pandas/notebook/17_contadores.ipynb', 'repo_name': 'eltonrp/formacao_Data_Science', 'size': '5083'}