某快餐店用戶市場數據挖掘與可視化

1、必要庫的載入

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

2、加載并清洗數據

# 2.1 加載數據
df = pd.read_csv('/home/mw/input/survey6263/mcdonalds.csv')# 2.2 數據清洗
# 2.2.1 檢查缺失值
print('缺失值情況:')
print(df.isnull().sum())
# 2.2.2 處理異常值(年齡范圍在18 - 100歲為合理范圍)
df = df[(df['Age'] >= 18) & (df['Age'] <= 100)]# 查看數據集行數和列數
rows, columns = df.shapeif rows < 100 and columns < 20:# 短表數據(行數少于100且列數少于20)查看全量數據信息print('數據全部內容信息:')print(df.to_csv(sep='\t', na_rep='nan'))
else:# 長表數據查看數據前幾行信息print('數據前幾行內容信息:')print(df.head().to_csv(sep='\t', na_rep='nan'))

在這里插入圖片描述

3、可視化設置

# 3.1 設置圖片清晰度
plt.rcParams['figure.dpi'] = 300
# 3.2 設置中文字體
plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei']
# 3.3 解決負號顯示問題
plt.rcParams['axes.unicode_minus'] = False

4、顧客基礎特征分析

4.1 顧客年齡分布和性別分布

import matplotlib.pyplot as plt
import seaborn as sns# 年齡分布
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
sns.histplot(df['Age'], bins=20, kde=False)
plt.title('Age distribution')# 性別分布
plt.subplot(1, 2, 2)
gender_counts = df['Gender'].value_counts()
sns.barplot(x=gender_counts.index, y=gender_counts.values)
plt.title('Gender distribution')plt.tight_layout()
plt.show()print('顧客年齡分布:')
print(df['Age'].describe())
print('\n顧客性別分布:')
print(df['Gender'].value_counts())

在這里插入圖片描述
在這里插入圖片描述

4.1.1 年齡分布

4.2 顧客光顧頻率與年齡、性別的關系

plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
sns.boxplot(x='VisitFrequency', y='Age', data=df)
plt.title('Frequency VS Age')
plt.xticks(rotation=45)plt.subplot(1, 2, 2)
sns.countplot(x='VisitFrequency', hue='Gender', data=df)
plt.title('Frequency VS Gender')
plt.xticks(rotation=45)plt.tight_layout()
plt.show()print('光顧頻率與年齡的關系:')
print(df.groupby('VisitFrequency')['Age'].describe())
print('\n光顧頻率與性別的關系:')
print(pd.crosstab(df['VisitFrequency'], df['Gender']))

在這里插入圖片描述
在這里插入圖片描述

4.2.1 光顧頻率與年齡的關系

4.3 顧客對某快餐店各方面評價的分布

# 提取評價列
evaluation_columns = ['yummy', 'convenient', 'spicy', 'fattening', 'greasy', 'fast', 'cheap', 'tasty', 'expensive', 'healthy', 'disgusting']# 創建畫布
plt.figure(figsize=(15, 10))# 繪制每個評價的分布柱狀圖
for i, column in enumerate(evaluation_columns):plt.subplot(3, 4, i + 1)value_counts = df[column].value_counts()sns.barplot(x=value_counts.index, y=value_counts.values)plt.title(f'{column} distribution')plt.tight_layout()
plt.show()# 查看每個評價的分布情況
for column in evaluation_columns:print(f'{column}評價分布:')print(df[column].value_counts())

在這里插入圖片描述
在這里插入圖片描述

4.4 顧客喜好與各評價之間的相關性

import re# 使用正則表達式提取 Like 列中的數字部分并轉換為數值型
df['Like'] = df['Like'].apply(lambda x: int(re.findall(r'\d+', x)[0]))# 將評價列進行編碼
for column in evaluation_columns:df[column] = df[column].map({'Yes': 1, 'No': 0})# 計算相關系數矩陣
correlation_matrix = df[evaluation_columns + ['Like']].corr()# 繪制熱力圖
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Customer preferences VS Reviews')
plt.show()print('顧客喜好與各評價之間的相關系數矩陣:')
print(correlation_matrix.round(2))

在這里插入圖片描述
在這里插入圖片描述

5、顧客口味偏好分析

import matplotlib.pyplot as plt# 統計口味相關特征的分布(選取 spicy, yummy, tasty, greasy 作為口味相關特征)
taste_features = ['spicy', 'yummy', 'tasty', 'greasy']
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
axes = axes.ravel()for i, feature in enumerate(taste_features):value_counts = df[feature].value_counts()axes[i].pie(value_counts, labels=value_counts.index, autopct='%1.1f%%', startangle=90)axes[i].set_title(f'{feature} distribution')plt.tight_layout()
plt.show()# 查看具體比例
for feature in taste_features:print(df[feature].value_counts(normalize=True))

在這里插入圖片描述

6、價格敏感性分析

# 統計認為便宜和昂貴的比例
cheap_counts = df['cheap'].value_counts(normalize=True)
expensive_counts = df['expensive'].value_counts(normalize=True)# 繪制柱狀圖
fig, axes = plt.subplots(1, 2, figsize=(10, 5))axes[0].bar(cheap_counts.index, cheap_counts)
axes[0].set_title('Thinking cheap')
axes[0].set_xlabel('cheap or not')
axes[0].set_ylabel('scale')axes[1].bar(expensive_counts.index, expensive_counts)
axes[1].set_title('Thinking expensive')
axes[1].set_xlabel('expensive or not')
axes[1].set_ylabel('scale')plt.tight_layout()
plt.show()print("認為便宜的比例:")
print(cheap_counts)
print("認為昂貴的比例:")
print(expensive_counts)

在這里插入圖片描述

7、消費頻率預測

from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 對 object 類型數據進行編碼
label_encoders = {}
for column in df.columns:if df[column].dtype == 'object':le = LabelEncoder()df[column] = le.fit_transform(df[column])label_encoders[column] = le# 準備特征和目標變量
X = df.drop(['VisitFrequency', 'Index'], axis=1)
y = df['VisitFrequency']# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report# 定義不同的模型
models = {'Logistic Regression': LogisticRegression(max_iter=1000),'Decision Tree': DecisionTreeClassifier(),'Random Forest': RandomForestClassifier(),'Support Vector Machine': SVC()
}# 訓練和評估每個模型
for name, model in models.items():model.fit(X_train, y_train)y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f'{name} 準確率: {accuracy:.4f}')print(f'{name} 分類報告:\n', classification_report(y_test, y_pred))print('-' * 50)

在這里插入圖片描述

8、顧客畫像分類

8.1 確定最佳簇數

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score# 嘗試不同的簇數
silhouette_scores = []
for k in range(2, 11):kmeans = KMeans(n_clusters=k, random_state=42)kmeans.fit(X)labels = kmeans.labels_score = silhouette_score(X, labels)silhouette_scores.append((k, score))# 找到最高輪廓系數對應的簇數
best_k, _ = max(silhouette_scores, key=lambda x: x[1])
print(f'最佳簇數: {best_k}')

在這里插入圖片描述

8.2 不同簇的特征分析

# 使用最佳簇數進行 KMeans 聚類
kmeans = KMeans(n_clusters=best_k, random_state=42)
df['Cluster'] = kmeans.fit_predict(X)# 分析不同簇的特征(以年齡和喜歡程度為例)
cluster_analysis = df.groupby('Cluster').agg({'Age': 'mean','Like': 'mean'
}).reset_index()print(cluster_analysis)

在這里插入圖片描述
從年齡均值來看,簇 0 的顧客相對年輕,平均年齡約為 31 歲,而簇 1 的顧客平均年齡約為 56 歲,兩者存在明顯的年齡差異。在喜歡程度方面,兩個簇的均值都比較高且較為接近,不過簇 1 的喜歡程度均值略高于簇 0,這可能暗示年齡較大的顧客對相關事物的喜歡程度稍高一些,但差異并不是非常顯著。

8.3 不同簇的年齡和喜歡程度分布可視化

# 繪制不同簇的年齡和喜歡程度分布
plt.scatter(df['Age'], df['Like'], c=df['Cluster'])
plt.xlabel('Age')
plt.xticks(rotation=45)
plt.ylabel('Liking degree')
plt.title('Age VS liking of different clusters')
plt.show()

在這里插入圖片描述

# 若需要完整數據集以及代碼請點擊以下鏈接
# https://mbd.pub/o/bread/mbd-aJaUlJpt

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898271.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Easysearch 索引生命周期管理實戰

如果你的使用場景是對時序型數據進行分析&#xff0c;可能你會更重視最新的數據&#xff0c;并且可能會定期對老舊的數據進行一些處理&#xff0c;比如減少副本數、forcemerge、 刪除等。Easysearch 的索引生命周期管理功能&#xff0c;可以自動完成此類索引的管理任務。 創建…

《心理學與生活》2025最新網課答案

《心理學與生活》2025最新網課答案 文章目錄 《心理學與生活》2025最新網課答案發展與教育單元測試情緒與情感單元測驗人格與動機單元測試感知與記憶單元測試文化與社會單元測試 發展與教育單元測試 題數 20 棉花糖實驗中哪些小孩長大后的表現更好&#xff08;&#xff09;。 …

Modbus通信協議基礎知識總結

1. 數據類型與存儲區分類 Modbus協議將數據分為四類存儲區&#xff0c;通過存儲區代號區分&#xff1a; 輸出線圈&#xff08;0x&#xff09;&#xff1a;可讀寫&#xff0c;對應二進制開關量&#xff08;如繼電器狀態&#xff09;&#xff0c;地址范圍000001-065536&#xff…

docker環境下安裝flink

前言 flink在實時計算領域中有著舉足輕重的地位。這篇文章來介紹一下&#xff0c;在linux的docker環境下&#xff0c;怎么快速安裝一個單機版本的flink。 操作流程 環境準備 檢查docker環境是不是正常&#xff0c;如果在拉取鏡像的時候比較慢&#xff0c;建議使用鏡像加速&…

LeetCode 2614.對角線上的質數:遍歷(質數判斷)

【LetMeFly】2614.對角線上的質數&#xff1a;遍歷(質數判斷) 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/prime-in-diagonal/ 給你一個下標從 0 開始的二維整數數組 nums 。 返回位于 nums 至少一條 對角線 上的最大 質數 。如果任一對角線上均不存在質數&…

MongoDB 只能存儲能夠序列化的數據(比如字符串、數字等),而 Python 的 UUID 對象并不是直接可以存入數據庫的格式。

1. UUID 對象是什么&#xff1f; UUID 是 “Universally Unique Identifier”&#xff08;通用唯一識別碼&#xff09;的縮寫&#xff0c;是一種 128 位的數字&#xff0c;用于在全局范圍內生成一個唯一的標識符。它常用于數據庫中的記錄標識、分布式系統中的對象標識等場景。…

linux 安全 xshell 使用

目錄和文件 ls -l 查看目錄和文件的權限的設置情況 加固方法 對于重要目錄&#xff0c;建議執行如下類似操作 Chmod -R 750 /etc/rc.d/init.d/* 這樣只有root可以讀寫和執行這個目錄下的腳本 新建了一個用戶Q 寫入了一些信息 發現在root用戶下可以進行文件打開 接下來用普通用…

自動駕駛背后的數學:特征提取中的線性變換與非線性激活

在上一篇博客「自動駕駛背后的數學&#xff1a;從傳感器數據到控制指令的函數嵌套」—— 揭秘人工智能中的線性函數、ReLU 與復合函數中&#xff0c;我們初步探討了自動駕駛技術中從傳感器數據到控制指令的函數嵌套流程&#xff0c;其中提到了特征提取模塊對傳感器數據進行線性…

楊校老師課堂之編程入門與軟件安裝【圖文筆記】

親愛的同學們&#xff0c;熱烈歡迎踏入青少年編程的奇妙世界&#xff01; 我是你們的授課老師楊校 &#xff0c;期待與大家一同開啟編程之旅。 1. 輕松叩開編程之門 1.1 程序的定義及生活中的應用 程序是人與計算機溝通的工具。在日常生活中&#xff0c;像手機里的各類 APP、電…

DeepSeek 3FS 與 JuiceFS:架構與特性比較

近期&#xff0c;DeepSeek 開源了其文件系統 Fire-Flyer File System (3FS)&#xff0c;使得文件系統這一有著 70 多年歷時的“古老”的技術&#xff0c;又獲得了各方的關注。在 AI 業務中&#xff0c;企業需要處理大量的文本、圖像、視頻等非結構化數據&#xff0c;還需要應對…

Coco AI 智能檢索 Hugo Blog 集成指南

在此前的文章中&#xff0c;我們介紹了如何使用 Coco Server 連接 Notion&#xff0c;實現智能內容檢索。本次&#xff0c;我們將進一步探索如何在 Coco Server 最新版本 中集成 Hugo Site&#xff0c;以便對 Hugo 站點 進行高效檢索。 Coco Server 部署方式 要在本地或服務器…

Mobile-Agent-V:通過視頻引導的多智體協作學習移動設備操作

25年2月來自北京交大和阿里巴巴公司的論文“Mobile-Agent-V: Learning Mobile Device Operation Through Video-Guided Multi-Agent Collaboration”。 移動設備使用量的快速增長&#xff0c;迫切需要改進自動化以實現無縫任務管理。然而&#xff0c;因缺乏操作知識&#xff0…

電魚智能EFISH-RK3576-SBC工控板已適配Android 14系統

EFISH-RK3576-SBC工控板此前已提供了Linux 6.1.57系統&#xff0c;為了滿足更多客戶的需求&#xff0c;電魚智能近日又為其成功適配了Android 14系統——硬件性能卓越的核心板與Android 14的深度組合&#xff0c;將為用戶帶來更加流暢、開放、智能的使用體驗。 一、高性能處理器…

正點原子[第三期]Arm(iMX6U)Linux移植學習筆記-5.1 uboot頂層Makefile分析-VSCode工程創建

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“Arm(iMX6U)Linux系統移植和根文件系統構鍵篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。 引用&#xff1a; …

java 使用命令創建jar的常用參數整理

在Java中&#xff0c;創建JAR文件的命令是jar。以下是常用參數的表格展示&#xff1a; 參數信息含義使用場景使用示例c創建新的JAR文件用于創建一個新的JAR文件當需要打包類文件和資源文件時jar cf myapp.jar MyClass.classt列出JAR文件內容顯示JAR文件中的內容列表查看JAR文件…

無線頭戴式攝像頭系統:無需標記點攝像頭智能捕捉人臉表情

AH-T無線頭戴式攝像頭系統是一款可以精準捕捉人臉面部細微表情的設備&#xff0c;基于單目無標記點攝像頭智能識別算法&#xff0c;無需在臉上粘貼標記點即可實現真人細微臉部表情的精準捕捉&#xff0c;采用頭盔&#xff0c;面捕攝像頭一體式人性化設計&#xff0c;可以讓使用…

Cursor IDE 入門指南

什么是 Cursor? Cursor 是一款集成了 AI 功能的現代代碼編輯器&#xff0c;基于 VSCode 開發&#xff0c;專為提高開發效率而設計。它內置強大的 AI 助手功能&#xff0c;能夠理解代碼、生成代碼、解決問題&#xff0c;幫助開發者更快、更智能地完成編程任務。 基礎功能 1.…

Tailwind CSS 中的 spacing 詳解

&#x1f50d; Tailwind CSS 中的 spacing 詳解 spacing&#xff08;間距&#xff09;是 Tailwind CSS 里的一個核心概念&#xff0c;它主要用于控制 padding&#xff08;內邊距&#xff09;、margin&#xff08;外邊距&#xff09;、width&#xff08;寬度&#xff09;、heig…

go語言學習教程推薦,零基礎到做項目

一、基礎入門階段 官方教程&#xff08;免費&#xff09; ? A Tour of Go&#xff1a;交互式入門教程&#xff0c;邊學邊練 ? Go by Example&#xff1a;通過300代碼片段學習語法 入門書籍 ? &#x1f4d8;《Go語言圣經》中文版&#xff08;免費在線閱讀&#xff09;&#…

STM32---FreeRTOS內存管理實驗

一、簡介 1、FreeRTOS內存管理簡介 2、FreeRTOS提供的內存管理算法 1、heap_1內存管理算法 2、heap_2內存管理算法 4、heap_4內存管理算法 5、heap_5內存管理算法 二、FreeRTOS內存管理相關API函數介紹 三、 FreeRTOS內存管理實驗 1、代碼 main.c #include "st…