畅销书《python从入门到实践》知识思维导图 原创不易,请多支持。纯小白自学,翻阅无数资料,实打实完成每个案例,微信读书500多个小时,耗时3天精心打磨的python思维导图,涵盖列表、循环、字典、函数、类、测试等众多框架,每个案例、函数、方法、易错易混点—系统记录并形成逻辑框架所完成的集大成品! 配合书本练习,可以高效帮助初学者打牢python基础,帮助学习者更好地复习,希望能帮到大家 lower() title() upper()
print(kb.rstrip().lstrip())#短暂删除 kb=kb.strip()#永久删除 消除字符串空格,rstrip后面的空格、lstrip前面空格,strip是两段的空白,注意这些删除都是暂时的,除非你把结果存回原来的变量中,如kb=kb.strip,才能永久删除。
1,同时打印出多个数 print (a , b , c ,d ) 默认是空格为分隔符 循环打印默认会空行! 其中 a , b , c 是不同单元,可以为数,字符串,True等格式 2,print ( age , name ) 打印输出多个变量!
3,保留小数 print( ' %. 2f ' % a)
4,修改分隔符和结束符 print( 1,2,3,4, sep = " ,, " , end= ' 结束 ' ) # sep 代表分隔符(分隔输出结果)(默认空格) # end 是结束符 ,默认为(空行)
1,控制print 的输出格式 print ( ' { } ' . format ( ) ) 这种为最常见格式 其中 {}可以控制{数字}顺序, 指定{name} 参数
2,保留小数 百分数 法一:a = format ( 3.14152323 , ' . 2f ' ) 法二:print( ' { : . 2 f } ' . format ( 99.5151512231 ) ) print ( "{ : . 2 % } " . format ( 0.666) 保留小数后两位
3,f-string 更快的format 输入法 --- f 在前,结合{}来用 print( f ' my name is {name}, my age is {age} ' ) --- 解决print 中数值和字符串不能并用的情况!
4,可以参与循环,使得表达式看起来更加清晰直观
1,保留小数 ---四舍五入! print ( round ( a , 3 ) ) 保留三位小数
1,查找字符串 ---( "x" in / not in ) 或者 find ( "x" ) 前者返回 true or false 后者返回 字符串的位置 or -1 ( 没有) type ( a ) ---查看类型 id (a) ---查看id
2,字符串的索引切片---切片是闭区间!不含最后一个字符串! a= ' python ' a [2:3] 就是 t
3,字符串的分隔split 、移除strip
同时赋值 m ,n =eval (input (99,66)) 同时把99,66赋值给m n
列表用这个[ ]表示,在后面加索引确定位置, 索引从0开始,也称为访问列表元素。
列表一般先设置一个空列表,然后再append操作添加, 最后在print打印,直接打印,不在print进行其他操作
列表的元素要打印时,一般情况下,得用for循环,逐一打印出来,不能直接打
ways[0]='swim' #可以修改任意位置的元素
合并用 + 或者 extend( 列表 ), 复制用 * ,可以混和不同形式的列表
ways.append('car') #方法append在末尾添加 一次加一个
homeways.insert(0,'fly') #方法insert添加元素到指定位置
del ways[0]#注意格式,del指定位置删除
#方法pop删除元素,并保留元素(与del的区别在于是否继续使用!) poped_ways=aways.pop() pop(0)——指的就是删除第一个元素!!! 都是从0开始,不是从1开始
#remove,知道值是多少,但不知道位置在哪,并且删掉后可以再使用(类似pop),如果有多个值,用IF循环来判断删完了么。 travel.remove('quanzhou') travel_home='xiamen' travel.remove(travel_home) #这里区别pop,pop(写位置),remove(写值)!类似pop,从旧的列表里删除了!
#方法一,sort对列表按字母顺序永久排序 car=['bmw','audi','toyo','fute'] car.sort() car.sort(reverse=True)#倒序, 或者cars.reverse() 直接倒序 注意,列表要先方法,再打印!!!不能直接print (cars.reverse())
临时排序——sorted(列表) print(sorted(cars))#临时使cars按顺序排,注意不是cars.sorted() print(cars)#又恢复原样了 print(sorted(cars,reverse=True)) 这是为了展示列表的临时排序
index () list . index ( 'x' )
count ( ) list . count ( 'x' )
asd = [1, 2, 3, 4, 5] print( * asd ) -----------输出为 1 2 3 4 5 # *星号代表解包的意思,把【列表】中的元素解包出来! 不带【】和,
zip 打包----配对,组成元组,再作为元素计入列表
for value in range(1,5): #实际上是1,2,3,4,没有5,达到5之后停止! print(value)
for循环遍历列表每个元素 for mg in mgs: print(mg) #注意命名,单复数命名可以更快判断!!! for i in range(1,10): shaizi1.roll_die( ) # 用for和range,设置重复次数即可 #上例就是 重复 方法 十次!
friend_fruits=fruits[:] #复制切片!将该列表复制给另一个列表(自动新建) 如果用friend_fruits=fruits 两个列表就是关联的,一个append,另一个也会
#使用range()创建数字列表,结合list创建!!!牢记!!! numbers=list(range(1,6,2)) #务必加list print(numbers) #从1到5,2是步长!
#列表解析,将for循环和创建新元素的代码合并成一行,并自动附加新元素 anwers1=[value**2 for value in range(1,11)] #列表名=【表达式 for循环 不断给表达式添加值】 print(anwers1) #又快又好用
同时进行两个解析,注意解析的层次关系
players[0:3]) #当到达3,也就是第四个元素时停止 players[1:2]) #从2开始,3停止,只有2!!! players[1:]) #默认到最后 players[:3]) #默认从最早开始 players[-2:]) #倒数两位
for player in players[:2]: print(player.title()) #for循环注意设置名称!
for alien in aliens [:5]: #只显示前5个外星人,切片!!! print(alien)
#修改前3个外星人的数据: for alien in aliens [:3]: #也是用切片法,来修改赋值!
dimensions=(200,50) #元组用圆括号,其他同普通列表 但是不能给元组的元素赋值!修改元素的值 只能直接修改整个元组dimensions=(200,150) 元组下可以遍历,可以查询
检查是否等于、大于小于、不等于!= if age == 22 :
#检查多个条件,用and和or来简化运算!!!注意格式!! if (age1>20) and (age2<20) : #把两个条件放在括号里,改善可读性!
#检查特定值是否包含在列表中!和不在列表中——in 和 not in if 'xiao peng' in cars:
car='SuBa' print(car=='suba') #符合,为true,否则输出false car=='suba' 这个就是达尔表达式,直接用,更高效
print(cars=='bao ma') cars是一个列表,只列出其中一个元素,判断为false
print(10>9) print(100!=10) print(100>10 and 100>20) print(50<60 or 50<40) print(1 in list(range(0,10))) #妙呀 print(100 in list(range(0,99))) print(50 not in list(range(0,66,3)))
就是用简单的==来输出true和false这两种结果 注意,它是区分大小写的!!if语句则不区分
if age<4: print("free") elif age<18: #其实是另一个if测试,只有上面的if不通过时,才会执行 print("half") else: print("whole price")
学会用多个if, elif会比else更具体
if + 字符串切片 +print 深度使用
for topping in toppings: if topping=='cu': #新增if语句来检查特殊元素,特殊处理! print("i am sorry,it is out.") else: print("add "+topping+" .")
if toppings: print(不为空时执行) else: print(为空的时候执行)
for yuanliao in yuanliao2: if yuanliao in yuanliao1: print("add "+yuanliao+" success") else: print("sorry it not avaliable")
new_yonghus=['jing','hong','cong','Xing','admin'] new_yonghus=[items.lower() for items in new_yonghus] 参考列表中的列表解析 这个就是可以对列表里面的元素,for循环处理一遍,然后再赋值到另一个列表里面,比单独for循环,然后append,高效得多
#字典可以存储一个对象的多种信息,比如外星人的各种信息,但也可以存储众多对象的同一种信息,比如调查很多人最喜欢的编程是什么。
#要访问相关联的值,要依次指定 字典名 + 键! print(alien['points']) 返回到值
添加:键值 对 alien['xzuobiao']=0 #简单添加即可,不关心字典中的顺序,只关心键值对应 也可设置一个空字典,后续再不断加入键-值!!!
#删除键值对,用del彻底永久删除,但需要指明字典名和要删除的键 del alien['color']
#声明2个变量,存储键和值,同时引用字典名.items(),依次储存! for k,v in cihui.items(): print("\n"+k+" is meaning that "+v) 结果就是每个键值对都会依次打印出来
不需要用到值时,遍历所有键 for name in languages.keys(): #默认会遍历所有键,即便不加.keys() #按顺序变量所有的键,sorted临时排序,注意用法 for name in sorted ( languages . keys ( ) ):
遍历字典中的所有值,用values() for language in languages.values(): #记得复数形式:keys values #如果值包含重复项,用集合set()剔除重复项 —集合类似于列表,但每个元素都是独一无二的! for language in set ( languages . values ( ) ):
列表里装一个个字典 经常需要,并且列表中字典的结构一般相同,可以直接遍历 创建一个外星人列表,其中每个外星人都是一个字典,包含有关该外星人的各种信息。 alien_0 = {'color':'green','points':'5'} alien_1 = {'color':'red','points':'10'} aliens = [alien_0,alien_1] #列表里面装着字典!
#下面是多个外星人的自动生成 aliens=[] #先添加一个空列表 for alien_number in range(30): #注意,重要是告诉python要循环三十次 new_alien = {'color':'green','points':'5','speed':'slow'} aliens.append(new_alien) #将单个单个的字典,用for循环加入到列表中
#字典,要符合键-值,但里面的值也可以是列表! 字典:披萨 键值对1:外皮:面粉 键值对2:配料:[番茄,西红柿,土豆] #列表 #for循环+字典-键 :不断提取(键)列表里面的值! for peiliao in pizza ['peiliao'] : print ( peiliao )
#总结,如果需要在字典中将其中的一个键关联到多个值,可以在里面嵌套一个列表! 比如问卷调查最喜欢的语言:每个人都可以多选 人就是键,多选的语言就是值 (列表形式)
#这里的格式不统一,容易出错!!! 即便键存在单个值的情况,也要弄成列表形式
多个网站,每个网站有多个用户名,作为字典中的键,然后每个用户名下有多个信息,将其存储在字典中,作为与键对应的值!
字典中的值,就是一个字典,再引用的时候,要用引用字典值的方式来用,新设变量来存储: 字典【键】 下的值
不能太多层级,不然可能有更好的解决方法 字典必须是一个键,对一个值,值可以是列表、字典形式,但键只能是单个
prompt提示可以放到一个变量里面,再传递(以免太长)
input解读为字符串,数值形式的话要加Int(),但是用float最保险(防止输入小数后报错),或者用eval---去除输入字符串的双引号!!! number=int(input ( ) ) number2 = float ( input ( ) ) number3= eval ( input ( ) )
求模运算符%,它将两数相除并返回余数(很有用) 比如3%2 ——返回余数1
#让用户选择何时退出 message="" #这几步很难很关键!设置空字符串的变量! while message!='quit': message=input(prompt) if message!='quit': print(message) #当输入不为quit时,进行打印、提示操作!
使用标志:就是让程序判断什么时候结束,标志为true,运行false,停止!有以下几种方法 和下面两种的区别在于,即便标志变量为false了,下面的程序还会继续执行 而break和continu的话,不会继续执行下面程序! 用此法时注意程序位置————放到else里面来区分执行!
和上面两个相比,多了一个while下的判断!
while和for循环本质差别在于,while循环是一个有条件的循环,而for循环就是单纯地遍历列表的每个元素 for循环不适合用来修改
高效处理代码
传递实参 可以用位置实参—————describe_pet('仓鼠','阿凡达') 也可以用关键词实参———describe_pet(pet_type='仓鼠',pet_name='阿凡达')
传递实参 的默认值—— def describe_pet (pet_name , pet_type ='dog') : 在定义函数的时候,就设置默认值, 有默认值的必须放在末尾,位置实参依然适用 让实参变成可选项,如果没有输入也不会报错( 设置默认值为 空 ) ——— 名字两个字和三个字的 编写
函数就是自定义形参的用法: 1,形参可以是元素,也可以是列表,甚至是字典, 如果是列表,就可以在定义函数里面直接用for来遍历形参这个列表 对于字典,用 for k,v in xx.items() : 来传递出字典里面的键和值 空列表用*user 放在括号形参最里面,空字典则用 **user 放在形参处 2,你可以在函数里面新建一个空列表、空字典,空变量等等,再运用各种方法,把形参传递过去进去,最后返回到想输出的列表、字典或变量中 ——最好不要
就是要把实参的值,传递到字典的值里面!!!
定义的函数要返回到字典,且字典里面存在默认值 ——用 if 来添加默认值!!
综合 结合函数、input输入和while循环 实现交互式+函数
形参为列表,一般都会和for循环遍历 结合起来
运行函数修改代码,修改的效果是永久的! 所以一般把运算的结果,先存储到一个变量里面,后面再对该变量进行相应的处理 函数中尽量只放和形参相关的运算,把要编辑的内容放在函数外,然后再引用函数得出结果 千万注意:函数括号内不能直接【'a', 'b', 'c'】,不能直接放列表啊,应该把列表先存在变量里,再把这个变量作为实参,放进函数括号内!
精品案例!!!
不改动原列表,进行操作,不是单调的 a = xxx . pop (0)
禁止函数修改列表———运用函数,在调用列表时,用切片法,引用副本 [ : ]
传递任意数量的实参——妙用*号,就是创建一个空元组
什么时候用列表,什么时候用字典,得看情况 如果只是要求输出配料,则用列表:无键-值对 如果要求创建用户的简介,则用字典更好 在函数中定义空字典,把形参传递入字典中 最后返回该字典(该字典就是函数结果!)
使用任意数量的关键字实参 ——精品(注意函数中对空字典的运用) 不知道给函数传递的信息会是什么样,什么格式 就用两个星号**,编写成能接受任意数量的键值对
将函数都放在模块py文件上,要用时再导入主程序,可以简化流程,重点放在代码逻辑上
文件:模块.py ——内含函数make_pizz( )
导入全部,不推荐
给模块 或 函数 改成自定义名---用 as
map 函数, 表现形式为map (function,agrs) ,表示对序列args中的每个值进行function操作,最终得到一个结果序列------ 用 List 转为列表形式
map ( 函数 / ( lambda x,y : x 和 y 的运算) ,列表---对应x 和 y ) 直接对 列表 进行处理!
全过程的案例——self 贯彻类的始终!!也是实例的运用的本身! 将形参,传递给self 类的属性 / 设置方法,对类的属性进行运算! 先把类传递给实例变量:my_dog,,再用句点法,引用类里面的属性、方法(注意顺序!!!)
给类设置默认值———在__init__中设置
动态添加类的属性,直接Car.weight='xx',此后的类、实例中,都会有weight这个属性!!! 动态增加类的方法,可以用继承!其他的目前还未知
1,通过实例,句点法访问实例的属性,直接修改即可。 前提是要知道类中属性的名字是什么
2,在类中,新增一个方法,来对属性的值进行修改,一般 def aaa ( self , msg ) self .xxx = msg ( xxx为要修改的属性) (直接设值) def aaa ( self , msg ) self. xxx += msg (设置方法来递增属性的值)
继承 继承后,凡是用了子类的实例,则该实例既有父类的属性和方法,也有子类的属性和方法 初始设置很重要啊,包括 def __init__( self , aaa , bbb ) super( ).__init__ ( aaa ,bbb )
重写父类的方法,对于父类中的方法,如果有不符合子类情况的,都可以进行重写,这样python就不会考虑父类的这个方法了,优先考虑子类的方法 (注意子类重写时,方法名称要一样,python才能识别并且替换它) 比如车父类中有个油箱的方法,但是电动车用不到,可以重写!
这个就是小类,将电动车中,关于电池的属性、方法单独放在这个类中,并将这个类Battery(), 用作电动车的一个属性 self . battery=Battery()
实例——属性——属性再调用小类(句点法调用它的属性和方法)
from car import Car , ElectricCar #导入多个类 (car.py) 就可以直接用Car 、 ElectricCar 这两个类了
导入整个模块,再用句点法来引用(好)
#自定义工作流程 # 一开始应该让代码结构尽可能简单,先在一个文件中完成所有的工作,确保都能运行后,再将类移动到独立的模块,也可以在文件和模块中交互进行,一边写模块,一边导入文件使用。
from collections import OrderedDict 按顺序输入字典
from random import randint 从特定范围中取随机数
打开文件,要先赋予文件给变量file_object ,才能进行读取内容、等等操作
打开相对位置 open( ' aaaa \ pi_digits.txt ' ) 打开py文件所在目录下的子文件夹aaaa
打开绝对位置 注意,要在地址前面加一个 r ! f_path = r ' C:\Users\Documents\python_work\第十章\pi_digits.txt' , 再 with open( f_path ) as f 即可
with open(filename) as file_object: for line in file_object: print ( line . rstrip ( ) ) for循环来进行逐行的操作,其中用rstrip() 想消除每行末尾看不见的空白符
with open....的代码块之外,要继续使用该文件的内容呢? 读取后,将内容存于列表中,这样就可以随时使用了! 方法——readlines ( )
先设置一个 空的变量 ,对文本数据进行处理后,才能存储进去 += 把数据放入同一行内!
文件内容读取后,存在列表里,修改列表里的数据(替换)
记得要在文本末尾加\n,否则不会自动分行 如果没有该文件时,会自动在目录里面新建一个,无论是 'w' 还是 'a' 模式
open后新加参数 'w' ,方法write (“xxx”)——输入内容
print 也可以之间在新创文件里写入!
#给文件新添内容,而不是覆盖原有内容,要用附加的形式“a”打开!!! 这时写入到文件的行都将添加到文件末尾,如果指定文件不存在,将创建新文件
#使用异常避免崩溃————妥善处理错误,一般都在要求用户提供输入的程序中, 如果程序能妥善处理无效的输入,再提示用户输入 有效输入,就不会崩溃出错——出错可能泄露信息 分析文本——分析alice文本包含多少单词——split()方法介绍 示例wenben="alice in wonderland" print(wenben.split()) split会将wenben中的字符串拆分,以空格为分隔符拆分,并存储为列表的形式!
让程序检查可能出现异常的情况, 并对异常和不异常做出不同的反应 ——上例可以设计为函数count_words,以后只需要输入文件名,函数,就能自动判断文件是否存在,并且根据情况做出不同的输出
批量处理一系列文件—for循环 (调用同一种方法) 这也是 列表 和 函数的运用 ——相结合
注意用法,以写入模式打开,dump存储数据——不同于txt的.write ( ) 以load读取数据——不同于txt的read
综合——两种情况合并在一个程序里 有,则打开存储; 无,正常是报错,但是放在except里面,又可以重新运行, 这里就选择新建一个文件并提示用户输入 重构1 第一个是检验是否有已存数据,有的话读取并存到username,没有的话返回到None (重点 ),一定要设置好返回值 第二个函数是输出问候,先引用第一步的函数!(重要)这时候会得到第一个函数的两种结果,再用 if 为空和不为空 ,进行相应的处理( 新建再输出/ 直接输出 ) 重构2 总结,很厉害的重构,让代码的逻辑清晰,一清二楚,几个点注意: 1,无论是新建json,还是访问已有的文件,最后都要设置返回值,让内容存储到变量username中。2,起好名字很关键,宁愿去查单词来用。 3,前两个函数专注于读取内容,或新建文件并存储内容,而第三个函数才涉及到if判断,来根据不同情况合理运用前两个函数!!! ——————借鉴思路,,函数可以互相嵌套!注意功能的划分,要打印的全部放在一起!!!
#json能将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。使用时,必须要引用import json
测试好处——确保代码质量 改善代码设计,难以测试的代码一般是设计不够简洁的代码。 保证重构不会引入新问题,以函数为单位进行重构的时候,只需要重新跑测试就基本可以保证重构没引入新问题。 可以让你重新思考代码的设计,坚持编写单元测试之后,代码设计能力的提升
只为 测试方法 get_formatted_name 能否实现输出完整的名字这一功能!
类的测试 大部分就是测试类里面的函数 每个功能的测试,都是一个def 精品案例! 妙用set 方法,处理重复列表 并用count来计算重复元素的出现次数! 精品 设置函数,其中引用了类来创建函数内的实例, 超强中间变量!!!——函数方法和类中的方法嵌套,互用 将用户的多个输入,生成列表,split ()方法的妙用,再用for循环和类中的方法,将输入存储到中间变量中,最后再展示出中间变量! 调用一个函数,就能用到 函数方法+类 里的方法, 注意函数内中间变量终究是形参形式,不是真实的!
测试上面的类——较复杂!!! 测试类——先在def 中创建一个实例,把类赋予它 再以这个实例为基准,运用类中的方法,最后检测方法是否可行 测试类的时候,可以用set up 先创建要用到的实例、列表等等, 再下面的测试中,就可以直接用了,简化流程 通关赋予给 self —— self.实例 / self.列表 之后函数即可直接调用!!!
15.1绘制简单折线图 散点图! matplotlib 中模块pyplot 的 plot 和 scatter import matplotlib.pyplot as plt # 导入matplotlib 库里的模块 pyplot 并重命名为plt,里面包含很多用于生成图表的函数!!比如 plt.plot plt.show plt.title plt.xlable 等等 plt.show ( ) plt.savefig ( 'squares_plot.png' , bbox_inches = 'tight' ) #!第一个实参指定了要以什么文件名保存图表(py所在目录),第二个实参将多余空白区域裁减掉! #!注意,注意,要先 savefig () 保存后 , 再show(),否则就是空白{} 注意,只要没有show 或者保存 往plot 里面加的数据系列,都会被放在同一张图表当中!!!
折线图!plot ( ) plt.plot (“x轴默认从0开始递增”,squares(y轴数据-列表!), linewidth=5) plt.title ("square numbers", fontsize=24) # 设置标题,标题大小 plt.xlabel ("value", fontsize=14) plt.ylabel ("square of value", fontsize=14) plt.tick_params ( axis='both' , labelsize =14) # 设置刻度标记的大小,axis可以为{x,y,both},默认为Both 注意,如何将数据系列,放入同一张图中?——直接新添plot添加即可 plt .plot ( dates , highs , c ='red' ) plt .plot ( dates , lows , c= 'blue' ) plt. fill_between (dates , highs , lows , facecolor='blue' , alpha=0.1) 给数据系列中间部分,添加颜色———用方法fill _ between , 其中facecolor 为填充色 ,alpha 为透明度(突出显示,也可以在plot当中设置,默认为0.5)
散点图!scatter() plt.figure (dpi=128,figsize=(10,6)) # *这个是调整输出的尺寸大小!这个是128分比率,长宽比10:6 (无论是散点图还是折线图,都可以设置!再添加数据前就要设置好了!) plt.scatter (5, 25, s=400) # 点大小用s() # 数值也可以是 x轴列表 和 y轴列表! plt.scatter (x_value , y_value , c='red' , edgecolors='none' ) #设置颜色c=' red ' plt.scatter (x_value,y_value, c=y_value , cmap= plt .cm.Blues, ) # 设置颜色映射(由深入浅)——反映路径! plt.title ("square number", fontsize=24) plt.xlabel ("value", fontsize=24) plt.ylabel ("square of value", fontsize=14) plt.scatter(0,0,c='red',s=30) # 控制起点和终点的,突出显示! plt.scatter(rw.x_value[-1],rw.y_value[-1],c='green',s=30) plt.tick_params (axis='both', which='major' , labelsize=14) #参数which的值为 ‘major’、’minor’、’both’,分别代表设置主刻度线、副刻度线以及同时设置,默认值为’major’ plt.axis ( [ 0, 99 , 0 , 99 ] ) #设置每个坐标轴的取值范围——方法axis要求提供四个值,分别是x轴和y轴的最大最小值 # plt . axis ( "off" )——去除坐标轴,连同图形的边框!
设置好关联的x轴、y轴的列表! 将需要控制的数值,作为形参放进去(num_points!) 同时,控制每次都从(0,0)点出发!
1、choice从random中导入,并给予一个实参列表,它将从里面随机选一个元素! 2、用while循环,控制循环次数!(中断条件——跑满次数!) 3、里面含多个中间变量,如:x_step ( direction*distance )、next_x 最终传递给最重要的参数 x_value !!!(计算过程!——计算结果——加入列表!) 重构函数————层层嵌套!简化流程!
调用类和函数——得到两个列表——x轴和y轴! 在类中——定义好 x轴 和 y轴 这两个列表! 在函数中——列出 x轴 和 y轴 列表的计算过程、并把数据添加入列表中! 注意,rw . x_value 作为x轴的列表,并不是真实的列表,而是在函数中的列表,就是每次运行函数,该列表都会重置刷新,从头运行一遍,而不是不断地加入到 list 当中!!! 注意和前面例子中的区别!
15.3 用Pygal 模拟骰子 Pygal是数据可视化、交互性等的模块 Bar() 条形图的设置! Bar()是创建可缩放的矢量图的类!并创建该类下的实例!!——直方图! hist . add ( ) ! ! ! 注意格式!!!只有y的值,x的值体现为x轴的标签!!! hist . render_to_file !保存为矢量图 from pygal.style import LightColorizedStyle as LCS , LightenStyle as LS #可视化 17.2章节! my_style=LS ('#333366',base_style= LCS ) #LS自定义样式——颜色为'blue',传递给实参base_style (基色!) chart=pygal.Bar (style=my_style,x_label_rotation=45,show_legend=False) #*先引用Bar创建实例,再往里面加东西! #*rotation是让标签旋转45度, 并隐藏图例(show_legend!)
设置骰子的类(通用的属性、方法),把面数作为可控形参! 注意逻辑!!!——先得出投1000次时,每一次的面数是多少 的列表! 再将每一面,作为x轴,每一面的次数,作为y轴(用count( 不重复 数值列表 ) ),遍历得到每个单独元素的,1000次中出现的次数! 列表解析!——全自动化处理数据!!!
移步到骰子终极版! 也可以用scatter和plot来显示结果!——效果不如直方图!
读入用 csv.reader ( f ),并存到变量里面! 关键,用enumetate,将某一行列表,设置为含索引的列表! 比如把[ a, b, c, d ,e, f ] 添加上索引 index ,【a为1,b为2...】————方便我们确定想要的数据在哪一列中!
把表头以下的csv文件内容,依次遍历,提取出要处理的数据—— 比如我们想要第二列的数据,用 for 循环 row [1] ,一个个提取,再添加入列表当中! 注意,默认从csv中的文件,都是字符串模式,必须要Int转为数值模式!
从csv中读取日期,用datetime处理,成为可视化对象,从而作为x轴来 先将设置好的格式存入变量当中,再以此加入dates列表!
对可能报错的csv、设置try - except 来检查! plt 可视化操作!!!——区分pygal中的可视化步骤! 直接引用plt 下的各种方法,title、xlabel、plot、tick_params等等!
16.2 json 收盘价走势 用pygal中的Line() json文件的一般处理过程—— json . load ( f ) 再把json里的字典,遍历,通过 键 索引来获取值! 其中 — 日期不用处理、收盘价小数要先转为浮点数! 这里还有一个format的用法——{}! pygal的可视化操作——上下对比一下! 要先给 类 创建 实例!——在实例上,给他设置标题、x轴标签、add添加数据等等!
时间序列分析——发现趋势、周期性、噪声,预测未来从而做出决策 math . log10 ( ) 列表解析——遍历原数据列表!
重构函数——收盘价均值(月、星期、星期几) 贼难,注意 巧设 wd列表 [ ] ,内含各星期(也就是键的值),作用就是来匹配获取索引——将每个元素中,weekday的值 列表(有周期性循环的),转化为[ 1,2,3,4,...,1,2,3,4...] 这样有规律顺序的列表——后期将它对应形成其他列表的值! 如果只有以下三行,绘图会出错!因为周几周几是字符串,x轴会默认按字母顺序来排序! 我们要按周一到周日顺序排序,所以我们在处理时,必须要将其先设置为数字形式的,再设置x轴标签!!
设置成一个html,然后把先前的svg都依次加进去,注意格式!!!
17.1 api使用 程序包requests的使用 网站 https://api.github.com/search/repositories?q=language:python&sort=stars 有学问——search/repositories ?q=language : python & sort=stars
request.get ( url ) -----检查 status_code-----r.json( ) 存储到新变量中! 进一步处理,访问api的相关信息,比如api中数量、长度、键值、打印信息等等!
在导入api,检验,存为json之后,设置数据列表格式 ——形成可视化的数据列表!!! 增加工具提示,移动鼠标时显示信息—— 将数值列表,变成字典,再add加入到chart 中! value----值、label---提示、xlink-----链接显示!
调用其他网站的api——首先得找到,能读取的api列表!!! 这里是读取 title link comments 的信息——没用于可视化! submisson_dicts是一个列表,里面的每个元素都是一个字典,显示了前30篇热门文章的title , link , comments 这些键值对! 我们要让这个列表的元素,按comments的数量来排序,而不是默认的总体得分排序,用 key = itemgetter ('comments') ,这就是按评论数从小到大排 再加个reverse = True 就是从大到小了!!
PDF和 全套练习、答案 源代码 点击这个附件下载即可!
赠品:(也在上面附件) 《python编程》源代码文件 Python数据挖掘入门与实践源代码 python基础、库函数速查表