利用Numpy和Pandas对地铁客量数据进行实战分析(附源码)

简介: 利用Numpy和Pandas对地铁客量数据进行实战分析(附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

首先我们来讲解一下Numpy和Pandas的异同

1)Numpy是数值计算的扩展包,能够高效处理N维数组,即处理高维数组或矩阵时会方便。Pandas是python的一个数据分析包,主要是做数据处理用的,以处理二维表格为主。

2)Numpy只能存储相同类型的ndarray,Pandas能处理不同类型的数据,例如二维表格中不同列可以是不同类型的数据,一列为整数一列为字符串。

3)Numpy支持并行计算,所以TensorFlow2.0、PyTorch都能和numpy能无缝转换。Numpy底层使用C语言编写,效率远高于纯Python代码。

4)Pansdas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas提供了大量快速便捷地处理数据的函数和方法。

5)Pandas和Numpy可以相互转换,DataFrame转化为ndarray只需要使用df.values即可,ndarray转化为DataFrame使用pd.DataFrame(array)即可。

通过提取每个站三个月15分钟粒度的上下客量数据,展示Pandas和Numpy的案例应用。

部分数据展示如下

初步分析数据发现数据有以下几个特点:

1、地铁数据的前六行是无效的,第七行给出了每个站点的名字;

2、每个车站是按照15分钟粒度统计客流,给出了进站、出战、进出站客流;

3、运营时间是从2:00-23:59,与地铁实际运营时间5:30-23:00不同,需要调整

下面获取车站名和车站编号

接下来定义两个函数,我们希望把所有的数据都写入两个文件夹,一个是”in.csv”存储每个站的进站数据,一个是”out.csv”存储每个站的出站数据

def process_not_exists(f):
    # 前五行是无用数据
    file = pd.read_excel(f, skiprows = 5, skipfooter = 3, usecols = target_col)
    arr = file.values
    # 构造一个字典先存储数据
    d_in = {}
    d_out = {}
    for i in stations_index:
    # 存储第i个车站的上下客流数据
        d_in[i] = []
        d_out[i] = []
    # 5:30 之后的数据是从excel的50行开始,处理后的数据应从43行开始
    for i in range(43,len(arr)):
        l = arr[i] # 获取第i行的数据
        # 通过条件直接筛选掉“进出站”
        if l[1] == '进站':
            # 进站处理
            for j in range(2,len(l)):
                d_in[j].append(l[j])
        if l[1] == '出站':
            # 出站处理
            for j in range(2,len(l)):
                d_out[j].append(l[j])
    in_list = [] # 存储进站数据
    out_list = [] # 存储出站数据
    for key in d_in:
        # d_in 与 d_out 的key均为车站的index
        in_list.append(d_in[key])
        out_list.append(d_out[key])
    df_in = pd.DataFrame(in_list)
    df_in.to_csv("./data/in.csv", header = True, index = None)
    df_out = pd.DataFrame(out_list)
    df_out.to_csv("./data/out.csv", header = True, index = None)
# 目标文件存在时
def process_exists(f,target_file_in,target_file_out):
    infile = pd.read_csv(target_file_in)
    outfile = pd.read_csv(target_file_out)
    in_arr = infile.values.tolist()
    out_arr = outfile.values.tolist()
    # 前五行是无用数据
    file = pd.read_excel(f, skiprows = 5, skipfooter = 3, usecols = target_col)
    arr = file.values
    # 构造一个字典先存储数据
    d_in = {}
    d_out = {}
    for i in stations_index:
    # 存储第i个车站的上下客流数据
        d_in[i] = []
        d_out[i] = []
    # 5:30 之后的数据是从excel的50行开始,处理后的数据应从43行开始
    for i in range(43,len(arr)):
        l = arr[i] # 获取第i行的数据
        # 通过条件直接筛选掉“进出站”
        if l[1] == '进站':
            # 进站处理
            for j in range(2,len(l)):
                d_in[j].append(l[j])
        if l[1] == '出站':
            # 出站处理
            for j in range(2,len(l)):
                d_out[j].append(l[j])
    in_list = [] # 存储进站数据
    out_list = [] # 存储出站数据
    for key in d_in:
        # d_in 与 d_out 的key均为车站的index
        in_list.append(d_in[key])
        out_list.append(d_out[key])
    #合并原有数据
    for i in range(len(in_arr)):
        in_arr[i] += in_list[i]
        out_arr[i] += out_list[i]
    # in_file
    df_in = pd.DataFrame(in_arr)
    df_in.to_csv("./data/in_test.csv",mode = 'r+', header = True, index = None)
    # out_file
    df_out = pd.DataFrame(out_arr)
    df_out.to_csv("./data/out_test.csv",mode = 'r+', header = True, index = None)

部分代码如下

for name in filenames:
    f = "./data/" + name
    target_file_in = "./data/in_test.csv"
    target_file_out = "./data/out_test.csv"
    # 若文件已存在
    if Path(target_file_in).exists() and Path(target_file_out).exists():
        print("exist")
        process_exists(f,target_file_in,target_file_out)
        #break
    else:
        print("not exist")
        process_not_exists(f)
print("done")
# 获取车站名和车站编号
nfile = pd.read_excel(f, skiprows = 5, skipfooter = 3, usecols = target_col)
arrt = nfile.values
stations_name = []
stations_index = []
for i in range(2,len(arrt[0])):
    stations_index.append(i)
    stations_name.append(arrt[0][i])
print(stations_name)
print(stations_index)
# 筛选掉 “合计”无用项,并设置target_col存储目标项
name = filenames[0]
f = "./data/" + name
# 前五行是无用数据
file = pd.read_excel(f, skiprows = 5, skipfooter = 3)
tarr = file.values
print(tarr[3])
test = tarr[0]
target_col = []
for i in range(len(test)):
    tmp = test[i]
    if tmp != '合计':
        target_col.append(i)
print(target_col)

创作不易 觉得有帮助请点赞关注收藏~~~

目录
打赏
0
2
2
1
145
分享
相关文章
Pandas数据应用:自然语言处理
本文介绍Pandas在自然语言处理(NLP)中的应用,涵盖数据准备、文本预处理、分词、去除停用词等常见任务,并通过代码示例详细解释。同时,针对常见的报错如`MemoryError`、`ValueError`和`KeyError`提供了解决方案。适合初学者逐步掌握Pandas与NLP结合的技巧。
89 20
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
166 100
Pandas高级数据处理:数据流式计算
Pandas数据应用:图像处理
Pandas 是一个强大的 Python 数据分析库,主要用于处理结构化数据。尽管它不是专门为图像处理设计的,但可以利用其功能辅助图像处理任务。本文介绍如何使用 Pandas 进行图像处理,包括图像读取、显示、基本操作及常见问题解决方法。通过代码案例解释如何将图像转换为 DataFrame 格式,并探讨数据类型不匹配、内存溢出和颜色通道混淆等问题的解决方案。总结中指出,虽然 Pandas 可作为辅助工具,但在实际项目中建议结合专门的图像处理库如 OpenCV 等使用。
84 18
Pandas数据应用:客户流失预测
本文介绍如何使用Pandas进行客户流失预测,涵盖数据加载、预处理、特征工程和模型训练。通过解决常见问题(如文件路径错误、编码问题、列名不一致等),确保数据分析顺利进行。特征工程中创建新特征并转换数据类型,为模型训练做准备。最后,划分训练集与测试集,选择合适的机器学习算法构建模型,并讨论数据不平衡等问题的解决方案。掌握这些技巧有助于有效应对实际工作中的复杂情况。
157 95
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
177 88
Pandas数据应用:库存管理
本文介绍Pandas在库存管理中的应用,涵盖数据读取、清洗、查询及常见报错的解决方法。通过具体代码示例,讲解如何处理多样数据来源、格式不一致、缺失值和重复数据等问题,并解决KeyError、ValueError等常见错误,帮助提高库存管理效率和准确性。
120 72
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
74 31
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
41 12
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
60 17
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
30 8