Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sonwanesuresh95/rfm

Python Package for RFM Analysis and Customer Segmentation
https://github.com/sonwanesuresh95/rfm

customer-segmentation python rfm-analysis

Last synced: about 1 month ago
JSON representation

Python Package for RFM Analysis and Customer Segmentation

Awesome Lists containing this project

README

        










[![PyPI Latest Release](https://img.shields.io/pypi/v/rfm.svg)](https://pypi.org/project/rfm/)
![PyPI](https://badge.fury.io/py/rfm.svg)
[![Package Status](https://img.shields.io/pypi/status/rfm.svg)](https://pypi.org/project/rfm/)
[![License](https://img.shields.io/pypi/l/rfm.svg)](https://github.com/sonwanesuresh95/rfm/blob/main/LICENSE)
![Downloads Per Month](https://img.shields.io/pypi/dm/rfm)

# rfm
rfm: Python Package for RFM Analysis and Customer Segmentation

## Info

**rfm** is a Python package that provides **recency, frequency, monetary analysis** results
for a certain transactional dataset within a snap. Its flexible structure and multiple automated
functionalities provide easy and intuitive approach to RFM Analysis in an automated fashion.
It aims to be a ready-made python package with high-level and quick prototyping.
On practical hand, **real world data** is easily suited and adapted by the package.
Additionally, it can make colorful, intuitive graphs using a matplotlib backend without
breaking a sweat.

## Installation
### Dependencies


  • Python (>=3.7)

  • Pandas (>=1.2.4)

  • NumPy (>=1.20.1)

  • matplotlib (>=3.3.4)

To install the current release (Ubuntu and Windows):

```
$ pip install rfm
```

## Usage

```
# predefine a transaction dataset as df

>>> from rfm import RFM

>>> r = RFM(df, customer_id='CustomerID', transaction_date='InvoiceDate', amount='Amount')

>>> r.plot_segment_distribution()
```




# License
[MIT](https://github.com/sonwanesuresh95/rfm/blob/main/LICENSE)

# Documentation
<-- Temporarily Hosted Here -->
## Initialization
Read required dataframe
```
>>> df = pd.read_csv('~./data.csv')
```

Import RFM package and start rfm analysis automatically:
```
>>> from rfm import RFM

>>> r = RFM(df, customer_id='CustomerID', transaction_date='InvoiceDate', amount='Amount')

>>> r.rfm_table
```
If you want to do rfm analysis manually:
```
>>> r = RFM(df, customer_id='CustomerID', transaction_date='InvoiceDate', amount='Amount', automated=False)
```

## Attributes

### RFM.rfm_table
returns resultant rfm table df generated with recency, frequency & monetary values and scores along with segments
```
>>> r.rfm_table
```




### RFM.segment_table
returns segment table df with 10 unique categories i.e. Champions, Loyal Accounts etc.
```
>>> r.segment_table
```




## Methods

### RFM.plot_rfm_histograms()
Plots recency, frequency and monetary histograms in a single row
```
>>> r.plot_rfm_histograms()
```




### RFM.plot_rfm_order_distribution()
Plots orders by customer number
```
>>> r.plot_rfm_order_distribution()
```




### RFM.plot_versace_plot(column1, column2)
Plots scatterplot of two input columns

```
>>> r.plot_versace_plot(column1='recency',column2='monetary_value')
```




```
>>> r.plot_versace_plot(column1='recency',column2='frequency')
```




```
>>> r.plot_versace_plot(column1='frequency',column2='monetary_value')
```




### RFM.plot_distribution_by_segment(column, take)
Plots Distribution of input column by segment
```
>>> r.plot_distribution_by_segment(column='recency',take='median')
```




```
>>> r.plot_distribution_by_segment(column='frequency',take='median')
```




```
>>> r.plot_distribution_by_segment(column='monetary_value',take='median')
```




### RFM.plot_column_distribution(column)
Plots column distribution of input column
```
>>> r.plot_column_distribution(column='recency')
```




```
>>> r.plot_column_distribution(column='frequency')
```




```
>>> r.plot_column_distribution(column='monetary_value')
```




### RFM.plot_segment_distribution()
```
>>> r.plot_segment_distribution()
```
Plots Segment Distribution, i.e. Segments vs no. of customers




### RFM.find_customers(segment)
returns rfm results df with input category
```
>>> r.find_customers('Champions')
```