Saltar para o conteúdo
  • YouTube
  • FaceBook
  • Twitter
  • Instagram

Data Analytics Portugal

Análise de Dados e Tutoriais em Vídeo

  • Início
  • Contato
  • Sobre nós
    • O mais recente
    • Escreva para nós
    • Saiba mais informações sobre o nosso site
  • Ligações úteis
  • Glossário
  • Todas as categorias
  • Faq
  • Livestream
  • Alternar o formulário de pesquisa
  • Porquê escolher a Julia em vez de outras linguagens de programação? Programação Julia
  • O que é a Query Optimization em SQL? SQL
  • R Tutorial: Como passar dados entre funções R Programação
  • Como verificar se um ficheiro está vazio Python
  • como criar uma instância de uma classe classe
  • ValueError: o padrão não contém grupos de captura Erro de Valor
  • O que são os operadores bitwise em Júlia? julia
  • como escrever subconsultas em SQL SQL

Como mostrar as diferenças percentuais entre ficheiros em Python

Posted on 16 de Janeiro de 202214 de Junho de 2022 Por admin

Tempo estimado de leitura: 5 atas

No nosso post anterior sobre como comparar ficheiros CSV para as diferenças mostrámos como podia ver as diferenças, mas e se quisesse ver se um registo era 100% compatível ou não?

Aqui vamos utilizar o SequenceMatcher que é uma classe python que lhe permite comparar ficheiros e devolvê-los se forem combinados como uma percentagem.

Vejamos o código

Importar declarações e ler nos ficheiros CSV. Aqui fazemos o habitual de importar as bibliotecas de que precisamos e lemos nos dois ficheiros CSV que utilizamos:

Note-se que também aqui definimos as definições da moldura de dados, para que possamos ver correctamente a moldura de dados. Ver mais abaixo.

import pandas as pd
import numpy as np
import math
from difflib import SequenceMatcher
pd.set_option('max_columns', None)
pd.set_option('display.width', None)


#Read in the CSV files
df1 = pd.read_csv('CSV1.csv')
df2 = pd.read_csv('CSV2.csv')

Os dois ficheiros CSV têm este aspecto:

CSV1

CSV2

A seguir, vamos criar uma matriz. A criação de uma matriz permite completar a comparação à medida que cria índices, e os índices em cada matriz podem ser comparados e depois a diferença percentual pode ser calculada.

#Create an array for both dataframes
array1 = np.array(df1)
array2 = np.array(df2)

O nosso passo seguinte é transferir as matrizes para uma moldura de dados, alterar todos os valores inteiros para uma cadeia, e depois juntar ambas as moldura de dados numa só.

Neste caso, a mudança de valores para uma cadeia permite que esses valores sejam iterados, caso contrário, receberá um erro " TypeError: o objecto 'int' não é iterável".

#Transfer the arrays to a dataframe
df_CSV_1 = pd.DataFrame(array1, columns=['No1','Film1','Year1','Length1'])
df_CSV_2 = pd.DataFrame(array2, columns=['No2','Film2','Year2','Length2'])

#Change all the values to a string, as numbers cannot be iterated over.
df_CSV_1['Year1'] = df_CSV_1['Year1'].astype('str')
df_CSV_2['Year2'] = df_CSV_2['Year2'].astype('str')
df_CSV_1['Length1'] = df_CSV_1['Length1'].astype('str')
df_CSV_2['Length2'] = df_CSV_2['Length2'].astype('str')

#join the dataframes
df = pd.concat([df_CSV_1,df_CSV_2], axis=1)

Estamos agora a passar à parte principal do programa, que nos dá as respostas de que necessitamos. Aqui criamos uma função que faz os cálculos por nós:

#Create a function to calculate the differences and show as a ratio.
def create_ratio(df, columna, columnb):
    return SequenceMatcher(None,df[columna],df[columnb]).ratio()

A seguir calculamos as diferenças e formatamos a saída

#Here we use apply which will pull in the data that needs to be passed to the fuction above.
df['Film_comp'] = df.apply(create_ratio,args=('Film1','Film2'),axis=1)
df['Year_comp'] = df.apply(create_ratio,args=('Year1','Year2'),axis=1)
df['Length_comp'] = df.apply(create_ratio,args=('Length1','Length2'),axis=1)

#This creates the values we are looking for
df['Film_comp'] = round(df['Film_comp'].astype('float'),2)*100
df['Year_comp'] = round(df['Year_comp'].astype('float'),2)*100
df['Length_comp'] = round(df['Length_comp'].astype('float'),2)*100

#this removes the decimal point that is added as a result of using the datatype 'Float'
df['Film_comp'] = df['Film_comp'].astype('int')
df['Year_comp'] = df['Year_comp'].astype('int')
df['Length_comp'] = df['Length_comp'].astype('int')
#Print the output
print(df)

E o resultado final parece ser o seguinte:

Uma explicação da produção

Como se pode ver, as últimas três colunas são as percentagens da correspondência obtida, sendo 100 uma correspondência exacta.

Para o valor de índice 1 há Joker no primeiro ficheiro, mas Jokers está no segundo ficheiro.

O rácio é calculado da seguinte forma:

Joker é comprimento 5, Jokers é comprimento 6 = 11 caracteres

Assim, a lógica olha para a sequência, iterando através da sequência pode ver que os primeiros 10 caracteres estão na mesma ordem, mas o 11º carácter não é, como resultado, calcula o seguinte:

(10/11) * 100 = 90.90

Finalmente, a função redonda define o valor que procuramos para 91.

Na mesma linha, vamos comparar o ano:

2019 e 2008 são um total de oito caracteres.

Na sequência, os dois primeiros de cada partida, e como também são encontrados, dão-nos quatro, e a proporção é a seguinte:

4/8 *100 = 50

Para o Índice 20 também comparámos o nome do filme, no total há 17 caracteres, mas o programa ignora o que eles chamam de lixo, pelo que o espaço não está incluído, por essa razão a proporção apenas calcula mais de dezasseis caracteres.

A fim de melhor compreender isto, compilei o que se segue:

Índice 1Índice 1
201920088JokerJokers11
2Mancha Correcta1JMancha Correcta1
0Mancha Correcta1oMancha Correcta1
1Ponto incorrecto0KMancha Correcta1
9Ponto incorrecto0eMancha Correcta1
rMancha Correcta1
2Encontrado1JEncontrado1
0Encontrado1oEncontrado1
1Encontrado0KEncontrado1
9Encontrado0eEncontrado1
rEncontrado1
Total em comparação8Total em comparação11
Rácio0.50Rácio0.91
Índice 20
A SujeiraO Sujo16
TMancha Correcta1
HMancha Correcta1
EMancha Correcta1
Mancha Correcta1
TEncontrado1
HEncontrado1
EEncontrado1
DMancha Correcta1
IMancha Correcta1
RMancha Correcta1
TMancha Correcta1
DEncontrado1
IEncontrado1
REncontrado1
TEncontrado1
Total em comparação16
Rácio0.94

CSV, numpy, Python, Python trabalhando com arquivos, SequenceMatcher Etiquetas:comparar ficheiros CSV, python comparar ficheiros CSV, Combinador de Sequências, validar o CSV

Pós navegação

Posto Anterior: Como passar uma variável Javascript para Python usando o JSON
Próximo Post: O que é um Array In Python?

Posts relacionados

  • Tutorial Python: Pandas groupby ( Vídeo 1) Python
  • Tutorial Python: Como importar dados de ficheiros Python a trabalhar com ficheiros
  • TipoError objecto do tipo 'int' não tem len() Python
  • Píton de expressões regulares Python
  • Como criar um ficheiro XML a partir do Excel usando Python Python
  • Como Gerar Inteiros Aleatórios Entre 0 e 9 Python

Selecione seu idioma!

  • English
  • हिंदी
  • Español
  • Français
  • Italiano
  • Deutsch
  • Tutorial Python: Como criar gráficos em Excel Tutorial Python
  • Como comparar cabeçalhos de coluna em CSV com uma lista em Python CSV
  • Como remover caracteres de um ficheiro CSV importado Tutorial Python
  • Como Adicionar Fórmulas ao Excel usando Python numpy
  • como remover caracteres indesejados dos seus dados R Programação
  • O que são dimensões no Tableau? visualização de dados
  • Tutorial Python: Como criar uma interface gráfica do utilizador em Tkinter Python
  • a planear o seu modelo de aprendizagem da máquina aprendizagem de máquinas

Copyright © 2023 Data Analytics Ireland.

Tema de PressBook Premium

Este website utiliza cookies para melhorar a sua experiência. Assumiremos que está de acordo com isto, mas pode optar por não participar se assim o desejar. Definições de CookiesACCEPT
Política de Privacidade & Cookies

Visão Geral da Privacidade

Este website utiliza cookies para melhorar a sua experiência enquanto navega pelo website. Destes cookies, os que são categorizados como necessários são armazenados em seu navegador, pois são essenciais para o funcionamento das funcionalidades básicas do site. Também usamos cookies de terceiros que nos ajudam a analisar e entender como você usa este website. Estes cookies serão armazenados no seu navegador apenas com o seu consentimento. Você também tem a opção de optar por não utilizar estes cookies. Mas a opção de exclusão de alguns destes cookies pode ter um efeito na sua experiência de navegação.
Necessário
Sempre habilitado
Os cookies necessários são absolutamente essenciais para que o site funcione correctamente. Esta categoria inclui apenas cookies que garantem funcionalidades básicas e características de segurança do website. Estes cookies não armazenam nenhuma informação pessoal.
Não necessário
Quaisquer cookies que possam não ser particularmente necessários para o funcionamento do site e que sejam utilizados especificamente para recolher dados pessoais do utilizador através de análises, anúncios, outros conteúdos incorporados são denominados cookies não necessários. É obrigatório obter o consentimento do usuário antes de executar esses cookies em seu site.
GUARDAR & ACEITAR