找回密码
 会员注册
查看: 15|回复: 0

python基本42个命令

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-7 00:46:35 | 显示全部楼层 |阅读模式
文章目录python基本语法pycharm常用快捷键python基础语法一,注释二,变量与print输出函数三,数据类型四,数据类型转换五,标识符六,运算符七,字符串字符串定义方法三种字符串的拼接:格式化精度控制八,判断语句一,布尔类型与比较运算符二,if语句九,循环语句1.while循环语句2.while循环的嵌套3.for循环4.变量的作用域5.for循环的嵌套使用6.break与continue关键字十,函数1.函数的定义:2.函数的参数3.函数的返回值4.函数说明文档5.函数的嵌套使用6.变量的作用域十一,数据容器1.list列表3.字符串4.数据容器(序列)的切片6.字典7.各个数据容器之间的对比8.各个数据容器之间的通用操作十二,函数进阶1,多个返回值的函数2,函数的多种传参方式3.匿名函数十三,文件操作1.文件编码2.打开文件3.读文件4.文件的写入十四,异常,模块,包1.异常2.异常的捕获方法3.异常的传递4.模块5.包十五,面向对象1.初始对象2.类的定义3.类和对象4.构造方法5.其它内置方法6.封装的概念7.继承8.复写父类方法9.类型注解10.多态十六,高阶技巧1.闭包2.装饰器3.单例模式4.工厂模式5.多线程6.网络编程7.正则表达式8.递归十七,pymysql基础1.DDL2.DML3.DQL4.pymysql十八,pyspark基础什么是spark?数据输入RDD内置方法(算子)数据输出十九,数据可视化基础1.JSON数据格式2.pyecharts模块二十,课后练习案例pymysql综合案例pyspark案例数据可视化综合案例零基础Python学习资源介绍👉Python学习路线汇总👈👉入门学习视频👈👉实战案例👈👉100道Python练习题👈👉面试刷题👈资料领取python基本语法pycharm常用快捷键ctrl+alt+s:打开软件设置ctrl+d:复制当前行代码shift+alt+上/下:将当前行代码向上或向下移动ctrl+shift+f10:运行当前代码文件shift+f6:重命名文件ctrl+f:搜索python基础语法一,注释单行注释:#多行注释:“”“我是多行注释”“”二,变量与print输出函数变量的定义格式:变量名=变量值如:num=100123print()是输出函数如:print("helloWorld")print()如何输出多份内容格式print(内容1,内容2...,内容n)1234567三,数据类型常见的数据类型type()函数用来查看数据类型如:name="张三"print(type(name))12345四,数据类型转换字符串,整数,浮点型数据类型转换语句分别int(x),float(x),str(x),note:1,任何数据类型都可以转换成字符串​2,字符串转换为数字有限制​3,浮点型转换为整数需注意丢失精度问题五,标识符标识符命名规则:1.由字母数字下划线组成2.第一个字符必须是字母或者是下划线3.标识符不能以数字开头4.标识符区分大小写5.不能与关键字重名常见关键字六,运算符常见数学运算符赋值运算符:=常见复合赋值运算符七,字符串字符串定义方法三种1.单引号方式2.双引号方式3.三引号方式引号的嵌套使用转义字符\如print("\"helloworld\"")print('\"helloworld\"')print('\'helloworld\'')12345字符串的拼接:字符串的拼接使用+链接字符串变量或者字符串字面量如neme="张三"print("我是"+name+",毕业于家里蹲大学")1234注意无法和非字符串类型进行拼接字符串的格式化1语法为:”%占位符“%变量如name="张三"print("我是%s"%name)1234常用占位符有%s:字符串,%d:整数,%f:浮点类型字符串格式化2语法f“内容{变量}”,这种方式不会做精度的控制如name="张三"age=10print(f"我是{name},今年{age}岁")12345格式化精度控制使用”m.n"来控制数据的宽度合精度,m用来控制数据的宽度,若设置的宽度小于数字自身的宽度,不生效,n用来控制数据的精度,会进行小数的四舍五入,m和.n均可省略如%5.2f表示数据宽度设置为5位,小数精度设置为2位%.2f表示不设置宽度,只设置小数的精度1234表达式的格式化基于字符串有两种格式化方式,表达式也有两种格式化方式如print("1*1=%d"%(1*1))print(f"1*1的结果是{1*1}")1234数据输入函数input()input()函数用来获取键盘输入,括号内可以用来设置提示信息,注意无论键盘输入什么类型的数据,通过input()函数得到的都是字符串类型如var1=input("请输入一个字符串")var2=input("请输入一个整数")var3=input("请输入一个浮点类型")var4=input("请输入一个布尔类型")print(f"输入的字符串,变量类型是{type(var1)},内容是{var1}")print(f"输入的整数,变量类型是{type(var2),内容是{var2}")print(f"输入的是浮点数,变量类型是{type(var3),内容是{var3}")print(f"输入的是布尔类型,变量类型是{type(var4)},内容是{var4}")12345678910八,判断语句一,布尔类型与比较运算符布尔类型字面量:True:真,False:假定义方式:变量名称=布尔类型字面量常见比较运算符二,if语句if…else语句语法格式:if条件:​满足条件时要做的事else​不满足条件时要做的事如age=int(input("请输入你的年龄"))ifage>18: print("您已成年,需支付10元票价")else: print("您未成年,可以免费游玩")1234567if…elif…esle语句语法格式:if条件1:​满足条件1要做的事elif:条件2:​满足条件2要做的事else​不满足所有条件要做的事如height=int(input("请输入您的身高(cm)"))vip_level=int(input("请输入您的vip等级(1-5)"))ifheight3: print("您的vip级别大于3,可以免费游玩")else print("您所有优惠条件都不满足,需支付门票")1234567891011if语句的嵌套使用语法格式:if条件1:​满足条件1做的事​if条件2:​满足条件2做的事如if(input(“请输入您的身高:”))>120 print("您的身高大于120,不可以免费")print(“不过若您的vip等级高于3,可以免费游玩”)if(input("请输入您的vip等级:"))>3 print("恭喜您,您的vip级别大于3,可以免费游玩")else:print("您不满足所有的优惠条件,需支付门票")else:print("小朋友,您可以免费游玩")123456789101112使用and检查多个条件,使用and必须两者的关系都为真,判断结果才会为真,若至少有一个假,则结果为假age_0=22age_1=18ifage_0>=21andage_1>=21: print("满足情况1")elifage_0=21andage_1=21orage_1>=21: print("满足情况1")elifage_0=21orage_1num:print("猜大了,请重新猜测")else:print("恭喜你猜对了")#break语句用来终止while循环语句break123456789101112131415161718192021222324252.while循环的嵌套基本语法:while条件1: 条件1满足时,做的事情1 条件1满足时,做的事情2 ... while条件2: 条件2满足时,做的事情1 条件2满足时,做的事情2 ...12345678910案例#向小美表白100次i=1whileistu2)结果:False12345678910111213——le——大于等于比较符号方法,与——lt——方法类似,只不过比较符号不相同而已classStudent:def__init__(self,name,age):self.name=nameself.age=agedef__le__(self,other):returnself.age=stu2)结果:False12345678910111213——eq——相等比较方法,它与——lt——和——le——方法一样都是定义对象比较方法,不过——eq——是判断是否相等,相等返回True,否则FalseclassStudent:def__init__(self,name,age):self.name=nameself.age=agedef__eq__(self,other):returnself.age==other.agestu1=student("张三",11)stu2=student("李四",25)print(stu1==stu2)结果:Trueprint(stu1==stu2)结果:False12345678910111213类内置方法总结6.封装的概念将现实世界中事物在类中描述为属性和方法对于不愿意公开的属性和行为可以定义为私有属性,被定义私有属性后不能够被直接使用,但是可以被我们类中其它成员使用私有成员的意义:仅供内部使用,不对外开发#私有成员变量:__变量名#私有成员方法:__方法名classPhone:IMEI=None#序列号price=None#价格__current_voltage=None#私有成员变量,当前电压#私有成员方法def__keep_single_core(self):print("单核模式运行")defcall_by_5g(self):ifself.__current_voltage>=1: print("开启5G")else:__keep_single_core()print("电量不足,不能开启5G")phone=Phone("1001",10)phone.call_by_5g()1234567891011121314151617181920217.继承在现实生活中手机的版本更新都是基于旧版本之上的修改,在编程过程中同样存在着程序的更新,也是基于之前旧版版本的修改,如手机类中有手机序列号属性,版本更新了面部识别属性,在新类中重新定义序列号属性就显得麻烦,为了解决这个问题,就需要使用到继承单继承基本语法:class类名(父类):子类新添加的内容1234案例#单继承继承表示从父类那里继承(复制)成员变量和成员方法classPhone:IMEI=None#序列号producer="HM"#厂商defcall_by_4g(self):print("4g通话")classPhone2022(Phone):face_id=True#面部识别defcall_by_5g(self):print("2022最新5g通话")phone=Phone2022()print(phone.producer)phone.call_by_4g()phone.call_by_5g()12345678910111213141516171819多继承基本语法:class类名(父类1,父类2,...,父类N):子类新添加的内容1234案例#手机基本信息classPhone:IMEI=None#序列号producer="HM"#厂商defcall_by_5g(self):print("5g通话")#NFC读卡classNFCReader:nfc_type="第五代"producer="HM"defread_card(self):print("读取NFC")defwrite_card(self):print("写入NFC")#红外遥控classRemoteControl:rc_type="红外遥控"defcontrol(self):print("红外遥控开启")#我的手机classMyPhone(Phone,NFCReader,RemoteControl):pass#pass关键字用于子类继承后不想添加新内容,但语法有要求写些什么的替代phone=MyPhone()phone.call_by_5g()phone.read_card()phone.write_card()phone.control()print(phone.producer)#在输出同名属性时,继承在前面的被输出1234567891011121314151617181920212223242526272829303132338.复写父类方法子类在继承父类的成员属性和成员方法后,如果对其不满意,可以进行复写,在子类中中重新定义同名的属性或方法即可案例classPhone:IMEI=None#序列号producer="HM"#厂商defcall_by_5g(self):print("5g通话")classMyPhone(Phone):producer="HW"defcall_by_5g():print("子类复写的5g通话")phone=MyPhone()phone.call_by_5g()print(phone.producer)#如果在子类中有特殊要求需要调用被复写的父类变量或父类方法""" 方式1:父类名.成员变量 父类名.成员方法(self) 方式2:super().成员变量 super().成员方法()"""12345678910111213141516171819202122239.类型注解在python3.5版本引入了类型注解,以方便静态类型检查工具,IDE等第三方工具,帮助第三方工具对代码进行类型推断,协助做代码提示,支持变量的类型注解函数(方法)参数列表或返回值的类型注解,基本语法:变量:类型案例#基础数据类型注解var_1:int=10var_2:float=3.1415926var_1:str=abc#类对象类型注解classStudent:passstu:Student=Student()#基础数据容器类型注解my_list:list=[1.2,3]my_tuple:tuple=(1,2,3)my_set:set={1,2,3}my_dict:dict={"zhangsan":20}#基础容器类型详细注解,元组类型设置详细注解,需要将每一个元素都标记出来,字典类型设置类型详细注解,需要2个类型,第一个时key,第二个时valuemy_list:list[int]=[1,2,3]my_tuple:tuple[int]=(1,2,3)my_set:set[int]={1,2,3}my_dict:dict[str,int]={"zhangsan":20}#函数(方法)的类型注解基本语法:""" def函数(方法)名(形参名:类型,形参名:类型): pass"""defadd(x:int,y:int):returnx+ydeffunc(data:list):pass#函数(方法)返回值添加注解""" 基本语法: def函数(方法)名(形参名:类型,形参名:类型)->返回值类型: pass """1234567891011121314151617181920212223242526272829303132333435363738一般,无法直接看出变量类型之时会添加变量的类型注解Union类型,对于混合类型字典或集合一般不好直接添加类型注解,这时就需要使用Union类型添加混合类型注解""" 基本语法:Union[类型,类型...]"""#使用Union类型需要导入相关包fromtypingimportUnionmy_list:list[Union[str,int]]=[1,2,"zhangsan"]my_dict:dict[str,Union[str,int]]={"name":"zhangsan","age":23}deffunc(data:Union[int,str])->Union[int,str]:pass12345678910111210.多态多态指完成某个行为时,使用不同的对象会得到不同状态多态常用在继承关系上比如:函数(方法)形参声明接受父类对象,而实际传入的父类的子类对象进行工作,即以父类做定义声明,以子类做实际工作,用以获得同一行为,不同状态案例classAnimal:defspeak(self):passclassDog(Animal):defspeak(self):print("汪汪汪")classCat(Animal):defspeak(self):print("喵喵喵")defmake_noise(animal:Animal):animal.speak()dog=Dog()cat=Cat()make_noise(dog)make_noise(cat)123456789101112131415161718多态还应用于抽象类(接口),抽象类:含有抽象方法的类称之为抽象类,抽象方法:方法体是空实现的(pass)称之为抽象方法。举一个很现实的例子,空调制造标准需要制冷,制热,摆风,但是对于不同的生产厂商拥有自己核心制造技术。第一层的空调制造标准并不提供核心技术,在编程就等同于提供空实现方法,而每个厂商都拥有自己的核心制造技术就等同于子类来通过不同内容实现父类方法。""" 抽象类+多态完成 抽象的父类设计 具体的子类来实现"""#定义空调标准classAC:#制冷defcool_wind(self):pass#制热defhot_wind(self):pass#摆风defswing(self):pass#美的生产厂商classMidea_AC(AC):defcool_wind(self):print("美的核心制冷技术")defhot_wind(self):print("美的核心制热技术")defswing(self):print("美的核心摆风技术")#格力生产厂商classGEREE_AC(AC):defcool_wind(self):print("格力核心制冷技术")defhot_wind(self):print("格力核心制热技术")defswing(self):print("格力核心摆风技术")defmake_cool(ac:AC):ac.cool_wind()midea=Midea_AC()geree=GEREE_AC()make_cool(midea)make_cool(geree)12345678910111213141516171819202122232425262728293031323334353637383940414243十六,高阶技巧1.闭包在开发过程中,如银行程序开发,常常面临着安全问题,如用户余额值定义为全局变量存在着被篡改的危险,但定义为局部变量面临着用户存款或者取款余额不变的问题,闭包就能很好的解决这类问题"""在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。"""#外部函数defouter(logo):#内部函数definner(msg):print(f"")#返回内部函数returninner#定义fn1变量为inner函数,#同时对于inner函数"logo"变量为"张三",该值很能直接被修改fn1=outer("张三")#李四为msg的参数fn1("李四")12345678910111213141516171819如果要在内部函数中修改外部函数的变量的值需要在内部函数中使用nonlocal关键字defouter(num1):definner(num2):nonlocalnum1num1+=num2print(num1)returninnerfn=outer(10)fn(10)fn(10)123456789101112使用闭包的优点:无需定义全局变量即可实现通过函数,持续的访问、修改某个值。闭包使用的变量的所用于在函数内,难以被错误的调用修改闭包的缺点:由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存2.装饰器装饰器其实也是一种闭包,其功能就是在不破坏目标函数原有的代码和功能的前提下,为目标函数增加新功能。"""定义一个闭包函数,在闭包函数内部:执行目标函数并完成功能的添加"""importrandomimporttimedefouter(func):definner():print("我要睡觉了")func()print("我起床了")returninnerdefsleep():print("睡眠中")time.sleep(random.randint(1,5))fn=outer(sleep)fn()123456789101112131415161718192021装饰器的注释写法,这种方式简化了代码,注意两者的区别,后者直接调用目标函数,不需要再声明目标函数是外部函数的添加功能。"""使用@outer定义在目标函数sleep之上"""importrandomimporttimedefouter(func):definner():print("我要睡觉了")func()print("我起床了")returninner@outerdefsleep():print("睡眠中")time.sleep(random.randint(1,5))sleep()123456789101112131415161718192021223.单例模式创建类的实例后,就可以得到一个完整的、独立的类对象。它们的内存地址是不相同的,即两个完全独立的对象。某些场景下,我们需要一个类无论获取多少次类对象,都仅仅提供一个具体的实例定义:保证一个类只有一个实例,并提供一个访问它的全局访问点适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。#在一个文件中定义一个类对象classStrTools:pass#定义了一个类对象str_tool=StrTools()-----------------------#在另一个文件中导入第一个文件中类对象from单例模式importstr_tools1=str_tools2=str_toolprint(s1)print(s2)#此时s1和s2的地址是一样的,说明就是同一个对象12345678910111213141516优点:节省内存,节省创建对象的开销4.工厂模式需要大量创建一个类的实例的时候,可以使用工厂模式。即,从原生的使用类的构造去创建对象的形式迁移到,基于工厂提供的方法去创建对象的形式。"""使用工厂类的get_person()方法去创建具体的类对象优点:大批量创建对象的时候有统一的入口,易于代码维护当发生修改,仅修改工厂类的创建方法即可符合现实世界的模式,即由工厂来制作产品(对象)"""classPerson:passclassWorker(Person):passclassTeacher(Person):passclassStudent(Person):pass#定义工厂类classFactory:defgetperson(self,p_type):ifp_type=='w':returnWorker()elifp_type=='s':returnStudent()else:returnTeacher()factory=Factory()worker=factory.getperson('w')student=factory.getperson('s')teacher=factory.getperson('t')1234567891011121314151617181920212223242526272829305.多线程进程:就是一个程序,运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程ID方便系统管理。线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位。进程之间是内存隔离的,即不同的进程拥有各自的内存空间。这就类似于不同的公司拥有不同的办公场所。线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间的。进程和线程都可以并行执行Python的多线程可以通过threading模块来实现。importthreading"""thread_obj=threading.Thread([group[,target[,name[,arg[,args[,kwargs]]]]])group:无意义,未来功能预留参数target:执行的目标任务名args:以元组的方式给执行任务传参kwargs:以字典的方式给任务传参name:线程名,一般不用设置启动线程thread_obj.start()"""defsleep():whileTrue:print("我在睡觉,zzzz")defsing():whileTrue:print("我在唱歌,啦啦啦啦")sing_thread=threading.Thread(target=sing)sleep_thread=threading.Thread(target=sleep)sleep_thread.start()sing_thread.start()123456789101112131415161718192021222324252627带参数的线程启动importthreadingdefdance(msg):whileTrue:print(msg)#args通过元组传参dance_thred=threading.Thread(target=dance,args=("我在跳舞,哈哈哈哈",))dance_thred.start()#kwarges通过字典传参dance_thread=threading.Thread(target=dance,kwargs={"msg":"我想跳舞"})dance_thread.start()12345678910111213146.网络编程socket(简称套接字)是进程之间通信一个工具,负责进程之间的网络数据传输。Socket服务端:等待其它进程的连接、可接受发来的消息、可以回复消息Socket客户端:主动连接服务端、可以发送消息、可以接收回复服务端"""主要分为如下几个步骤:1.创建socket对象2.绑定socket_server到指定IP和地址3.服务端开始监听端口4.接收客户端连接,获得连接对象5.客户端连接后,通过recv方法,接收客户端发送的消息6.通过conn(客户端当次连接对象),调用send方法可以回复消息7.conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接"""importsocket#创建socket对象socket_server=socket.socket()#绑定socket_server到指定IP和地址,bind(IP地址,端口号)socket_server.bind(("192.168.50.196",8888))#服务端开始监听端口linsten()中传入允许连接的数量,不填会默认设置一个合理值socket_server.listen(1)#接收客户端连接,获得连接对象conn,address=socket_server.accept()#accept()方法是阻塞方法,会一直等待执行,需传入缓冲区大小print(f"接受到客户端连接,来自:{address}")#客户端连接后,通过recv方法,接收客户端发送的消息whileTrue:data=conn.recv(1024).decode("UTF-8")#recv()方法是阻塞方法,会一直等待执行,需传入缓冲区大小ifdata=='exit':breakprint(f"接受客户端发来的的数据{data}")#通过conn(客户端当次连接对象),调用send方法可以回复消息conn.send(input("请输入要发送的数据").encode("UTF-8"))#conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接conn.close()socket_server.close()12345678910111213141516171819202122232425262728293031323334353637客户端"""主要分为如下几个步骤:1.创建socket对象2.连接到服务端3.发送消息4.接收返回消息5.关闭链接"""importsocket#创建socket对象socket_client=socket.socket()#连接到服务端socket_client.connect(("192.168.50.196",8888))#发送消息whileTrue:send_msg=input("要发送的消息")ifsend_msg=='exit':breaksocket_client.send(send_msg.encode("UTF-8"))#接收返回消息recv_data=socket_client.recv(1024).decode("UTF-8")#recv()方法是阻塞方法,会一直等待执行,需传入缓冲区大小print(f"服务端返回的数据{recv_data}")#关闭链接socket_client.close()1234567891011121314151617181920212223242526277.正则表达式正则表达式,又称规则表达式(RegularExpression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。1.re.match(匹配规则,被匹配字符串)从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。importres='zhangsanlisiwangerzhaoliutangyi'result=re.match('zhangsan',s)print(result)#print(result.span())#(0,8)print(result.group())#zhangsanresult1=re.match('lisi',s)print(result1)#None12345678910112.search(匹配规则,被匹配字符串)全局匹配,搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后importres='1zhangsan5555lisi565'result=re.search('zhangsan',s)print(result)#print(result.span())#(1,9)print(result.group())#zhangsanresult2=re.search('python',s)print(result2)#None123456789103.findall(匹配规则,被匹配字符串)全局匹配,匹配整个字符串,找出全部匹配项,返回类型为list集合类型importres='1zhangsan66666lisi78787zhangsan999zhangsan'result=re.findall('zhangsan',s)print(result)print(type(result))12345674.元字符匹配[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CigXK1AZ-1687933698799)(D:\学习资料\python\课件\截图\元字符匹配.png)]importres='zhangsan9090@#@lisizhangsan'#找出全部非单词字符result=re.findall(r'\W',s)print(result)print(type(result))#找出全部英文字母result1=re.findall(r'[a-zA-Z]',s)print(result1)1234567891011[]内可以写:[a-zA-Z0-9]这三种范围组合或指定单个字符如[aceDFG135]数量匹配边界匹配分组匹配8.递归递归在编程中是一种非常重要的算法递归:即方法(函数)自己调用自己的一种特殊编程写法""" deffunc() if...: func() return..."""12345678注意退出的条件,否则容易变成无限递归注意返回值的传递,确保从最内层,层层传递到最外层os模块的3个方法os.listdir,列出指定目录下的内容os.path.isdir,判断给定路径是否是文件夹,是返回True,否返回Falseos.path.exists,判断给定路径是否存在,存在返回True,否则返回False十七,pymysql基础数据定义:DDL(DataDefinitionLanguage)库的创建删除、表的创建删除等数据操纵:DML(DataManipulationLanguage)新增数据、删除数据、修改数据等数据控制:DCL(DataControlLanguage)新增用户、删除用户、密码修改、权限管理等数据查询:DQL(DataQueryLanguage)基于需求查询和计算数据1.DDL2.DML3.DQL4.pymysql首先安装pymysql第三方库pipinstallpymysql连接到mysql数据库frompymysqlimportConnection#获取到mySQL数据库的连接对象conn=Connection(host='localhost',port=3306,user='root',password='123456')#打印MySQL数据库软件信息print(conn.get_server_info())#关闭连接conn.close()1234567891011121314使用pymysql创建表#导入第三方包frompymysqlimportConnection#获取sql连接对象conn=Connection(host='localhost',port=3306,user='root',password='123456')#获取游标对象cursor=conn.cursor()#选择要使用的数据库conn.select_db("test")#使用游标对象执行sql语句cursor.execute("createtabletest_py_mysql(idint,infovarchar(255))")#关闭数据库连接conn.close()1234567891011121314151617181920插入数据#导入第三方包frompymysqlimportConnection#获取sql连接对象conn=Connection(host='localhost',port=3306,user='root',password='123456',autocommit=True#设置自动提交)#获取游标对象cursor=conn.cursor()#选择要使用的数据库conn.select_db("test")#使用游标对象执行sql语句cursor.execute("insertintouservalues('周杰轮',23,'123456','男')")#在执行sql数据插入或其它生产数据更改的sql语句时,需要通过提交才能完成更改行为#提交修改conn.commit()#关闭数据库连接conn.close()1234567891011121314151617181920212223十八,pyspark基础什么是spark?定义:ApacheSpark是用于大规模数据(large-scaladata)处理的统一(unified)分析引擎。简单来说,Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、PB乃至EB级别的海量数据pyspark的编程模型模型归纳为:准备数据到RDD->RDD迭代计算->RDD导出为list、文本文件等即:源数据->RDD->结果数据数据输入RDD全称为:弹性分布式数据集(ResilientDistributedDatasets)PySpark针对数据的处理,都是以RDD对象作为载体,即:数据存储在RDD内,各类数据的计算方法,也都是RDD的成员方法pyspark支持通过SparkContext对象的parallelize成员方法将python数据容器转换为RDD对象#导入第三方包frompysparkimportSparkConf,SparkContext#获取Spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark_app")#基于Spark类对象获取SparkContext对象sc=SparkContext(conf=conf)#进行数据容器转换list=[1,2,3,4,5,6,7,8]#parallelize()方法中传入数据容器对象,返回值是listrdd=sc.parallelize(list)#输出rdd内容print(rdd.collect())#关闭PySpark程序sc.stop()12345678910111213141516将文件转换问rdd对象#导入第三方包frompysparkimportSparkConf,SparkContext#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark_app")#通过conf类对象获取sparkContext对象sc=SparkContext(conf=conf)#将文件转换为rdd,textFile()方法中传入文件路径,返回值是列表rdd=sc.textFile("D:/学习资料/python/123.txt")#打印rdd对象print(rdd.collect())#关闭PySpark程序sc.stop()1234567891011121314RDD内置方法(算子)map方法:将rdd的数据一条条处理,处理逻辑是基于map算子中接受的处理函数,返回新的rdd对象,注意使用rdd内置方法需要配置Spark读取到python解释器,否则就无法使用rdd内置方法"""map(func)func:fT)->U(T)->(U)表示传入一个任意参数,返回一个任意参数拓展(A)->(A)表示传入一个参数,返回一个与传入参数类型一致的参数""""""map(func)func:fT)->U(T)->(U)表示传入一个任意参数,返回一个任意参数拓展(A)->(A)表示传入一个参数,返回一个与传入参数类型一致的参数"""#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#测试if__name__=="__main__":#获取Spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SprkContext对象sc=SparkContext(conf=conf)#设置rdd对象rdd=sc.parallelize([1,2,3,4,5])#定义需要作为参数的方法还可以使用lamba匿名函数定义defmap_func(data):returndata*10#输出map算子处理后的结果print(rdd.map(map_func).collect())#关闭spark程序sc.stop()1234567891011121314151617181920212223242526272829303132333435flatMap算子:对rdd执行map操作,然后进行解除嵌套操作,它比map算子多了一个解除嵌套的功能,解除的方向是从内向外#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#设置rdd对象rdd=sc.parallelize(["abc","efg","hij"])#按照空格切分数据后,解除嵌套print(rdd.flatMap(lambdax:x.split("")).collect())#关闭spark程序sc.stop()1234567891011121314151617reductBykey算子,争对KV型rdd,自动按照key分组,然后更具提供的聚合逻辑,完成组内的数据的聚合操作"""rdd.reduceByKey(func)#funcV,V)->V#接受2个传入参数(类型要一致),返回一个返回值,类型和传入要求一致reduceByKey中接受的函数只负责聚合,不负责分组,分组是自动byKey来分组的"""#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#设置rdd对象rdd=sc.parallelize([('a',1),('a',1),('b',1),('b',1),('a',1)])#reduceByKey()算子处理rddresult=rdd.reduceByKey(lambdaa,b:a+b)#输出处理结果print(result.collect())#关闭spark程序sc.stop()12345678910111213141516171819202122232425filter算子,过滤想要的数据进行保留"""rdd.filter(func)funcT)->bool传入一个任意类型的参数,返回值为False或者True"""#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#获取rdd对象rdd=sc.parallelize([1,2,3,4,5])#使用filter方法保留奇数print(rdd.filter(lambdax:x%2==1).collect())#关闭spark程序sc.stop()12345678910111213141516171819202122distict算子:对rdd数据进行去重返回新的rdd"""语法:rdd.distinct()无需传参"""#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#获取rdd对象rdd=sc.parallelize([1,2,3,2,3,1,3,2,1])#对rdd对象进行去重操作print(rdd.distinct().collect())#关闭spark程序sc.stop()1234567891011121314151617181920sortBy算子:对rdd数据进行排序,基于自定义的排序依据rdd.sortBy(func,ascending=False,numPartitons=1)""" funcT)->U告知按照rdd中的哪个数据进行排序 ascendingTrue表示升序 nunPatition表示用多少分区排序"""12345678数据输出collect算子:将rdd对象各个分区内的数据,统一收集到Driver,形成一个list集合对象用法:rdd.collect()reduce算子:对rdd数据集按照自定义的逻辑进行聚合,聚合模式"""rdd.reduce(func)funcT,T)->T2个参数传入,1个返回值,返回值的参数要求和传入的参数保持一致"""#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#获取rdd对象rdd=sc.parallelize(range(1,10))#将rdd数据进行累加求和print(rdd.reduce(lambdaa,b:a+b))1234567891011121314151617181920take算子:将rdd的前N个元素组成list返回#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#获取rdd对象rdd=sc.parallelize([3,2,1,5,7,8])#返回前4个数据print(rdd.take(4))123456789101112131415count算子:计算rdd中有多少个算子#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#获取rdd对象rdd=sc.parallelize([3,2,1,4,5,6])#返回rdd对象中有多少个数据print(rdd.count())123456789101112131415数据输出和数据输入一样有两种方式,不但可以直接打印输出,还可以将数据保存到文件中saveAsTextFile算子:将rdd中的数据写入文本文件中,支持本地写出,hdfs等文件系统,注意:将rdd中的数据写入到文件中时需要安装hadoopx相关依赖,否则会报错[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jrJQ76wX-1687933698803)(D:\学习资料\python\课件\截图\注意事项.png)]修改rdd分区"""修改rdd分区的方式有两种,方式1:SparkConf().setMaster("local[*]").setAppName("test_spark")设置默认分区为1个conf.set("spark.default.parallelism","1")方式2:创建rdd的时候设置(parallelize方法传入numSlices参数为1)rdd=sc.parallelize([1,2,3,4],numSlice=1)"""12345678910十九,数据可视化基础JSON:JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符串安装pyspark第三方库pipinstallpyspark或pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyspark获取PySpark执行环境入口对象,注意PySpark需要安装jdk才能使用#导入第三方包frompysparkimportSparkConf,SparkContext#创建SparkConf类对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark_app")#基于SparkConf类对象创建SparkContext类对象sc=SparkContext(conf=conf)#打印pyspark的运行版本print(sc.version)#关闭PySpark程序sc.stop()1234567891011121.JSON数据格式#json数据的格式可以是:{"name":"admin","age":18}#也可以是:[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]#导入json模块importjson#准备符合格式json格式要求的python数据data=[{"name":"老王","age":16},{"name":"张三","age":20}]#通过json.dumps(data)方法把python数据转化为了json数据data=json.dumps(data,ensure_ascii=False)#ensure_ascii=False表明不使用ascii码转换print(data)print(type(data))#通过json.loads(data)方法把json数据转化为了python数据data1=json.loads(data)print(data1)print(type(data))12345678910111213141516171819202.pyecharts模块Echarts是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而Python是门富有表达力的语言,很适合用于数据处理.要使用pyecharts模块首先需要导入第三方包,基础折线图#导入折线图功能frompyecharts.chartsimportLine#得到折线图对象line=Line()#添加x轴数据line.add_xaxis(["中国","美国","英国"])#添加y轴数据line.add_yaxis("GDP",[30,40,59])#生成图标,注意它会生成一个前端页面line.render("折线图.html")123456789101112set_global_opts全局配置方法#导入折线图功能frompyecharts.chartsimportLine#使用全局设置需要导入相关包frompyecharts.optionsimport*#得到折线图对象line=Line()#全局配置,全局设置过程中各个属性的设置需要用逗号隔开line.set_global_opts(#配置图表title_opts=TitleOpts(title="测试",pos_left="center",pos_bottom="1%"),#设置图例配置表legend_opts=LegendOpts(is_show=True),#工具箱配置表toolbox_opts=ToolboxOpts(is_show=True),#视觉映射配置项visualmap_opts=VisualMapOpts(is_show=True),#提示框配置项tooltip_opts=TooltipOpts(is_show=True))#添加x轴数据line.add_xaxis(["中国","美国","英国"])#添加y轴数据line.add_yaxis("GDP",[30,40,59])#生成图标,注意它会生成一个前端页面line.render("折线图.html")123456789101112131415161718192021222324252627数据处理网上下载过来的数据有些不符合JSON格式规范,我们就需要将他进行数据处理,转换为JSON格式的数据#导入json模块importjson#打开要处理的数据文件f=open("D:/学习资料/python/课件/课件/资料/资料/可视化案例数据/折线图数据/美国.txt","r",encoding="UTF-8")data=f.readlines()print(data)#把不符合json数据格式的"jsonp_1629350871167_29498("去掉data=data.replace("jsonp_1629350871167_29498(")#把不符合json数据格式的");"去掉data=data[:-2]#数据格式符合json格式后,对数据进行转化data=json.loads(data)#获取美国的疫情数据data=data["data"][0]['trend’]#x1_data存放日期数据x1_data=data['updateDate’]#y1_data存放人数数据y1_data=data['list'][0]["data"]#获取2020年的数据x1_data=data['updateDate'][:314]#获取2020年的数据y1_data=data['list'][0]["data"][:314]12345678910111213141516171819202122232425基本地图#导入第三方包frompyecharts.chartsimportMapfrompyecharts.optionsimportVisualMapOpts#获取map对象map=Map()#设置数据,这些地区名称必须要按照地图显示的设置,否则地图上会没有数据,而且数据必须元组data=[("北京市",99),("上海市",156),("湖南省",589),("台湾省",778),("安徽省",899),("广州省",1089),("湖北省",9)]map.add("地图",data,"china")#设置视觉映射器map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min":1,"max":9,"label":"1-9","color":"#CCFFFF"},{"min":10,"max":99,"label":"10-99","color":"#FFFF99"},{"min":99,"max":499,"label":"99-499","color":"#FF9966"},{"min":500,"max":999,"label":"500-999","color":"#FF6666"},{"min":1000,"max":9999,"label":"1000-9999","color":"#CC3333"}]))#生成地图map.render("基本地图.html")123456789101112131415161718192021222324252627282930313233343536基本柱状图#导入柱状图frompyecharts.chartsimportBarfrompyecharts.optionsimport*#新建柱状图bar=Bar()#添加数据bar.add_xaxis(["中国","美国","英国"])bar.add_yaxis("GDP",[20,30,10],#设置数值标签在右侧label_opts=LabelOpts(position="right"))#反转xy轴bar.reversal_axis()#生成图表bar.render("基本柱状图.html")1234567891011121314151617181920时间线-Timeline():建一个一维的x轴,轴上每一个点就是一个图表对象二十,课后练习案例pymysql综合案例读取1月和2月数据集并且存储到数据库中#数据处理文件#导入jsonimportjson#读取文件f=open("D:/学习资料/python/课件/课件/第13章资料/2011年1月销售数据.txt","r",encoding="UTF-8")pydata=f.readlines()f1=open("D:/学习资料/python/课件/课件/第13章资料/2011年2月销售数据JSON.txt","r",encoding="UTF-8")data1=f1.readlines()——————————————————————————————————————————————————#导入pymysql第三方包frompymysqlimportConnection#导入处理过后的数据集import销售数据处理文件asdata#导入jsonimportjson#获取连接对象conn=Connection(host='localhost',port=3306,user='root',password='123456',autocommit=True)#获取游标对象cusor=conn.cursor()#选择数据库conn.select_db("test")#执行sql语句#cusor.execute("createtablesale_data(yearvarchar(255),order_idvarchar(255),sumint,locationvarchar(255))")forstrindata.pydata:year=str.split(",")[0]order_id=str.split(",")[1]sum=int(str.split(",")[2])location=str.split(",")[3]cusor.execute(f"insertsale_datavalues('{year}','{order_id}',{sum},'{location}')")fordictindata.data1:singal_data=json.loads(dict.strip("\n"))year=singal_data["date"]order_id=singal_data["order_id"]sum=int(singal_data["money"])location=singal_data["province"]cusor.execute(f"insertsale_datavalues('{year}','{order_id}',{sum},'{location}')")#关闭连接conn.close()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647pyspark案例1.使用学习到的内容,完成:读取文件,统计文件内,单词的出现数量#导入第三方包frompysparkimportSparkConf,SparkContext#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#将文件转化为为rdd对象rdd=sc.textFile("D:/学习资料/python/课件/课件/第15章资料/资料/hello.txt")#将所有的单词都取出来words=rdd.flatMap(lambdax:x.split(""))#将所有单词都加上1作为valuewords_one=words.map(lambdaxx,1))#对单词分组并求和result=words_one.reduceByKey(lambdaa,b:a+b)#打印输出的的结果print(result.collect())#关闭spark程序sc.stop()12345678910111213141516171819202122232.使用Spark读取文件进行计算:各个城市销售额排名,从大到小全部城市,有哪些商品类别在售卖,北京市有哪些商品类别在售卖#导入第三方包frompysparkimportSparkConf,SparkContextimportjson#配置Spark读取到python解释器importosos.environ['PYSPARK_PYTHON']="D:/学习工具/python.exe"#获取spark对象conf=SparkConf().setMaster("local[*]").setAppName("test_spark")#获取SparkContext对象sc=SparkContext(conf=conf)#获取rdd对象items=sc.textFile("D:/学习资料/python/课件/课件/第15章资料/资料/orders.txt")#按照|划分items_split=items.flatMap(lambdax:x.split("|"))#将每个json字符串转换为字典对象items_dict=items_split.map(lambdax:json.loads(x))#统计各个城市的销售额items_city_sum=items_dict.map(lambdaxx["areaName"],int(x["money"])))items_city_sum=items_city_sum.reduceByKey(lambdaa,b:a+b)#对城市销售额进行排序items_city_sum.sortBy(lambdax:x[1],ascending=False,numPartitions=1)#输出排序结果print(f"销售额排名为{items_city_sum.collect()}")#统计各个城市所卖的商品items_sale=items_dict.map(lambdax:x["category"])#对所卖的商品进行去重items_sale=items_sale.distinct()#所卖的商品类别有print(f"所卖的商品类别有{items_sale.collect()}")#统计北京市所卖的商品items_beijin=items_dict.map(lambdaxx["areaName"],x["category"]))#过滤保留北京数据items_beijin=items_beijin.filter(lambdax:x[0]=="北京")#对北京的商品进行去重items_distinct_beijin=items_beijin.map(lambdax:x[1]).distinct()#北京所卖的商品类别有print(f"北京所卖的商品类别有{items_distinct_beijin.collect()}")123456789101112131415161718192021222324252627282930313233343536373839数据可视化综合案例1.全球2020年确诊人数统计图#美国数据处理importjson#打开要处理的数据文件f=open("D:/学习资料/python/课件/课件/资料/资料/可视化案例数据/折线图数据/美国.txt","r",encoding="UTF-8")us_data=f.read()print(us_data)#把不符合json数据格式的"jsonp_1629350871167_29498("去掉data=us_data.replace("jsonp_1629344292311_69436(","")#把不符合json数据格式的");"去掉data=data[:-2]#数据格式符合json格式后,对数据进行转化为python数据格式data=json.loads(data)#获取美国的疫情数据pydata=data["data"][0]["trend"]#获取2020年的数据x1_data=pydata["updateDate"][45:314]#获取2020年的数据y1_data=pydata["list"][0]["data"][45:314]---------------------------------------------#日本数据处理importjson#打开要处理的数据文件f=open("D:/学习资料/python/课件/课件/资料/资料/可视化案例数据/折线图数据/日本.txt","r",encoding="UTF-8")jp_data=f.read()print(jp_data)#把不符合json数据格式的"jsonp_1629350871167_29498("去掉data=jp_data.replace("jsonp_1629350871167_29498(","")#把不符合json数据格式的");"去掉data=data[:-2]#数据格式符合json格式后,对数据进行转化data=json.loads(data)#获取美国的疫情数据pydata=data["data"][0]["trend"]#获取2020年的数据x1_data=pydata["updateDate"][46:314]#获取2020年的数据y1_data=pydata["list"][0]["data"][46:314]-----------------------------------------------#印度数据处理importjson#打开要处理的数据文件f=open("D:/学习资料/python/课件/课件/资料/资料/可视化案例数据/折线图数据/印度.txt","r",encoding="UTF-8")in_data=f.read()print(in_data)#把不符合json数据格式的"jsonp_1629350871167_29498("去掉data=in_data.replace("jsonp_1629350745930_63180(","")#把不符合json数据格式的");"去掉data=data[:-2]#数据格式符合json格式后,对数据进行转化data=json.loads(data)#获取美国的疫情数据pydata=data["data"][0]["trend"]#获取2020年的数据x1_data=pydata["updateDate"][:269]#获取2020年的数据y1_data=pydata["list"][0]["data"][:269]----------------------------------------------#全球折线图生成#导入折线图模块frompyecharts.chartsimportLine#导入全局配置选项模块importpyecharts.optionsasopts#导入jsonimportjson#导入处理后的数据import美国数据处理asus_dataimport日本数据处理asjp_dataimport印度数据处理asid_data#创建折线图l=Line(init_opts=opts.InitOpts(width="1600px",height="800px"))#图表全局设置l.set_global_opts( #设置图和位置 title_opts=opts.TitleOpts(title="全球2020年确诊人数",pos_left="center"), #x轴配置项 xaxis_opts=opts.AxisOpts(name="时间"),#轴 #y轴配置项 yaxis_opts=opts.AxisOpts(name="累计确诊人数"),#轴 #图例配置项 legend_opts=opts.LegendOpts(pos_left='70%'),#图例的位置)#添加数据l.add_xaxis(xaxis_data=us_data.x1_data)l.add_yaxis(y_axis=us_data.y1_data,series_name="美国2020确诊人数",label_opts=opts.LabelOpts(is_show=False))l.add_yaxis(y_axis=jp_data.y1_data,series_name="日本2020确诊人数",label_opts=opts.LabelOpts(is_show=False))l.add_yaxis(y_axis=id_data.y1_data,series_name="印度2020确诊人数",label_opts=opts.LabelOpts(is_show=False))#生成图表l.render("全球疫情折现图.html")1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192932.国内疫情地图#国内疫情地图数据处理文件importjson#读取文件f=open("D:\学习资料\python\课件\课件\资料\资料\可视化案例数据\地图数据\疫情.txt","r",encoding="UTF-8")data=f.read()#将json数据转换为python数据格式data=json.loads(data)pydata=data["areaTree"][0]["children"]location=list()fordictinpydata:ifdict["name"]=="北京"ordict["name"]=="上海"ordict["name"]=="天津"ordict["name"]=="重庆":location.append((dict["name"]+"市",dict["total"]["confirm"]))elifdict["name"]=="香港"ordict["name"]=="澳门":location.append((dict["name"]+"特别行政区",dict["total"]["confirm"]))elifdict["name"]=="内蒙古"ordict["name"]=="西藏":location.append((dict["name"]+"自治区",dict["total"]["confirm"]))elifdict["name"]=="广西":location.append((dict["name"]+"壮族自治区",dict["total"]["confirm"]))elifdict["name"]=="宁夏":location.append((dict["name"]+"回族自治区",dict["total"]["confirm"]))elifdict["name"]=="新疆":location.append((dict["name"]+"维吾尔自治区",dict["total"]["confirm"]))else:location.append((dict["name"]+"省",dict["total"]["confirm"]))#测试if__name__=='__main__':print(location)_________________________________________________#生成地图文件#导入第三方包frompyecharts.chartsimportMapfrompyecharts.optionsimportVisualMapOpts#导入处理后的数据import国内疫情地图数据处理aschina_data#创建地图对象map=Map()#添加数据map.add("国内疫情地图",china_data.location,"china")map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min":1,"max":9,"label":"1-9","color":"#CCFFFF"},{"min":10,"max":99,"label":"10-99","color":"#FFFF99"},{"min":99,"max":499,"label":"99-499","color":"#FF9966"},{"min":500,"max":999,"label":"500-999","color":"#FF6666"},{"min":1000,"max":9999,"label":"1000-9999","color":"#CC3333"},{"min":9999,"label":"1000以上","color":"#990033"}]))#生成地图map.render("国内疫情地图.html")12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455563.省内疫情地图#湖北省疫情数据处理文件#导入jsonimportjson#读取数据文件f=open("D:\学习资料\python\课件\课件\资料\资料\可视化案例数据\地图数据\疫情.txt","r",encoding="UTF-8")#数据处理data=f.read()data=json.loads(data)pydata=data["areaTree"][0]["children"][6]["children"]location=list()fordictinpydata:ifdict["name"]=="神农架":location.append((dict["name"]+"林区",dict["total"]["confirm"]))elifdict["name"]=="恩施州":location.append((dict["name"][:2]+"土家族苗族自治区",dict["total"]["confirm"]))else:location.append((dict["name"]+"市",dict["total"]["confirm"]))#测试if__name__=='__main__':print(location)________________________________________________#生成地图文件#导入第三方包frompyecharts.chartsimportMapfrompyecharts.optionsimportVisualMapOpts#导入处理后的数据import省内疫情地图数据处理asdata#新建地图对象map=Map()#添加数据map.add("湖北省疫情地图",data.location,"湖北")#设置视觉映射器map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=True,#表示展示数据的标注值是否显示在色块上面,如果该值为True,标注值将被绘制出来。is_piecewise=True,#表示数据是否需要分段区分(例如分段颜色显示),如果该值为True,则绘制类似于深浅不同的颜色块表示数据的分段程度,如果该值为False,则表示将具体值用具体颜色表示。pieces=[{"min":1,"max":9,"label":"1-9","color":"#CCFFFF"},#颜色分区{"min":10,"max":99,"label":"10-99","color":"#FFFF99"},{"min":99,"max":499,"label":"99-499","color":"#FF9966"},{"min":500,"max":999,"label":"500-999","color":"#FF6666"},{"min":1000,"max":9999,"label":"1000-9999","color":"#CC3333"},{"min":9999,"label":"1000以上","color":"#990033"}]))#生成地图map.render("湖北省疫情地图.html")12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849503.动态柱状图#动态柱状图的数据处理文件#导入jsonimportjson#读取文件f=open("D:/学习资料/python/课件/课件/资料/资料/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv","r",encoding="GB2312")data=f.readlines()#处理数据#删除首行元素data.pop(0)#以逗号划分#构建嵌套字典{年份:[(国家:GDP)]}dict=dict()forstrindata:year=int(str.split(",")[0])country=str.split(",")[1]GDP=float(str.split(",")[2])try:dict[year].append([country,GDP])except:dict[year]=[]dict[year].append([country,GDP])#每一年year=dict.keys()#year=sorted(year)print(year)#排序每一年的GDP前八个国家defchoose_key(element):returnelement[1]foriinyear:dict[i].sort(key=choose_key,reverse=True)————————————————————————————————————————————————#动态柱状图的生成#导入相关包frompyecharts.chartsimportBar,Timelinefrompyecharts.optionsimport*#导入处理好的数据importGDP动态柱状图数据处理asdata#新建一个时间线line=Timeline()#新建柱状图foriindata.year:countrys=[]gdps=[]#取出GDP前八的国家pydata=data.dict[i][0:8]#准别xy轴额数据forcountry_gdpinpydata:countrys.append(country_gdp[0])gdps.append(country_gdp[1]/100000000)bar=Bar()#反转数据,大的数据在上,小的在下countrys.reverse()gdps.reverse()#设置bar.set_global_opts(title_opts=TitleOpts(title=f"{i}年全球前八国家"))#添加xy轴数据bar.add_yaxis("GDP(亿)",gdps,label_opts=LabelOpts(position="right"))bar.add_xaxis(countrys)#反转xy轴bar.reversal_axis()line.add(bar,str(i))#设置自动播放line.add_schema(play_interval=1000,#自动播放时间间隔is_timeline_show=True,#是否在播放的时候显示时间线is_auto_play=True,#是否自动播放is_loop_play=True#是否循环播放)#生成柱状图line.render("GDP动态柱状图.html")123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172▍学习资源推荐零基础Python学习资源介绍👉Python学习路线汇总👈Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(学习教程文末领取哈)👉Python必备开发工具👈温馨提示:篇幅有限,已打包文件夹,获取方式在:文末👉Python学习视频600合集👈观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。👉实战案例👈光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。👉100道Python练习题👈检查学习结果。👉面试刷题👈资料领取上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码输入“领取资料”即可领取。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 18:58 , Processed in 0.595762 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表