利用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)

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

相关文章
|
分布式计算 数据可视化 数据挖掘
Pandas数据应用:社交媒体分析
本文介绍如何使用Pandas进行社交媒体数据分析,涵盖数据获取、预处理、探索性分析和建模的完整流程。通过API获取数据并转换为DataFrame格式,处理缺失值和数据类型转换问题。利用Matplotlib等库进行可视化,展示不同类型帖子的数量分布。针对大规模数据集提供内存优化方案,并结合TextBlob进行情感分析。最后总结常见问题及解决方案,帮助读者掌握Pandas在社交媒体数据分析中的应用。
475 96
|
数据采集 存储 算法
Pandas数据应用:市场篮子分析
市场篮子分析是一种用于发现商品间关联关系的数据挖掘技术,广泛应用于零售业。Pandas作为强大的数据分析库,在此领域具有显著优势。本文介绍了市场篮子分析的基础概念,如事务、项集、支持度、置信度和提升度,并探讨了数据预处理、算法选择、参数设置及结果解释中的常见问题与解决方案,帮助用户更好地进行市场篮子分析,为企业决策提供支持。
407 29
|
数据采集 机器学习/深度学习 数据挖掘
利用Beautiful Soup和Pandas进行网页数据抓取与清洗处理实战
本文通过一个实战案例,介绍如何使用Python中的Beautiful Soup库抓取网页数据,并用Pandas进行清洗和处理。首先,确保安装了requests、beautifulsoup4和pandas库。接着,通过requests获取HTML内容,使用Beautiful Soup解析并提取新闻标题、发布时间和正文。然后,利用Pandas对数据进行清洗,包括去除多余空格、替换特殊字符、删除无效数据等。最后,根据需求进行数据处理(如过滤关键词)并保存为CSV或Excel文件。这个案例适合初学者和有一定经验的用户,帮助快速掌握这两个强大的工具。
658 3
|
数据采集 数据挖掘 数据处理
Pandas数据应用:金融数据分析
本文介绍如何使用Pandas进行金融数据分析,涵盖数据导入、清洗、转换等基础操作。通过处理缺失值、重复值及数据类型不匹配等问题,结合时间序列分析和大规模数据处理技巧,帮助读者掌握常见问题的解决方案。案例分析展示了计算每日收益率并绘制图表的具体步骤。
539 14
|
存储 数据采集 数据挖掘
Pandas数据应用:用户行为分析
本文介绍了如何使用Pandas进行用户行为分析,涵盖从基础概念到实际应用的多个方面。首先简要介绍了Pandas的安装与基本功能,接着详细讲解了数据加载、初步探索及常见问题(如数据缺失、重复记录和时间戳格式不统一)的处理方法。随后探讨了用户活跃度和路径分析等模式挖掘技巧,并总结了常见报错及避免措施。通过掌握这些内容,读者可以更高效地进行用户行为分析,提升产品设计和用户体验。
584 8
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
数据可视化 Python
Pandas 相关性分析
Pandas 相关性分析
459 1
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
9月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
719 1
|
9月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
423 0

热门文章

最新文章