Gebruik Python voor gegevensanalyse: bouw een reproduceerbare workflow

Pandas DataFrames, ondersteund door Numpy en gevisualiseerd met Matplotlib of Seaborn, geeft u een direct pad van ruwe records naar betrouwbare inzichten zonder handmatige, foutgevoelige stappen. De onderstaande aanpak geeft prioriteit aan een enkele, reproduceerbare pijplijn die u opnieuw kunt uitvoeren op nieuwe gegevens en delen met teamgenoten.

Voorwaarden

  • Python 3.9+ geïnstalleerd via Anaconda of uw systeempakketbeheerder.
  • Jupyterlab of Jupyter Notebook voor iteratieve analyse.
  • Bibliotheken: Panda's, Numpy, Matplotlib, Seaborn, Scikit-Learn; Plus stuurprogramma's voor externe bronnen die u gebruikt (bijvoorbeeld PyoDBC of PSYCOPG2).

Methode 1 - Bouw een reproduceerbare Pandas -pijplijn (Jupyter)

Stap 1:Maak en activeer een speciale Python -omgeving.

conda create -n data-pipeline python=3.11 -y
conda activate data-pipeline
# or with pip + venv:
python -m venv .venv
source .venv/bin/activate  # Windows: .venvScriptsactivate

Stap 2:Installeer kernanalysebibliotheken.

python -m pip install pandas numpy matplotlib seaborn scikit-learn pyarrow openpyxl lxml

Stap 3:Start Jupyterlab of notebook en maak een nieuw notitieboekje.

jupyter lab
# Run cells with 

Shift+Entervoert de huidige cel uit en gaat naar de volgende.

Stap 4:Laad een CSV in een dataframe met Dypes afgeleid.

import pandas as pd

df = pd.read_csv("data.csv").convert_dtypes()
df.head()

Stap 5:Standaardiseer kolomnamen naar Snake_Case voor consistente code.

df.columns = (
    df.columns
      .str.strip()
      .str.lower()
      .str.replace(r"[^0-9a-zA-Z]+", "_", regex=True)
      .str.replace(r"_+", "_", regex=True)
      .str.removesuffix("_")
)

Stap 6:Inspecteer typen en ontbrekende waarden op planfixes.

df.info()
df.isna().sum()

Stap 7:Patch bekend ontbrekende waarden zonder goede rijen te overschrijven.

# Example: fill specific cells by index using combine_first
patch = pd.DataFrame({"score_a": {42: 7.1}, "score_b": {42: 6.8}})
df = df.combine_first(patch)

Stap 8:Schone valutasnaren en in één ketting naar numeriek geworpen.

df = df.assign(
    revenue_usd=lambda d: d["revenue_usd"]
        .astype("string")
        .str.replace(r"[$,]", "", regex=True)
        .astype("Float64"),
    budget_usd=lambda d: d["budget_usd"]
        .astype("string")
        .str.replace(r"[$,]", "", regex=True)
        .astype("Float64"),
)

Stap 9:Converteer de duurtekst zoals "130 minuten" tot gehele minuten.

df = df.assign(
    duration_min=lambda d: d["duration_min"]
        .astype("string")
        .str.replace(" mins", "", regex=False)
        .astype("Int64")
)

Stap 10:Parseer menselijk leesbare datums met een juiste datetime-kolom.

Voorgestelde lees:

df = df.assign(
    release_date=lambda d: pd.to_datetime(d["release_date"], format="%B, %Y")
)

Stap 11:Leid nuttige functies af (bijvoorbeeld releasejaar) voor groepering.

df = df.assign(release_year=lambda d: d["release_date"].dt.year.astype("Int64"))

Stap 12:Herstel typefouten en inconsistente categorieën voor betrouwbare groepering.

df = df.assign(
    lead_actor=lambda d: d["lead_actor"]
        .str.replace(r"^Shawn", "Sean", regex=True)
        .str.replace("MOORE", "Moore"),
    car_brand=lambda d: d["car_brand"].str.replace("Astin", "Aston"),
)

Stap 13:Identificeer onwaarschijnlijke uitbijters met snelle statistieken.

df[["duration_min", "martinis"]].describe()

Stap 14:Corrigeer geverifieerde slechte waarden voor realistische getallen.

df = df.assign(
    duration_min=lambda d: d["duration_min"].replace({1200: 120}),
    martinis=lambda d: d["martinis"].replace({-6: 6})
)

Stap 15:Verwijder dubbele rijen en reindex voor een schone gegevensset.

df = df.drop_duplicates(ignore_index=True)

Stap 16:Vervolg de gereinigde dataset voor toekomstige analyse.

# Parquet keeps types and compresses well
df.to_parquet("clean.parquet", index=False)
# CSV is broadly compatible
df.to_csv("clean.csv", index=False)

Waarom deze methode eerst: een enkele, geketende pijplijn vermindert handmatige stappen, voorkomt verborgen Excel -bewerkingen en laat teamgenoten de resultaten reproduceren op aanvraag. Het schaalt ook beter dan spreadsheets wanneer uw dataset verder gaat dan een paar honderdduizend rijen.

Methode 2 - Querygegevens rechtstreeks vanuit een database in panda's

Stap 1:Installeer een DB -driver en SQL -toolkit voor uw motor.

# SQL Server example
python -m pip install pyodbc sqlalchemy
# PostgreSQL example
python -m pip install psycopg2-binary sqlalchemy

Stap 2:Maak een Sqlalchemy -motor met een beveiligde verbindingsreeks.

from sqlalchemy import create_engine

# Example for SQL Server with ODBC Driver 17:
engine = create_engine(
    "mssql+pyodbc://username:password@SERVER/DB?driver=ODBC+Driver+17+for+SQL+Server",
    fast_executemany=True
)

Stap 3:Trek gegevens rechtstreeks naar panda's zonder CSV's te exporteren.

import pandas as pd

sql = "SELECT col_a, col_b, created_at FROM schema.table WHERE created_at >= '2024-01-01';"
df = pd.read_sql(sql, engine).convert_dtypes()

Stap 4:Parameterisering van vragen om SQL -injectierisico's te voorkomen.

from sqlalchemy import text

stmt = text("SELECT * FROM sales WHERE region = :region AND dt >= :start")
df = pd.read_sql(stmt, engine, params={"region": "EMEA", "start": "2025-01-01"})

Stap 5:Sluit verbindingen na gebruik of vertrouw op contextmanagers.

engine.dispose()

Deze aanpak elimineert handmatige export, ondersteunt geplande taken en houdt waar nodig de logica van de waarheid in SQL. Het is ideaal wanneer uw gegevens al leven in relationele systemen die worden gebruikt door BI -tools.

Methode 3 - Lees uit gemeenschappelijke bestands- en webbronnen

Stap 1:Laad kolomvormige parketbestanden voor snelheid en bewaarde dtypen.

df = pd.read_parquet("data.parquet").convert_dtypes()

Stap 2:Excel -vellen importeren wanneer teams .xlsx -bestanden delen.

df = pd.read_excel("workbook.xlsx", sheet_name="Sheet1").convert_dtypes()

Stap 3:Lees JSON -documenten in nette tafels.

df = pd.read_json("records.json").convert_dtypes()

Stap 4:Schraap eenvoudige HTML -tabellen wanneer een API niet beschikbaar is.

tables = pd.read_html("https://example.com/tables-page")
df = tables[0].convert_dtypes()

Tip: geef de voorkeur aan parket voor tussenliggende opslag omdat het soorten comprimeert en behoudt; Als u moet delen met tools zonder parketondersteuning, exporteert u CSV als een fallback.

Methode 4 - Analyseren, visualiseren en modelleren

Stap 1:Bereken snelle beschrijvende statistieken om reeksen en afwijkingen te spotten.

df.describe(numeric_only=True)

Stap 2:Creëer een spreidingsplot om de correlatie tussen twee statistieken te beoordelen.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.scatter(df["metric_x"], df["metric_y"], alpha=0.7)
ax.set_title("Metric Y vs Metric X")
ax.set_xlabel("Metric X")
ax.set_ylabel("Metric Y")
plt.show()

Stap 3:Plaats een eenvoudige lineaire regressie en plicht de best passende lijn.

from sklearn.linear_model import LinearRegression
import numpy as np

X = df[["metric_x"]].to_numpy()
y = df["metric_y"].to_numpy()
model = LinearRegression().fit(X, y)
r2 = model.score(X, y)
y_pred = model.predict(X)

fig, ax = plt.subplots()
ax.scatter(X, y, alpha=0.7)
ax.plot(X, y_pred, color="red")
ax.set_title(f"Linear Fit (R²={r2:.2f})")
ax.set_xlabel("Metric X")
ax.set_ylabel("Metric Y")
plt.show()

Stap 4:Inspecteer distributies met binned tellingen om typische bereiken te zien.

counts = df["duration_min"].value_counts(bins=7).sort_index()
ax = counts.plot.bar(, xlabel="Minutes (bins)", ylabel="Count")
plt.show()

Stap 5:Groep en geaggregeerd om segmenten te vergelijken.

(df.groupby("release_year")["revenue_usd"]
   .agg(["count", "mean", "sum"])
   .sort_index())

De plots lezen: een zichtbare opwaartse trend in de spreiding duidt op een positieve relatie, terwijl een wolk zonder helling weinig tot geen lineaire relatie suggereert. Gebruik R² om te kwantificeren hoe goed de regressielijn variantie in de gegevens verklaart.

Operationele tips en waarschuwingen

  • Automatiseer terugkerend werk door alles in één notitieboekje of script te houden en het op een schema met uw favoriete orkestrator uit te voeren.
  • Gebruik methode chaining (bijvoorbeeld bijvoorbeelddf.assign(...).drop_duplicates(...)) om de code leesbaar te houden en per ongeluk gemiddelde bewerkingen te voorkomen.
  • Liever getypte gehele getallen (Int64) en drijft (Float64) voor wiskunde; Snaren zullen niet correct worden opgevat of gemiddeld.
  • Valideer in elke fase metdf.info(),,df.head(), en spot-controles om vroege fouten te vangen.
  • Wanneer datasets de limieten van Excel Comfort overschrijden, laadt, laadt Pandas meestal miljoenen rijen sneller en met minder crashes.

Door uw werk in een enkele Pandas -pijplijn te centreren, snijdt u drukwerk, versnelt u herhaalde runs en maakt de resultaten gemakkelijker om te controleren en opnieuw te gebruiken. Directe SQL -lezingen toevoegen indien beschikbaar en bewaar Parquet -snapshots om gegevens snel door uw workflow te verplaatsen.

Related Posts