gpt4 book ai didi

python文本数据处理学习笔记详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python文本数据处理学习笔记详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

最近越发感觉到限制我对python运用、以及读懂别人代码的地方,大多是在于对数据的处理能力.

其实编程本质上就是数据处理,怎么把文本数据、图像数据,通过python读入、切分等,变成一个n维矩阵,然后再带入别人的模型,bingo~跑出来一个结果。结果当然也是一个矩阵或向量的形式.

所以说,之所以对很多模型、代码束手无策,其实还是没有掌握好数据处理的“屠龙宝刀”,无法对海量数据进行“庖丁解牛”般的处理。因此,我想以一个别人代码中的一段为例,仔细琢磨文本数据处理的精妙之处,争取能够加深对这方面的运用与理解.

1) 问题描述 。

数据:某个区域181天内的访客数据,格式如下,第一列代表访客的名称,第二列代表这位访客在181天内到达这片区域的时刻:

python文本数据处理学习笔记详解

目的:将访客数据进行统计,并时间离散化,按照天 /周/小时处理为72624的三维矩阵。 也就是说,矩阵中的每一个值,代表该区域 周x、第几周、几点 的到访人数,如 [1,5,19]=100,代表第5周的周一晚上7点的人数为100.

2)难点 。

当然是对我的难点.

2.1)怎么按行统计 。

2.2)怎么进行时间离散化(存为天、周、时刻的矩阵) 。

3)代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import time
import numpy as np
import sys
import datetime
import pandas as pd
import os
#用字典查询代替类型转换,可以减少一部分计算时间
date2position = {}
datestr2dateint = {}
str2int = {}
for i in range ( 182 ):
  date = datetime.date(day = 1 , month = 10 , year = 2018 ) + datetime.timedelta(days = i)
  #print(i,":",date)
  date_int = int (date.__str__().replace( "-" , ""))
  date2position[date_int] = [i % 7 , i / / 7 ]
  datestr2dateint[ str (date_int)] = date_int
#print(datestr2dateint)
#
for i in range ( 24 ):
  str2int[ str (i).zfill( 2 )] = i
f = open ( "d:\baidubigdata19-urfc-master\\urbanregionfunctionclassification-master\data\\train_visit\\000000_008.txt" )
#table = pd.read_csv(f, header=none,error_bad_lines=false)
table = pd.read_csv(f, header = none,sep = '\t' )
 
#print(table.shape)
#print(table.ix[1])
strings = table[ 1 ]
#print(strings)
init = np.zeros(( 7 , 26 , 24 ))
for string in strings:
  temp = []
  for item in string.split( ',' ):
  temp.append([item[ 0 : 8 ], item[ 9 :].split( "|" )])
  for date, visit_lst in temp:
  # x - 第几周
  # y - 第几天
  # z - 几点钟
  # value - 到访的总人数
  # print(visit_lst)
  print (date)
  x, y = date2position[datestr2dateint[date]]
  for visit in visit_lst: # 统计到访的总人数
   init[x][y][str2int[visit]] + = 1
  #print(init[x][y][str2int[visit]])```

3.1)创建字典,时间离散化,节省时间 。

此处创建了三个字典,让我们看一下代码实现以及打印结果:

?
1
2
3
4
5
6
7
8
9
10
11
date2position = {}
datestr2dateint = {}
str2int = {}
for i in range ( 182 ):
  date = datetime.date(day = 1 , month = 10 , year = 2018 ) + datetime.timedelta(days = i)
  #print(i,":",date)
  date_int = int (date.__str__().replace( "-" , ""))
  date2position[date_int] = [i % 7 , i / / 7 ]
  datestr2dateint[ str (date_int)] = date_int
for i in range ( 24 ):
  str2int[ str (i).zfill( 2 )] = i

打印一下 date2position:

python文本数据处理学习笔记详解

打印一下 datestr2dateint:

python文本数据处理学习笔记详解

打印str2int:

python文本数据处理学习笔记详解

可以看出,datestr2dateint是将str的日期,转换为了int的日期。 而date2position 才是计算出的每一个具体的日期,代表了第几周、第几天。 str2int代表了一天中的24个时刻.

3.2)读取文件,按行获取字符串 。

注意到文本的分隔符为\t(区分用户名与到访信息的分割),于是采用 。

?
1
2
3
f = open ( "d:\baidubigdata19-urfc-master\\urbanregionfunctionclassification-master\data\\train_visit\\000000_008.txt" )
#table = pd.read_csv(f, header=none,error_bad_lines=false)
table = pd.read_csv(f, header = none,sep = '\t' )

然后用strings读取到访信息,也就是table的第二列:

?
1
strings = table[ 1 ]

3.3)切分字符串 。

首先,strings为:

python文本数据处理学习笔记详解

可以看到每一行string,为一个用户的到访记录,循环读取。其中,不同日期的到访是用“,”隔开,故要使用:

?
1
2
3
for string in strings:
  temp = []
  for item in string.split( ',' ):

item就可以分开每一个日期的到访记录了:

python文本数据处理学习笔记详解

其后,使用temp列表,每一行存储日期和时刻。 如第一个item为 20181221&09|10|11|12|13|14|15 日期为 item[0:8], 时刻之间使用分隔符“|”隔开,故可以通过item[9:].split("|")得到.

?
1
temp.append([item[ 0 : 8 ], item[ 9 :].split( "|" )])

打印一下temp为:

python文本数据处理学习笔记详解

所以需要用两个数据分别存储日期,以及时刻。 首先用来转换成 周、天、时刻的72624矩阵(根据前面的转换函数) 其后根据这个矩阵,统计每一个位置的访客数量 。

?
1
2
3
4
5
6
7
8
9
10
for date, visit_lst in temp:
  # x - 第几周
  # y - 第几天
  # z - 几点钟
  # value - 到访的总人数
  # print(visit_lst)
  #print(date)
  x, y = date2position[datestr2dateint[date]]
  for visit in visit_lst: # 统计到访的总人数
   init[x][y][str2int[visit]] + = 1

这一段代码很短,但着实是整个时间离散化实现的精髓所在.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/weixin_37659245/article/details/90410445 。

最后此篇关于python文本数据处理学习笔记详解的文章就讲到这里了,如果你想了解更多关于python文本数据处理学习笔记详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com