运算符
#比较运算
!=,==,>,<,>=,<=
num1 = 2
num2 = 1
print(f"2 != 1的结果是:{num1 != num2}")
name1 = "it"
name2 = "he"
print(f"it == he 结果是:{name1 == name2}")
num1 = 1
num2 = 3
print(f"1 > 3结果是:{num1 > num2}")
print(f"1 < 3的结果是:{num1 < num2}")
num1 = 10
num2 = 11
print(f"10 >= 11的结果是:{num1 >= num2}")
print(f"10 <= 11的结果是:{num1 <= num2}")
2 != 1的结果是:True it == he 结果是:False 1 > 3结果是:False 1 < 3的结果是:True 10 >= 11的结果是:False 10 <= 11的结果是:True
#逻辑运算符
and:两个真才为真
print(3>0 and 2>0)
print(5>0 and 3<0)
print(2<0 and 5>0)
print(6<0 and 5<0)
True False False False
or :两个假才为假
print(3>0 or 2>0)
print(5>0 or 3<0)
print(2<0 or 5>0)
print(6<0 or 5<0)
True True True False
not :真变假,假变真
print(not True)
print(not False)
False True
运算符的优先级
not>and>or
判断语句
age = int(input("请输入你的年龄:"))
if age >= 18:
print("您已成年")
else:
print("您未成年")
请输入你的年龄: 18 您已成年
循环语句
for i in range(1,10):
for j in range(1,i+1):
print(f"{j}*{i}={j * i}\t", end='')
print()
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
列表
#列表
a=[1,2,3,4,5]
b=['a','b','c']
a[索引] #访问列表中的某个元素
a[-1] #访问列表中的最后一个元素
a.append(元素) #在列表末尾添加一个元素
a.extend(序列) #在列表末尾添加一序列
a,insert(索引,元素) #在对应的索引插入元素
del a[索引] #删除对应索引元素
a.remove(元素) #删除列表中对应元素的第一个匹配项
a.clear() #清空列表
len(a) #获取列表的长度
a+b #连接列表
a*3 #复制列表
sum(a) #求和
garde1,grade2,grade3=b #多重赋值
a.sort(reverse=True/False) #对列表永久排序 True降序,False升序
sorted(a,reverse=True/False) #对列表临时排序
列表切片
h=[1,2,3,4,5,"进入"]
h[0:3] #列表前三
h[:] #整个列表
h[::-1] #倒序输出
h[0:6:2] #隔一个输出
[1, 2, 3] [1, 2, 3, 4, 5, '进入'] ['进入', 5, 4, 3, 2, 1] [1, 3, 5]
列表拷贝
a=[1,2,3]
b=a.copy()
c=a[:]
[1, 2, 3]
访问嵌套列表
a=[[1,2,3],[4,5,6],[7,8,9]]
for i in a:
for each in i:
print(each,end='')
print()
123 456 789
元组
(元组不可以修改,但如果元组里面有列表,可修改列表里的数据)
a=(1,) #包含一个元素的元组必须有逗号
index() #从元组中找出某个对象第一个匹配的下表位置
count() #统计元素在元组中出现的次数
len() #统计元组元素个数
max() #返回元组中元素的最大值
min() #返回元组中元素的最小值
b=(1,2,3,4,5)
for i in b: #用for循环遍历元组中的所有值
print(i)
1 2 3 4 5
字典
#字典
dict={'color':'green','points':5}
dict['color'] #访问字典中键所对应的值
dict['color']='red' #修改键对应的值
dict['position']=5 #添加键值对
del dict['color'] #删除字典中对应键的键值对
del dict #删除字典
dict.clear() #清空字典
dict.keys() #查找字典的所有键
dict.values() #查找字典的所有值
get()
#如果指定的键有可能不存在,应考虑使用get()
#get()方法有两个参数,分别为要取得其值的键和当该键不存在时返回的备用值
a={'apple':2,'banaba':3}
print('i have' + str(a.get('orange',0)) + 'orange')
i have0orange
遍历字典中的键值
dict={'color':'green','points':5}
for i in dict.keys(): #遍历字典中的所有键
print(i)
for i in dict.values(): #遍历字典中的所有值
print(i)
color points green 5
set():剔除重复项
a={1:'a',2:'a',3:'b',4:'c',5:'c'}
for i in set(a.values()): #用set()剔除重复项
print(i)
b a c
集合
#集合是一个无序的不重复序列,可以用来去重
a=set([1,2,3])
a.add(5) #添加一个数据
b={'a','c'}
a.update(b) #添加一个序列
a.remove(1) #删除集合中指定的数据,如果不存在,报错
a.pop() #随机删除集合中的某个数据
a.discard(2) #删除集合中指定的数据,如果不存在,不做任何操作
字符串
#字符串
name='tom'
age=18
print(f'我叫{name},今年{age}') #使用转义字符f进行格式化输出
我叫tom,今年18
name = input("请输入您的名字:")
print(name)
请输入您的名字: a a
字符串切片
#切片
a='sadfdhdjkyt'
a[0:3] #前三个
a[:] #整个字符串
a[::2] #步长为2
a[-1] #最后一个元素
a[::-1] #倒序输出
'sad' 'sadfdhdjkyt' 'sdddkt' 't' 'tykjdhdfdas'
查找
#查找
#find() ##返回这个字符串第一个匹配值最开始的位置下标,如果不存在则返回-1
a='abcdef'
a.find('b')
#index() #检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则报异常。
a='hello world'
a.index('l',6,10)
#count() #统计子串在字符串中出现的次数
a="结合部分标分布"
a.count("分",4,7)
# rfind():与find()功能相同。但查找的方向从右侧开始
# rindex():与index()功能相同,但查找方向为右侧开始
修改 replace()
a="一二三四五上山打老虎"
a.replace("老虎","黑熊") #替换
#'一二三四五上山打黑熊'
#split()
a.split("二") #分割
#['一', '三四五上山打老虎']
#join()
a=("a","b","c")
print(','.join(a))
#'a,b,c'
b={"d","f","g"}
print(','.join(b))
# f,g,d
字符串方法
#字符串方法
a="abcdEfg"
a.capitalize() #将字符串第一个字符转化为大写
# 'Abcdefg'
a.upper() #将字符串所有字符转化为大写
# 'ABCDEFG'
a.lower() #将字符串所有字符转化为小写
# 'abcdefg'
a.isupper() #字符串是否都由大写字母组成
a.islower() #字符串是否都由小写字母组成
a.isdigit() #字符串中是否都由数字组成
a.isnumeric() #字符是否都由数字组成
a.isalpha() #字符串是否都由字母组成,并且非空
a.isalnum() #字符串是否都由字母和数字组成,并且非空
a.isdecimal() #字符串是否都由数字字符组成,并且非空
a.isspace() #空格,制表符和换行符,并且非空
a.istitle() #是否以大写字母开头,后面都是小写字母的单词数字或空格
a.find(字符,起始位置,结束位置) #查找指定字符在字符串中的位置索引,找不到返回-1
a.index(字符,起始位置,结束位置) #不报错
a.count() #统计指定字符出现次数
a.replace(字符,新字符,替换次数) #用于修改
a.split(分割符,分割次数) #拆分字符串
分隔符.join(序列) #分隔符可为空
a.title() #字符串内每个单词首字母转为大写
matplotlib
标记风格
标记字符 | 说明 | 标记字符 | 说明 |
---|---|---|---|
'.' | 点标记 | ',' | 像素标记(极小点) |
'v' | 倒三角标记 | ’^‘ | 上三角标记 |
'>' | 右三角标记 | '<' | 左三角标记 |
'1' | 下花三角标记 | '2' | 上花三角标记 |
'3' | 左花三角标记 | '4' | 右花三角标记 |
'o' | 实心圈标记 | 's' | 实心方形标记 |
'p' | 实心五角标记 | '*' | 星形标记 |
'h' | 竖六边形标记 | 'H' | 横六边形标记 |
'+' | 十字标记 | 'x' | x标记 |
'D' | 菱形标记 | 'd' | 瘦菱形标记 |
线条样式
样式 | 说明 |
---|---|
’-‘ | 实线 |
’--‘ | 虚线 |
’-.‘ | 点划线 |
':' | 点虚线 |
折线图
# matplotlib
#折线图
from matplotlib import pyplot as plt #导入库并重命名
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示问题
x=[1,2,3,4,5,6]
y=[11,22,43,30,52,66]
plt.plot(x,y,label='数据1',color='deeppink',marker='.',linestyle="--") #调用plot函数用于作图
x1=[2,3,4,5,6,7]
y1=[20,15,30,25,40,35]
plt.plot(x1,y1,label='数据2',marker='*')
plt.xlabel("阶段") # xlabel 函数添加横坐标代表的含义
plt.ylabel("数字") # ylabel 函数添加纵坐标代表的含义
plt.title("阶段和数字的关系") #title 函数添加图形的标题
plt.legend() #通过 legend 函数为两条折线打上标签
plt.xticks(rotation=45,fontsize=10)
plt.grid(True) #加网格线
plt.show() #调用show函数显示图形
#color 参数指定折线颜色
#marker 参数指定每个数据点的标记
#linestyle 参数指定图形的形状
#rotation:旋转角度
#fontsize:字体大小
条形图
#条形图
from matplotlib import pyplot as plt
x=[20, 26, 27, 28, 29]
y= [38, 42, 46, 20, 50]
plt.bar(x,y, label="啦啦啦")
plt.xlabel("嗯")
plt.ylabel("额")
plt.title("一二三")
plt.legend()
plt.show()
直方图
#直方图
import numpy as np
from matplotlib import pyplot as plt
x=[1,2,3,4,5,6]
y=[2,3,4,5,6,7]
plt.hist(x, bins=5, edgecolor='red') #bins:组距 #edgecolor:分割线
plt.title('图')
plt.xlabel('数量')
plt.ylabel('个数')
plt.show()
散点图
#散点图
import matplotlib.pyplot as plt
import numpy as np
x = [5,10,11,12,34,23,15,20,25,7,4,2,4,12,23,14,19,22,19,18,20,16]
y = [3,7,4,5,12,12,15,5,3,3,2.3,2.4,4.5,4.8,2.1,3,4.5,5.6,6.5,5.8,6.2,3.9]
plt.scatter(x,y,color='black')
plt.title('图')
plt.xlabel('数量')
plt.ylabel('个数')
plt.show()
饼图
#饼图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv('D:/pythonproject/.py/random_data.csv') #使用Pandas的函数从CSV文件中读取数据,并将数据存储在DataFrame对象中
grouped=df.groupby('class')
sizes = grouped.size()
fig, ax = plt.subplots()
ax.pie(sizes, labels=sizes.index, autopct='%1.1f%%', startangle=90, colors=['orange', 'blue', 'green', 'violet', 'deeppink'])
ax.axis('equal') #设置坐标轴的纵横比为1,使得饼图呈现为一个正圆
plt.title('Class Proportion')
plt.show()
#sizes是各组的大小
#labels=sizes.index将类别标签设置为每个组的索引。
#startangle=90 指定饼图的起始角度为90度
#autopct='%1.1f%%' 显示每个扇形区域的百分比,并保留一位小数
#colors=['orange', 'blue', 'green', 'violet', 'deeppink'] 指定了各个扇形区域的颜色
import matplotlib.pyplot as plt
animals = ['cat', 'dog', 'tiger', 'bird']
count = [59, 55, 47, 36]
plt.pie(count, labels=animals, autopct='%1.1f%%', counterclock=False)
plt.title('饼图')
plt.tight_layout()
plt.show()
#counterclock=False 顺时针方向
numpy
#numpy
import numpy as np
a = np.array([1, 2, 3, 4]) # 创建的一维数组,参数为列表
np.shape(a) #(4,)
b = np.array([[1,2,3,4],[4,5,6,7], [7,8,9,10]]) # 创建二维数组
np.shape(b) #查看数组的维度(以元组的形式输出)
b.shape[0] # 返回二维数组的行数:3
b.shape[1] # 返回二维数组的列数:4
a.ndim #查看数组维数:1
b.ndim #查看数组维数:2
a.size #查看数组中的元素数量:4
b.size #查看数组中的元素数量:12
a.itemsize #查看一个数组元素的长度:4
b.itemsize #查看一个数组元素的长度:4
a.dtype #查看数组元素的类型:dtype('int32')
b.dtype #查看数组元素的类型:dtype('int32')
正泰分布
#正泰分布
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
data = np.random.normal(0,1,10000) # 生成10000个数据点,均值为0,方差为1的高斯分布数据
print(min(data),max(data)) #打印了生成的数据集中的最小值和最大值
n, bins, patches = plt.hist(data,50,facecolor='green',edgecolor='white') #数据集,柱子的个数,柱子的颜色,柱子边缘的颜色为白色
plt.show() # 显示绘图
数组索引切片
#数组索引切片
import numpy as np
a = np.arange(10)
b = slice(2,7,2) #(起始,终止,步长)
print(a[b]) #[2, 4, 6]
import numpy as np
a = np.arange(10)
b=a[2:7:2]
print(b) #[2 4 6]
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print (a)
print (a[1:]) #第一行之后的元素
print (a[...,0]) #第一列元素[1 4 7]
print (a[1,...]) #第二行元素[4 5 6]
print (a[...,1:]) #第二列及其剩余元素
[2 4 6] [2 4 6] [[1 2 3] [4 5 6] [7 8 9]] [[4 5 6] [7 8 9]] [1 4 7] [4 5 6] [[2 3] [5 6] [8 9]]
形状修改
#形状修改
import numpy as np
a = np.arange(8)
print (a)
print ('\n')
b = a.reshape(2,4) #reshape 不改变数据的条件下修改形状
print (b)
c=b.T #对数组进行转置
print(c)
[0 1 2 3 4 5 6 7] [[0 1 2 3] [4 5 6 7]] [[0 4] [1 5] [2 6] [3 7]]
数组的去重
#数组的去重
a = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
np.unique(a) #array([1, 2, 3, 4, 5, 6])
array([1, 2, 3, 4, 5, 6])
数组间的运算
#数组间的运算
a=np.array([[1,2,3],[1,2,3]])
print(a+1) #数组里每个元素加一
print(a*2) #数组里每个元素乘二
b=np.array([[2],[1]])
print(a+b) #两个数组相加
print (np.add(a,b)) #两个数组相加
print (np.subtract(a,b)) #两个数组相减
print (np.multiply(a,b)) #两个数组相乘
print (np.divide(a,b)) #两个数组相除
[[2 3 4] [2 3 4]] [[2 4 6] [2 4 6]] [[3 4 5] [2 3 4]] [[3 4 5] [2 3 4]] [[-1 0 1] [ 0 1 2]] [[2 4 6] [1 2 3]] [[0.5 1. 1.5] [1. 2. 3. ]]
统计指标
#统计指标
import numpy as np
a = np.random.randint(10,50,(5,5))
print(a)
print(np.min(a,axis=0)) #axis=0:按纵轴排序,找出最小值
print(np.max(a,axis=0)) #axis=0:按纵轴排序,找出最大值
print(np.median(a,axis=1)) ##axis=1:按横轴排序,找出中位数
print(np.mean(a,axis=1)) #查询所有行或所有列的平均值
print(np.std(a,axis=1)) #查询所有行或所有列的标准差
print(np.var(a,axis=1)) #查询所有行或所有列的方差
print(np.argmax(a,axis=0)) #查询最大值的位置
print(np.argmin(a,axis=0)) #查询最小值的位置
[[45 44 14 31 43] [25 27 44 44 46] [32 22 36 42 12] [42 43 19 17 33] [17 21 32 45 34]] [17 21 14 17 12] [45 44 44 45 46] [43. 44. 32. 33. 32.] [35.4 37.2 28.8 30.8 29.8] [11.84229707 9.19565115 10.6282642 11.03449138 9.94786409] [140.24 84.56 112.96 121.76 98.96] [0 0 1 4 1] [4 4 0 3 2]
pandas
import pandas as pd
a=[1,2,3,4]
b=[1,2,3,4]
c = pd.DataFrame(np.random.randint(0,20,(len(a),len(b))),index = a,columns = b) #index:行标签,columns:列标签
print(c)
print(c.shape) #获取维度
print(c.index) #获取行索引表
print(c.columns) #获取列索引表
print(c.values)
print(c.T) #转置
print(c.head(2)) #查看前两行
print(c.tail(2)) #查看后两行
1 2 3 4 1 1 18 8 0 2 0 13 14 10 3 15 4 10 16 4 11 4 0 4 (4, 4) Int64Index([1, 2, 3, 4], dtype='int64') Int64Index([1, 2, 3, 4], dtype='int64') [[ 1 18 8 0] [ 0 13 14 10] [15 4 10 16] [11 4 0 4]] 1 2 3 4 1 1 0 15 11 2 18 13 4 4 3 8 14 10 0 4 0 10 16 4 1 2 3 4 1 1 18 8 0 2 0 13 14 10 1 2 3 4 3 15 4 10 16 4 11 4 0 4
DataFrame索引操作
import numpy as np
import pandas as pd
from pandas import DataFrame
df = DataFrame(data=np.random.randint(0,50,size=(3,4)),index=[1,2,3],columns=['a','b','c','d'])
print(df)
print(df['a']) # 取单列
print(df[['a','c']]) #取多列
a b c d 1 28 2 30 26 2 8 21 26 27 3 39 44 7 45 1 28 2 8 3 39 Name: a, dtype: int32 a c 1 28 30 2 8 26 3 39 7
import numpy as np
import pandas as pd
from pandas import DataFrame
df = DataFrame(data=np.random.randint(10,20,size=(3,4)),index=[1,2,3],columns=['a','b','c','d'])
print(df)
print(df.iloc[1]) # iloc:索引下标获取 取第2行元素
print(df.iloc[[0,2]]) # 取第1行和第3行
print(df.iloc[0,2]) # 第1行第3列的元素
print(df.loc[1,'a']) # loc:行列索引名字获取 取0行a列元素
print(df.iloc[[0,2],2]) # 取第1行和第3行的第3列元素
a b c d 1 19 18 15 17 2 16 11 10 15 3 12 14 16 18 a 16 b 11 c 10 d 15 Name: 2, dtype: int32 a b c d 1 19 18 15 17 3 12 14 16 18 15 19 1 15 3 16 Name: c, dtype: int32
DataFrame赋值操作
import pandas as pd
import numpy as np
from pandas import DataFrame
df = pd.DataFrame(np.arange(12).reshape((3,4)),index=[1,2,3],columns=['a','b','c','d'])
print(df)
print(df.iloc[2,0])
df.iloc[2,0]=1 #将第三行第二列元素修改为1
print(df.iloc[2,0])
print(df)
df.a[df.a==0]=1 #将1赋值给a列为0的数
print(df)
a b c d 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 8 1 a b c d 1 0 1 2 3 2 4 5 6 7 3 1 9 10 11 a b c d 1 1 1 2 3 2 4 5 6 7 3 1 9 10 11
DataFrame排序
#值排序
import pandas as pd
import numpy as np
from pandas import DataFrame
df = pd.DataFrame({"姓名":["熊大","光头强","熊二","翠花","吉吉国王"],
"战斗力":["90","10","5","100","15"]})
print(df)
df["战斗力"] = df["战斗力"].astype(int) #将 "战斗力" 列的数据类型更改为数字
a=df.sort_values("战斗力",axis=0,ascending=True) #ascending = True 升序
print(a)
姓名 战斗力 0 熊大 90 1 光头强 10 2 熊二 5 3 翠花 100 4 吉吉国王 15 姓名 战斗力 2 熊二 5 1 光头强 10 4 吉吉国王 15 0 熊大 90 3 翠花 100
索引排序
#索引排序
import pandas as pd
import numpy as np
from pandas import DataFrame
df = pd.DataFrame({"姓名":["熊大","光头强","熊二","翠花","吉吉国王"],
"战斗力":["90","10","5","100","15"]},index=[2,1,3,5,4])
print(df)
a=df.sort_index(axis=0,ascending=True) #索引排序
print(a)
姓名 战斗力 2 熊大 90 1 光头强 10 3 熊二 5 5 翠花 100 4 吉吉国王 15 姓名 战斗力 1 光头强 10 2 熊大 90 3 熊二 5 4 吉吉国王 15 5 翠花 100
DataFrame运算
import pandas as pd
import numpy as np
from pandas import DataFrame
df1 = pd.DataFrame(np.arange(12).reshape((3,4)),index=[1,2,3],columns=['A','B','C','D'])
print(df1)
df2 = pd.DataFrame(np.arange(16).reshape((4,4)),index=[1,2,3,4],columns=['A','B','C','D'])
print(df2)
df3=df1.add(df2,fill_value=0) #相加
print(df3)
df4=df1.sub(df2,fill_value=0) #相减
print(df4)
df5=df1.div(df2,fill_value=0) #相除
print(df5)
df6=df1.mul(df2,fill_value=0) #相乘
print(df6)
A B C D 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 A B C D 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 4 12 13 14 15 A B C D 1 0.0 2.0 4.0 6.0 2 8.0 10.0 12.0 14.0 3 16.0 18.0 20.0 22.0 4 12.0 13.0 14.0 15.0 A B C D 1 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 3 0.0 0.0 0.0 0.0 4 -12.0 -13.0 -14.0 -15.0 A B C D 1 NaN 1.0 1.0 1.0 2 1.0 1.0 1.0 1.0 3 1.0 1.0 1.0 1.0 4 0.0 0.0 0.0 0.0 A B C D 1 0.0 1.0 4.0 9.0 2 16.0 25.0 36.0 49.0 3 64.0 81.0 100.0 121.0 4 0.0 0.0 0.0 0.0
数据操作和分析
import numpy as np #NumPy 用于 Python 中的数值运算
import pandas as pd #Pandas 用于数据操作和分析
np.random.seed(0) #设置种子可确保每次执行代码时生成的随机数都是相同的,从而提供可重复性
index=np.arange(10000) #创建一个包含从 0 到 9999 的数字的数组
count=np.random.randint(0,10001,10000) #生成一个数组“count”,其中包含 10000 个介于 0 和 10000 之间的随机整数
class_=np.random.choice([1,2,3,4,5],10000) #创建一个数组“class_”,其中包含给定列表 [1, 2, 3, 4, 5] 中的 10000 个随机选择
normal_distribution=np.random.normal(0,1,10000) #从均值为 0 且标准差为 1 的正态分布中生成一个包含 10000 个随机数的数组“normal_distribution"
zero_one=np.random.choice(['0','1'],10000) #创建一个数组“zero_one”,其中包含列表中的 10000 个随机选项 ['0', '1']
df=pd.DataFrame({
'index':index,
'count':count,
'class':class_,
'normal_distribution':normal_distribution,
'0-1':zero_one
}) #将数组组合成一个 Pandas DataFrame,其中包含名为“index”、“count”、“class”、“normal_distribution”和“0-1”的列
df.to_csv('random_data.csv',index=False) #将 DataFrame 写入名为“random_data.csv”的 CSV 文件,但不包括索引列
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm
df=pd.read_csv('D:\pythonproject\.py/random_data.csv') #读取 CSV 文件
plt.figure(figsize=(10,5))
plt.hist(df['normal_distribution'],bins=100,density=True,alpha=1.0,color='g') #创建具有 100 个条柱的“normal_distribution”列的直方图。该参数对直方图进行归一化,并将条形的透明度设置为 1.0。条形的颜色设置为绿色 ('g')
mu,std=norm.fit(df['normal_distribution']) #使用 SciPy 中的函数对数据拟合正态分布,并获取拟合分布的均值和标准差
xmin,xmax=plt.xlim()
x=np.linspace(xmin,xmax,100)
p=norm.pdf(x,mu,std)
plt.plot(x,p,'k',linewidth=2) #生成一组x值并计算拟合正态分布的相应概率密度函数值,然后,它将拟合正态分布绘制为直方图顶部的黑线
plt.title('Normal Distribution Plot') #添加标题并显示绘图
plt.show()
决策树
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import pandas as pd
wine = load_wine()
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1) #将 Wine 数据集中的数据和标签合并在一起
训练集和测试集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3
#用 train_test_split 函数将 Wine 数据集划分为训练集和测试集,比例为 70% 训练集和 30% 测试集
clf=tree.DecisionTreeClassifier(criterion="entropy") #创建了一个决策树分类器,并指定了使用熵作为分裂标准,entropy"表示使用信息熵
clf=clf.fit(Xtrain,Ytrain) #用训练集的数据 (Xtrain) 和标签 (Ytrain) 对决策树分类器进行训练
score=clf.score(Xtest,Ytest) #用测试集的数据和标签来评估分类器的性能,并将结果赋给 score 变量
score
0.9074074074074074
可视化
import graphviz
feature_name = wine.feature_names
dot_data = tree.export_graphviz(clf,
feature_names=feature_names,
filled=True, #在可视化时为节点添加颜色填充
rounded=True, #填充和圆角
)
graph = graphviz.Source(dot_data) #将 dot_data 转换为一个 graphviz 对象 graph,使其能够被渲染和显示
graph
预剪枝
缓解过拟合