数据分析案例-欺诈性电子商务交易数据集可视化分析
🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
目录
1.项目背景
2.数据集介绍
3.技术工具
4.导入数据
5.数据可视化
源代码
1.项目背景
在电子商务蓬勃发展的今天,欺诈性交易已成为一个不容忽视的问题。随着消费者对于在线购物的依赖程度不断加深,电子商务市场的规模持续扩大,但与此同时,欺诈行为也日益猖獗。这些欺诈行为不仅损害了消费者的权益,降低了他们对电子商务的信任度,还严重干扰了商家的正常经营秩序,对整个电子商务生态系统造成了巨大的冲击。
电子商务欺诈行为的多样性和隐蔽性给防范和打击带来了极大的挑战。欺诈者可能采用各种手段,如伪造身份、发布虚假商品信息、恶意刷单、虚假评价等,以达成非法获利的目的。这些欺诈行为往往隐藏在庞大的交易数据中,难以被直接识别和发现,因此,需要借助先进的数据分析技术来揭示其中的规律和特点。
数据驱动的欺诈防范策略在电子商务领域变得尤为重要。随着大数据和人工智能技术的快速发展,对大量的电子商务交易数据进行深入分析和挖掘成为可能。通过构建欺诈性电子商务交易数据集,并利用可视化分析技术将数据以直观、易懂的方式呈现出来,可以帮助分析人员快速理解数据中的信息,发现潜在的欺诈风险,并据此制定针对性的防范和应对策略。
可视化分析在欺诈防范中发挥着至关重要的作用。它可以将复杂的数据转化为图表、图像等易于理解的视觉形式,帮助分析人员迅速捕捉数据中的关键信息和异常模式。通过对欺诈性电子商务交易数据集的可视化分析,我们可以更深入地了解欺诈行为的特点和规律,发现欺诈行为的潜在趋势和关联性,为制定更加有效的防范措施提供科学依据。
因此,研究欺诈性电子商务交易数据集的可视化分析具有重要的理论意义和实践价值。它不仅有助于我们深入理解欺诈行为的本质和规律,还有助于提升电子商务市场的安全性和可信度,保护消费者和商家的合法权益,促进电子商务的健康发展。
2.数据集介绍
本实验数据集来源于Kaggle,原始数据集分为训练集和测试集,其中训练集共有1472952条数据,16个变量。各变量含义解释如下:
Transaction ID:每个事务的唯一标识符。
Customer ID:每个客户的唯一标识符。
Transaction Amount:交易中交易的总金额。
Transaction Date:交易发生的日期和时间。
Payment Method:用于完成交易的方式(如信用卡、PayPal等)。
Product Category:交易中涉及的产品类别。
Quantity:交易中涉及的产品数量。
Customer Age:进行交易的客户的年龄。
Transaction Date:客户的地理位置。
Device Used:用于进行交易的设备类型(例如,移动设备、桌面设备)。
IP Address:用于交易的设备的IP地址。
Shipping Address:产品发货的地址。
Billing Address :与付款方式相关联的地址。
Is Fraudulent:表示事务是否欺诈性的二进制指示器(1表示欺诈性,0表示合法)。
Account Age Days:客户账户在交易时的存续天数。
Transaction Hour:交易发生的当天的时间。
3.技术工具
Python版本:3.9
代码编辑器:jupyter notebook
4.导入数据
导入数据分析第三方库
导入数据集
查看数据集大小
查看数据基本信息
查看数值型变量的描述性统计
我们可以看到客户年龄最小值是-16,这是不可能的,所以我们必须修复客户年龄列。
查看非数值型变量的描述性统计
统计数据缺失值情况
可以发现数据集中并不存在缺失值
统计重复值情况
可以发现数据集中并不存在重复值
使用箱线图查看客户年龄分布
定义一个数据预处理函数,并处理我们的数据集
再次查看数据基本信息
数据集已被清理和压缩,其大小从180 MB减少到57MB。
5.数据可视化
交易金额普遍分布在0到1000之间且数据是右偏的。
源代码
Transaction ID:每个事务的唯一标识符。
Customer ID:每个客户的唯一标识符。
Transaction Amount:交易中交易的总金额。
Transaction Date:交易发生的日期和时间。
Payment Method:用于完成交易的方式(如信用卡、PayPal等)。
Product Category:交易中涉及的产品类别。
Quantity:交易中涉及的产品数量。
Customer Age:进行交易的客户的年龄。
Transaction Date:客户的地理位置。
Device Used:用于进行交易的设备类型(例如,移动设备、桌面设备)。
IP Address:用于交易的设备的IP地址。
Shipping Address:产品发货的地址。
Billing Address :与付款方式相关联的地址。
Is Fraudulent:表示事务是否欺诈性的二进制指示器(1表示欺诈性,0表示合法)。
Account Age Days:客户账户在交易时的存续天数。
Transaction Hour:交易发生的当天的时间。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import time
import warnings
warnings.filterwarnings('ignore')train_df = pd.read_csv('Fraudulent_E-Commerce_Transaction_Data.csv')
train_df.head()
train_df.shape
train_df.info()
train_df.describe()
我们可以看到客户年龄最小值是-16,这是不可能的,所以我们必须修复客户年龄列
train_df.describe(include='O')
train_df.isnull().sum()
train_df.duplicated().sum()
px.box(data_frame=train_df,x="Customer Age",width=500,height=300)
def clean_data(df) -> pd.DataFrame: ##我们需要将**Transaction Date**列从对象类型转换为日期时间格式。df["Transaction Date"] = pd.to_datetime(df["Transaction Date"])## 从交易日期提取日、周、月df['Transaction Day'] = df["Transaction Date"].dt.daydf["Transaction DOW"] = df["Transaction Date"].dt.day_of_weekdf["Transaction Month"] = df["Transaction Date"].dt.month## 修复客户年龄mean_value = np.round(df['Customer Age'].mean(),0) df['Customer Age'] = np.where(df['Customer Age'] <= -9, np.abs(df['Customer Age']), df['Customer Age'])df['Customer Age'] = np.where(df['Customer Age'] < 9, mean_value, df['Customer Age'])## 如果“Shipping Address”与“Billing Address”相同,则取值为1,否则取值为0。df["Is Address Match"] = (df["Shipping Address"] == df["Billing Address"]).astype(int)### 删除不相关的特征并向下转换数据类型以减小数据集大小df.drop(columns=["Transaction ID", "Customer ID", "Customer Location","IP Address", "Transaction Date","Shipping Address","Billing Address"], inplace=True)int_col = df.select_dtypes(include="int").columnsfloat_col = df.select_dtypes(include="float").columnsdf[int_col] = df[int_col].apply(pd.to_numeric, downcast='integer')df[float_col] = df[float_col].apply(pd.to_numeric, downcast='float')return dftrain_df = clean_data(train_df)
train_df.head()
train_df.info()
数据集已被清理和压缩,其大小从180 MB减少到57MB。
plt.figure(figsize=(10,4))
sns.histplot(train_df["Transaction Amount"],bins=200)
plt.show()
交易金额普遍分布在0到1000之间
数据是右偏的。
payment_count = train_df["Payment Method"].value_counts()
plt.figure(figsize=(15,4))
plt.subplot(1,2,1)
sns.set_palette('pastel')
colors = sns.color_palette()
plt.pie(payment_count,labels = payment_count.index,shadow=True,autopct='%1.1f%%',colors=colors,wedgeprops=dict(width=0.8,edgecolor="w"))
plt.title("Payment Method")
plt.subplot(1,2,2)
sns.countplot(data=train_df,x="Payment Method",edgecolor="black",linewidth=1, palette="Set2")
plt.show()
我们可以看到所有的付款方式都是平均分配的
category_count = train_df["Product Category"].value_counts()
plt.figure(figsize=(15,4))
plt.subplot(1,2,1)
sns.set_palette('pastel')
colors = sns.color_palette()
plt.pie(category_count,labels = category_count.index,shadow=True,autopct='%1.1f%%',colors=colors,wedgeprops=dict(width=0.8,edgecolor="w"))
plt.title("Product Category")plt.subplot(1,2,2)
ax = sns.countplot(data=train_df,x="Product Category",edgecolor="black",linewidth=1, palette="Set2")
我们可以看到,所有的产品类别也是均匀分布的
quantity_count = train_df["Quantity"].value_counts()
plt.figure(figsize=(15,4))
plt.subplot(1,2,1)
sns.set_palette('pastel')
colors = sns.color_palette()
plt.pie(quantity_count,labels = quantity_count.index,shadow=True,autopct='%1.1f%%',colors=colors,wedgeprops=dict(width=0.8,edgecolor="w"))
plt.title("Quantity")
plt.subplot(1,2,2)
ax = sns.countplot(data=train_df,x="Quantity",edgecolor="black",linewidth=1, palette="Set2")
plt.figure(figsize=(7,4))
sns.histplot(data=train_df, x="Customer Age",bins=150,kde=True,color='orange')
plt.show()
device_count = train_df["Device Used"].value_counts()
plt.figure(figsize=(15,4))
plt.subplot(1,2,1)
sns.set_palette('pastel')
colors = sns.color_palette()
plt.pie(device_count,labels = device_count.index,shadow=True,autopct='%1.1f%%',colors=colors,wedgeprops=dict(width=0.8,edgecolor="w"))
plt.title("Device Used")
plt.subplot(1,2,2)
ax = sns.countplot(data=train_df,x="Device Used",edgecolor="black",linewidth=1, palette="Set2")
hour_count = train_df["Transaction Hour"].value_counts().head(15)
plt.figure(figsize=(10,4))
sns.set_palette('Set2')
colors = sns.color_palette()
ax=sns.barplot(x=hour_count.index, y=hour_count.values,palette=colors)
plt.xticks(rotation=80)
plt.show()
plt.figure(figsize=(5,3))
sns.violinplot(data=train_df, x='Is Fraudulent', y='Transaction Amount')
plt.show()
column = ['Payment Method', 'Product Category', 'Quantity', 'Device Used','Transaction DOW', 'Transaction Month','Is Address Match']
plt.figure(figsize=(10,35))
plot_num = 1
for col in column:plt.subplot(10,2,plot_num)sns.countplot(data=train_df, x=col, hue="Is Fraudulent")plt.xticks(rotation=90)plt.title(col)plt.tight_layout()plot_num += 1
plt.figure(figsize=(10,6))
plt.subplot(1,2,1)
sns.boxenplot(x='Is Fraudulent', y='Transaction Amount', data=train_df)
plt.subplot(1,2,2)
sns.boxenplot(x='Is Fraudulent', y='Transaction Day', data=train_df)
plt.yticks(np.arange(0,32))
plt.show()
资料获取,更多粉丝福利,关注下方公众号获取
相关文章:

数据分析案例-欺诈性电子商务交易数据集可视化分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

java互联网医院智能导诊系统源码,Uniapp前端开发框架,支持一次编写,多端运行
智慧导诊系统源码,java源码,大屏机自动导诊,互联网医院智能导诊系统源码 老是全身无力,挂什么科? 经常头痛,挂什么科? 总是失眠,又得挂哪个科? 世界上最遥远的距离再加…...

公交线路查询web管理系统||公交线路查询|基于SprinBoot+vue公交线路查询系统(源码+数据库+文档)
公交线路查询web管理系统 目录 基于SprinBootvue公交线路查询系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…...

AI对于智能网联汽车发展路径的演化的助力
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...
linux java17 - linux环境 centos7卸载java8安装java17
前言 因为springboot3不再支持java8,最近开始转java17,具体要求如下 Spring Boot 3要求使用Java 17或更高版本,不支持Java 8。 Spring Boot 3.0 正式版已经发布,并且明确要求最低支持Java 1712。 Spring Boot 3.0 正式版发…...

高中数学:立体几何-外接球的外心法
文章目录 一、外心法定义二、习题1、例题一2、例题二3、例题三4、例题四 一、外心法定义 依然以三棱锥为例 即,找到三棱锥的外接球的球心,从而可以确定出外接球的半径R。 而三棱锥有四个顶点,这四个顶点必然都在外接球的球面上。 寻找思路…...

【Python-AI篇】人工智能python基础-计算机组成原理
1. 计算机组成原理 2. python基础(查漏补缺) 2.1 字符串 2.1.1 字符串查找方法 find(): 检测某个字符串是否包含在这个字符串中,在的话返回下标,不在的话返回-1index(): 检测某个字符串是否包含在这个字…...
Java Exercise
3194. 最小元素和最大元素的最小平均值 Solution类 class Solution {public double minimumAverage(int[] nums){int n nums.length / 2;Arrays.sort(nums);int average 0;ArrayList<Double> arrayList new ArrayList<>();int i;int j;for (i 0, j nums.leng…...
滚雪球学Redis[9.1讲]:Redis的常见问题与最佳实践
全文目录: 前言1. Redis的常见问题排查常见错误信息与解决方案性能瓶颈的识别与处理数据一致性问题的排查 2. Redis的最佳实践Redis使用中的通用原则典型业务场景中的最佳实践如何避免Redis中的反模式 小结下期预告 前言 在上一章【第八章:Redis的扩展与…...

python获取当前鼠标位置的RGB值
效果 依赖 pip install Pillow pyautoguisudo apt install gnome-screenshot代码 import pyautogui import timedef get_rgb_at_mouse():try:while True:# 获取当前鼠标的位置x, y pyautogui.position()# 截取当前屏幕图像screenshot pyautogui.screenshot()# 获取鼠标位置…...
Ubuntu20.04运行深蓝运动规划hw_5
前言 环境: ubuntu 20.04 ; ROS版本: noetic; 问题 运行 roslaunch waypoint_trajectory_generator test.launch 出现如下错误 Invalid argument "/map" passed to canTransform argument source_frame in tf2 fra…...
删除node_modules文件夹
前言 当安装了较多模块后,node_modules目录下的文件会很多,直接删除整个目录会很慢,下面介绍些快速删除node_modules目录的方法。 方法一:使用rimraf模块的命令 在全局安装rimraf模块,然后通过其命令来快速删除node…...

基于Springboot+Vue的民宿管理系统(含源码数据库)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…...

[LeetCode] 542. 01矩阵
题目描述: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出…...

国产AI模型“Yi-Lightning”逆袭超越GPT-4!
近日,全球千万用户盲测投票产生的AI模型排行榜公布,令人惊喜的是,国产AI模型“Yi-Lightning”成功逆袭,一举超越了此前长期占据榜首的GPT-4。 Ai 智能办公利器 - Ai-321.com 人工智能 - Ai工具集 - 全球热门人工智能软件ai工具集…...
安卓設備上怎麼設置HTTP代理?
HTTP代理是一種仲介伺服器,它在用戶的設備和互聯網之間傳遞請求。通過HTTP代理,請求會先發送到代理伺服器,然後由代理伺服器轉發到目標網站。這樣,目標網站只會看到代理伺服器的IP地址,而不是真實IP地址。這種機制可以…...

学习Redisson实现分布式锁
官网:https://redisson.org/ 官方文档:https://redisson.org/docs/getting-started/ 官方中文文档:https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 1、引入依赖 <!--redisson--> <dependency><groupId>or…...
2024CSP-J模拟赛9————S12678
一,赛中得分 T1100T2100T350T440总分290 二,赛中概括 T1T2较快过,T3T4骗了90分(意料之中,这么好骗分!!!)。 三,题目解析 涂格子(paint) 问题描述 现在有…...

HarmonyOS中ArkUi框架中常用的装饰器
目录 1.装饰器 1)Component 1--装饰内容 2)Entry 1--装饰内容 2--使用说明 3)Preview 1--装饰内容 2--使用说明 4)CustomDialog 1--装饰内容 2--使用说明 5)Observed 1--装饰内容 2--使用说明 6)ObjectLin…...

服务攻防之Redis数据库安全
最近我将会把一些服务攻防方面的姿势在这里做一个简单总结。欢迎大家留言讨论。 首先我们先对这类安全问题做一个总体的概括! 一、总概 1.服务判断: 端口扫描:利用服务开启后的目标端口开放判断 组合判断:利用搭建常见组合分析可能开放服务…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...

表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...