python基础-超详细-基本涵盖所有基础知识点
·
python
目录
c.标识符不能用数字开头,会出错,同时大小写也可以区分不同的标识符
e.在写函数的时候,如果没有提示的话,就意味着该函数不在这个库里代表着出错
a. 查看数据类型使用type语句,同时可以用变量来存储变量的类型
c.七个运算符及复合赋值运算符;除法得到的结果是浮点型,保证精度
d.三引号定义;使用变量接收,就成了定义,如果不用变量接受,就成了多行注释
a.如果想要字符串内包含双引号,可以再单引号内包含双引号,反之可包含双引号;还可以使用转义字符来把引号的效用效果取消
d.在定义函数之后可以解释函数参数的作用,使用""" """三对引号
f.在定义其他函数的时候,想要引用其他函数,可以通过加入参数来影响函数的执行结果
1.重要的小细节
a.使用#注释的时候要空一格,保证代码的规范性
b.单行注释使用#,多行注释使用""" 三队 """
c.标识符不能用数字开头,会出错,同时大小写也可以区分不同的标识符
d. \t 相当于tab键
print("hello\tworld")
print ("查询余额\t[1]")
print ("查询\t\t[1]")
print ("查余额\t[1]")
# 当相差的数字距离很远的时候可以选择多加一个/t来保证对齐
e.在写函数的时候,如果没有提示的话,就意味着该函数不在这个库里代表着出错
#### f. 输出方式
"""
b:输出整数的二进制方式
c:输出整数对应的 Unicode 字符,
d:输出整数的十进制方式。
o:输出整数的八进制方式
x:输出整数的小写十六进制方式
X:输出整数的大写十六进制方式
"""
s = "asweqweqeq"
d = "sdasdas"
print("'{1:30}{0:^30}'".format(s, d)) # 0,1是参数的位置
print("{0:o}{0:X}".format(123))#支持多种类型
print("{:>15s}:{:<8.2f}".format("length", 23.12431))
print("{0:*^40}".format(1))
"""
e:输出浮点数对应的小写字母e的指数形式
E:输出浮点数对应的大写字母E的指数形式
f:输出浮点数的标准浮点形式。
%:输出浮点数的百分形式。
浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式
"""
print("{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14))
2.基础知识点
1.运算符与type
a. 查看数据类型使用type语句,同时可以用变量来存储变量的类型
name = "黑马程序员" name_type = type(name) # 查看变量的类型 print(name_type)
b.类型装换,将浮点数转成整数会掉精度
num_str = str(11) print(type(num_str),num_str) float_str = str(11.345) print(type(float_str),float_str)
c.七个运算符及复合赋值运算符;除法得到的结果是浮点型,保证精度


d.三引号定义;使用变量接收,就成了定义,如果不用变量接受,就成了多行注释
name = """你好 ,我很好 """
2.字符串
a.如果想要字符串内包含双引号,可以再单引号内包含双引号,反之可包含双引号;还可以使用转义字符来把引号的效用效果取消
name = "\" 小王八蛋 "#可输出一个单引号
b.字符串的拼接
name = "宇璠"
address = "燕山"
num_1 = 100
print("xxx"+name+"xxx"+address)
# 简单的拼接,但是这个只可以字符串的拼接
message = "Python大数据学科,%s,你好%s" % (class_num, num_1)
print(message)
# 也可以使用%d,%f来占位,这样不改变数据类型
# %5.2f,表示将宽度控制为5,将小数点精度控制在两位小数
"""
还可以使用f{}来快速格式化
"""
print(f"我是{name},我成长于:{address},我的是:{num_1}")
#输出不换行!
print("hello", end = '')
print("world") # 使用一个接一行
c.字符串格式化表达式
print("1 * 1的结果是:%d" % (1 * 1))
print(f"1 * 1的结果是:{1 * 1}")
print("字符串在python的中类型是:%s" % type('字符串'))
for x in range(1, 10):
for j in range(1, x+1):
print(f"%d * %d = {x * j}\t" % (j, x), end='')
print()
#九九乘法表
d.字符串的替代,分割,查找,指定输出
my_str = "ni hao wo shi xiao shu"
# 输出倒数的第十个元素
value_2 = my_str[::-1][1: 2] # 倒序输出第二个字符
# index方法
value =my_str.index("wo")
print(f"在字符串{my_str}中查找and,其起始下标是:{value}")
# replace方法
new_my_str = my_str,replace("wo","程序")
print(f"将字符串{my_str},进行替换后得到:{new_my_str}")
e.字符串的分割
# 语法:字符串.split(分隔符字符串)
# 功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中注意:字符串本身不变,而是得到了一个列表对象
my_str = "hello python itheima itcast"
my_str_list = my_str.split(" ")
print(f"将字符串{my_str}进行split切分后得到:{my_str_list},类型是:{type(my_str_list)}")
f.字符串的规整操作

g.总结字符串函数的使用
#作为数据容器,字符串有如下特点 """ 只可以存储字符串 长度任意(取决于内存大小) 支持下表索引 允许重复字符串存在 不可以修改(增加或删除元素) 支持for循环,遍历取出字符串 """

h. format的使用
3.布尔类型 True or False
a.布尔类型的简单说明
result = "itcast" == "itheima"
print(f"字符串itcast是否和itheima相等,结果是:{result},类型是:{type(result)}")
# 定义布尔类型
bool_1 = True
bool_2 = False
print(f"bool_1变量的内容是:{bool_1},类型是:{type(bool_1)}")
# 可以在print语句中使用{}直接格式化表达式, {num1 == num2},会返回True 或者 Flase
b.六类运算符
4.判断语句
a.使用if的时候要记得缩进和冒号
age = int(input("请输入你的年龄:"))
if age > 19 : # 冒号
# 缩进
elif age < 10 :
print("小王八别打人")
else :
print("小王八")
# 自上而下运行,一定只有一个被执行
if int(input("请输入你的年龄:")) > 19 : # 冒号
# 缩进
# 这样写就不用一直输入多个数,而是一个一个判断
import random # 随机取数
num = random.randint(1,10)
print(num)
5.循环语句
a. while循环
i = 0
while i < 100 :
print("小王八")
i += 1
#循环一百次
b. for循环
# for循环处理字符串
for x in name :
print(name) # 可以逐步打印出字符串
# range的基本用法
"""
range(0,10,2)前面两个是范围,后面一个是步长;
范围是左闭右开
默认从0开始range(10);步长为 1
千万别忘记打冒号!
"""
for x in range(0,10,1) :
print(x)
6.函数的使用
a.函数的使用需要调用
def say_hi() :
print("你好")
say_hi()
b.函数的返回值可以通过变量去接收
def add_up(a,b) :
result = a + b
return result
r = add(5,6)
print(r)
c.函数如果没有加return,也会返回None
def xiaowangba() :
print("xiaowangba")
return None
#在if判断中,None表示False的意思
def check_age(age):
if age > 18 :
return "SUCCESS"
else :
return None
result = check_age(16)
if not result:
print("未成年,不可以进入")
else is result:
print(f"您是成年人,可以自由玩游戏!{result}{check_age(18)}")
d.在定义函数之后可以解释函数参数的作用,使用""" """三对引号
def add_up(age,weight):
"""
函数说明
:param age.....
: parem weight...
: return: ...
"""
print("nihao")
return None
e.在函数内部修改全局变量
num = 500
def text():
global num # 设置内部定义的变量为全局变量
num = 100
print(f"{num}")
# 记得定义函数之后要记得执行
f.在定义其他函数的时候,想要引用其他函数,可以通过加入参数来影响函数的执行结果
def text(shou_header):
if shou_header :
print("------xiao---------")
print("xxx")
def guess():
print("xxx")
text(False)
#这样可以选择性的使用text函数的内容
h. return的返回;可无限返回input
def text():
if input("请输入数字:") == 1:
return input("请输入数字哦:")
while True :
text()
7.数据容器入门
a.列表可以一次存储多个数据,且都可以为不同的数据类型,支持嵌套
my_list = ["itheima","itcast","python"] print(my_list) # 会将所有的内容打印出来 list_1 = [[1,2,3],[2,3,4],"你好"] # 可以嵌套使用 print(type(my_list)) # 打印类型 print(my_list[0]) """ 第一个元素是0,从后向前也可以,最后一个是-1,以此类推 双层嵌套 使用下标索引的时候不要超出范围 """ print(list_1[0][2]) # 将会是3
b.查找索引
my_list = ["iao",2,4,67]
index = mylist.index("67")
print(f"67在列表中的下标位置是{index}")
c.修改列表
my_list = ["iao",2,4,67] my_list[1] = 6 print(my_list) # 列表的内容发生改变 # 反向下标 check_num = my_list[-2] # 4
d.插入数据,追加数据
my_list = [2,4,67]
my_list.insert(1,"best")
my_list.insert(2,2)
my_list.append("nihao")
print(f"列表在追加了元素后,结果是:{my_list}")
#添加一批元素
list_2 = [1,2,4,7]
list_2.extend([4,3,2])
print(list_2)
e.删除下标
mylist = [1,2,45,6]
del mylist[2]
print(f"列表删除元素之后的结果是:{mylist}")
###
mylist.pop(2)
element = mylist.pop(1) # 可以使用变量来接收删除的元素
print(mylist)
"""
通过查找内容来删除元素
"""
list_3 = [56,7,1,5,3,2,1,5,"sdas"]
list_3.remove(1)
#一次只能去除一个值
list_3.remove("sdas")
print(list_3)
f.清空列表,统计列表,统计列表中元素的全部数量
# 清空列表 list_4 = [2,5,7,3,7,4] list_4.clear() print(list_4) # 统计列表 count = list_4.count(7) print(count) # 统计列表中元素的全部数量 print(len(list_4)) receive = len(list_4) print(receive)
g.元组定义:
定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型
#定义空元组
#定义元组
t1=(1,"Hello", True)
变量名称 = () # 方式1
变量名称 = tuple() # 方式2
# !# 定义单个元素时要在后面加上“,”号
t = ("hello",)
#根据下标(索引)取出数据
t1=(1,2,'hello')
print(t1[2]) #结果:"he11o
# 根据indexO),查找特定元素的第一个匹配项
t1=(1,2,'hello',3,4,'hello')
print(t1.index('hello')) # 结果:2
# 统计某个数据在元组内出现的次数
t1=(1,2,'hello',3,4,'hello')
print(t1.count('hello')) # 结果:2
# 统计元组内的元素个数
t1=(1,2,3)
print(len(t1)) # 结果 3
h.序列
# 对list进行切片,从1开始,4结束,步长1
my_list = [0,1,2,3,4,5,6]
result1 = my_list[1:4] # 步长默认是一,可以省略
print(f"结果1:{result1},类型是{type(result1)}")
print(f"{result1[2]}")
# 对tuple 进行切片,从头开始,到最后结束,步长1
my_tuple = (0,1,2,3,4,5,6)
result2 = my_tuple[:]
# 起始和结束不写表示从头到尾,步长为一可以省略
print(f"结果2:{result2}")
# 对str进行切片,从头开始,到最后结束,
my_str = "1234567"
result3 = my_str[::2]
print(f"结果3:{result3}")
#对str进行切片,从头开始,到最后结束,步长-1
my_str = "1234567"
result4 = my_str[::-1]
#将序列反转
print(f"结果4:{result4}")
#可以注意我们对于不同的类型有不同的处理方法
#省略的东西不同;序列反转是一个很好的东西
i.集合:{元素, 元素, }去重,顺序改变
my_set_empyt = set() # 定义空集合
my_set = {'as',"sdasd"}
print(f"my_set的内容是:{my_set},类型是:{type(my_set)}")
# 添加新元素
my_set.add("Python")
print(my_set)
# 移除元素
my_set.remove("as")
print(f"移除后的结果是:{my_set}")
# 随机去除一个元素,集合内容发生改变
element = my_set.pop()
print(f"集合被取出元素是:{element},取出元素后:{my_set}")
# 清空集合
my_set.clear()
print(f"集合被清空,结果是:{my_set}")
#取两个集合的差集
set1 = {1,2,3}
set2 = {1,4,6}
set3 = set1.difference(set2)
print(f"set1的结果是:{set1}")
print(f"set2的结果是:{set2}")
print(f"set3的结果是:{set3}")
#消除两个集合的差集
#对比集合1和集合2,在集合1内,删除和集合2相同的元素
#结果:集合1被修改,集合2不变
set4 = {23,24,14,235,52}
set5 = {23,235,4,1,41,13,4}
set4.difference_update(set5)
print(f"set4的结果是:{set4}")
print(f"set5的结果是:{set5}")
#将集合合并,将集合1和集合2组成新集合
setx1 = {1,2,45}
setx2 = {1,3,5,23}
setx3 = setx1.union(setx2)
print(f"集合setx1和集合setx2合并的结果是:{setx3}")
#统计元素数量
number = len(setx2)
print(number)
#集合的遍历,不能用while循环
set6 = {123,35,12,3123,21,3}
for element in set6:
print(f"集合的元素有:{element},类型是:{type(element)}")

j.字典
# 定义字典
my_dict1 = {"小王八":99,"炸裂":98,"钉钉":98}
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f"字典1的内容是:{my_dict2},类型:{type(my_dict2)}")
print(f"字典1的内容是:{my_dict3},类型:{type(my_dict3)}")
# 不能重复,新的会把老的覆盖
score = my_dict1["小王八"]
print(f"小王八的考试分数是:{score}")
# 字典的嵌套
stu_score_dict = {
"小王八":{
"语文":99,
"数学":100,
"英语":100,
},#不要忘记这还有一个符号
"小明" :{
"语文":99,
"数学":100,
"英语":100,
}
}
print(f"小王八的成绩是:{stu_score_dict["小王八"]}")
print(f"小王八的语文成绩是:{stu_score_dict["小王八"]["语文"]}")
k.字典的常用操作
# 字典的常用操作
my_dict1 = {"小王八":99,"炸裂":98,"钉钉":98}
# 新增元素
my_dict1["张信哲"] = 66
print(f"字典经过新增元素后,结果是:{my_dict1}")
# 更新元素
my_dict1["小王八"] = 100
print(f"字典经过更新后,结果是:{my_dict1}")
#删除元素
score = my_dict1.pop("张信哲")
print(f"字典中被移除了一个元素,结果:{my_dict1},张信哲的考试分数是:{score}")
#清空元素
my_dict1.clear()
print(f"字典被清空了,内容是:{my_dict1}")
my_dict1 = {"小王八":99,"炸裂":98,"钉钉":98}
keys = my_dict1.keys()
print(f"字典的全部keys是:{keys}")
#字典的遍历
for key in keys : #可以换成my_dict1
print(f"字典的key是:{key}")
print(f"字典的value是:{my_dict1[key]}")
#字典元素数量,用len(字典)
l. max与min,类型转换
print(f"比较大小:{'be' > 'c'}")
my_str = "asdad "
my_str = max(my_str)
print(f"my_str的排序之后的结果是:{my_str}")
my_str = list(my_str)
print(f"将my_str转换成元组类型:{my_str},类型是:{type(my_str)}")
###################
my_list =[1,2,3,4,5]
my_tuple =(1,2,3,4,5)
my_str = "abcdefg"
my_set ={1,2,3,4,5}
my_dict ={"key1":1,"key2":2,"key3":3,"key4":4,"key5": 5}
#len元素个数
print(f"列表 元素个数有:{len(my_list)}")
print(f"元组 元素个数有:{len(my_tuple)}")
print(f"字符串元素个数有:{len(my_str)}")
print(f"集合 元素个数有:{len(my_set)}")
print(f"字典 元素个数有:{len(my_dict)}")
#max最大元素
print(f"列表 最大的元素是:{max(my_list)}")
print(f"元组 最大的元素是:{max(my_tuple)}")
print(f"字符串最大的元素是:{max(my_str)}")
print(f"集合 最大的元素是:{max(my_set)}")
print(f"字典 最大的元素是:{max(my_dict)}")
#min最小元素
print(f"列表 最小的元素是:{min(my_list)}")
print(f"元组 最小的元素是:{min(my_tuple)}")
print(f"字符串最小的元素是:{min(my_str)}")
print(f"集合 最小的元素是:{min(my_set)}")
print(f"字典 最小的元素是:{min(my_dict)}")
#类型转换:容器转列表
print(f"列表转列表的结果是:{list(my_list)}")
print(f"元组转列表的结果是:{list(my_tuple)}")
print(f"字符串转列表结果是:{list(my_str)}")
print(f"集合转列表的结果是:{list(my_set)}")
print(f"字典转列表的结果是:{list(my_dict)}")
#其他的类型也是这样转,但是不可以转成字典,因为不符合字典的书写规范
m.总结
3.函数的进阶使用
a.接收函数的多返回值
# 接收函数的多返回值
def text_return():
return 1, "hello", True
x, y, z = text_return()
print(x)
print(y)
print(z)
# 位置参数
def user_info(name, age, gender):
print(f"你的名字是{name},年龄是{age},性别是{gender}")
user_info("TOM", 19, "男")




b.函数作为参数传递
# 函数的传入
def text_func(compute):
result = compute(3, 2) # 确定compute是函数
print(f"compute参数类型是:{type(compute)}")
print(f"计算结果是:{result}")
def compute(x, y):
return x + y
# 调用,并传入函数
text_func(compute)
c.匿名函数使用lambda关键字进行定义
"""
注意事项:
匿名函数用于临时构建一个函数,只用一次的场景
匿名函数的定义中,函数体只能写一行代码,如果函数体要写多行代码,不可用lambda匿名函数,应使用def定义带名函数
"""
def test_func(compute):
result = compute(1,2)
print(f"结果是:{result}")
# 通过lambda匿名函数的形式,将匿名函数作为参数传入
test_func(lambda x, y: x + y)
test_func(lambda x, y: x + y)
# 再次使用需要重新定义,自带return
d. random函数的使用

e. 函数date time

4.文件
a.文件的编码
#编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑,最常用的是UTF-8编码
b. open()打开函数
"""
使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
open(name,mode.encoding)
name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
mode:设置打开文件的模式(访问模式):只读、写入、追加等
encoding:编码格式(推荐使用UTF-8)
注意:此时的'f'是'open'函数的文件对象,对象是Python中一种特殊的数据类型,拥有属性和方法,可以使用对象.属性或对象,方法对其进行访问
r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。
a:打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后如果该文件不存在,创建新文件进行写入。
read(num):num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
readlines():可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
"""
f = open(r"D:\software\pycharm\text.txt", 'r', encoding="UTF-8")
print(type(f))
print(f"读取十个字节的结果:{f.read(10)}")
print(f"read方法读取全部内容的结果是:{f.read()}")
# 使用read之后的光标不会回到原来的位置,所以前面的内容不会被再次读取
print("{0:*^40}".format(1))
# readlines()的使用
lines = f.readlines() # 读取全部文件,封装到列表中
print(f"lines对象的类型是:{type(lines)}")
print(f"lines的内容:{lines}")
# readline一次读取一行
# for循环读取文件行
for line in f:
print(f"每一行的数据是:{line}")
# 文件的关闭
f.close()
# with open as f:
with open(r"D:\software\pycharm\text.txt", 'r', encoding="UTF-8") as f:
for line in f:
print(f"每一行数据是:{line}")
c.文件的使用
"""
直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
当调用flush的时候,内容会真正写入文件
这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)
"""
with open(r"D:\software\pycharm\text1.txt", "w", encoding="UTF-8") as f:
f.write("Hello world!!")
f.flush()
# close自带flush()操作
# 打开文件得到文件对象,准备读取
fr = open("D:/bill.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw = open("D:/bill.txt.bak", "W", encoding="UTF-8")
# for循环读取文件
for line in fr:
line = line.strip()
# 判断内容,将满足的内容写出
if line.split("")[4] == "测试":
continue # continue进入下一次循环,这一次后面的内容就跳过了
# 将内容写出去
fw.write(line)
# 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fw.write("\n")
# close2个文件对象
fr.close()
fw.close() # 写出文件调用close()会自动flush()
5.异常捕获
1.格式
try:
#写正文
except:
print("error")
#也可以在except后面加上错误,指定异常
except NameError as e:
print(e)#能将异常打出来
#捕获多个异常
except (NameError,xxx...) as e:
# 捕获所有异常
try:
print(name)
except Exception as e:
print("出现异常")
print(e)
else:
print("没有出现异常,执行该代码")
finally:
# 无论如何都会执行的代码
print("nihao")
# 关闭文件
# 异常传递具有传递性
2. import,创建一个包
from random import random #里面的函数直接用,不需要加点缀 """ 引入自己的模块的时候,直接把名字引入就ok 如果自己模块的东西有的你不想执行 在上面加上 if __name__=='__main__': 这句话在源文件中可以执行,但是引用过去之后就不可以 __all__ = [, "", ""] 该语句作用是仅指定作用的函数可以使用 """ """ python包 包就是就是一个文件夹,在该文件夹下包含了一个__init__.py(没有就是一个普通的文件夹)文件,该文件夹可用于包含多个模块文件,本质上依然是模块 """ #简单来说,这个就是大包包小包,然后只引用大包就可以用小包 __all__ :控制 import *能够导入的内容
3. j s o n
import json
# json数据可视化
# json数据与python数据的相互转换
data = [{"name": "张", "age": 16}, {"name": "zhang", "age": 20}]
data_str = json.dumps(data, ensure_ascii=False)
print(type(data_str))
# 如果想显示中文,需要加入ensure_ascii=False,不是用ascii码表来显示
print(data_str)
# json转python
data = json.loads(data_str)
print(type(data))
print(data)
6. p ye charts 的基础入门
1.折线图
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
# 创建一个对象
line = Line()
# 给折线图添加x轴的数据
line.add_xaxis(["中国", "美国", "英国"])
# 给折线图添加y轴的数据
line.add_yaxis("GDP", [30, 20, 10])
# 生成图像
# line.render()
# 全局配置选项
line.set_global_opts(
title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"),
legend_opts=LegendOpts(is_show=True),
toolbox_opts=ToolboxOpts(is_show=True),
visualmap_opts=VisualMapOpts(is_show=True),
)
line.render()
2.数据处理成折线图
import json
from pyecharts.charts import Line
from pyecharts.options import *
# 打开文件
f_us = open("D:/software/pycharm/docx/美国.txt", "r", encoding="Utf-8")
f_jp = open("D:/software/pycharm/docx/日本.txt", "r", encoding="Utf-8")
f_yd = open("D:/software/pycharm/docx/印度.txt", "r", encoding="Utf-8")
us_data = f_us.read() # 读取所有文件
jp_data = f_jp.read() # 读取所有文件
in_data = f_yd.read() # 读取所有文件
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")
us_data = us_data[:-2] # 除去末尾的符号,不然不符合要求
jp_data = jp_data[:-2] # 除去末尾的符号,不然不符合要求
in_data = in_data[:-2] # 除去末尾的符号,不然不符合要求
# JSON转Python字典
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
# 获取trend key
us_trend_data = us_dict['data'][0]['trend']
jp_trend_data = jp_dict['data'][0]['trend']
in_trend_data = in_dict['data'][0]['trend']
# 获取日期数据,用于x轴,取2020年(到315下标结束)
us_x_data = us_trend_data['updateDate'][:314]
jp_x_data = jp_trend_data['updateDate'][:314]
in_x_data = in_trend_data['updateDate'][:314]
# 获取确认数据,用于y轴,取2020年(到315下标结束)
us_y_data = us_trend_data['list'][0]['data'][:314]
jp_y_data = jp_trend_data['list'][0]['data'][:314]
in_y_data = in_trend_data['list'][0]['data'][:314]
# 生成图表
line = Line() # 构建折线图对象
# x轴数据
line.add_xaxis(us_x_data)
# y轴
line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(False))
line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(False))
line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(False))
# 设置全局选项
line.set_global_opts(
title_opts=TitleOpts(title="2020年疫情三国数据", pos_left="center", pos_bottom="1%"),
legend_opts=LegendOpts(is_show=True),
toolbox_opts=ToolboxOpts(is_show=True),
visualmap_opts=VisualMapOpts(True)
)
# 生成图表
line.render()
f_us.close()
f_jp.close()
f_yd.close()
3.简单的地图表
from pyecharts.charts import *
from pyecharts.options import VisualMapOpts
# 准备地图对象
map = Map()
# 准备数据
data = [
("北京市", 99),
("上海市", 199),
("湖南省", 299),
("台湾省", 399),
("广东省", 499)
]
# 添加数据
map.add("测试地图", data, "china")
map.add("测试地图", data, "china", layout_size=100)
# 设置全局选项
map.set_global_opts(
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
max_=1000
# pieces=[
# {"min": 1, "max": 9, "label": "1-9", "color": "white"}, # #CCFFFF}
# {"min": 2, "max": 99, "label": "10-99", "color": "black"},
# {"min": 3, "max": 500, "label": "100-500", "color": "#990033"}
# ]
)
)
map.render()
4.全国疫情图
# 记得加省,加自治区,加市,不然没用,而且max_和pieces不能混用
import json
from pyecharts.charts import *
from pyecharts.options import *
# 读取文件
f = open("D:/software/pycharm/docx/疫情.txt", "r", encoding="UTF-8")
data = f.read()
# 关闭文件
f.close()
# 取数据
data_dict = json.loads(data)
province_data_list = data_dict["areaTree"][0]["children"]
# 组装每个省份和确诊人数为元组,并将各个省份的数据都封装入列表中
data_list = [] # 绘图需要的数据列表
for province_data in province_data_list:
province_name = province_data["name"]
province_confirm = province_data["total"]["confirm"]
data_list.append((province_name, province_confirm))
# 造一个对象
map = Map()
map.add("各省份确诊人数", data_list, "china")
# 配置全局选项
map.set_global_opts(
title_opts=TitleOpts(title="全国疫情图"),
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
max_=100000
)
)
# 绘图
map.render("全国疫情地图.html")
5.河南省疫情地图
import json
from pyecharts.charts import *
from pyecharts.options import *
f = open("D:/software/pycharm/docx/疫情.txt", "r", encoding="UTF-8")
data = f.read()
f.close()
data_dict = json.loads(data)
cities_data = data_dict["areaTree"][0]["children"][3]["children"]
data_list = []
for city_data in cities_data:
city_name = city_data["name"] + "市"
city_confirm = city_data["total"]["confirm"]
data_list.append((city_name, city_confirm))
data_list.append(("济源市", 9))
map=Map()
map.add("河南省疫情分布", data_list, "河南")
map.set_global_opts(
title_opts=TitleOpts(title="全国疫情图"),
toolbox_opts=ToolboxOpts(is_show=True),
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
max_=300
)
)
map.render("河南省疫情地图.html")
6.横向柱状图
from pyecharts.charts import Bar
from pyecharts.options import *
# 使用Bar构建基础柱状图
bar = Bar()
# 添加x轴的数据
bar.add_xaxis(["中国", "美国", "英国"])
# 添加y轴的数据
bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))
# 反转x轴和y轴
bar.reversal_axis() # 不反转就是正常的图形
# 绘图
bar.render("基础柱状图.html")
7.动态时间线示意图
# 有时间线的柱状图开发
from pyecharts.globals import ThemeType
from pyecharts.charts import *
from pyecharts.options import *
# 修改颜色,创立时间线对象
timeline = Timeline(
{"theme": ThemeType.ESSOS}
)
d = [[30, 20, 10], [50, 40, 60], [30, 89, 76]] # 贮存数据
range_color = ['#FFC0CB', '#FFFF00', '#008000'] # 颜色变化
for i in range(3):
bar = Bar()
bar.add_xaxis(["中国", "美国", "英国"])
bar.add_yaxis("GDP", d[i], label_opts=LabelOpts(position="right"))
bar.reversal_axis()
bar.set_global_opts(
title_opts=TitleOpts(title="GDP柱状图"), # 加名称
visualmap_opts=VisualMapOpts( # 加范围显示
is_show=True,
dimension=0, # 加上这个就欧克了,映射维度
range_color=range_color, # 这个厉害,可以改变你的颜色,然后动态显示
# max_=100
)
)
timeline.add(bar, f"点{i}")
# 设置自动循环
timeline.add_schema(
play_interval=1000, # 1000ms
is_timeline_show=True,
is_auto_play=True,
is_loop_play=True
)
# 绘图是用时间线对象绘图,而不是bar对象
timeline.render("基础时间线柱状图.html")

8.扇形图
import matplotlib.pyplot as plt
# 扇形图的标签
labels = ['A', 'B', 'C', 'D']
# 每个扇形的大小
sizes = [15, 30, 45, 10]
# 每个扇形的颜色
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
# 突出显示的扇形
explode = (0.2, 0, 0, 0)
# 生成扇形图
plt.pie(sizes,
explode=explode,
labels=labels, colors=colors,
autopct='%1.1f%%',
shadow=True,
startangle=140
)
# 保持纵横比相等
plt.axis('equal')
# 显示图形
plt.show()
9.动态GDP柱状图绘制
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
# 读取文件
f = open("D:/software/pycharm/docx/第1-12章资料/资料/资料/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv", "r", encoding="ANSI")
data_lines = f.readlines()
# 关闭文件
f.close()
# 删除第一行数据
data_lines.pop(0)
# 将数据转为字典存储,格式为:
# { 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
# { 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
# 先定义一个字典
data_dict = {}
for line in data_lines:
year = int(line.split(",")[0]) # 年份
country = line.split(",")[1] # 省份
GDP = float(line.split(",")[2]) # 因为美国的GDP是科学计数法,所以用float强制转回来
# 如何判断字典里面有没有制定的key呢?
try:
data_dict[year].append([country, GDP])
except KeyError:
data_dict[year] = []
data_dict[year].append([country, GDP])
# 排序年份
sorted_year_list = sorted(data_dict.keys())
timeline = Timeline({"theme": ThemeType.LIGHT}) # 创建时间线对象
for year in sorted_year_list:
data_dict[year].sort(key=lambda element: element[1], reverse=True)
# 取出本年份前八名的国家
year_data = data_dict[year][:8]
x_data = []
y_data = []
for country_gdp in year_data:
x_data.append(country_gdp[0]) # x轴添加国家
y_data.append(country_gdp[1] / 100000000) # y轴添加GDP数据,单位为亿元
# 构建柱状图
bar = Bar()
x_data.reverse()
y_data.reverse()
bar.add_xaxis(x_data)
bar.add_yaxis("GDP亿元", y_data, label_opts=LabelOpts(position="right"))
# 反转x轴,y轴
bar.reversal_axis()
range_color = ['#FFC0CB', '#FFFF00', '#008000']
# 设置每一年的图表标题
bar.set_global_opts(
title_opts=TitleOpts(title=f"{year}年全球GDP前八数据"),
visualmap_opts=VisualMapOpts( # 加范围显示
is_show=True,
dimension=0, # 加上这个就欧克了,映射维度
range_color=range_color, # 这个厉害,可以改变你的颜色,然后动态显示
max_=10000
)
)
# 创建时间线对象
timeline.add(bar, str(year))
# 设置时间为自动播放
timeline.add_schema(
play_interval=1000, # 时间间隔
is_timeline_show=True, # 是否显示时间
is_loop_play=True, # 是否循环
is_auto_play=True # 是否自动播放
)
# 绘图
timeline.render("1960——2019全球GDP前八国家.html")
7.类
1.初始对象--变量
# 设计一个类
class Student:
name = None
gender = None
nationality = None
native_place = None
age = None
stu_1 = Student()
stu_1.name = "小王八"
stu_1.gender = "女"
stu_1.nationality = "中国"
stu_1.native_place = "邯郸"
stu_1.age = 19
print(stu_1.name)
print(stu_1.gender)
print(stu_1.native_place)
2.成员方法--def
class Student:
name = None
def say_hi(self): # self不占变量数量,但得有
print(f"大家好,我是{self.name},请大家多多关照")
def say_hi2(self, msg):
print(f"大家好,我是:{self.name},{msg}") # 使用类里面得变量
stu = Student()
stu.name = "小王八"
stu.say_hi()
stu.say_hi2("咋,你想咋")
stu_1 = Student()
stu_1.name = "树"
stu_1.say_hi()
stu_1.say_hi2("哎哟哟")
更多推荐
所有评论(0)