{"id":22563882,"url":"https://github.com/datalopes1/olist_rfv","last_synced_at":"2025-03-28T13:14:28.381Z","repository":{"id":247441501,"uuid":"825815770","full_name":"datalopes1/olist_rfv","owner":"datalopes1","description":"Uma análise RFV utilizando os dados do dataset Brazilian E-Commerce Public Dataset by Olist disponível no Kaggle","archived":false,"fork":false,"pushed_at":"2024-07-08T17:23:33.000Z","size":7,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-02T13:32:14.635Z","etag":null,"topics":["kmeans","kmeans-clustering","python","rfm-analysis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datalopes1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-08T14:53:00.000Z","updated_at":"2024-07-08T23:43:06.000Z","dependencies_parsed_at":"2024-10-06T14:14:13.978Z","dependency_job_id":null,"html_url":"https://github.com/datalopes1/olist_rfv","commit_stats":null,"previous_names":["datalopes1/olist_rfv"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datalopes1%2Folist_rfv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datalopes1%2Folist_rfv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datalopes1%2Folist_rfv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datalopes1%2Folist_rfv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datalopes1","download_url":"https://codeload.github.com/datalopes1/olist_rfv/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246034307,"owners_count":20712857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kmeans","kmeans-clustering","python","rfm-analysis"],"created_at":"2024-12-07T23:13:22.067Z","updated_at":"2025-03-28T13:14:28.359Z","avatar_url":"https://github.com/datalopes1.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gerando Planilhas de Análise RFV com Python 🏪\n\n[Brazilian E-Commerce Public Dataset by Olist](https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce) contém dados de transações realizadas por dirversos pequenos negócios brasileiros cadastrados na plataforma de vendas para marketplace. Estes pequenos negócios conseguem através do [Olist Store](https://olist.com/) vender seus produtos diretamente e os enviar através dos parceiros logísticos da Olist. \n\n![olist](https://i.imgur.com/EoWCjR8.jpeg)\n\n### Objetivos e resultados\nA análise RFV (recencia, frequência e valor) é uma forma de fazer segmentação de clientes utilizada por setores de Marketing e CRM. Existem diversas maneiras de realizar este tipo de análise e para este projeto foi escolhida a Clusterização utilizando o algoritmo KMeans. \n\nO objetivo portanto é usar as linguagens Python e SQL (com SQLite), para criar um código capaz de gerar uma planilha (.xlsx) com a segmentação dos clientes. \n\n### 🛠️ Ferramentas utilizadas\n![SQLite](https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-badge\u0026logo=sqlite\u0026logoColor=white) ![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) ![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge\u0026logo=visual-studio-code\u0026logoColor=white) ![Microsoft Excel](https://img.shields.io/badge/Microsoft_Excel-217346?style=for-the-badge\u0026logo=microsoft-excel\u0026logoColor=white)\n\n## Estrutura dos Dados\n![schema](https://i.imgur.com/HRhd2Y0.png)\n\n## Bibliotecas Python utilizadas\n#### Manipulação de dados\n- Pandas, Numpy, OS, sqlalchemy\n#### Visualizações\n- Seaborn, Matplotlib\n#### Machine Learning e Feature Engineering\n- sklearn\n# Criação do arquivo .db do SQLite\nO primeiro passo no projeto foi transformar os arquivos .csv que foram disponibilizados no Kaggle.\n```python\nimport pandas as pd\nimport sqlalchemy\nimport os\n\ndef csv_to_sqlite(db_name, directory):\n    engine = sqlalchemy.create_engine(f'sqlite:///{db_name}')\n    csv_files = [f for f in os.listdir(directory) if f.endswith('.csv')]\n\n    for csv_file in csv_files:\n        csv_path = os.path.join(directory, csv_file)\n        table_name = os.path.splitext(csv_file)[0]\n\n        df = pd.read_csv(csv_path)\n        df.to_sql(table_name, engine, if_exists = 'replace', index = False)\n\ndirectory = '../../data/raw'\ndb_name = '../../data/processed/olist_data.db'\n\ncsv_to_sqlite(db_name, directory)\n```\n**Porque criar este database do SQLite?** A linguagem SQL é uma base sólida da carreira do Analista ou Cientista de Dados. O mais rotineiro em projetos reais será ter contato com bancos de dados e não .csv prontos para manipulação.\n# Gerando a tabela de análise RFV\nO passo seguinte é a criação de uma tabela que classifique os clientes por sua Recencia, Frequência e Valor Monetários gerados a empresa. \n```sql\nWITH tb_rf AS(\nSELECT \n    t1.customer_unique_id AS idCustomer,\n    CAST(julianday('2018-10-31') - MAX(julianday(DATE(t2.order_approved_at))) AS INTEGER) AS recenciaDias,\n    COUNT(t2.customer_id) AS frequenciaCompras\nFROM olist_customers_dataset AS t1\nLEFT JOIN \n    olist_orders_dataset AS t2\n    ON t1.customer_id = t2.customer_id\nGROUP BY idCustomer),\n\ntb_val AS(\nSELECT \n    t3.customer_unique_id AS idCustomer,\n    SUM(t1.payment_value) AS valorTotal,\n    AVG(t1.payment_value) AS valorMedio\n\nFROM olist_order_payments_dataset AS t1\nLEFT JOIN olist_orders_dataset AS t2\nON t1.order_id = t2.order_id\n\nLEFT JOIN olist_customers_dataset AS t3\nON t2.customer_id = t3.customer_id\n\nGROUP BY idCustomer)\n\nSELECT \n    '2018-10-31' AS dtRef,\n    t1.*,\n    t2.valorTotal,\n    t2.valorMedio\nFROM tb_rf AS t1\nLEFT JOIN tb_val AS t2\nON t1.idCustomer = t2.idCustomer\n```\n# Definindo a segmentação\nA definição do número de clusters foi realizada através do metodo do cotovelo, e teve como resultado 4 clusters.\n![cotov](https://i.imgur.com/e9YBlny.png)\n\nApós a aplicação do algoritmo e análise dos resultados a segmentação foi definida em:\n- Cliente Regular: Tem a maior recencia, frequência e valores médios.\n- Cliente em Risco: Tem baixa recencia, frequência e valor.\n- Cliente Fiel: Tem alta recencia, maior frequência e alto valor.\n- Cliente de Alto Valor: Tem recencia média, alta frequêncai e maior valor. \n\nE com isso ao final do processo será gerado um arquivo .xlsx com os valores de Data de Referência, ID Único do Cliente, Recencia, Frequencia, Valor e Segmento. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatalopes1%2Folist_rfv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatalopes1%2Folist_rfv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatalopes1%2Folist_rfv/lists"}