PYthon一些零散的记录

  • [ ] 为了练习PYTONG,啊不,PYthon语法做的一些小内容,记录一下方便以后查找

机器学习

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
from sklearn import tree
import pydotplus
from pydotplus import graphviz
from sklearn.tree import DecisionTreeClassifier
import matplotlib.image as pltimg
import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files/Graphviz 2.44.1/bin/'
# speed = [99,86,87,88,111,86,103,87,94,78,77,85,86]
#
# #中值
# median = np.median(speed)
# print(median)
#
# #平均数
# mean = np.mean(speed)
# print(mean)
#
# #众数
# mode = stats.mode(speed)
# print(mode)
#
# #标准差
# std = np.std(speed)
# print(std)
#
# #方差
# var = np.var(speed)
# print(var)
#
# #百分位数
# percentile = np.percentile(speed, 80)
# print(percentile)

#这是一个250个介于0到5之间随机浮点数的数组
# floatarray = np.random.uniform(0.0, 5.0, 100000)
# plt.hist(floatarray, 5)
# plt.show()

#正态分布直方图
#np.random.normal(平均值,标准差,个数)
# normal = np.random.normal(5.0, 1.0, 100000)
# plt.hist(normal, 100)
# plt.show()

# x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
#
# y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
#
# #散点图
# plt.scatter(x, y)
# plt.show()

#正态分布散点图
# x = np.random.normal(5.0, 1.0, 1000)
# y = np.random.normal(10.0, 2.0, 1000)
# plt.scatter(x, y)
# plt.show()

# # 绘制线性回归直线
# x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
# y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
# # 执行一个方法,该方法返回线性回归的一些重要键值:
# slope, intercept, r, p, std_err = stats.linregress(x, y)
# # 创建一个使用 slope 和 intercept 值的函数返回新值。这个新值表示相应的 x 值将在 y 轴上放置的位置:
# def myfunc(x):
#     return slope * x + intercept
# # 通过函数运行 x 数组的每个值。这将产生一个新的数组,其中的 y 轴具有新值:
# mymodel = list(map(myfunc, x))
#
# #预测x为10时的y值
# speed = myfunc(10)
# # 绘制原始散点图:
# plt.scatter(x, y)
# # 绘制线性回归线:
# plt.plot(x, mymodel)
# plt.show()
# #线性回归的拟合度指数,在0到1之间,越高越好
# print(r)
# print(speed)

# x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
# y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
# #建立多项式模型的方法,最后一个参数为多少次的多项式
# mymodel = np.poly1d(np.polyfit(x, y, 3))
# #指定行的显示方式,从位置1开始到22结束
# myline = np.linspace(1, 22, 100)
# #多项式回归的拟合度指数,0到1,越大越好
# print(r2_score(y, mymodel(x)))
# #用上面训练的数组预测x为17时的y
# speed = mymodel(17)
# print(speed)
# plt.scatter(x, y)
# plt.plot(myline, mymodel(myline))
# plt.show()

# #w3school提供的真数据
# df = pandas.read_csv("cars.csv")
# #独立值,变量为x
# X = df[['Weight', 'Volume']]
# #相关值,变量为y
# y = df['CO2']
# #用LinearRegression创建一个线性回归对象
# regr = linear_model.LinearRegression()
# #用fit方法将独立值和从属值作为参数,并用描述这种关系的数据填充回归对象(就是训练这个对象)
# regr.fit(X, y)
# #预测重量为2300kg, 排量为1300ccm的汽车的二氧化碳排放量
# predictedCO2 = regr.predict([[2300,1300]])
# #x对于y的系数
# print(regr.coef_)
# print(predictedCO2)

# # 数据缩放
# # 不同列数据相差量级很大时,需要进行数据缩放
# # 标准化方法进行数据缩放
# # 标准化方法使用以下公式:
# # z = (x - u) / s
# # 其中 z 是新值,x 是原始值,u 是平均值,s 是标准差。
# # 如果从上述数据集中获取 weight 列,则第一个值为 790,缩放后的值为:
# # (790 - 1292.23) / 238.74 = -2.1
# # 如果从上面的数据集中获取 volume 列,则第一个值为 1.0,缩放后的值为:
# # (1.0 - 1.61) / 0.38 = -1.59
# # 现在就可以将-2.1与-1.59进行比较了
# # Python sklearn中有一个名为StandardScaler的方法,返回带有转换数据集方法的Scaler对象
# scale = StandardScaler()
#
# df = pandas.read_csv("cars2.csv")
#
# X = df[['Weight', 'Volume']]
# y = df['CO2']
#
# scaledX = scale.fit_transform(X)
#
# regr = linear_model.LinearRegression()
# regr.fit(scaledX, y)
# #预测值时也必须使用缩放比例
# scaled = scale.transform([[2300, 1.3]])
#
# predictedCO2 = regr.predict([scaled[0]])
# print(predictedCO2)


# np.random.seed(2)
# # 这个数据集展示商店中100位顾客以及其购物习惯
# x = np.random.normal(3, 1, 100)
# y = np.random.normal(150, 40, 100)/x
#
# # 训练集和测试集一般是80%和20%
# train_x = x[:80]
# train_y = y[:80]
#
# test_x = x[80:]
# test_y = y[80:]
# # 验证训练集像不像原始数据集
# plt.scatter(train_x, train_y)
# plt.show()
# # 验证测试集像不像原始数据集
# plt.scatter(test_x, test_y)
# plt.show()

# # 这个数据集最适合拟合的可能是多项式回归,用多项式回归测试
# # 用matplotlib模块中的plott方法画一条通过数据点的线
# mymodel = np.poly1d(np.polyfit(train_x, train_y, 4))
# myline = np.linspace(0, 6, 100)
#
# plt.scatter(train_x,train_y)
# plt.plot(myline, mymodel(myline))
# plt.show()
# # 这里出现了过拟合现象,如果预测数据集外的购物6分钟,会出现价格200元的奇怪数据
# # 但是拟合度可以给出这个多项式回归的拟合度,用r2_score方法可以找到这种关系
# r2 = r2_score(train_y, mymodel(train_x))
# print(r2)
# # 接下来用测试模型进行测试,看看给出的结果是否相近
# r2 = r2_score(test_y, mymodel(test_x))
# print(r2)
# # 在这个数据集里,结果是令人满意的
# # 接下来,使用这个模型
# print(mymodel(5))

# df = pandas.read_csv("shows.csv")
# #决策树,用树形结构逐级预测结果的树
# #决策树的数据必须都是数字,用map方法将字符映射成数字
# d = {'UK':0, 'USA': 1,'N': 2}
# df['Nationality'] = df['Nationality'].map(d)
# d = {'YES':1, 'NO':0}
# df['Go'] = df['Go'].map(d)
# #区分特征列和目标列,特征列是用作预测的列,目标列是预测目标
# features = ['Age', 'Experience', 'Rank', 'Nationality']
# X = df[features]
# y = df['Go']
# #创建决策树并另存为图象
# dtree = DecisionTreeClassifier()
# dtree = dtree.fit(X, y)
# 由于某些原因无法输出图片,但是在这里就已经可以使用决策树进行预测了
# print(dtree.predict([[40, 10, 6, 1]]))
# data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
#
# graph = pydotplus.graph_from_dot_data(data)
#
# graph.
#
#
# # print(x)
# # print(y)
#
# # print(df)

BeautifulSoup

# Tag类型,获取第一个对应标签及其内容
# print(bs.title)

# NavigableString类型,标签里的内容(字符串)
# print(bs.title.string)#文字
# print(bs.div.attrs)#属性

# BeautifulSoup类型,整个文件
# print(bs)

# Comment类型,将注释符号替换掉
# print(bs.a.string)

# 文档的遍历,将tag的子节点以列表方式输出
# print(bs.head.contents)
# 可以用索引来获取对应元素
# print(bs.head.contents[1])

# 文档的搜索
# (1)find_all方法,查找所有,会返回所有对应标签下的内容
# 字符串过滤,会查找与字符串【完全匹配】的内容
# t_list = bs.find_all("a")
# print(t_list)

# 正则表达式搜索,使用search方法来匹配内容
# t_list = bs.find_all(re.compile("^a$"))
# print(t_list)

# 传入一个函数(方法),根据函数的要求来搜索
# def name_is_exists(tag):
#     return tag.has_attr("name")
# t_list = bs.find_all(name_is_exists)
# print(t_list)

# (2)kwargs 参数
# t_list = bs.find_all(id="head")
# t_list = bs.find_all(class_=True)
# for item in t_list:
#     print(item)

# (3)text参数
# t_list = bs.find_all(text="12306")
# t_list = bs.find_all(text=["《中国铁路客户服务中心网站服务条款》","购票网"])
# t_list = bs.find_all(text= re.compile("\d"))
# for item in t_list:
#     print(item)

# (4)limit参数
# t_list = bs.find_all("a",limit=3)

# css选择器
# t_list = bs.select('title')
# for item in t_list:
#     print(item)

RE库

#正则表达式:字符串模式(判断字符串是否符合一定的标准)

import re
# 创建模式对象

# pat = re.compile("AA") # 此处的AA,是正则表达式,用来验证其他字符串
# res = pat.search("BAAB") # search字符串是被校验的内容,search只会找到第一个符合或不符的地方
# print(res)

# 没有模式对象(模板,被校验对象)
# m = re.search("asd","Aasd")

# print(re.findall("a","ASDaDFGAa"))# findall会查找所有符合规则的子串
# print(re.findall("[A-Z]","ASDIJdsinGNOIX"))
# print(re.findall("[A-Z]+","ASDIJdsinGNOIX"))# 加号,一个到无数个的组合

# sub
# print(re.sub("a","A","abckjlaeioqwr"))# 找到a,用A来替换
# 建议在正则表达式中,被比较的字符串前面加上r(解决转义问题),不用担心转义字符的问题
Last modification:December 13th, 2020 at 11:14 pm