Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/sonwanesuresh95/rfm
- Owner: sonwanesuresh95
- License: mit
- Created: 2022-02-13T12:14:38.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-02T16:40:59.000Z (almost 3 years ago)
- Last Synced: 2024-05-14T00:15:12.527Z (7 months ago)
- Topics: customer-segmentation, python, rfm-analysis
- Language: Python
- Homepage:
- Size: 3.44 MB
- Stars: 10
- Watchers: 2
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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')
```