slogan3

Help me bij het ontwikkelen van een aangepaste Pandas DataFrame profiling rapport

description

Door het genereren van een uitgebreide profiling rapport kun je snel datakwaliteitsproblemen identificeren, de structuur van je dataset begrijpen en weloverwogen beslissingen nemen voor verdere analyse of preprocessing.

prompt

try_prompt

Ik wil een aangepaste profiling rapport maken voor mijn Pandas DataFrame die statistieken bevat zoals datatypesdistributies, unieke waardeaantallen en percentages ontbrekende waard ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een Python-script dat een uitgebreide profiling rapportage maakt voor je Pandas DataFrame met verkoopgegevens. Het script bevat statistieken zoals datatypes, distributie van waarden, aantal unieke waarden en percentages ontbrekende data. Daarnaast geef ik suggesties voor effectieve visualisaties. ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Voorbeeld DataFrame laden (pas dit aan naar jouw data) # df = pd.read_csv('jouw_verkoopgegevens.csv') # Function om rapport te genereren def generate_profiling_report(df): report = {} # Overzicht van datatypes datatypes = df.dtypes report['Datatypes'] = datatypes # Unieke waarden per kolom unique_counts = df.nunique() report['Unieke waarden'] = unique_counts # Percentage ontbrekende waarden missing_percent = df.isnull().mean() * 100 report['Ontbrekende waarden (%)'] = missing_percent # Algemene statistieken voor numerieke kolommen numeric_stats = df.describe() report['Numerieke statistieken'] = numeric_stats # Algemene statistieken voor categorische kolommen categorical_cols = df.select_dtypes(include=['object', 'category']).columns categorical_stats = df[categorical_cols].describe() report['Categorische statistieken'] = categorical_stats # Print rapport print("=== DataType Distributie ===") print(datatypes) print("\n=== Unieke Waarden per Kolom ===") print(unique_counts) print("\n=== Percentage Ontbrekende Waarden ===") print(missing_percent) # Visualisaties # 1. DataType Distributie plt.figure(figsize=(8, 4)) datatypes.value_counts().plot(kind='bar') plt.title('Distributie van DataTypes') plt.ylabel('Aantal kolommen') plt.xlabel('DataType') plt.show() # 2. Unieke Waarden plt.figure(figsize=(10, 6)) unique_counts.plot(kind='bar') plt.title('Aantal Unieke Waarden per Kolom') plt.ylabel('Aantal unieke waarden') plt.xlabel('Kolom') plt.show() # 3. Ontbrekende Waarden Percentage plt.figure(figsize=(10, 6)) missing_percent.plot(kind='bar') plt.title('Percentage Ontbrekende Waarden per Kolom') plt.ylabel('Ontbrekende waarden (%)') plt.xlabel('Kolom') plt.show() # 4. Histograma voor numerieke data (bijvoorbeeld 'bedrag') if 'bedrag' in df.columns: plt.figure(figsize=(8, 4)) sns.histplot(df['bedrag'].dropna(), bins=30) plt.title('Verdeling van Bedrag') plt.xlabel('Bedrag') plt.ylabel('Frequentie') plt.show() # 5. Tijdsreeks analyse (bij datum kolom) if 'datum' in df.columns: df['datum'] = pd.to_datetime(df['datum']) tijdsverdeling = df['datum'].dt.date.value_counts().sort_index() plt.figure(figsize=(12, 6)) tijdsverdeling.plot() plt.title('Verkoop per Dag') plt.xlabel('Datum') plt.ylabel('Aantal verkopen') plt.show() # Voorbeeld gebruik # generate_profiling_report(df) ``` **Hoe je dit kunt gebruiken:** 1. Laad je verkoopgegevens in een DataFrame, bijvoorbeeld met `pd.read_csv()`. 2. Roep de functie aan met je DataFrame: `generate_profiling_report(df)`. 3. Bekijk de console-uitvoer voor een overzicht van statistieken. 4. Bekijk de gegenereerde grafieken voor visuele inzichten. **Aanvullende ideeën voor visualisatie:** - **Boxplots** voor uitbijters in 'bedrag'. - **Strookdiagrammen** voor productcategorieën of verkoopvolumes. - **Tijdreeks analyses** voor trends over tijd. - **Correlatiematrices** voor numerieke variabelen. Mocht je meer gedetailleerde of aangepaste rapportages willen, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Hier is een Python-script om een uitgebreid profiling rapport te genereren voor je verkoopdata: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from datetime import datetime # Stel de stijl in voor visualisaties plt.style.use('seaborn-v0_8') sns.set_palette("husl") def maak_profiling_rapport(df, naam="Verkoopdata Profiling Rapport"): """ Genereert een uitgebreid profiling rapport voor een DataFrame """ print("=" * 60) print(f"{naam}") print("=" * 60) # Basis informatie print("\n1. BASIS INFORMATIE") print("-" * 30) print(f"Aantal rijen: {df.shape[0]:,}") print(f"Aantal kolommen: {df.shape[1]}") print(f"Totale geheugengebruik: {df.memory_usage(deep=True).sum() / 1024**2:.2f} MB") # Datatype distributie print("\n2. DATATYPE DISTRIBUTIE") print("-" * 30) dtype_counts = df.dtypes.value_counts() for dtype, count in dtype_counts.items(): percentage = (count / len(df.columns)) * 100 print(f"{dtype}: {count} kolommen ({percentage:.1f}%)") # Gedetailleerde kolomanalyse print("\n3. GEDETAILLEERDE KOLOMANALYSE") print("-" * 40) rapport_data = [] for col in df.columns: col_info = { 'Kolom': col, 'Datatype': df[col].dtype, 'Unieke waarden': df[col].nunique(), 'Ontbrekende waarden': df[col].isnull().sum(), 'Ontbrekend %': (df[col].isnull().sum() / len(df)) * 100, 'Voorbeeld waarden': df[col].dropna().head(3).tolist() if df[col].nunique() > 0 else [] } rapport_data.append(col_info) # Toon gedetailleerde informatie per kolom for info in rapport_data: print(f"\n📊 Kolom: {info['Kolom']}") print(f" Datatype: {info['Datatype']}") print(f" Unieke waarden: {info['Unieke waarden']:,}") print(f" Ontbrekende waarden: {info['Ontbrekende waarden']:,}") print(f" Ontbrekend percentage: {info['Ontbrekend %']:.2f}%") if info['Voorbeeld waarden']: print(f" Voorbeelden: {info['Voorbeeld waarden']}") return rapport_data def visualiseer_profiling(df, rapport_data): """ Creëert visualisaties voor het profiling rapport """ fig, axes = plt.subplots(2, 2, figsize=(15, 12)) fig.suptitle('Verkoopdata Profiling Visualisaties', fontsize=16, fontweight='bold') # 1. Ontbrekende waarden heatmap plt.subplot(2, 2, 1) missing_data = df.isnull() sns.heatmap(missing_data, cbar=True, cmap='viridis', yticklabels=False) plt.title('Ontbrekende Waarden Heatmap') plt.xlabel('Kolommen') plt.ylabel('Rijen') # 2. Datatype distributie plt.subplot(2, 2, 2) dtype_counts = df.dtypes.value_counts() plt.pie(dtype_counts.values, labels=dtype_counts.index, autopct='%1.1f%%', startangle=90) plt.title('Datatype Distributie') # 3. Unieke waarden per kolom plt.subplot(2, 2, 3) unique_counts = [info['Unieke waarden'] for info in rapport_data] kolom_namen = [info['Kolom'] for info in rapport_data] bars = plt.bar(kolom_namen, unique_counts, color='skyblue') plt.title('Aantal Unieke Waarden per Kolom') plt.xticks(rotation=45, ha='right') plt.ylabel('Aantal unieke waarden') # Voeg waarden toe boven de bars for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width()/2., height, f'{int(height):,}', ha='center', va='bottom') # 4. Ontbrekende waarden percentage plt.subplot(2, 2, 4) missing_percentages = [info['Ontbrekend %'] for info in rapport_data] bars = plt.bar(kolom_namen, missing_percentages, color='lightcoral') plt.title('Percentage Ontbrekende Waarden per Kolom') plt.xticks(rotation=45, ha='right') plt.ylabel('Percentage ontbrekend (%)') # Voeg percentages toe boven de bars for bar in bars: height = bar.get_height() if height > 0: # Alleen tonen als er ontbrekende waarden zijn plt.text(bar.get_x() + bar.get_width()/2., height, f'{height:.1f}%', ha='center', va='bottom') plt.tight_layout() plt.show() # Extra: Numerieke kolom analyse numerieke_kolommen = df.select_dtypes(include=[np.number]).columns if len(numerieke_kolommen) > 0: fig, axes = plt.subplots(1, 2, figsize=(12, 5)) # Boxplot voor numerieke kolommen plt.subplot(1, 2, 1) df[numerieke_kolommen].boxplot() plt.title('Boxplot Numerieke Kolommen') plt.xticks(rotation=45) # Distributie voor de eerste numerieke kolom if len(numerieke_kolommen) > 0: plt.subplot(1, 2, 2) eerste_numeriek = numerieke_kolommen[0] df[eerste_numeriek].hist(bins=30, alpha=0.7, edgecolor='black') plt.title(f'Distributie van {eerste_numeriek}') plt.xlabel(eerste_numeriek) plt.ylabel('Frequentie') plt.tight_layout() plt.show() # VOORBEELD GEBRUIK: # Maak voorbeeld verkoopdata (vervang dit met je eigen DataFrame) np.random.seed(42) voorbeeld_data = { 'datum': pd.date_range('2023-01-01', periods=1000, freq='D'), 'product': np.random.choice(['Product A', 'Product B', 'Product C', 'Product D'], 1000), 'bedrag': np.random.normal(100, 30, 1000), 'categorie': np.random.choice(['Elektronica', 'Kleding', 'Huishouden', None], 1000, p=[0.3, 0.3, 0.3, 0.1]), 'klant_id': np.random.randint(1000, 2000, 1000) } df = pd.DataFrame(voorbeeld_data) # Voeg wat ontbrekende waarden toe voor demonstratie df.loc[np.random.choice(df.index, 50), 'bedrag'] = np.nan df.loc[np.random.choice(df.index, 30), 'product'] = None # Genereer het rapport rapport = maak_profiling_rapport(df) # Toon visualisaties visualiseer_profiling(df, rapport) # Extra: Samenvatting statistieken voor numerieke kolommen print("\n4. NUMERIEKE KOLOMMEN SAMENVATTING") print("-" * 35) numerieke_kolommen = df.select_dtypes(include=[np.number]).columns if len(numerieke_kolommen) > 0: print(df[numerieke_kolommen].describe()) ``` ## Aanvullende visualisatie suggesties: ```python # Extra geavanceerde visualisaties def aanvullende_visualisaties(df): """ Extra visualisaties specifiek voor verkoopdata """ # Tijdreeks analyse als datumkolom aanwezig is if 'datum' in df.columns: fig, axes = plt.subplots(1, 2, figsize=(15, 5)) # Maandelijkse verkopen df_maand = df.groupby(df['datum'].dt.to_period('M')).size() plt.subplot(1, 2, 1) df_maand.plot(kind='bar', ax=plt.gca()) plt.title('Verkopen per Maand') plt.xticks(rotation=45) # Product distributie if 'product' in df.columns: plt.subplot(1, 2, 2) df['product'].value_counts().plot(kind='pie', autopct='%1.1f%%') plt.title('Product Distributie') plt.tight_layout() plt.show() # Correlatie heatmap voor numerieke data numeriek_df = df.select_dtypes(include=[np.number]) if len(numeriek_df.columns) > 1: plt.figure(figsize=(8, 6)) correlatie_matrix = numeriek_df.corr() sns.heatmap(correlatie_matrix, annot=True, cmap='coolwarm', center=0) plt.title('Correlatie Matrix Numerieke Kolommen') plt.tight_layout() plt.show() # Gebruik aanvullende visualisaties aanvullende_visualisaties(df) ``` ## Belangrijkste bevindingen om te rapporteren: 1. **Data kwaliteit**: Percentage ontbrekende waarden per kolom 2. **Cardinaliteit**: Kolommen met veel unieke waarden (mogelijke ID's) 3. **Datatype optimalisatie**: Mogelijkheid om geheugengebruik te reduceren 4. **Uitschieters**: In numerieke kolommen via boxplots 5. **Tijdpatronen**: Seizoensgebonden trends in verkoopdata Dit script geeft je een compleet overzicht van je data en helpt bij het identificeren van data kwaliteitsissues voordat je met analyse begint!