Πώς φτιάχνουμε γραφήματα στο Microsoft Excel με τη χρήση Python

Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python
Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Στο Microsoft Excel πέρα από την χρήση functions και pivoting έχουμε τη δυνατότητα να προσθέσουμε γραφήματα που βασίζονται στα δεδομένα αυτά.

Γνωρίζουμε όμως ότι γραφήματα μπορούμε να φτιάξουμε και με τη χρήση Python με βιβλιοθήκες όπως matplotlib και seaborn.

Σε αυτό το άρθρο θα κάνουμε μια ανασκόπηση πως γίνεται να συνδυάσουμε δεδομένα από διάφορα Excel προς ένα dataframe με pivoting δεδομένων. Ο σκοπός μας είναι να έχουμε τα δεδομένα σε μια μορφή που θα μπορούσαμε να βγάλουμε ένα χρήσιμο συμπέρασμα με τη χρήση γραφήματος.

Το παράδειγμα

Έχουμε ένα αρχείο Excel με το σύνολο πωλήσεων με όνομα sales.xlsx:

Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Υπάρχει ένα δεύτερο αρχείο Excel με τα ονόματα των πελατών που ονομάζεται pelates.xlsx:

Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Θα θέλαμε στο αρχείο sales.xlsx να έχουμε και τα ονόματα των πελάτων, ας δούμε πως γίνεται αυτό.

Πέρα από το να έχουμε εγκαταστήσει την Python, θα χρειαστούμε τις κάτωθι βιβλιοθήκες, που γίνονται εύκολα εγκατάσταση με μια εκτέλεση των κάτωθι εντολών στο command prompt:

pip install xlrd
pip install pandas
pip install numpy
pip install openpyxl
pip install matplotlib
pip install seaborn

Κάνουμε import τις βιβλιοθήκες:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Γεμίζουμε 2 μεταβλητές dataframe με τις εγγραφές του κάθε Excel. Με τη παράμετρο sheet_name μπορούμε να διαλέξουμε και το φύλο που βρίσκονται τα δεδομένα:

df_pelates = pd.read_excel('pelates.xlsx',sheet_name='Sheet1′)

df_sales = pd.read_excel('sales.xlsx',sheet_name='Sheet1′)

Θα πρέπει να κάνουμε μετονομασία  το πεδίο id σε customer_id, ώστε να έχει το ίδιο όνομα που έχει και στο dataframe των sales:

df_pelates.rename(columns={'id':'customer_id'}, inplace=True)

Σε αυτό το βήμα γίνεται ουσιαστικά το vlookup.

Ενώνουμε και τα 2 dataframes σε ένα καινούργιο (df_final) στο πεδίο customer_id. Στη παράμετρο how δηλώνουμε το τρόπο που θα γίνει join.

Όπως ισχύει και στην SQL έχουμε επιλογές left,right,outer,inner. Δηλώνοντας την επιλογή right δηλώνουμε ότι θέλουμε όλες τις εγγραφές από το δεύτερο dataframe συνδέοντας με όσα συνδέονται με το πρώτο. Αν δεν υπάρχει κοινό customer_id θα έχει την τιμή NaN/Null ή αλλιώς το κενό:

df_final = pd.merge(df_pelates, df_sales, on='customer_id', how='right')

Για να δούμε τα πεδία που έχει τώρα το ενωμένο dataframe:

print(df_final.columns)
Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Αν θέλουμε να δούμε το μέχρι στιγμής αποτέλεσμα:

print(df_final)
Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Τώρα να υπολογίσουμε το πραγματικό κόστος που δαπανήθηκε με την κάθε αγορά πολλαπλασιάζοντας την ποσότητα με το κόστος:

df_final['kostos_agoras'] = df_final['posotita']*df_final['kostos']
Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Κάνουμε ένα group by ανά πελάτη ώστε να βρούμε το συνολικό ποσό για τον καθένα:

df_final_pelatis = df_final.groupby(['customer_id','epitheto','onoma'],as_index=False).sum()
df_final_pelatis = df_final_pelatis[['onoma','epitheto','kostos_agoras']]

Σε αυτό το σημείο καλούμε από τη βιβλιοθήκη seaborn το barplot με μία γραμμή κώδικα. (ο κώδικας του for δεν χρειάζεται εκτός αν θέλουμε να εμφανίζεται στην κάθε μπάρα το ακριβές ποσό όπως στο παράδειγμα):

plt.figure(figsize=(6, 6))

ax = sns.barplot(x="epitheto",y="kostos_agoras", data=df_final_pelatis, palette='Blues_d')

for p in ax.patches:
    ax.annotate(np.round(p.get_height(),decimals=2), 
                (p.get_x()+p.get_width()/2., p.get_height()), 
                ha='center', 
                va='center', 
                xytext=(0, 10), 
                textcoords='offset points',
                fontsize = 12
               )

#ax.legend(loc='top')
plt.savefig('plot1.png', dpi = 80)
plt.show()

Σώζεται το bar chart με όνομα plot1.png.

To function plt.show() θα μας εμφανίσει το γράφημα και στην οθόνη:

Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Μπορούμε να κάνουμε και subcategory barplot

Η χρήση του θα μας επιτρέψει στο άξονα x που περιέχει το επίθετο του κάθε πελάτη να διαχωρίζονται τα δεδομένα και ως προς το είδος των προϊόντων:

Ας δούμε το παράδειγμα.

df_final_eidos = df_final.groupby(['customer_id','epitheto','onoma','eidos'],as_index=False).sum()

df_final_eidos = df_final_eidos[['epitheto','onoma','eidos','kostos_agoras']]

Καλώντας πάλι seaborn barplot θα προσθέσουμε το πεδίο hue ως subcategory και θα βάλουμε στη θέση του data το καινούργιο dataframe(df_final_eidos). Επίσης θα χρησιμοποιήσουμε άλλα χρώματα παλέτας:

plt.figure(figsize=(6, 6))

ax = sns.barplot(x="epitheto", hue="eidos",y="kostos_agoras", data=df_final_eidos, palette='magma')

for p in ax.patches:
    ax.annotate(np.round(p.get_height(),decimals=2), 
                (p.get_x()+p.get_width()/2., p.get_height()), 
                ha='center', 
                va='center', 
                xytext=(0, 10), 
                textcoords='offset points',
                fontsize = 12
               )

#ax.legend(loc='top')
plt.savefig('plot2.png', dpi = 80)
plt.show()

Θα αποθηκευτεί με το όνομα plot2.png.

Ιδού το αποτέλεσμα:

Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python

Για να σώσουμε και τα dataframes και τα bar charts στο ίδιο excel

Σώζουμε τα dataframes/πίνακες πρώτα στις γραμμές/στήλες που θέλουμε.(μπορούσαμε να βάλουμε loop και όταν τελειώνει να ξεκινάει το επόμενο):

writer = pd.ExcelWriter('charts_with_python.xlsx', engine='openpyxl')
df_final_pelatis.to_excel(writer, index=False,startcol=0,startrow=0)
df_final_eidos.to_excel(writer, index=False,startcol=0,startrow=28)

writer.save()

Για να σώσουμε και τα bar plots στο Excel θα πρέπει να το ξανακάνουμε load.

Με την εντολή openpyxl.drawing.image.Image θα ορίσουμε τις 2 εικόνες που φτιάξαμε πριν και με την εντολή anchor θα θέσουμε σε ποιο κελί να τοποθετηθεί η κάθε εικόνα:

wb = openpyxl.load_workbook('charts_with_python.xlsx')
ws = wb.worksheets[0]
img = openpyxl.drawing.image.Image('plot1.png')
img.anchor = 'F1'
ws.add_image(img)
img2= openpyxl.drawing.image.Image('plot2.png')
img2.anchor = 'F28'
ws.add_image(img2)

wb.save('charts_with_python.xlsx')

Το τελικό αποτέλεσμα στο αρχείο Excel που δημιουργήθηκε

Πώς φτιάχνουμε γραφήματα στο Microsoft  Excel με τη χρήση Python
Μοιράσου το

Αφήστε μία απάντηση