智能化应用(shell)
1.1 创建主目录及各层级目录
1 | # 创建主目录 |
1.2 为目录添加文件
1 | # 在网络配置目录下创建 network.conf 配置文件 |
1.3 验证目录和文件结构
1 | tree |
2 编写脚本文件write_log.sh,用于将时间信息写入服务日志文件(service.log
),保存路径为/root/scripts/
。
1 |
|
给予下文件权限
1 | chmod +x /path/to/write_log.sh |
3 将任务1中创建的项目smart-police-system
远程复制至主机jupyter
对应的 /root目录下。
1 | scp -r /root/smart-police-system/ root@jupyter:/root/ |
4. 为更好监控服务状态,使用cron来实现定时任务,要求每五分钟执行一次write_log.sh脚本。
1 | crontab -e |
==注意== 如果没有给予脚本权限,可能会出错
1 | */5 * * * * /bin/bash /path/to/write_log.sh |
伪分布式集群搭建
基础配置
1. 修改主机名为 qingjiao
1 | sudo hostnamectl set-hostname qingjiao |
2. 创建文件夹 /root/task
1 | mkdir /root/task |
3. 创建文件 /root/task/student
1 | touch /root/task/student |
4. 修改 hosts
文件添加主机名映射
1 | touch /root/task/student |
5. 修改时区为上海时间
1 | sudo timedatectl set-timezone Asia/Shanghai |
该命令将系统时区更改为上海时区(CST+0800时区)。
6. 添加定时任务
编辑 crontab
文件:
1 | crontab -e |
在 crontab
文件中添加以下行:
1 | 0 10 * * * date >> /root/task/student |
SSH免密配置
1. 节点中生成公钥文件id_rsa.pub(数字签名RSA,用户root,主机名qingjiao)
1 | # 在 master 上执行如下命令生成公私密钥:(注意 master 上执行,默认为 rsa 类型) |
2. 建⽴qingjiao⾃身使⽤root⽤户ssh访问localhost免密登录(自行完成首次公钥匙认证)
1 | ssh root@localhost |
JDK安装
1.将jdk安装包解压到/usr/java目录(安装包存放于/usr/package277,路径自行创建,解压后文件夹为默认名称,其他安装同理)
1 | mkdir -p /usr/java |
配置系统环境变量JAVA_HOME,同时将JDK安装路径中bin目录加入PATH系统变量,注意生效变量,查看JDK版本
1 | vim /etc/profile |
添加
1 | export JAVA_HOME=/usr/java/jdk1.8.0_221 |
- 生效环境变量:
source /etc/profile
- 查看 java 版本:
java -version
Hadoo伪集群部署
1. 将Hadoop安装包解压到指定路径/usr/hadoop(安装包存放于/usr/package277/)
1 | mkdir -p /usr/hadoop && cd /usr/hadoop |
2. 配置环境变量HADOOP_HOME,将Hadoop安装路径中bin目录和sbin目录加入PATH系统变量,注意生效变量
1 | vim /etc/profile |
添加
1 | #hadoop |
1 | source /etc/profile |
3. 配置Hadoop运行环境JAVA_HOME(hadoop-env.sh)
1 | cd $HADOOP_HOME/etc/hadoop |
添加
1 | export JAVA_HOME=/usr/java/jdk1.8.0_221 |
4. 设置全局参数,指定HDFS上NameNode地址为qingjiao,端口默认为9000(core-site.xml)
1 | vim core-site.xml |
1 | <configuration> |
1 | <property> |
5. 设置全局参数,指定临时存储目录为本地/root/hadoopData/tmp(要求为绝对路径,下同)
接上
6. 设置HDFS参数,指定备份文本数量为1(hdfs-site.xml)
1 | vim hdfs-site.xml |
1 | <configuration> |
1 | <property> |
7. 设置HDFS参数,指定NN存放元数据信息路径为本地/root/hadoopData/name;指定DN存放元数据信息路径为本地/root/hadoopData/data(要求为绝对路径)
接上
8. 设置HDFS参数,关闭hadoop集群权限校验(安全配置),允许其他用户连接集群
接上
9. 设置YARN运行环境$JAVA_HOME参数(yarn-env.sh)
1 | vim yarn-env.sh |
1 | export JAVA_HOME=/usr/java/jdk1.8.0_221 |
10. 设置YARN核心参数,指定mapreduce 获取数据的方式为mapreduce_shuffle(yarn-site.xml)
1 | vim hdfs-site.xml |
1 | <configuration> |
1 | <property> |
11. 设置计算框架参数,指定MR运行在yarn上(mapred-site.xml)
1 | cp mapred-site.xml.template mapred-site.xml && vim mapred-site.xml |
1 | <configuration> |
1 | <property> |
12. 设置节点文件slaves,要求qingjiao为子节点
1 | echo qingjiao > slaves |
13. 对文件系统进行格式化
1 | hadoop namenode -format |
14. 启动Hadoop集群查看各节点服务
1 | start-all.sh |
出错的话
1 | stop-all.sh |
15. 查看集群运行状态是否正常
1 | hdfs dfsadmin -report |
交通事故数据分析
1 | import pandas as pd |
1 | data = pd.read_excel("./事故数据.xlsx") |
1 | import pandas as pd |
1 | # 2. 在“特别严重”的事故数据中,对“事故车辆“的分布构成进行分析 |
1 | # 3. 分析“高速”道路中5车及以上事故车辆对应的“平均伤亡人数” |
1 | average_casualties = highway_data.groupby('事故车辆')['伤亡人数'].mean().reset_index() |
1 | # 4. 对全量数据进行时间(周)分布分析 |
1 |
|
1 | # 6. 分析“学校道路”下事故限速情况分布 |
1 | # 7. 分析“乡村道路”事故中“灯光情况”构成 |
1 | # 8. 分析“城市道路”事故中“天气情况”构成 |
电信诈骗数据分析(Python)
背景说明
随着移动支付的迅速发展,电信诈骗案件不断增加。在如此严峻的形势下,如何有效地检测欺诈行为成为一个亟待解决的挑战。为了应对这一挑战,我们收集了约40万条银行卡交易记录,其中包含了七个关键特征以及一个标签”fraud”。这些特征包括交易地点、最近交易金额与历史交易金额的对比、是否使用PIN码等。通过对这些给定数据集的探索性分析,我们可以揭示被骗者的银行卡交易特征,从而协助反诈警务人员及时发出预警信息,有效保护人民的财产安全。我们的研究旨在利用这些数据和特征,为社会提供更有效的防范措施,减少诈骗事件对个人和社会造成的损失。
列名 | 类型 | 说明 | |
---|---|---|---|
distance_from_home | float64 | 银行卡交易地点与家的距离 | |
distance_from_last_transaction | float64 | 与上次交易发生的距离 | |
ratio_to_median_purchase_price | float64 | 近一次交易与以往交易价格中位数的比率 | |
repeat_retailer | float64 | 交易是否发生在同一个商户 | |
used_chip | float64 | 是通过芯片(银行卡)进行的交易 | |
used_pin_number | float64 | 交易时是否使用了PIN码 | |
online_order | float64 | 是否是在线交易订单 | |
fraud | float64 | 诈骗片行为(标签) |
1 | # 导包 |
一、探索性分析
- 读取数据
- 查看数据类型
- 空值检测
- 异常值检测
- 正负样本分布
1 | # 读取CSV文件 |
1 | # 查看表 data中各列基本信息,包括:列名、数量、数据类型等。 |
1 | # 查看数据集各列的数据统计情况 |
可以观察到distance_from_home(银行卡交易地点与家的距离)和distance_from_last_transaction(与上次交易发生的距离)的方差相对于其他特征很大
1 | # 统计是否被诈骗数量分布 |
1 | # 基于箱型图,检测异常值 |
二、整体特征分析,观察特征之间的相关性
- 第一步:创建2个新表, Fraud 和 NotFraud, 分别对应 被诈骗数据 和 未被诈骗数据
- 第二步:求得相关性,画出热力图进行分析
1 | # 第一步:创建新表Fraud 【被诈骗数据】 |
1 | # 创建新表 NotFraud 【未被诈骗数据】 |
1 | #第 2步:计算 表NotFraud 的相关性 |
1 | #计算 表NotFraud 的相关性 |
1 | # 绘制热力图,观察各个特征之间的相关性 |
三、分组聚合分析
任务一:分析
distance_from_home
与fraud
之间的关系,旨在协助反诈警务人员锁定诈骗集团的位置范围;任务二:分析
ratio_to_median_purchase_price近一次交易与以往交易价格中位数的比率
与fraud
之间的关系,若比率增大,考虑有被电信诈骗的可能【这里假设比率超过10就有被骗的风险】。任务三:分析
repeat_retailer:交易是否发生在同一个商户
与fraud
之间的关系,假设一直在同一个商户进行交易,风险率最高。
3.2 任务一:分析 distance_from_home与fraud之间的关系
1 | # 提取 'distance_from_home' 和 'fraud' 两列 创建新表 sub_data1 |
查看sub_data1的形状: (187403, 2)
1 | ## 可视化分析: `distance_from_home交易与家间的距离` 和 `fraud是否诈骗` 之间的关系 |
3.2 任务二:分析 ratio_to_median_purchase_price
与 fraud
之间的关系
1 | # 创建子表sub_data2 , 该表包含 ratio_to_median_purchase_price 和 fraud 两列 |
1 | # 查看 ratio_to_median_purchase_price 的 数据分布 |
count 187403.000000
mean 3.565375
std 4.653129
min 0.007278
25% 0.664047
50% 1.841595
75% 5.058910
max 266.689692
Name: ratio_to_median_purchase_price, dtype: float64
1 | # 筛选出 ratio_to_median_purchase_price 中 大于 10 的数据,并分析他们的 fraud 的比例 |
查看表ratio的形状: (12103, 2)
1 | # 计算 表ratio中, fraud=0 以及 fraud=1的数量 |
表ratio与诈骗无关的数据数量统计: 742
表ratio与诈骗有关的数据数量统计: 11361
1 | # 可视化分析:ratio_to_median_purchase_price近一次交易与以往交易价格中位数的比率 与 fraud 之间的关系 |
3.3 任务三:分析 repeat_retailer
与 fraud
之间的关系
1 | # 创建子表sub_data3 , 该表包含 repeat_retailer 和 fraud 两列 |
1 | # 查看 repeat_retailer 中的数据分布 |
1.0 165030
0.0 22373
Name: repeat_retailer, dtype: int64
1 | # 统计 repeat_retailer 中的数据 fraud =1 的数据有多少条 |
1.0 76925
0.0 10478
Name: repeat_retailer, dtype: int64
1 | # 统计 repeat_retailer 中的数据 fraud =0 的数据有多少条 |
1.0 88105
0.0 11895
Name: repeat_retailer, dtype: int64
1 | # 可视化分析:`repeat_retailer`是否与 `fraud` 诈骗有关 |
Mysql
1. 开启 MySQL 服务
1 | # 启动 MySQL 服务 |
2. 创建数据库 relation
1 | CREATE DATABASE IF NOT EXISTS relation; |
3. 创建数据表 user
并导入数据
navicat导入
4. 创建数据表 friend
并导入数据
navicat导入
注意时间格式
5. 分析不同用户的好友数并存储为视图 table1
1 | USE relation; |
6. 查找用户“系乐”的所有朋友信息并存储为视图 table2
1 | USE relation; |
7. 查询用户的所有好友信息并存储为视图 table3
1 | USE relation; |
8. 查询“系乐”和“姚欣然”的共同好友信息并存储为视图 table4
1 | USE relation; |
9. 进行社交网络挖掘并存储为视图 table5
1 | USE relation; |
数据库安全管理
以下是针对上述要求的操作步骤:
1. 启动 MySQL 服务并查看服务状态
1 | # 启动 MySQL 服务 |
2. 创建用户 qingjiao
1 | -- 使用 root 用户登录 MySQL |
3. 授予 qingjiao
用户在 datatest
库下的 CREATE
权限
1 | -- 授予 CREATE 权限 |
4. 切换到 qingjiao
用户并创建数据库和表
1 | # 切换到 qingjiao 用户 |