數據分析案例-在線食品訂單數據可視化分析與建模分類

?

🤵?♂? 個人主頁:@艾派森的個人主頁

?🏻作者簡介:Python學習者
🐋 希望大家多多支持,我們一起進步!😄
如果文章對你有幫助的話,
歡迎評論 💬點贊👍🏻 收藏 📂加關注+


目錄

1.項目背景

2.數據集介紹

3.技術工具

4.導入數據

5.數據可視化

6.建模分類

源代碼


1.項目背景

一、引言

????????隨著信息技術的快速發展和互聯網的普及,人們的生活方式發生了巨大的變化。特別是在餐飲行業,越來越多的消費者選擇通過在線平臺進行食品訂購,這種趨勢使得在線食品訂單數據呈現出爆炸式的增長。這些數據中蘊含著豐富的消費者行為、市場趨勢和商家運營策略等信息,對于餐飲企業和研究機構來說,具有重要的價值。因此,本研究旨在通過對在線食品訂單數據進行可視化分析和建模分類,以揭示其中的潛在規律和價值,為餐飲行業的發展提供有力支持。

二、研究背景

1.在線食品訂購市場的快速增長

????????近年來,隨著移動互聯網的普及和消費者生活節奏的加快,在線食品訂購市場呈現出迅猛的增長態勢。越來越多的消費者選擇通過手機或電腦進行食品訂購,享受便捷、快速的用餐體驗。這種趨勢使得在線食品訂單數據呈現出大規模、高頻率的特點,為數據分析和挖掘提供了豐富的素材。

2.數據驅動決策成為餐飲行業的重要趨勢

????????在數字化時代,數據已經成為企業決策的重要依據。對于餐飲企業來說,通過對在線食品訂單數據的分析,可以深入了解消費者的點餐偏好、消費習慣和市場趨勢,從而制定更加精準的營銷策略和運營策略。同時,數據分析還可以幫助餐飲企業優化菜品組合、定價策略和服務質量,提升競爭力和盈利能力。

3.數據可視化與建模分類技術的廣泛應用

????????數據可視化與建模分類技術是現代數據分析的重要工具。通過數據可視化,可以將復雜的數據以直觀、易懂的方式呈現出來,幫助用戶快速識別數據中的模式和趨勢。而建模分類技術則可以對數據進行深入挖掘和分析,發現數據之間的關聯性和規律性,為決策提供有力支持。這些技術在各個行業都得到了廣泛的應用,包括金融、醫療、零售等,但在餐飲行業的應用還處于起步階段,具有廣闊的研究空間和應用前景。

三、研究意義

????????本研究的意義在于通過在線食品訂單數據的可視化分析和建模分類,為餐飲行業的發展提供新的視角和思路。具體來說,本研究可以幫助餐飲企業更好地了解消費者需求和市場趨勢,優化菜品組合和定價策略,提升服務質量和用戶體驗。同時,本研究還可以為餐飲行業的監管和政策制定提供科學依據,促進行業的健康發展。

2.數據集介紹

本實驗數據集來源于Kaggle

在線食品訂單數據集

描述:該數據集包含一段時間內從在線訂餐平臺收集的信息。它包含與職業、家庭規模、反饋等相關的各種屬性。

屬性:

Age:顧客的年齡。

Gender:客戶的性別。

Marital Status:客戶的婚姻狀況。

Occupation:客戶的職業。

Monthly Income:客戶的月收入。

Educational Qualifications:客戶的教育資格。

Family size:客戶家庭中的人數。

latitude:客戶所在位置的緯度。

longitude:客戶所在位置的經度。

Pin code:客戶所在位置的 Pin 碼。

Output:訂單的當前狀態(例如,待處理、已確認、已交付)。

Feedback:客戶收到訂單后提供的反饋。

目的:該數據集可用于探索人口統計/位置因素與在線訂餐行為之間的關系,分析客戶反饋以提高服務質量,并可能根據人口統計和位置屬性預測客戶偏好或行為。

3.技術工具

Python版本:3.9

代碼編輯器:jupyter notebook

4.導入數據

首先導入本次實驗用到的第三方庫并加載數據集,打印前五行數據

查看數據大小

原始數據共有388行,13列

查看數據基本信息

查看數值型變量的描述性統計

查看非數值型變量的描述性統計

查看數據缺失值情況

可以發沒有缺失值

查看數據重復值情況

可以發現有103個重復數據,刪除處理

5.數據可視化

6.建模分類

構建隨機森林模型

我們可以看到,我們得到了相當不錯的90%的準確率。

源代碼

在線食品訂單數據集
描述:該數據集包含一段時間內從在線訂餐平臺收集的信息。它包含與職業、家庭規模、反饋等相關的各種屬性。屬性:
Age:顧客的年齡。
Gender:客戶的性別。
Marital Status:客戶的婚姻狀況。
Occupation:客戶的職業。
Monthly Income:客戶的月收入。
Educational Qualifications:客戶的教育資格。
Family size:客戶家庭中的人數。
latitude:客戶所在位置的緯度。
longitude:客戶所在位置的經度。
Pin code:客戶所在位置的 Pin 碼。
Output:訂單的當前狀態(例如,待處理、已確認、已交付)。
Feedback:客戶收到訂單后提供的反饋。目的:該數據集可用于探索人口統計/位置因素與在線訂餐行為之間的關系,分析客戶反饋以提高服務質量,并可能根據人口統計和位置屬性預測客戶偏好或行為。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings("ignore", "is_categorical_dtype")
warnings.filterwarnings("ignore", "use_inf_as_na")data = pd.read_csv('onlinefoods.csv')
data.head()
data.shape
data.info()
data.describe() # 查看數值型變量的描述性統計
data.describe(include='O') # 查看非數值型變量的描述性統計
data.isnull().sum() # 統計缺失值情況
data.duplicated().sum() # 統計重復值情況
data.drop_duplicates(inplace=True)
data.duplicated().sum()
# 年齡和家庭規模的分布
sns.set(style="whitegrid")
fig, ax = plt.subplots(1, 2, figsize=(14, 6))
sns.histplot(data['Age'], bins=15, kde=True, ax=ax[0])
ax[0].set_title('Age Distribution')
ax[0].set_xlabel('Age')
ax[0].set_ylabel('Frequency')
sns.histplot(data['Family size'], bins=6, kde=True, ax=ax[1])
ax[1].set_title('Family Size Distribution')
ax[1].set_xlabel('Family Size')
ax[1].set_ylabel('Frequency')
plt.tight_layout()
plt.show()
# 統計圖顯示了數據集中的性別、婚姻狀況、月收入和教育程度的分布
fig, axes = plt.subplots(2, 2, figsize=(14, 12))sns.countplot(x='Gender', data=data, ax=axes[0, 0])
axes[0, 0].set_title('Gender Distribution')sns.countplot(x='Marital Status', data=data, ax=axes[0, 1])
axes[0, 1].set_title('Marital Status Distribution')sns.countplot(x='Monthly Income', data=data, ax=axes[1, 0])
axes[1, 0].set_title('Monthly Income Distribution')
axes[1, 0].tick_params(axis='x', rotation=45)sns.countplot(x='Educational Qualifications', data=data, ax=axes[1, 1])
axes[1, 1].set_title('Educational Qualifications Distribution')
axes[1, 1].tick_params(axis='x', rotation=45)plt.tight_layout()
plt.show()
# 年齡與家庭規模的散點圖
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Age', y='Family size', data=data, hue='Gender', style='Marital Status', s=100)
plt.title('Relationship between Age and Family Size by Gender and Marital Status')
plt.xlabel('Age')
plt.ylabel('Family Size')
plt.legend(title='Gender / Marital Status', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
# 該圖表顯示了不同收入階層的人下的訂單數量
plt.figure(figsize=(12, 6))
sns.countplot(x='Monthly Income', hue='Output', data=data)
plt.title('Income Level vs. Online Ordering Behavior')
plt.xlabel('Monthly Income')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Ordered Online')
plt.tight_layout()
plt.show()
# 圖表顯示,根據他們的反饋,不同性別的人數以及根據他們的反饋,不同教育程度的人數
plt.figure(figsize=(12, 6))
sns.countplot(x='Feedback', hue='Gender', data=data)
plt.title('Feedback by Gender')
plt.xlabel('Feedback')
plt.ylabel('Count')
plt.legend(title='Gender')
plt.tight_layout()
plt.show()plt.figure(figsize=(12, 6))
sns.countplot(x='Feedback', hue='Educational Qualifications', data=data)
plt.title('Feedback by Educational Qualifications')
plt.xlabel('Feedback')
plt.ylabel('Count')
plt.legend(title='Educational Qualifications', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 盒子圖顯示了不同婚姻狀況和年齡的顧客的訂購行為
plt.figure(figsize=(12, 6))
sns.boxplot(x='Marital Status', y='Age', hue='Output', data=data)
plt.title('Ordering Behavior by Marital Status and Age')
plt.xlabel('Marital Status')
plt.ylabel('Age')
plt.legend(title='Ordered Online')
plt.tight_layout()
plt.show()
# 該圖表顯示了不同收入水平人群的正面和負面反饋數量
plt.figure(figsize=(14, 7))
sns.countplot(x='Monthly Income', hue='Feedback', data=data)
plt.title('Income Level and Feedback Sentiment')
plt.xlabel('Monthly Income')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Feedback', loc='upper right')
plt.tight_layout()
plt.show()
# 圖表顯示了不同學歷的人在網上訂餐的數量
plt.figure(figsize=(14, 7))
sns.countplot(x='Educational Qualifications', hue='Output', data=data)
plt.title('Educational Qualifications and Online Ordering')
plt.xlabel('Educational Qualifications')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Ordered Online', loc='upper right')
plt.tight_layout()
plt.show()
# 數據集中不同特征之間的熱圖
correlation_matrix = data[['Age', 'Family size', 'latitude', 'longitude', 'Pin code']].corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=.5)
plt.title('Heatmap of Correlations Among Numerical Features')
plt.show()
# 小提琴圖顯示月收入與年齡的關系
plt.figure(figsize=(14, 8))
sns.violinplot(x='Monthly Income', y='Age', data=data)
plt.title('Violin Plots for Monthly Income vs. Age')
plt.xlabel('Monthly Income')
plt.ylabel('Age')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 雷達圖顯示正面反饋數、負面反饋數、教育程度和平均家庭規模之間的關系
data = pd.read_csv('onlinefoods.csv')
data['Output_Numeric'] = data['Output'].map({'Yes': 1, 'No': 0})data['Positive_Feedback'] = (data['Feedback'] == 'Positive').astype(int)radar_df_new = data.groupby('Educational Qualifications').agg(Average_Age=('Age', 'mean'),Average_Family_Size=('Family size', 'mean'),Proportion_Positive_Feedback=('Positive_Feedback', 'mean'),Proportion_Ordering_Online=('Output_Numeric', 'mean')
).reset_index()scaler = MinMaxScaler()
radar_df_normalized = pd.DataFrame(scaler.fit_transform(radar_df_new.iloc[:, 1:]), columns=radar_df_new.columns[1:])
radar_df_normalized['Educational Qualifications'] = radar_df_new['Educational Qualifications']categories_new = list(radar_df_normalized)[1:]
N_new = len(categories_new)angles_new = [n / float(N_new) * 2 * 3.14159265359 for n in range(N_new)]
angles_new += angles_new[:1]fig, ax = plt.subplots(figsize=(10, 10), subplot_kw=dict(polar=True))plt.xticks(angles_new[:-1], categories_new)ax.set_rlabel_position(0)
plt.yticks([0.2, 0.4, 0.6, 0.8], ["0.2", "0.4", "0.6", "0.8"], color="grey", size=7)
plt.ylim(0,1)for i, row in radar_df_normalized.iterrows():data = radar_df_normalized.loc[i].drop('Educational Qualifications').tolist()data += data[:1]ax.plot(angles_new, data, linewidth=2, linestyle='solid', label=radar_df_normalized['Educational Qualifications'][i])ax.fill(angles_new, data, alpha=0.1)plt.title('Enhanced Radar Chart for Educational Qualifications', size=20, y=1.1)
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))plt.show()
# 下面的條形圖顯示了正面和負面反饋的數量
data = pd.read_csv('onlinefoods.csv')
sentiment_counts = data['Feedback'].value_counts()plt.figure(figsize=(8, 6))
sentiment_counts.plot(kind='bar')
plt.title('Feedback Sentiment Distribution')
plt.xlabel('Sentiment')
plt.ylabel('Frequency')
plt.xticks(rotation=45)
for a,b in zip(range(2),sentiment_counts.values):plt.text(a,b,'%d'%b,ha='center',va='bottom',fontsize=14)
plt.show()
# 隨機森林機器學習(ML)分類模型預測反饋是積極的還是消極的
# 編碼處理
encoder = LabelEncoder()
categorical_features = ['Gender', 'Marital Status', 'Occupation', 'Monthly Income', 'Educational Qualifications', 'Output', 'Unnamed: 12']
for feature in categorical_features:data[feature] = encoder.fit_transform(data[feature])
# 準備建模數據
X = data.drop(['Feedback', 'latitude', 'longitude', 'Pin code'], axis=1)
y = encoder.fit_transform(data['Feedback'])
# 拆分數據集為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 構建隨機森林模型
rf_model = RandomForestClassifier(n_estimators=5, random_state=42)
rf_model.fit(X_train, y_train)
# 模型預測
y_pred = rf_model.predict(X_test)
# 模型評估
accuracy_rf = accuracy_score(y_test, y_pred)
report_rf = classification_report(y_test, y_pred)
print(accuracy_rf)
print(report_rf)
我們可以看到,我們得到了相當不錯的90%的準確率

資料獲取,更多粉絲福利,關注下方公眾號獲取

在這里插入圖片描述

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

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

相關文章

springmvc揭秘參數解析

參數解析 說到參數解析,springmvc中處理參數的是HandlerMethodArgumentResolver接口 public interface HandlerMethodArgumentResolver { // 判斷是否支持該類型參數 boolean supportsParameter(MethodParameter parameter); // 進行參數解析 Object resolv…

[羊城杯 2021]BabySmc

運行就是輸入flag 不知道怎么跳過去的 這個應該就是smc加密的函數了 運行完這個函數才能繼續往下 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // r12__int64 v5; // r13unsigned __int64 v6; // raxchar v7; // spcha…

學習Vue中圖片上傳前進行壓縮的實現方法

學習Vue中圖片上傳前進行壓縮的實現方法 一、前言1. 為什么要在客戶端進行圖片壓縮?2. Vue組件中實現圖片上傳前壓縮的方法3. 注意事項與優化4. 總結 一、前言 在Web開發中,圖片上傳是一個常見的功能需求,而客戶端對圖片進行壓縮可以有效減小…

企業如何進行快遞運費對賬?

在電子面單寄件取代手寫紙質面單之后,加上月結寄件模式的推行,企業快遞運費對賬,成了行政的一個難題...... 早期的手寫紙質面單寄件,企業行政或者財務相關人員,遵循寄前審批,寄后報銷的原則進行對賬。隨著電…

FinalShell無法連接Linux

Linux使用Vmware會創建一個網絡,讓兩個子網處于一個網關,這樣就能在windows中連接Linux,只有在這種情況下才能FinalShell才能連接Linux

面試題合集(2)

1. Self Attention的時候 Q K T QK^T QKT之后要除以 d ? \sqrt{d}? d ?? 參考蘇劍林大神: 淺談Transformer的初始化、參數化與標準化 模型初始化:介紹了常用的采樣分布,包括正態分布、均勻分布和截尾正態分布。并從代數角度理解初始化方…

module_param的用法

在Linux內核模塊編程中,`module_param`宏允許你聲明一個模塊參數。模塊參數是指可以在加載模塊時從命令行設置的參數,也可以通過/sys文件系統(如果內核配置了CONFIG_SYSFS)在模塊加載后進行修改。這些參數對于調整模塊的行為而不需要重新編譯模塊代碼非常有用。 使用方法 …

KT6368A雙模藍牙芯片上電到正常發送AT指令或指令復位需要多久

一、簡介 KT6368A芯片上電到正常發送AT指令,或者開啟藍牙廣播被搜索到,或者指令復位需要多久等等系列問題總結 詳細描述 其實這些問題歸結到一起,就還是一個問題,芯片上電需要多久的時間 在另外一份文檔里面,是有描…

跟我學C++中級篇——if constexpr的應用

一、場景應用 在一個開發場景下,需要動態處理不同類型的數據寫入。本來這個非常簡單,只要定義一個模板即可搞定,但這里偏偏有一個細節,是調用別人的庫來實現寫入。而這個庫對不同的數據類型的寫入,提供了N種不同的函數…

Python實戰開發及案例分析(28)—— 預編碼算法

預編碼算法(Precoding Algorithm)通常用于無線通信系統中,尤其是多輸入多輸出(MIMO)系統中,以提高數據傳輸的可靠性和效率。預編碼是為了在發送端對信號進行處理,以優化傳輸性能。 在MIMO系統中…

Java設計模式 _行為型模式_訪問者模式

一、訪問者模式 1、訪問者模式 訪問者模式(Visitor Pattern)是一種行為型模式。它允許在不修改已有類結構的情況下,向類中添加新的操作。訪問者模式通過將操作封裝在一個訪問者對象中,使得可以在不改變各個元素類的前提下&#x…

RedisTemplate實戰應用--隊列等

一、RedisTemplate隊列插入 1、從集合左邊插入值 https://blog.csdn.net/weixin_43658899/article/details/121040307 leftPush(K key, V value) redisTemplate.opsForList().leftPush("leftdatakey","bbbb");2、從集合左邊開始在v1值后邊插入新值v2 le…

使用 Django 連接 MySQL 數據庫

文章目錄 步驟一:安裝必要的庫和驅動步驟二:配置數據庫連接步驟三:執行數據庫遷移步驟四:開始使用 MySQL 數據庫創建一個模型遷移模型到數據庫使用模型進行數據操作創建新記錄:查詢記錄:更新記錄&#xff1…

Mac安裝第三方軟件的命令安裝方式

場景: 打開終端命令行,sudo xattr -rd com.apple.quarantine,注意最后quarantine 后面加一個空格!然后打開Finder(訪達),點擊左側的 應用程序,找到相關應用,拖進終端qua…

(超實用)京東訂單數據分析案例-維度下鉆

1,數據介紹,字段了解 盡可能熟悉業務,多知道字段的含義,字段字段間的邏輯關系,后期數據分析思路才能更清晰,結果才能更準確 2,訂單數據分析基本思路 維度下鉆 3,代碼實現全流程思路…

華為telnet的兩種認證方式

華為telnet的兩種認證方式 實驗拓撲: 實驗要求: 1.采用普通密碼認證實現telnet 遠程登錄機房設備R3 2.采用AAA認證服務方式實現telnet 遠程登錄機房設備R3 實驗步驟: 1.完成基本配置(設備接口配置IP,此步驟略過&#…

Facebook的隱私保護挑戰:用戶數據安全的新時代

在全球范圍內,Facebook已經成為了不可忽視的社交媒體巨頭,它連接著超過20億的活躍用戶。然而,隨著其影響力的不斷擴大,關于用戶隱私和數據安全的問題也愈加引人關注。本文將深入探討Facebook面臨的隱私保護挑戰,以及它…

一個程序員的牢獄生涯(47)學法

星期一 學法 二鋪不知道什么時候走到了我的身邊,向我說道,這是二鋪在我進來號子后主動過來和我說話。 我聽到二鋪這聲突兀的說話后,抬起頭。這時我才看到,除了二鋪,還有六子、棍子都圍在我的身邊,看著我。雖然六子和棍子依舊一副‘吊兒郎當’的樣子,但我從他們幾個的眼神…

解析前端開發中同源策略與配置代理

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么?二、使用步驟 1.引入庫2.讀入數據總結 前言 在前端開發中,跨域請求是一個常見的問題。同源策略限制了瀏覽器中一個頁面…

C++高手進階:Windows 模塊加載的藝術與策略

前文我們講到了怎么不依賴第三庫,搭建自己的測試框架 沒有看的讀者可以通過這個鏈接自行閱讀: 👉👉👉 自力更生:0依賴三方庫,手把手教你打造專屬C測試框架 作為項目開發來說,我們通常…