第一大题
1.1
数据获取方式:
- 用户骑行数据:通过单车内置的 GPS 和智能锁记录骑行轨迹、时间、起点/终点位置。
- 用户注册信息:APP 注册时收集的用户年龄、性别、职业等。
- 用户行为数据:APP 搜索记录、找车时间、预约/取消行为。
- 车辆状态数据:单车传感器检测的故障信息(如刹车损坏、电量不足)。
- 外部数据:天气数据、地铁/公交时刻表、商圈活动信息等。
大数据特征(4V):
- Volume(大量):十万级单车每天产生海量 GPS 轨迹、用户行为数据。
- Velocity(高速):实时采集骑行数据,需快速处理调度需求。
- Variety(多样):结构化(用户信息)、半结构化(GPS 轨迹)、非结构化(用户反馈文本)。
- Value(价值):分析后可优化调度、提升用户体验。
1.2
- 数据实时处理:需处理千万级 GPS 数据流,确保调度决策的时效性。
- 数据质量:GPS 信号漂移、用户误操作导致的数据异常。
- 隐私保护:用户轨迹数据涉及隐私,需合规存储和使用。
- 算法优化:动态调度需平衡供需,避免“无车可用”或“车辆堆积”。
- 系统稳定性:高并发访问时,大数据平台需保证高可用性。
第二大题
2.1
填充方法:
- 均值填充:适用于数据分布较均匀时。
- 中位数填充:适用于存在极端值时。
- 众数填充:适用于分类数据或特定模式的数据。
- 回归预测填充:利用其他字段(如
score
)预测缺失值。
均值填充的问题:
- 若学习时长分布不均匀(如部分用户学习时间极长),均值可能偏离真实情况。
- 掩盖真实的数据分布特征,影响后续分析(如异常检测)。
2.2
可能原因:
- 数据采集时未强制校验用户输入,导致提交空值。
- 系统故障或 API 传输错误,未正确记录用户名。
处理方法:
- 删除记录:若缺失比例低且不影响分析。
- 填充默认值:如
"Unknown"
,但需标注为缺失数据。 - 数据溯源:检查采集流程,修复校验逻辑。
2.3
import pandas as pd
import numpy as np
# 读取数据
study = pd.read_csv("study.csv")
# 找出 score < 0 或 > 100 的异常值,并将对应 lt 设为 NaN
study.loc[(study["score"] < 0) | (study["score"] > 100), "lt"] = np.nan
# 输出处理后的数据
print(study)
第三大题
3.1
- 数据采集:整合出租车 GPS、地铁刷卡、路口监控、天气数据。
- 数据清洗:处理缺失值、异常值(如 GPS 漂移)。
- 数据存储:使用分布式存储(如 HDFS)或时序数据库(如 InfluxDB)。
- 数据分析:计算拥堵指数、出行热点区域。
- 可视化设计:选择合适图表(如热力图、折线图)。
- 交互优化:提供动态筛选(如时间段、区域)。
- 部署应用:集成到交通管理平台或公众出行 APP。
3.2
- 热力图:展示路口/地铁站拥堵程度(基于 GPS 密度)。
- 折线图:显示全天交通流量变化趋势。
- 地理信息图(GIS):叠加实时路况和事故点。
- 散点图:分析天气(如降雨)与拥堵的关联性。
选择依据:
- 热力图适合空间密度分析,折线图适合时间趋势,GIS 适合地理位置关联。
3.3
修改后代码:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid')
sns.set(font='SimHei')
titanic = pd.read_csv("titanic.csv")
titanic['sex']= ["男" if i == "male" else "女" for i in titanic['sex']]
titanic['class'] = ['1' if i == "First" else "2" if i == "Second" else "3" for i in titanic['class']]
titanic = titanic.rename(columns={"class":"舱位等级", "age":"乘客年龄", "sex":"乘客性别"})
sns.boxplot(x = "舱位等级", y = "乘客年龄", hue = "乘客性别", data=titanic)
plt.show()
箱形图关键特征:
- 舱位等级:1 等舱乘客年龄中位数较高,3 等舱年龄分布更分散。
- 性别差异:女性在 1/2 等舱年龄较高,男性在 3 等舱更多年轻人。
- 异常值:部分高龄乘客(如 1 等舱男性)可能为特殊群体。
第四大题
4.1
数据类型:结构化数据(CSV 格式的销售记录)。
增量采集方法:
- 每日定时(如凌晨)通过 ETL 工具(如 Sqoop)将各门店 CSV 文件增量同步到 HDFS。
- 使用
last_modified_time
判断新增文件,避免重复采集。
4.2
核心函数:
df[['商品名称', '销量']] = df['商品名称_销量'].str.split('_', expand=True)
4.3
图表类型:折线图(展示时间趋势)或 柱状图(对比不同水果销量)。
选择理由:折线图能清晰反映销量随时间的变化趋势。
关键字段:
销售日期
(筛选 2024-Q3)商品名称
(筛选水果类,如苹果、香蕉)