Come mostrare le differenze percentuali tra i file in Python

Tempo di lettura stimato: 5 minuti

Nel nostro post precedente su come confrontare i file CSV per le differenze abbiamo mostrato come puoi vedere le differenze, ma cosa succede se vuoi vedere se un record corrisponde al 100% o no?

Qui useremo SequenceMatcher che è una classe python che permette di confrontare i file e restituire se corrispondono in percentuale.

Guardiamo il codice

Importare le dichiarazioni e leggere i file CSV. Qui facciamo il solito lavoro di importazione delle librerie di cui abbiamo bisogno e leggiamo i due file CSV che usiamo:

Notate che qui abbiamo anche impostato le impostazioni del data frame, in modo da poter vedere il data frame correttamente. Vedere più in basso.

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')

I due file CSV si presentano così:

CSV1

CSV2

Successivamente, creeremo una matrice. La creazione di una matrice permette di completare il confronto in quanto crea degli indici, e gli indici in ogni matrice possono essere confrontati e poi si può calcolare la differenza percentuale.

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

Il nostro prossimo passo è quello di trasferire gli array in un data frame, cambiare tutti i valori interi in una stringa, quindi unire entrambi i data frame in uno solo.

In questo caso il cambiamento dei valori in una stringa permette di iterare quei valori, altrimenti si otterrà un errore " TypeError: 'int' object is not iterable".

#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)

Passiamo ora alla parte principale del programma, che ci dà le risposte di cui abbiamo bisogno. Qui creiamo una funzione che fa i calcoli per noi:

#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()

Poi calcoliamo le differenze e formattiamo l'output

#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 l'output finale appare così:

Una spiegazione dell'uscita

Come si può vedere, le ultime tre colonne sono le percentuali della corrispondenza ottenuta, 100 è stata una corrispondenza esatta.

Per il valore dell'indice 1 c'è Joker nel primo file, ma Jokers è nel secondo file.

Il rapporto è calcolato come segue:

Joker è la lunghezza 5, Jokers è la lunghezza 6 = 11 caratteri in lunghezza

Quindi la logica guarda la sequenza, iterando attraverso la sequenza può vedere che i primi 10 caratteri sono nello stesso ordine, ma l'11° carattere non lo è, di conseguenza, calcola quanto segue:

(10/11) * 100 = 90.90

Infine, la funzione round imposta il valore che stiamo cercando a 91.

Sulla stessa linea, confronteremo l'anno:

Il 2019 e il 2008 sono un totale di otto caratteri.

Nella sequenza, i primi due di ogni partita, e come sono anche trovati, ci dà quattro, e il rapporto è il seguente:

4/8 *100 = 50

Per l'indice 20 abbiamo anche confrontato il nome del film, in totale ci sono 17 caratteri, ma il programma ignora quello che chiamano spazzatura, quindi lo spazio non è incluso, per questo motivo il rapporto calcola solo oltre i sedici caratteri.

Per capire meglio questo ho compilato il seguente:

Indice 1Indice 1
201920088JokerJokers11
2Punto corretto1JPunto corretto1
0Punto corretto1oPunto corretto1
1Punto errato0KPunto corretto1
9Punto errato0ePunto corretto1
rPunto corretto1
2Trovato1JTrovato1
0Trovato1oTrovato1
1Trovato0KTrovato1
9Trovato0eTrovato1
rTrovato1
Totale a confronto8Totale a confronto11
Rapporto0.50Rapporto0.91
Indice 20
Lo sporcoLo sporco16
TPunto corretto1
HPunto corretto1
EPunto corretto1
Punto corretto1
TTrovato1
HTrovato1
ETrovato1
DPunto corretto1
IPunto corretto1
RPunto corretto1
TPunto corretto1
DTrovato1
ITrovato1
RTrovato1
TTrovato1
Totale a confronto16
Rapporto0.94

Come creare un file XML da Excel usando Python

Tempo di lettura stimato: 3 minuti

Stai lavorando a un progetto di analisi dei dati in cui hai bisogno di fornire i tuoi dati a una posizione che sia in grado di elaborare un file XML?

La capacità di ottenere i vostri dati in un formato strutturato come XML ha molti vantaggi:

(A) È possibile trasferire i dati a un servizio web per l'elaborazione.

(B) Più formati diversi dei vostri dati grezzi possono essere standardizzati, permettendo una rapida conversione ed elaborazione.

(C) I file XML possono essere letti da più programmi diversi, a patto di consegnarli nel formato corretto.

(D) Il destinatario dei dati può facilmente leggere il file XML e memorizzarlo nel suo database.

La capacità di usare questo metodo per leggere e trasferire i dati è un modo molto potente per aiutare un analista di dati ad elaborare grandi insiemi di dati.

Infatti, se state usando applicazioni basate sul cloud per analizzare le informazioni che state conservando, questo vi permetterà di consegnare rapidamente i dati.

Di quali pacchetti ho bisogno in Python?

Il primo passo è importare quanto segue:

import pandas as pd
from lxml import etree as et

Poi vogliamo leggere i dati di origine

In questo caso, stiamo leggendo un file excel

raw_data = pd.read_excel(r'Link to where your data is stored including the full file name')

Ora vogliamo iniziare a costruire la struttura XML

Il PRIMO PASSO è definire la radice

root = et.Element('root')

La radice è il genitore di tutti gli elementi di dati (tag) contenuti nel file XML ed è necessaria come parte della struttura

Il SECONDO PASSO è definire i nomi dei tag che memorizzeranno ogni riga dei dati sorgente

for row in raw_data.iterrows(): ==> This is a loop that takes runs through each record and populates for each tag.
    root_tags = et.SubElement(root, 'ExportData') #=== > Root name
# These are the tag names for each row (SECTION 1)
    Column_heading_1 = et.SubElement(root_tags, 'Name')
    Column_heading_2 = et.SubElement(root_tags, 'Area')
    Column_heading_3 = et.SubElement(root_tags, 'NoPurchases')
    Column_heading_4 = et.SubElement(root_tags, 'Active')

###These are the values that will be populated for each row above
# The values inside the [] are the raw file column headings.(SECTION 2)
    Column_heading_1.text = str(row[1]['Name'])
    Column_heading_2.text = str(row[1]['Area'])
    Column_heading_3.text = str(row[1]['No Purchases'])
    Column_heading_4.text = str(row[1]['Active'])

Il file grezzo si presenta così:

NomeAreaNessun acquistoAttivo
JohnDublino2Y
MariaGalway3N
JoeLimerick4N
JimmyKilkenny55Y
JenniferBelfast6N
SusanWaterford3Y
JakeSughero1Y
BobbyDundalk11N
SarahSligo9N
CianEnnis8Y
Dati del file grezzo che saranno importati nel file XML

Il TERZO PASSO è creare il file XML e popolarlo con i dati del file di origine

# This Section outputs the data to an xml file
# Unless you tell it otherwise it saves it to the same folder as the script.
tree = et.ElementTree(root) ==> The variable tree is to hold all the values of "root"
et.indent(tree, space="\t", level=0) ===> This just formats in a way that the XML is readable
tree.write('output.xml', encoding="utf-8") ==> The data is saved to an XML file

L'output XML dovrebbe assomigliare al seguente

<root>
	<ExportData>
		<Name>John</Name>
		<Area>Dublin</Area>
		<NoPurchases>2</NoPurchases>
		<Active>Y</Active>
	</ExportData>
	<ExportData>
		<Name>Mary</Name>
		<Area>Galway</Area>
		<NoPurchases>3</NoPurchases>
		<Active>N</Active>
	</ExportData>
	<ExportData>
		<Name>Joe</Name>
		<Area>Limerick</Area>
		<NoPurchases>4</NoPurchases>
		<Active>N</Active>
	</ExportData>
	<ExportData>
		<Name>Jimmy</Name>
		<Area>Kilkenny</Area>
		<NoPurchases>55</NoPurchases>
		<Active>Y</Active>
	</ExportData>
	<ExportData>
		<Name>Jennifer</Name>
		<Area>Belfast</Area>
		<NoPurchases>6</NoPurchases>
		<Active>N</Active>
	</ExportData>
	<ExportData>
		<Name>Susan</Name>
		<Area>Waterford</Area>
		<NoPurchases>3</NoPurchases>
		<Active>Y</Active>
	</ExportData>
	<ExportData>
		<Name>Jake</Name>
		<Area>Cork</Area>
		<NoPurchases>1</NoPurchases>
		<Active>Y</Active>
	</ExportData>
	<ExportData>
		<Name>Bobby</Name>
		<Area>Dundalk</Area>
		<NoPurchases>11</NoPurchases>
		<Active>N</Active>
	</ExportData>
	<ExportData>
		<Name>Sarah</Name>
		<Area>Sligo</Area>
		<NoPurchases>9</NoPurchases>
		<Active>N</Active>
	</ExportData>
	<ExportData>
		<Name>Cian</Name>
		<Area>Ennis</Area>
		<NoPurchases>8</NoPurchases>
		<Active>Y</Active>
	</ExportData>
</root>

Si possono aggiungere altri dati XML

  1. Aggiungere altre righe - Tutto quello che dovete fare è aggiungere al file sorgente e salvare. Quando rilancerete la logica, essa leggerà le informazioni extra.
  2. Aggiungere altre colonne - Tutto quello che devi fare è andare al secondo passo sopra, aggiungere un nome di tag alla SEZIONE 1. Separatamente dovrai aggiungere un'ulteriore colonna con dati al file di origine, e poi aggiungere quel nome di colonna anche alla SEZIONE 2

Come controllare se un file è vuoto

Tempo di lettura stimato: 2 minuti

Vi siete mai chiesti come si fa a controllare se un file è vuoto?

Un problema che si può incontrare in Data Analytics è che quando si importa un file come descritto in questo post Python - Come importare dati da file è come facciamo a sapere se i file sono vuoti o meno prima dell'importazione?

Nel mondo dei dati, ci sono diversi motivi per controllare :

  • Si dispone di un processo automatizzato che si basa sull'importazione non vuota.
  •  Un processo che vi ha preceduto nella ricezione del file non ha funzionato.
  • La quantità di tempo e di sforzi per indagare sul problema fa sì che il lavoro indebito venga risolto.

I dadi e i bulloni di tutto questo

Qui abbiamo un video che guarda diversi scenari su come portare i file. In questo video appaiono le seguenti funzionalità:

  • os.path.getsize - Questo cerca di ottenere la dimensione del file allegato al file. * Si prega di vedere la nota qui sotto
  • pd.read_csv
  • pd.read_excel

L'aggiunta di bit

*Una nota su os.path.getsize, che abbiamo trovato:

  • Funziona nella logica prevista solo se la dimensione del file è pari a zero KB.
  •  I file CSV e XLSX, anche se sono stati creati vuoti, quando sono stati salvati avevano una dimensione di file maggiore di zero.
  •  I file TXT, quando creati vuoti e salvati, avevano una dimensione di file pari a zero.

 

Spero che questo video aiuti a spiegare ulteriormente come i file vuoti possono essere controllati in pitone prima di essere elaborati.

Grazie!

Analisi dei dati Irlanda

Come rimuovere i caratteri da un file CSV importato

Tempo di lettura stimato: 2 minuti

Rimozione di errori indesiderati nei vostri dati, nel modo più semplice.
Il processo di importazione dei dati può assumere molti formati, ma avete cercato un video su come fare questo? Ancora meglio, state cercando un video che vi mostri come importare un file CSV e poi i dati lo ripuliscono, rimuovendo efficacemente i caratteri indesiderati?

Come seguito di Python - come rimuovere i caratteri indesiderati, quel video focalizzato sulla pulizia dei dati creati all'interno del codice, questo video passa attraverso diverse opzioni per aprire un file CSV, trovare i caratteri indesiderati, rimuovere i caratteri indesiderati dal dataset e poi restituire i dati puliti.

Come entrare tra i dati del problema:

L'approccio in questo caso ha preso in considerazione tre diversi scenari:

(A) Utilizzando una variabile che è uguale ad una funzione aperta, e poi leggendo la variabile in un frame di dati.

(B) Utilizzando insieme un "con dichiarazione" e una funzione aperta, e restituendo l'uscita ad un frame di dati.

(C) Usare read_csv per leggere in modo rapido ed efficiente nel file CSV e poi pulire il set di dati.

Qualche piccolo ostacolo sulla strada che richiede un po' di riflessione

Ci sono alcune sfide con questo che vedrete nel video:

  • Le opzioni A e B hanno dovuto implementare codice aggiuntivo solo per ottenere il frame dei dati nel modo desiderato.
  •  Le linee di codice aggiuntive rendono più complessa la gestione del codice.

Alla fine, read_csv era probabilmente il modo migliore per affrontare la questione; richiedeva meno codice e sarebbe stato più facile da gestire nel lungo periodo.

 

Come sempre grazie per averci guardato, iscrivetevi al nostro canale YouTube e seguiteci sui social media!

Analisi dei dati Irlanda

 

Elenchi di canali YouTube - Python che lavora con i file

Vi siete mai chiesti come lavorare con i file e come accedere ad essi e guardarne il contenuto?

Nell'ambiente odierno, c'è una frequente necessità di lavorare con i file, importare fare qualche lavoro su di essi e poi salvarli da qualche parte o passarli per un'ulteriore elaborazione.

Il lavoro con i file può avvenire in diversi modi:

  • Si importano da un'unità locale o di rete.
  • I file vengono trasmessi elettronicamente per essere memorizzati su un server di destinazione e poi elaborati.
  • Potrebbero essere ricevuti via e-mail e devono essere estratti ed elaborati.

I video di questa serie di analisi dei dati contribuiranno, si spera, a spiegare i diversi concetti e modi di lavorare con i file; potrebbe essere necessario indirizzare o scrivere un programma da indirizzare.

https://www.youtube.com/embed?listType=playlist&list=PL2nlwZUZ5tFLTwTqKHi8cHY8ZH34HQSJM

Speriamo che vi piaccia e vi preghiamo di iscrivervi attraverso i pulsanti dei social media sulla pagina se volete saperne di più!

Analisi dei dati Irlanda

 

Tutorial del Pitone: Come importare dati da file

Tempo di lettura stimato: 1 minuto

È necessario aprire rapidamente i file e importare i dati in una cornice di dati?

In questo post e nel video su Python, esamineremo diverse opzioni per voi per fare questo così come alcune cose aggiuntive da considerare.

L'importazione dei file qui trattati è la seguente:

  • Lettura dei dati da un file CSV.
  • Lettura dei dati da un file TXT.
  • Lettura dei dati da un file XLSX.

All'importazione ci sono molte cose da considerare, qui ce ne sono alcune da considerare:

(A) Il formato del file

(B) Come appaiono i dati all'interno del file.

(C) Requisiti speciali per far apparire i dati corretti quando vengono caricati.

In questo esempio di importazione di file si fa riferimento a delimitatori di schede, intestazioni e ordinamento. Qui ci sono alcuni modi diversi per affrontarlo in modo un po' diverso se si cercano alternative alla lettura e alla scrittura di file CSV

Grazie per averci guardato, vi preghiamo di seguirci cliccando sui link a destra!

Volete controllare se un file è vuoto? Date un'occhiata qui Python - Come controllare se un file è vuoto

Grazie!

Analisi dei dati Irlanda