各位朋友们,小编在这里要分享,利用python进行数据分析 github 利用python进行数据分析案例,让我们开始吧!
文章目录
背景问题一及其解答问题解答总程序框图子程序1子程序2子程序3数据流图程序代码问题二及其解答问题解答总程序框图子程序1子程序2子程序3数据流图程序代码知识点总结
背景
《命运》和《寻梦》都是著名科幻作家倪匡的科幻作品PHP与Python:哪个更快上手?。这里给出一个《命运》和《寻梦》的网络版本,文件名为“命运-网络版.txt”和“寻梦-网络版.txt”。
问题一及其解答
问题
请编写程序,对这两个文本中出现的字符进行统计,字符与出现次数之间用冒号:分隔,将两个文件前 100 个最常用字符分别输出保存到“命运-字符统计.txt”和“寻梦-字符统计.txt”文件中,该文件要求采用 CSV 格式存储,参考格式如下(注意,不统计回车字符):
命:90, 运:80, 寻:70, 梦:60(略)
解答
总程序框图
Created with Raphaël 2.2.0 开始 子程序1:统计文件中字符个数 子程序2:对字符个数进行排序 子程序3:将排序后的字符保存在文件中 结束
子程序1
Created with Raphaël 2.2.0 开始子程序1 以只读方式打开文件, 并保存为行文本列表lines 初始化字典stat 循环遍历行文本列表lines 的元素——字符串line, 是否到达行文本lines末尾 进入子程序2 循环遍历字符串line的 元素——字符elm,是否 达到字符串line的末尾 移动到行文本列表lines的 下一个字符串元素line elm是否为字典的键 将字典中键elm的值加1 移动到字符串line的下一个键elm 将字典中键elm的值设置为0 yes no yes no yes no
子程序2
Created with Raphaël 2.2.0 开始子程序2 删除字典键stat为“\n”的键值对 利用list函数将字典stat转化成列表ls0 利用list方法对列表ls0进行排序 循环遍历列表ls0 的元素——元组(k,v), 是否达到 列表ls0的末尾 进入子程序3 格式化字符串k:v 将字符串k:v添加到列表ls中 移动到列表ls0的下一个元组(k,v) yes no
子程序3
Created with Raphaël 2.2.0 开始子程序3 以只写方式打开文件 在列表ls的元素间加入逗号 并将列表ls写入文件 结束总程序
数据流图
文本 txt 读入文本 txt 行文本列表 lines 将列表 lines转化 成字符串 line 字符串 line 字符串 line 将字符串 line转化 成字符 elm 字符 elm 对字符 elm进行统计 并保存为字典 stat 字典 stat 字典 stat 利用 list函数将字典 stat转化成列表 ls0 列表 ls0 对列表 ls0进行格式化 格式化后的列表 ls0 格式化后的列表 ls0 在列表 ls0元素间 插入逗号 改变格式后 的列表 ls0 将列表 ls0保存到 文本 txt 文本 txt
程序代码
with open("寻梦-网络版.txt",'r',encoding="UTF-8") as fi:
lines = fi.readlines()
stat = {}
for line in lines:
for elm in line:
## if elm in stat:
## stat[elm] +=1
## else:
## stat[elm] = 0
stat[elm] = (elm,0)+1
del stat['\n']
ls0 = list(stat.items())
(key = lambda x:x[1], reverse = True)
ls = []
##for i in range(100):
## k,v = ls0[i]
## ls.append("{}:{}".format(k,v))
for (k,v) in ls0:
## k,v = ls0[i]
ls.append("{}:{}".format(k,v))
with open("寻梦-字符统计.txt",'w',encoding='UTF-8') as fo:
fo.writelines(",".join(ls[0:100]))
print(",".join(ls[0:10]))
问题二及其解答
问题
请编写程序,对“命运-字符统计.txt”和“寻梦-字符统计.txt”中出现的相同字符打印输出。“相同字符.txt”文件中,字符间使用逗号分隔。
解答
总程序框图
Created with Raphaël 2.2.0 开始 子程序1: 读取文本“命运-字符统计.txt” 和“寻梦-字符统计.txt”, 并保存为行列表ls和ls1 子程序2: 利用函数GetWordList() 提取列表ls和ls1中 的字符,并保存在ls2和ls3中。 子程序3: 查找ls2和ls3列表中的相同字符, 并将相同字符存储在ls4中。 结束
子程序1
Created with Raphaël 2.2.0 开始子程序1 以只读方式打开文件 “命运-字符统计.txt”和“命运-字符统计.txt”, 并保存为行文本列表ls和ls1 进入子程序2
子程序2
Created with Raphaël 2.2.0 开始子程序2 输入列表InputList,截取长度length 初始化列表WordList 循环变量i是否小于 截取长度length 将标记flag设置为True 循环变量j是否小于列表 InputList[i]长度 InputList[i][j]的元素 ——字符是否为“:” 将标记flag设置为False 标记flag是否为True 将WordList的元素 ——字符增加到列表中 移动到输入字符串InputList[i] 的下一个元素 移动到输入列表InputList 的下一个元素 输出包含字符的列表WordList 进入子程序3 yes no yes no yes no yes no
子程序3
Created with Raphaël 2.2.0 开始子程序3 循环遍历列表 ls2的元素 ——字符char, 是否达到列表 ls2的末尾 结束 将char增加到列表ls4中 移动到列表ls3的下一个元素 yes no
数据流图
文本 txt 读入文本 txt, 并以逗号进行分割 列表 ls,ls1 利用函数 GetWordList 将输入列表 InputList 转化成 WordList 列表 WordList 列表 WordList 收集相同字符 并保存在列表 ls4中 列表 ls4 将列表
原文地址1:https://blog.csdn.net/yimsdn/article/details/100929280
python手册 http://www.78tp.com/python/