- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python文本数据处理学习笔记详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近越发感觉到限制我对python运用、以及读懂别人代码的地方,大多是在于对数据的处理能力.
其实编程本质上就是数据处理,怎么把文本数据、图像数据,通过python读入、切分等,变成一个n维矩阵,然后再带入别人的模型,bingo~跑出来一个结果。结果当然也是一个矩阵或向量的形式.
所以说,之所以对很多模型、代码束手无策,其实还是没有掌握好数据处理的“屠龙宝刀”,无法对海量数据进行“庖丁解牛”般的处理。因此,我想以一个别人代码中的一段为例,仔细琢磨文本数据处理的精妙之处,争取能够加深对这方面的运用与理解.
1) 问题描述 。
数据:某个区域181天内的访客数据,格式如下,第一列代表访客的名称,第二列代表这位访客在181天内到达这片区域的时刻:
目的:将访客数据进行统计,并时间离散化,按照天 /周/小时处理为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:
打印一下 datestr2dateint:
打印str2int:
可以看出,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为:
可以看到每一行string,为一个用户的到访记录,循环读取。其中,不同日期的到访是用“,”隔开,故要使用:
1
2
3
|
for
string
in
strings:
temp
=
[]
for
item
in
string.split(
','
):
|
item就可以分开每一个日期的到访记录了:
其后,使用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为:
所以需要用两个数据分别存储日期,以及时刻。 首先用来转换成 周、天、时刻的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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
解释 我的应用程序基本上使用带有代表建筑物的多边形叠加层的 map View ,以及注释。为此,它导入了一个名为 Annotation 的自定义类,该类在点击注释时处理弹出详细信息,这意味着它存储建筑
我有一个数据处理问题,我想计算两支球队在不同比赛中的进球数差异。数据如下所示: matchId teamId eventSec 1 2799331 6718 443.55984
如下所示: ? 1
我想知道 cocoa 是否有默认的数据存储方式。如果是,那是什么?我的意思是 Rails 默认使用 sqlite... 此外,我正在寻找有关如何使用它的教程...例如获取数据并将其显示到 ListVi
我正在使用 HTML5 创建在线游戏。我将使用 JSON 字符串通过 Websockets 通信数据,因此典型的字符串将包含被调用的操作以及随之而来的数据: {action: "chat", user
我需要按特定列对一组 csv 行进行分组,并对每个组进行一些处理。 JavaRDD lines = sc.textFile ("somefile
我有一个情况: 基本上有 3 个模块,分别命名为“A”、“B”、“C”。每个模块都涉及多线程。 模块“A”获取高速数据(20ms)并发送。模块“B”的一个线程启动。 模块“B”提取相关数据并执行一些位
我正在处理有关城镇和城镇内区域的 MySQL 数据库中的一些数据。 数据库看起来像这样 ID | NAME 1 | Manchester 2 | Manchester/North 3 | Man
当我注册用户时,我得到一个状态代码 200 和一个 token :“”返回 JSON。如果用户已经存在,那么我会得到状态代码 200 和 html 响应而不是 JSON。我应该如何处理这个问题。提前致
我有一个应用程序,我从网络上下载大量资源,并对每个资源进行一些处理。我不希望这项工作发生在主线程上,但它非常轻量级且优先级较低,因此所有这些工作都可以真正发生在同一个共享工作线程上。这似乎是一件好事,
我目前正在与一家小公司合作,该公司将其所有应用程序数据存储在 AWS Redshift 集群中。我的任务是对该 Redshift 集群中的数据进行一些数据处理和机器学习。 我需要做的第一个任务是根据一
简介 有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是
1.数组的处理: 1.1 数组的创建和初始化: 1.arrary()函数创建数组,默认情况下0元素是数组的第一个元素, count()和sizeof()函数获得数
我正在尝试将 CKEditor 与 AngularJS 结合使用,用于具有数据绑定(bind)的 WYSIWYG 编辑器,一切似乎都运行良好。极端的可配置性对我们的需求匹配有很大帮助。 我们现在面临表
我正在对负样本和正样本进行文本二元分类任务,我想包括以下所有内容: 处理数据..(例如标记化) 特征选择,例如 Chi2 应用随机投影,因为我有一个大型稀疏矩阵(n_samples:974,n_fea
数据与我在 Pandas 系列: data = ["1. stock1 (1991)", "3. stock13 (1993)", "5. stock19 (1999)", "89. stock
1.字符串的定义与显示 定义:通过””,''来标志 显示:echo()和print(),但print()具有返回值值,1,而echo()没有,但echo比print()要快,
1.正则表达式基础知识 含义:由普通字符和(a-z)和一些特殊字符组成的字符串模式 功能:有效性验证。 替换文本。 从一个字符串提取一个子字符串。&n
我想知道是否可以在我的 Cost Explorer 中发现这个成本背后的资源,按使用类型分组我可以看到它是数据处理字节,但我不知道哪个资源会消耗这个数量数据的。知道如何在 CloudWatch 上发现
我有一个 Json 字符串。我想从该 Json 字符串中获取值。 这是我的 json 字符串{“纬度”:“22.5712854”},{“经度”:“88.4266847”} 我只需要使用 TSQL 查询
我是一名优秀的程序员,十分优秀!