学习周期:6.3-6.8
学习时长:
6.4 -写作业,请教同事
6.5 1h40m(08:50-09:30, 22:40-23:00) -chap10
6.6 -写作业(学习特征交叉、特征离散化)
6.7 -0h PDPDPD
6.8 1h(08:50-09:30, 23:20-23:40) -chap10
6.10 5h(11:00-14:00,21:30-22:30) -chap10 re
6.11 2h(08:50-09:40,20:00-21:00) -chap10 re
6.12 2h40m (08:50-09:30, 15:30-17:00) -chap11
学习内容:
- 一句话心得:在做作业的过程中培养了自己的动手能力,吊炸天的是pandas竟然有数据透视表的功能,pd.pivot_table()。真实碉堡了!
- 《Python基础教程》看到chap11,后面的知识和数据处理无关,另需要补充数据处理相关的知识。这部分打算通过查看同事的代码和学习机器学习相关模型的代码来积累和记录。
和同事交流的收获(SM/LB)
- 如何在pycharm同时运行多个实例/session(脚本)
pycharm默认在当前窗口中运行脚本,如果当前窗口的脚本还在执行过程中,则会生成新的窗口。因此可以通过人为设定 time.sleep(second) 指令来控制脚本的输出时间,进而生成新的session,然后在不同session的窗口下运行不同的脚本。如下图: - pandas有很多丰富的内置函数,但前提是需要把数据读到内存中,适合处理小量采样数据,大数据的数据预处理特征需要通过sql,或编写UDF 进行分布式处理。数据集可存在本地的csv中。
- 一般在解释器中进行命令输入,可记录每次运算的结果。推荐ipython,通过history命令整理代码。
- 常用的算法包 sklearn、xgboost的函数原始代码可以通过查看相应的git项目来学习源码。
Chap10
- 模块使用:
- 一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。
- 如上,我们可以看到if name == ‘main‘相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习惯。由于模块之间相互引用,不同模块可能有这样的定义,而程序入口只有一个。到底哪个程序入口被选中,这取决于name的值。
- if name == ‘main‘的意思是:当.py文件被直接运行时,if name == ‘main‘之下的代码块将被运行;
- 当.py文件以模块形式被导入时,if name == ‘main‘之下的代码块不被运行。
- https://blog.youkuaiyun.com/yjk13703623757/article/details/77918633
if __name__ == '__main__'
Chap 10.1
- set环境变量:
- import sys
- sys.path.append(‘c:/python’)
Chap 10.2 探究模块
- copy 和 deepcopy的区别:https://blog.youkuaiyun.com/qq_32907349/article/details/52190796
- import copy 和 from copy import * 的区别:http://www.runoob.com/note/26325
- import 导入模块,每次使用模块中的函数都要是定是哪个模块。
- from…import * 导入模块,每次使用模块中的函数,直接使用函数就可以了;注因为已经知道该函数是那个模块中的了。
- dir(copy)
- copy.all
- 在编写模块的时候,像设置all这样的技术是相当有用的。因为模块中可能会有一大堆其他程序不需要或不想要的变量、函数和类,all会“客气地”将它们过滤出去。如果没有设定all,用import*语句默认将会导入模块中所有不以下划线开头的全局名称。
- 帮助:help(copy.copy)
- 文档:print copy.copy.doc
- 源代码:print copy.file
Chap 10.3 标准库
- 1.sys:访问与Python解释器联系紧密的变量和函数
- argv:通过命令行调用python脚本时在后面添加的参数,会放置在sys.argv列表中
- stdin
- stdout
- 2.os:提供访问多个操作系统服务的功能
- environ:访问环境变量 os.environ[‘PATHONPATH’]
- system(command):在子shell中执行操作系统命令
- 3.fileinput:遍历文本文件的所有行
- input:遍历行(inplace参数支持直接替换)
- lineno:当前累计行数
- filelineno:当前文件的行数
- 4.集合、堆和双端队列 什么情况下会用?
- 集合:set,是元素的集合,无序
- 集合的操作:
- 并集:a.union(b), a|b
- 交集:a.intersection(b), a&b
- 差集:a.difference(b), a-b
- 子集:c.issubset(a), c<=a, c.issuperset(a)
- 堆(heap,heapq):优先队列,能以任意顺序添加对象,并且在任何时间找到最小元素。
- heappush, heappop heapreplace heapify
- 集合的操作:
- 双端序列(double-ended queue,deque):在需要按照元素增加的顺序移除元素时非常有用
- append、appendleft、pop、popleft、rotate
- 集合:set,是元素的集合,无序
- 5.time:获得当前时间、操作时间和日期、从字符串读取时间以及格式化时间为字符串。日期可以用实数,或包含9个整数的元组(年月日、时分秒、周、当年的第n天、夏令时)
- (2008,1,21,12,2,56,0,21,0)
- 其他模块:time(支持日期和时间算法)、timeit(对代码段的执行时间进行计时)
- 6.random:产生随机数、模拟任何产生随机输出的程序。伪随机。
- random():0-1 随机实数
- uniform(a,b):a-b随机实数
- randrange([start], stop, [step]):同比range,返回随机数
- choice(seq):从序列seq中返回任意元素
- sample(seq,n):从序列seq中选取n个随机且独立的元素
- 生成一副牌(序列推导式)
values = range(1,11)+'J Q K'.split()
suits = 'Diamonds Clubs Hearts Spades'.split()
deck = ['%s of %s' %(v,s) for v in values for s in suits]
#洗牌
random.shuffle(deck)
- 7.shelve:在文件中存储数据
- 8.re:regular expression(正则表达式,是可以匹配文本片段的模式)
- 通配符(wildcard): .
- 转义(escape):r’python.org’,让特殊字符表现得像普通字符一样,点号’.’、星号’*’、问号’?’ 当成文本字符而不是正则表达式运算符时,需要转义。P192 两个级别的转义?
- ()?:可出现1次或不出现
- ()*:重复0次或多次
- ()+:重复1次或多次
- (){m,n}:重复m~n次
- 字符集(character set):’[A-Z]’
- 选择符和子模式(subpattern):’python|perl’ , ‘p(ython|erl)’,
- 开头匹配:’^ht+p’,结尾匹配:’$ht+p’
- re的函数
- re.compile:将包含正则表达式的字符串创建模式对象,如: re.search(pat, string)等价于pat.search(string)
- re.search(pattern, string):在给定字符串中寻找第一个匹配给定正则表达式的子字符串
- re.split(pattern, string, maxsplit=0):根据模式的匹配项分割字符串
- re.findall(pattern, string):列出字符串中模式的所有匹配项
- re.sub(pat, repl, string):将字符串中所有pat的匹配项用repl替换
- re.escape(string):将字符串中所有特殊正则表达式字符转义
- 贪婪模式与非贪婪模式:?
- 理解子模式:()
- 理解match:只匹配第一个
- 从末尾匹配 $,为什么不对?末尾匹配,返回none
pattern = re.compile(r'.*?([a-z]+)$', re.I)
m = pattern.match('Hello World Wide Web')
# m=None
- 参考:runoob:http://www.runoob.com/python/python-reg-expressions.html
- 模板系统,string模块中的Template类
- 其他标准库
- csv:逗号分隔值,Comma-Separated Values
- timeit、profile、trace:测试代码使用
Chap11 文件和流
- 让程序和外部世界(文件、网络)进行交互
- 文件对象
- f.read一直用使指针往后移动
- 修改读/写的位置:f.seek(offset [,whence])
- 其实读到一个字符串变量里对字符串进行操作也行?
- 记得关闭文件,f.close()
- 用with语句,打开文件并且将其赋值到变量上,可以对改变量进行操作,操作语句结束后文件自动关闭。
with open('filepath') as somefile:
- read()、readline()、readlines()返回list
- 通过fileinput实现懒惰行迭代
import fileinput
for line in fileinput.input(filename):
process(line)
- 今天遇到一个问题:f.write文件时加入换行符:\t\n,在文件用文本编辑器时读取时会换行显示,但f.read()会读取所有文本,包含换行符。