zl程序教程

您现在的位置是:首页 >  Java

当前栏目

130 万条深圳通刷卡数据分析

2023-02-18 16:36:03 时间

1. 数据集说明

这是一份来自深圳市政府数据开放平台的深圳通刷卡数据,时间区间为 2018-08-31 到 2018-09-01,总计 1,337,000 条记录,大小为 335 M,包含 11 个字段。

深圳通是由深圳市运输局监制、深圳市公共交通结算管理中心发行的一款即可优惠乘坐深圳市公交车,深圳地铁和商店消费的一种储值卡。

2. 数据处理

2.1 数据处理

源数据存的是 json 格式的数据,先使用 python 对数据做一下清洗,然后保存为 csv 数据文件。

### 解析 json 数据文件
path = r"C:\Users\Administrator\Desktop\2018record3.jsons"
data = []
with open(path, 'r', encoding='utf-8') as f:
    for line in f.readlines():
        data += json.loads(line)['data']
data = pd.DataFrame(data)
columns = ['card_no', 'deal_date', 'deal_type', 'deal_money', 'deal_value', 'equ_no', 'company_name', 'station', 'car_no', 'conn_mark', 'close_date']
data = data[columns]  # 调整字段顺序
data.info()

### 输出处理 
# 全部都是 交通运输 的刷卡数据
print(data['company_name'].unique())

# 删除重复值
# print(data[data.duplicated()])
data.drop_duplicates(inplace=True)
data.reset_index(drop=True, inplace=True)

# 缺失值
# 只有线路站点和车牌号两个字段存在为空,不做处理
# print(data.isnull().sum())

# 去掉脏数据
data = data[data['deal_date'] > '2018-08-31']

### 数据保存 
print(data.info)

# 数据保存为 csv
data.to_csv('SZTcard.csv', index=False, header=None)

2.2 数据加载

把清洗好的数据文件上传到 hdfs ,然后加载到 impala,后续就可以直接用 impala 进行数据分析。

与 hive 不同,impala 不支持加载本地数据文件,只能加载 hdfs 数据文件,所以需要先把数据文件上传到 hdfs。

# csv 上传到 hdfs
hdfs dfs -put SZTcard.csv /tmp/
-- 建表
CREATE TABLE `sztcard`(
    `card_no` string COMMENT '卡号',
    `deal_date` string COMMENT '交易日期时间',
    `deal_type` string COMMENT '交易类型',
    `deal_money` float COMMENT '交易金额',
    `deal_value` float COMMENT '交易值',
    `equ_no` string COMMENT '设备编码',
    `company_name` string COMMENT '公司名称',
    `station` string COMMENT '线路站点',
    `car_no` string COMMENT '车牌号',
    `conn_mark` string COMMENT '联程标记',
    `close_date` string COMMENT '结算日期'
)
row format delimited
fields terminated by ','
lines terminated by '\n';

-- 加载数据
LOAD DATA INPATH '/tmp/SZTcard.csv' OVERWRITE INTO TABLE sztcard;

2.3 数据预览

数据加载完成后,查看一下数据情况,发现有两个金额字段,但是没有给出数值单位。通过红色框框出来的这个旅途(卡号AEAAAACHG ,草铺>>少年宫),到网上 搜一下 ,可以看到票价是 4 元,可见这两个字段都是单位都是 分。并且,deal_value 就是票价,而 deal_money 就是实际的消费金额,所以本次是半价,结合目的地,AEAAAACHG 可能是一张学生卡。

image-20210111101058379

image-20210111101224635

然后再查看一下数据集的日期分布,可以看到 2018-09-01 数据量比较大,但是时间范围只有半天。而 2018-08-31 相比之下数据量非常少,但是时间范围是一整天,后续在做一些时间上的分析,应该注意到这点。

image-20210111135936951

最后在看下公司名称分布情况,没有看到什么 某某便利店之类的名称,可见该数据集并没有商店消费的数据,全部都是交通出行的数据。

image-20210111103044070