学习资源是中国大学MOOC 嵩天教授的Python语言程序设计
链接:https://www.icourse163.org/learn/BIT-268001?tid=1207014257#/learn/announce
链接:https://www.bilibili.com/video/av77405880?from=search&;;seid=13707628325074614556
#从一个数据到一组数据
数据维度是数据的组织形式
一组数据的的维度
一维数据
由对等关系的有序或无序数据构成,采用线性方式组织
-对应列表,数据和集合等概念
二维数据
由多个一维数据构成,是一维数据的组合形式
-表示是典型的二维数据
-其中,表头是二维数据的一部分,也可以是之外的一部分
数据的操作周期
存储 表示 操作
数据存储 (存储格式)
数据表示 (数据类型)
数据操作 (操作方式)
一维数据的表示
如果数据间有序:使用列表类型
ls = [3.1398,3.1349,3.141]
-列表类型可以表达一维有序数据
如果数据间
st = {}
-集合类型可以表达一维无序数据
一维数据的存储
存储方式一:空格分隔
中国 美国 日本 德国 法国 意大利
-使用一个或多个空格分隔进行存储,不换行
-缺点:数据中不能存在空格
存储方式二:逗号分隔
中国,美国,日本,德国
存储方式三:其他分隔
一位数据的操作
数据的读入处理
从空格分隔的文件中读入数据
中国 美国 日本 德国 法国 英国 意大利
txt = open(fname).read()
ls = txt.split()
f.close
>>>ls
['中国','美国','日本','德国','法国','英国','意大利']
一维数据的写入处理
采用空格分隔方式将数据写入文件
ls = ['中国','美国','日本','德国','法国','英国','意大利']
f = open(fname,'w')
f.write(''.join(ls))
f.close()
二维数据的格式化和处理
二维数据的表示
二维数据一般是表格形式,列表类型表达二维数据,列表里的每个元素也是列表
[[],[],[]]
-使用两层for循环遍历每个元素
-外层列表种每个元素可以对应一行,也可以对应一列
csv格式与二维数据存储
CSV:comma-separated values
-国际通用的一二维数据存储格式,一般.csv扩展名
-每行一个一维数据,采用逗号分隔,无空行
-Excel和一般编辑软件都可以读入或另存为csv文件
-如果某个元素缺失,逗号仍要保留
-二维数据的表头可以作为数据存储,也可以另行存储
-逗号采用英文半角符号,且无空格
-按行或者按列存都可以,具体由程序决定
-一般索引习惯:ls[row][column],先行后列
二维数据的读入处理
从csv格式的文件中读入数据
fo = open(fname)
ls = []
for line in fo:
line = line.replace('\n','')
fo.close()
将数据写入csv格式的文件
ls = [[],[],[]]
f = open(fname.'w')
for item in ls:
f.write(',',join(item) + '\n')
f.close()
如何逐一遍历处理
ls = [[],[]]
for row in ls:
for coloum in row:
高维数据
一般使用字典
#wordcloud
wordcloud库把词云当作一个WordCloud对象
-wordcloud.WordCloud()代表一个文本对应的词云
-可以根据文本中词语出现的频率等参数绘制词云
-绘制词云的形状、尺寸和颜色都可以设定
w = wordcloud.WordCloud()
-参数-描述
width指定词云对象生成图片的宽度,默认为400像素
height指定词云对象生成图片的高度,默认为200像素
min_font_size指定词云中字体的最小字号,默认4号
max_font_size指定词云中字体的最大字号,根据高度自动调整
font_step指定词云中字体字号的步进间隔,默认为1
font_path指定字体文件的路径,默认None
max_words指定词云显示的最大单词数量,默认200
stop_words指定词云的排除词列表,即不显示的单词列表(给定一个集合类型{})
mask指定词云形状,默认为长方形,需要引用imread()函数
>>>from scipy.misc import imread
>>>mk = imread('pic.png')
>>>w = wordcloud.WordCloud(mask = mk)
background_clolr指定词云图片的背景颜色,默认为黑色
import wordcloud
txt = 'life is short,you need python'
英文文本:
import wordcloud
w = wordcloud.WordCloud(background_color = 'white')
w.generate(txt)
w.to_file('pywordcloud.png')
中文文本:
import jieba
import wordcloud
txt = '程序设计语言是计算机能够理解和识别用户操作意图的一种交互体系,它按照特定规则组织计算机指令,使计算机能够自动进行各种运算处理'
w = wordcloud.WordCloud(width = 1000,height = 700,font_path = 'msyh.ttc')
w.generate(''.join(jieba.lcut(txt)))
w.to_file('pywordcloud.png')
-以WordCloud对象为基础
-配置参数、加载文件、输出文本
方法描述
w.generate(txt)向WordCloud对象w中加载文本txt,
w.to_file(filename) 将词云输出作为图像文件,.png或.jpg格式
setup1:配置对象参数
setup2:加载词云文本
setup3:输出词云文件
import wordcloud
w = wordcloud.WordCloud()
c.generate('wordcloud by python')
c.to_file('pywordcloud.png')
1.分隔:以空格分隔单词
2.统计:单词出现次数并过滤
3.字体:根据统计配置自豪
4.布局:颜色环境尺
#程序设计方法学
体育竞技分析
IPO:
-需求:差距为几何?如何科学分析体育竞技比赛?
-输入:球员的水平
-输出:可预测的比赛成绩
模拟N场比赛
-计算思维:抽象+自动化
-模拟:抽象比赛过程+自动化执行N场比赛
-当N越大时,比赛结果分析会越科学
比赛规则:
-双人击球比赛:A & B ,回合制,5局3胜
-开始时一方先发球,直至判分,接下来胜者发球
-球员只能在发球局得分,15分胜一局
解决复杂问题的有效方式
-将一个总问题表达为若干个小问题组成的形式
-使用同样方法进一步分解小问题
-直至,小问题可以计算机确定明了的解决
自顶向下设计:
改善居住条件 -> 改善环境 -> 种树
盖楼 -> 设计等等
修马路
自底向上执行:
逐步组建复杂系统的有效测试方法
-分单元测试,逐步组装
-按照自顶向下相反的路径操作
-直至,系统各部分以组装的思路都经过测试和验证
python程序设计思维
-计算思维与程序设计
第三种人类思维特征
一 逻辑思维 推理和演绎 数学为代表
二 实证思维 实验和验证 物理为代表
三 计算思维 设计和构造 计算机为代表
抽象和自动化
-计算思维:Computational Thinking
-抽象问题的计算过程,利用计算机自动化求解
-计算思维是基于计算机的思维方式
-计算生态与python语言
开源运动
GNU 大教堂模式
linux 集市模式
计算生态
开源思想深入演化和发展,形成了计算生态
计算生态以开源项目为组织形式,充分利用‘公式原则’和‘社会利他’组织人员,在竞争发展、相互依存和迅速更迭中完成信息技术的更新换代,形成了技术的自我演化路径。
没有顶层设计、以功能为单位、具备三个特点
-竞争发展
-相互依存
-迅速更迭
python语言与计算生态
-以开源项目为代表的大量第三方库
-python语言提供 > 15万哥第三方库
-库的建设经过野蛮生长和自然选择
同一个功能,python语言2个以上第三方库相互竞争
-库之间相互关联使用,依存发展
python库之间分布广泛、逐级封装
-社区庞大,新技术更迭迅速
API != 生态(经过设计的顶层设计产品)
-创新:跟随创新、集成创新、原视创新
-加速科技类应用创新的重要支撑
-发展科技产品商业价值的重要模式
-国家科技体系安全和稳固的基础
计算生态的运用
刀耕火种 -> 站在巨人的肩膀上
-编程的起点不是算法而是系统
-编程如同搭积木,利用计算生态为主要模式
-变成的目标是快速解决问题
-用户体验与软件产品
用户体验
实现功能 -> 关注体验
-用户体验指用户对产品建立的主观感受和认识
-关心功能实现,更要关心用户体验,才能做出好产品
-编程不是手段,只是目的,编程最终为人类服务
提高用户体验的方法:
方法1:进展展示
-如果程序需要计算时间,可能产生等待,请增加进度展示
-如果程序有若干步骤,需要提示用户,请增加进度展示
-如果程序可能存在大量次数的循环,请增加进度展示
方法2:异常处理
-当获得用户输入,对合规性需要检查,需要异常处理
-当读写文件时,对结果进行判断,需要异常处理
-当进行输入输出时,对运算结果进行判断,需要异常处理
其它类方法
-打印输出:特定位置,输出程序运行的过程信息
-日志文件:对程序异常及用户使用进行定期记录
-帮助信息:给用户多种方式提供帮助信息
软件程序 -> 软件产品
用户体验是程序到产品的关键环节
-基本的程序设计模式
IPO
-I:input 输入,程序的输入
-p:process 处理,程序的主要逻辑
-o:output 输出,程序的输出
从IPO开始...
-确定IPO:明确计算部分及功能边界
-编写程序:将计算求解的设计变成现实
-程序调试:确保程序按照正确逻辑能够正确运行
自顶向下设计
自底向上执行
模块化设计
-通过函数或对象封装将程序划分为模块及模块间的表达
-具体包括:主程序、子程序和子程序间的关系
-分而治之:一种分而治之,分层抽象,体系化的设计思路
-紧耦合:两个部分之间交流很多,无法独立存在
-松耦合:两个部分之间交流较少,可以独立存在
配置化设计
-程序引擎 + 配置文件:程序执行和配置分离,将可选参数配置化
-将程序开发变成配置文件编写,扩展功能而不修改程序
-关键在于接口设计,清晰明了,灵活可拓展
从应用需求到软件产品
-1产品定义:对应用需求充分理解和明确定义 产品定义,而不仅是功能定义,要考虑商业模式
-2系统架构:以系统方式思考产品的技术实现 系统架构,关注数据流、魔魁啊话、体系架构
-3设计与实现:结合架构完成关键设计及系统实现 结合可拓展性、灵活性等进行设计优化
-4用户体验:从用户角度思考应用效果 用户至上,体验优先,以用户为中心
python第三方库安装
-看见更大的python世界
> https://pypi.org
-PyPI:Python Package Index
-PSF维护的展示全球Python计算生态的主站
-学会检索并利用PyPI,找到合适的第三方库开发程序
实例:开发与区块链相关的程序
-第一步:在pypi.org搜索blockchain
-第二步:挑选适合开发目标的第三方库作为基础
-第三步:完成自己需要的功能
方法1:pip命令
方法2:集成安装方法
方法3:文件安装方法
-第三方库的pip安装方法
D:\>pip install
-安装指定的第三方库
D:\>pip install -U
-使用-U标签更新已安装的指定第三方库
D:\>pip uninstall
-卸载指定的第三方库
D:\>pip download
-下载但不安装指定的第三方库
D:\>pip show
-列出某个指定第三方库的详细信息
D:\>pip search
-根据关键词在名称和介绍中搜索第三方库
D:\>pip list
-列出已经安装的第三方库
-第三方库的集成安装方法
Anacondahttps://www.continuum.io
-支持近800个第三方库
-包含多个主流工具
-适合数据计算领域开发
-第三方库的文件安装方法
-某些第三方库pip下载后,需要编译再安装
-如果操作系统没有编译环境,则能下载但不能安装
-可以直接下载编译后的版本安装吗?
UCI页面
http://www.lfd.uci.edu/~gohlke/pythonlibs
os库的基本使用
os库提供通用的、基本的操作系统交互功能
Windows、MacOS、Linux
-os库是python标准库,包含几百个函数
-常用路径操作、进程管理、环境参数等几类
-路径操作: os.path子库,处理文件路径及信息
以path为入口,用于操作和处理文件路径
import os.path
import os.path as op
函数描述
os.path.abspath(path)返回path再当前系统中的绝对路径
os.path.normpath(path)归一化path的表示形式,统一用\\分隔路径
os.path.relpath(path)返回当前程序与文件之间的相对路径(relative path)
os.path.dirname(path)返回path中的目录名称
os.path.basename(path)返回path中最后的文件名称
os.path.join(path,*paths)组合path与paths,返回一个路径字符串
os.path.exists(path)判断path对应文件或目录是否存在,返回True或False
os.path.isfile(path)判断path所对应是否为已存在的文件,返回True或False
os.path.isdir(path)判断path所对应是否为已存在目录,返回True或False
os.path.getatime(path)返回path对应文件或目录上一次的访问时间acess
os.path.getmtime(path)返回path所对应文件或目录最近一次的修改时间modify
os.path.getctime(path)返回path对应文件或目录的创建时间create
os.path.getsize(path)返回path对应文件的大小,以字节为单位
-进程管理: 启动系统中其他程序
os.system(command)
os.system('程序路径' '文件路径')
-环境参数: 获得系统软硬件信息等环境参数
os.chdir(path)修改当前程序操作的路径
os.getcwd()返回程序的当前路径
os.getlogin()获得当前系统登陆用户名称
os.cpu_count()获得当前系统的cpu数量
os.urandom(n)获得n个字节长度的随机字符串,通常用于加解密运算
第三方库自动安装脚本
-需求:批量安装第三方库需要人工干预。