Pandas & NumPy Academy · Oppitunti

Tulojen laskenta ja piirteiden muodostaminen

Laskekaa rivikohtaiset tulot, luokaa kuukausi- ja vuosineljännessarakkeet ja lisätkää alennusilmaisin kynnysarvon ylittäville tilauksille.

Oppitunti 2/413 vaihetta

Tulojen laskenta ja piirteiden muodostaminen on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.

Rivikohtaisen liikevaihdon laskeminen

Myyntiaineiston perustavanlaatuisin laskelma on rivikohtainen liikevaihto: kunkin rivin määrän ja yksikköhinnan tulo. Luo sarake vektorisoidulla kertolaskulla, jolloin NumPy käsittelee kaikki rivit samanaikaisesti ilman Python-silmukkaa. Tämä sarake toimii kaikkien analyysin aggregointien perustana.

import pandas as pd

df = pd.read_parquet('sales_clean.parquet')

df['revenue'] = df['quantity'] * df['unit_price']
print(df[['quantity', 'unit_price', 'revenue']].head())

Kuukausi- ja vuosineljännessarakkeiden poimiminen

Ryhmittely kalenterijaksojen mukaan on olennaista trendianalyysissä. Käytä datetime-sarakkeen .dt-aksessoria vuoden, kuukauden ja vuosineljänneksen poimimiseen. Kun tallennat nämä erillisiin kokonaislukusarakkeisiin, groupby-operaatiot nopeutuvat ja suodattaminen jakson mukaan onnistuu helposti ilman toistuvaa merkkijonojen jäsentämistä.

df['year'] = df['order_date'].dt.year
df['month'] = df['order_date'].dt.month
df['quarter'] = df['order_date'].dt.quarter
df['year_month'] = df['order_date'].dt.to_period('M')

print(df[['order_date', 'year', 'month', 'quarter', 'year_month']].head())

Alennuslipun luominen

Liiketoimintasäännöissä määritellään usein alennuslippu: tietyn raja-arvon ylittävät tilaukset saavat alennuksen. Luo tämä binäärinen sarake tehokkaasti käyttämällä np.where-funktiota tai totuusarvovertailua. Alennuslipun avulla analyytikot voivat verrata alennettujen ja normaalihintaisten tilausten liikevaihtojakaumia yhdellä groupby-kutsulla.

import numpy as np

DISCOUNT_THRESHOLD = 500

df['is_discounted'] = np.where(df['revenue'] >= DISCOUNT_THRESHOLD, 1, 0)

print(df['is_discounted'].value_counts())
print(df.groupby('is_discounted')['revenue'].mean())

Kateprosenttisarakkeen laskeminen

Jos aineisto sisältää cost_price-sarakkeen, voit laskea katteen kaavalla (unit_price - cost_price) / unit_price. Rajaa mahdolliset data-virheiden aiheuttamat negatiiviset katteet ennen jatkoanalyysiä käyttämällä komentoa clip(lower=0). Katetuottosarakkeiden avulla voit tehdä voittoon keskittyviä groupby-aggregointeja liikevaihdon rinnalla.

df['margin'] = ((df['unit_price'] - df['cost_price']) / df['unit_price']).clip(lower=0)

print(df[['unit_price', 'cost_price', 'margin']].describe())

Ensimmäisestä tilauksesta kuluneiden päivien piirre

Päiviä asiakkaan ensimmäisen tilauksen ja nykyisen tilauksen välillä on hyödyllinen asiakassuhteen keston piirre. Laske se ryhmittelemällä customer_id-sarakkeen mukaan, määrittämällä kohorttipäiväksi pienin päivämäärä ja vähentämällä se kunkin rivin päivämäärästä. Timedelta-laskenta palauttaa timedelta64-arvoja sisältävän sarakkeen, jonka muunnat kokonaisluvuiksi päivien avulla käyttämällä .dt.days-ominaisuutta.

first_order = df.groupby('customer_id')['order_date'].transform('min')
df['days_since_first_order'] = (df['order_date'] - first_order).dt.days

print(df[['customer_id', 'order_date', 'days_since_first_order']].head())

Tilauskoon luokittelu pd.cut-funktiolla

Jaa revenue-sarake nimettyihin kokoluokkiin käyttämällä pd.cut()-funktiota, jotta saat segmentointia varten järjestysasteikon piirteen. Määritä eksplisiittiset bins- ja labels-arvot, jotka vastaavat liiketoiminnassa määriteltyjä pieniä, keskisuuria ja suuria tilauksia. Tuloksena oleva sarake on Pandasin Categorical-tyyppiä, joten sen ryhmittely on tehokasta.

bins = [0, 100, 500, 2000, float('inf')]
labels = ['Small', 'Medium', 'Large', 'Enterprise']

df['order_size'] = pd.cut(df['revenue'], bins=bins, labels=labels)
print(df['order_size'].value_counts())

Kumulatiivinen liikevaihto ajan kuluessa

Järjestä DataFrame order_date-sarakkeen mukaan ja seuraa liikevaihdon kertymistä vuoden aikana käyttämällä liikevaihtosarakkeeseen cumsum()-funktiota. Tämän kumulatiivisen sarjan avulla on helppo havaita, kasvaako liikevaihto lineaarisesti, kiihtyykö kasvu vai tasaantuuko se. Se toimii myös pohjana vesiputous- tai kumulatiiviselle viivakaaviolle.

df_sorted = df.sort_values('order_date')
df_sorted['cumulative_revenue'] = df_sorted['revenue'].cumsum()

print(df_sorted[['order_date', 'revenue', 'cumulative_revenue']].tail())

Viikonloppu- ja arkipäiväpiirre

Ominaisuus dt.day_of_week palauttaa arvot 0 (maanantai) – 6 (sunnuntai). Merkitse lauantait (5) ja sunnuntait (6) viikonlopputilauksiksi, jotta voit selvittää, eroavatko viikonlopun ostokäyttäytyminen ja arkipäivien ostokäyttäytyminen toisistaan. Tämä on yleinen piirre vähittäiskaupan EDA:ssa ja A/B-testien analysoinnissa.

df['is_weekend'] = df['order_date'].dt.day_of_week >= 5

print(df.groupby('is_weekend')['revenue'].agg(['mean', 'count']))

Asiakkaiden järjestäminen liikevaihdon mukaan

Tunnista tärkeimmät asiakkaasi laskemalla kunkin customer_id-arvon kokonaisliikevaihto komennolla groupby().sum() ja järjestämällä tulokset komennolla .rank(ascending=False, method='dense'). Kun lisäät järjestyssijan takaisin pää-DataFrameen map()-funktion avulla, voit suodattaa N tärkeimpään asiakkaaseen yhdellä totuusarvoehdolla.

customer_revenue = df.groupby('customer_id')['revenue'].sum()
customer_rank = customer_revenue.rank(ascending=False, method='dense').astype(int)

df['customer_revenue_rank'] = df['customer_id'].map(customer_rank)
print(df[df['customer_revenue_rank'] <= 10][['customer_id', 'customer_revenue_rank']].drop_duplicates())

Liikevaihdon normalisointi z-pisteiksi

Normalisoi revenue-sarake z-pisteiksi, jotta voit verrata tilausten kokoja eri tuoteryhmien välillä, vaikka niiden hintavaihtelut poikkeaisivat suuresti toisistaan. Käytä kaavaa (df['revenue'] - df['revenue'].mean()) / df['revenue'].std(). Arvot, jotka ovat yli 3:n tai alle -3:n, ovat tilastollisia poikkeamia, jotka kannattaa tutkia ennen mallintamista.

mean_rev = df['revenue'].mean()
std_rev = df['revenue'].std()

df['revenue_zscore'] = (df['revenue'] - mean_rev) / std_rev

outliers = df[df['revenue_zscore'].abs() > 3]
print(f'Outlier orders: {len(outliers)}')

Piirteillä rikastetun DataFramen tallentaminen

Kun olet lisännyt lasketut sarakkeet, tallenna rikastettu DataFrame, jotta kaikki seuraavat notebookit aloittavat samasta yhdenmukaisesta tilasta. Käytä to_parquet()-funktiota tietotyyppien säilyttämiseen, erityisesti kategorisen order_size-sarakkeen ja datetime-tyyppisen order_date-sarakkeen osalta. Dokumentoi uudet sarakkeet lyhyessä kommenttilohkossa skriptin alussa.

# New columns added:
# revenue, year, month, quarter, year_month
# is_discounted, order_size, is_weekend
# days_since_first_order, customer_revenue_rank, revenue_zscore

df.to_parquet('sales_features.parquet', index=False)
print('Feature DataFrame saved:', df.shape)

Pikatarkistus

Testaa tämän oppitunnin data-analyysin käsitteiden ymmärtämistäsi.

Oppitunnin kertaus

Tässä oppitunnissa opit laskemaan liikevaihto- ja katetuottosarakkeita, poimimaan ajallisia piirteitä .dt-aksessorilla sekä muodostamaan piirteitä, kuten alennuslippuja, tilauskokoluokkia ja asiakasjärjestyksiä. Seuraavaksi tutustumme alue- ja kategoriakohtaiseen groupby-analyysiin.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Tulojen laskenta ja piirteiden muodostaminen” ilmainen?

Kyllä – oppitunnin ”Tulojen laskenta ja piirteiden muodostaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tulojen laskenta ja piirteiden muodostaminen”?

Laskekaa rivikohtaiset tulot, luokaa kuukausi- ja vuosineljännessarakkeet ja lisätkää alennusilmaisin kynnysarvon ylittäville tilauksille. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Tulojen laskenta ja piirteiden muodostaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?

Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Myyntitietoaineiston lataaminen ja tarkistaminen
  2. Tulojen laskenta ja piirteiden muodostaminen
  3. Alue- ja kategoriakohtainen GroupBy-analyysi
  4. Kuukausittainen trendien visualisointi
← Takaisin: Pandas & NumPy Academy