<jupyter_start><jupyter_text>Análise do consumo e preço de combustíveis (Etanol x Gasolina)Base de dados ´.CSV´ do app [Drivvo](https://www.drivvo.com/pt/). Índice- [Extração dos dados](extracao)- [Tratamento de dados](tratamento)- [Análise](analise)- [Conclusão](conclusao)  Extração dos dados<jupyter_code>import pandas as pd

# importar dados
print([1])
tabela = pd.read_csv(r'C:\Users\elias\Downloads\20210508_135821_DRIVVO.csv', encoding = 'latin1')
display(tabela)

# outras formas de verificar informações do conteúdo do arquivo
print([2])
display(tabela.info)

print('\n',[3])
print(tabela.info())

print('\n',[4])
display(tabela.columns)

'''
depois pesquisar como fazer para buscar o arquivo independente da data, ou seja, 
sempre buscar pelo último "_DRIVVO.csv" e não pelo nome completo do arquivo;
'''<jupyter_output>[1]<jupyter_text>Considerações- O arquivo apresentou erro na primeira importação dos dados e pelo o que eu entendi foi um erro de decodificação. Acrescentei um parâmetro dentro do `pd.read_csv`, o **`encoding = 'latin1'`**;  - Há também diversos valores nulos (NaN) que deverão ser tratados antes da análise e a remoção de algumas colunas como 'Segundo combustível' e outras mais por não conterem valores para a análise;  - Rever o `print(tabela.info())` após tratamento dos dados, pois apresentou comportamento estranho, mostrou somente 1 coluna total;  - Não ouve entendimento para o print do `""" """`, que no Python é um comentário quando se tem várias linhas e utilizado em substituição do ``.  Tratamento de dados<jupyter_code># remoção das colunas desnecessárias;
print('[1]')
tabela = pd.read_csv(r'C:\Users\elias\Downloads\20210508_135821_DRIVVO.csv', encoding = 'latin1', skiprows = 1)
print(tabela.info(),'\n')

print('[2]')
tabela = tabela.drop(['Data', 'Completou o tanque', 'Segundo combustível', 'Preço / L.1', 'Valor total.1', 
                      'Volume.1', 'Completou o tanque 2', 'Terceiro combustível', 'Preço / L.2', 'Valor total.2', 'Volume.2', 
                      'Completou o tanque 3', 'Posto de combustível', 'Motivo', 'Observação'], axis = 1)
print(tabela.info())
display(tabela)


# selecionar apenas linhas com os combustíveis;
print('[3]')
# tabela[tabela['Combustível'] == 'Etanol']    #-------> Só funciona para um argumento;
tabela = tabela[tabela['Combustível'].isin(['Etanol', 'Gas. Aditivada', 'Gas. Comum'])]
display(tabela)

'''
para uma lista de argumentos:
    .isin(["lista de argumentos"])
    Lê-se: na tabela, na coluna Combustível da tabela, filtrar "Etanol", "Gas. Aditivada" e "Gas. Comum"
    
ou "string contains":
    df[df['col3'].str.contains('py|dat|\+')]    
    Lê-se: no dataframe, na col3 do dataframe, filtrar strings que contém: "py", "dat", "+"
'''


# transformando os "Dtype" das colunas em números inteiros e decimais;
print('[4]')
# tabela['Odômetro (km)'] = pd.to_numeric(tabela['Odômetro (km)'], errors = 'coerce') # apenas para uma coluna;
tabela = tabela.astype({'Odômetro (km)':'int32', 'Preço / L':'float16', 'Valor total':'float16', 'Volume':'float16'})

tabela.dtypes
display(tabela)<jupyter_output>[1]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 73 entries, 0 to 72
Data columns (total 20 columns):
 #   Column                Non-Null Count  Dtype  
---  ------                --------------  -----  
 0   Odômetro (km)         73 non-null     object 
 1   Data                  70 non-null     object 
 2   Combustível           70 non-null     object 
 3   Preço / L             70 non-null     object 
 4   Valor total           55 non-null     object 
 5   Volume                56 non-null     object 
 6   Completou o tanque    42 non-null     object 
 7   Segundo combustível   2 non-null      object 
 8   Preço / L.1           42 non-null     object 
 9   Valor total.1         41 non-null     object 
 10  Volume.1              42 non-null     object 
 11  Completou o tanque 2  40 non-null     object 
 12  Terceiro combustível  0 non-null      float64
 13  Preço / L.2           40 non-null     float64
 14  Valor total.2         40 non-null     float64
 15  Volume.2             [...]<jupyter_text>Considerações- Foi constatado que as colunas com os dados a serem considerados na análise são submenus da coluna "Abastecimento" e por isso o código `display(tabela.columns)` na extração dos dados apresentou um comportamento extranho:- Corrigido com o parâmetro `skiprowns = 1` (pula a primeira linha na extração dos dados) do `pd.read_csv`. O padrão é `skiprows=None`;- Para remover várias colunas, tem que colocar `.drop(['colunas1', 'coluna2'], axis = 1)`;- Foi feita a seleção somente dos combustíveis e a transformação dos tipos de dados de cada coluna;  Análise<jupyter_code>codigo<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12228547332911659, 'fraction_numerical': 0.02867383512544803, 'mean_word_length': 3.3683241252302025, 'pattern_counts': {'":': 1, '<': 12, '<?xml version=': 0, '>': 13, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '113441', 'license': 'MIT', 'n_tokens_mistral': 1824, 'n_tokens_neox': 1675, 'n_words': 514, 'path': 'data analysis/etanolXgasolina.ipynb', 'repo_name': 'eliasalbuquerque/Python', 'size': '4743'}