Python 轻松学会写程式笔记-第4节55-留言分析程序

data = []
count = 0
with open('reviews.txt', 'r') as f:
	for line in f:
		data.append(line)
		count += 1 # count = count + 1
		if count % 1000 == 0:
			print(len(data))
print('档案读取完了,总共有', len(data), '笔资料')


length = 0
with open('reviews.txt', 'r') as f:
	for line in f:
		length = length + len(line)
arg = length / 1000000
print(arg)


sum_len = 0
for d in data:
	sum_len += len(d) # sum_len = sum_len + len(d)
print('留言的平均长度为', sum_len/len(data))

在这里插入图片描述

建立GitHub专案

一样先到GitHub建立专案
每一次我们要写新的程式的时候 我们一定都从GitHub开始
那我到GitHub
那这个专案呢 我们把他取叫做留言分析的程式 Reviews analytics留言分析
建立
建立完之后呢 我到桌面建立新资料夹 我取一样的名字好了Reviews analytics 留言分析的意思
cd到这个资料夹裡面
好 cd进来之后呢 我们就开始执行这些指令

下载Reviews.txt档 就是我们留言的数据档
我们把他移进去 Reviews点analytics这个资料夹 这就是我们刚刚建立GitHub的资料夹
我把这个Reviews档丢进来了
但是因为Reviews.txt这个档案 容量太大了350MB 所以呢 我们就不会把他上传到GitHub
因为GitHub有限制
他每一个档案最大容量是150MB

写程序读取留言文档

我们可以开始写程式 来读取我们的留言档了
我先开一个新的档案 先存档 我存到桌面的这个Reviews analytics
叫做read好了 Read.py 记得要点py
存档

这部分的程式码 跟前面的影片 档案读取的部分是一模一样的
那我现在很快的把它打出来

with open('reviews.txt', 'r') as f:
	for line in f:

with open
那我们要读取的档案是reviews.txt档
然后r就代表read 读取模式
as f 当作f
然后这边要写一个for loop
for line in f
因为我们每一次读取的时候 是读取一行
那我就把这个变数命名成line 可以贴切一点
每次都读取一行

data = []
with open('reviews.txt', 'r') as f:
	for line in f:
		data.append(line)

那读取之后呢 我们要把它装进一个清单嘛 通常都是这样做
那我现在这个with的外面
我建立一个空清单 叫做data
那每一行我就把它加进去data裡面
我把line append进去data裡面
data是个空清单嘛

处理完读取档案的部分之后呢
我们最后就印出data的长度好了
len data 就data的长度嘛
len可以去求字串的长度 也可以去求清单的长度
看看它裡面装多少东西

在这里插入图片描述

执行(测试印出data清单)

在这里插入图片描述
python read.py
读取完了 一百万笔 我们真的有读到一百万笔的留言 那读取还蛮快的
如果我把这整个data清单印出来会不会不得了 因为它裡面装著一百万笔的留言欸 每一个留言可能很长欸 别人可能写很多内容 没关係我们一样 我们先印出来 看看到底会发生什么事情

好 执行
现在在读取 现在没有印出
哇 它把一百万笔的留言 现在疯狂的印出来 大家有没有看到 会非常的长 我们根本不可能看得完一百万笔的留言

print(data[0])

只印出第一笔(第0笔)留言

可以这样写 中括号0 就是印出 清单的 第0个位置
清单都是从0开始
我们在电脑裡面呢 数字都是从0开始
譬如说这是一个清单 那裡面有装了三个东西 这个就是第0个位置 这是第一个位置 这第二个位置
这是个清单 裡面有0 1 2 的这个 索引标籤

我们现在印出data 中括号0 等于印出第一笔的意思
你也可以想像成第0笔 反正就是 第一个数据
好 那我先印出第一笔就好了

我不要一次印一百万笔
好 我存档
还在印 可能会印很久
那我就ctrl C把它中断掉
ctrl C = 强制中断程序
KeyboardInterrupt 键盘阻断
好 我画面清掉 输入cls
⚠️注:Mac为cammand+k 或者 输入clear

再执行

执行
它现在又重新读一百万笔了 这边它印出第一笔留言 你看才光第一笔就这么长了欸

譬如说 我随便印个分行好了 然后我这边再印出第二笔 data 1
在这里插入图片描述

再执行

再执行
我只是要让你看看我们 怎么使用这个索引标籤
中括号 然后你给一个索引标籤 0啊或1 来 来取它的位置
你看 这边第一笔嘛 然后我中间印了这个一堆减号 来做区隔 视觉上的区隔
然后如果这边印出第二笔 就data1

读取文档的过程中,印出len(data)才知道读取进度

一个小小的延伸功能
刚刚在读取数据档的时候 是不是一百万笔全部读完 我们才印出一百万笔
那中间他读到多少我们都不知道 进度或状况怎么样
那这边有个for loop 就是一行一行 读我们的数据档
那是不是只要他每读一行 就把现有长度印出来 就好了
在这里插入图片描述
我就可以看得出来那个len data增加的有多快

执行

我们现在读到一千笔了 两千笔了 三千笔了 四千笔了
你知道为什么现在读的 比刚刚那个一百万笔 慢很多
我们刚刚没有印这个的时候 他大概两秒左右 就全部一百万笔读完了
可是我们现在有印进度 你看变这么慢 现在才读到十七万至十八万

为什么?
因为print很花时间
要印到cnd的萤幕上面是一个蛮花时间的功能
所以在程式的运作上面 如果希望他运作的非常的快的话 当然不应该这样子不断的print
我们现在等于进行了 一百万笔的print 所以就会很慢

那么怎么改善这个功能呢

我让他每读一千笔印一次

我这边写一个计数器count来记一个变数 来记数
刚开始是0 就一笔都还没读
然后每读一笔我就把他加1

Count加等于1记得吧 这是快写法 这个完全相当于 Count等于Count加1
要存回Count

count = 0
		count += 1 # count = count + 1

Count现在有记数之后呢

求余数=%

我要怎么样让他每读一千笔印出来
如果Count跟一千的馀数是 0
我才把你印出来
这个% 这是你第一次看到这个符号
它没有很重要 只是在Python中一种运算符号
这个就是求馀数

把Count跟一千去求馀数
如果Count是1001 你去跟一千求馀数 馀数就会等于1
如果你是1002你去跟一千求馀数 馀数就是2

那我写这个if就等于说
如果你跟一千去求馀你要是0
就表示你是一千的倍数

你如果是一千的倍数
我才把你印出来

所以呢 这边就是如果count跟一千的馀数是0 我才把你印出来
那数学上的意思 其实就是如果count是一千的倍数 我就把你印出来

此处注意错误:少写冒号
在这里插入图片描述

执行

我们现在每一千才印一次了 少印很多了 所以快很多
有没有快很多
好 印完了
这只是一个小小的延伸功能 让你体会到说 我们可以透过记数来知道我们的状态 印多少了

建立版本上传github

先把这个版本上传到GitHub好了
那我这边我就打git add read档 read.py
然后我建立版本 Git commit 减m 就是给一个版本讯息 我的版本讯息叫做add basic
基本的read.py好了
git push origin master 让他上传一下下
好 上传好了
在这里插入图片描述
那么再来呢
刚刚印出第一笔留言 印出第二笔 只是他的索引是0跟1
好 这我先不要 我全部砍掉
我不要印出留言 我这边就只有读取就好了
我这边再补充一下
档案读取完了 总共有 Len data 笔资料
档案读取完了 总共有逗点 然后印出一个整数(len data算出来是一个整数)然后再逗点 笔资料
所以这裡印了一个字串 然后印了一个整数 然后印了一个字串
中间你记得一定要有这个逗点 非常多人刚开始写的时候 很容易忘了写这种逗点
好 存档

执行

先清掉然后读取
好 每读取一千笔印出一个数字对不对
好 档案读取完了
总共有一百万笔资料
在这里插入图片描述

那么我现在给大家一个挑战

算出这一百万笔的留言的平均长度

每一个字串都有长度 那我要怎么知道这一百万笔的留言 总平均长度是多少
你可以按暂停
我自己写的:(用文档去取)
在这里插入图片描述
结果:

366.84585

老师的写法:(用清单去取和算)
在这里插入图片描述

一定要用到for loop来一笔一笔读data裡面的资料

然后你再想想看怎么样算出他的平均长度
好 那么我来写给你看
我知道对初学者来讲 第一次写这种求平均长度 是满有挑战性的 我完全可以理解
你用看的反而会学很快

For d in data
每一笔资料我就把你叫做d
data是我们的清单 装著一百万笔的字串 每一笔字串就是一个留言
那我现在把每一笔资料呢 命名为d
所以每一个d是一个字串 那么字串可以求长度
我们前几个影片有讲 字串可以当成像清单一样 我们可以用len去求他的长度
好 每一笔留言我都可以用len d 来求你的长度
那就等于说 我有所有的留言的长度了
那我有所有留言的长度 我要怎么知道他们的平均?
加总
Sum就是加总 Sum len 刚开始先给他0 然后每一笔留言的长度 我都把你加上去

sum_len += len(d) 
# sum_len = sum_len + len(d)

加等于
现在我们就在把每一笔留言的长度
跟目前的总数加在一起
然后存回目前的总数

读第二笔的时候 我们又把他的长度算出来 留言的长度算出来 然后呢 加到目前的总数 再存回去
读第三笔 把他的长度算出来 加上目前的总数再存回去
所以这个sum len 就会一直累积每一笔留言的长度 一直加一直加 他越来越大

那我们把他印出来好了 看看他到底 变化的怎么样
每一次加上去 我就把他(sum len)印出来

执行

他(sum len)变得很夸张大 因为我们把每一笔留言的长度 都加起来 所以我们长度会变成非常夸张大 而且他要印很久 因为他要印一百万笔

平均不就是 把总长除以你有几笔留言 几笔留言就len data 就一百万笔
总长度除以data的长度 每一笔留言的平均长度
储存

再执行

所以全部加总原来这么大 总共有3.6亿个字
这一百万笔资料裡面 总共有3.6亿个字
留言的平均长度为366个字

上传到github

我们先把他上传到GitHub 成为我们的第二个版本
Git add read.py
Git commit 减m 这个版本叫做calc 就计算的意思 calculate就计算 计算avg平均长度 Avg length of reviews
git push origin master
版本讯息你都不用跟我一样 你可以自由发挥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值