任务 1 - 掷骰子

编写一个Python脚本来生成6面骰子掷骰子。
脚本应提示用户"再次掷骰子?(y/n)。
如果用户键入"y",则掷骰子并再次显示提示。
如果用户键入"n",则脚本应结束。

提示:
若要生成某个范围中的随机数,请使用以下代码:

import random
rand_number = random.randint(1, 6)
  1. 掷骰子
  2. 获取用户输入
  3. 使用 while 循环执行条件
import random
rand_number = random.randint(1, 6)while input("Roll the dice again? (y/n)") == 'y':print(random.randint(1, 6))

任务 2 - 刽子手

创建一个刽子手游戏。询问用户单字母猜测。将错误数限制为 10。显示:

  • 剩余的错误数
  • 他们猜到的人物
  • 他们猜对的字母(在单词的位置)
original_word = "椅子" # 这是原来的词
word = set(original_word) # 把单词放在一个集合中,以便稍后进行比较
blanks = ["_" for c in original_word] # 创建一个空白列表。如果猜测正确,将填充此列表正在运行 = True # 运行条件。如果猜对了字,或者所有的生命都被消耗掉了,那就错了guessed_letters = set() # 这是猜到的字母列表n_lives_left = 10 # 生命数
while running:uinput = input("Guess a letter: ") # 取出用户输入if uinput not in guessed_letters:guessed_letters.add(uinput) # 将输入追加到猜测列表中# 检查猜到的字母是否在原始单词中if uinput in word:print("The letter {0} is in the word".format(uinput))word.remove(uinput) # 如果猜测是正确的,请从其余字母中删除该字母blank_index = [pos for pos, char in enumerate(original_word) if char == uinput] # 检查猜到了哪个位置for idx in blank_index:blanks[idx] = uinput # 将猜出的字母放在正确的索引中# 如果所有字母都猜对了,打印原始单词并退出循环if len(word) <= 0:print("You guessed the word: {0}".format(original_word))breakelse:print("The letter {0} is not in the word".format(uinput)) # print that the guess is incorrectn_lives_left = n_lives_left - 1 # reduce the life by 1else:print("You already guessed '{0}'!".format(uinput) ) # 如果用户猜出同一个字母两次# 打印猜到的字母,剩余的生命和正确的猜测print("Guessed letters: {0}".format(guessed_letters))print("{0} lives left".format(n_lives_left))print(blanks)# 如果所有生命都已完成,更改运行条件,这将结束循环if n_lives_left <= 0:running = Falseprint("Out of lives!")

任务 3 - 二阶多项式

  • 从二阶多项式(二次)生成合成数据

f=4+1.5x+3.2x2.f = 4 + 1.5 x +3.2 x^2.f=4+1.5x+3.2x2.

  • 向线性模型添加噪声

y=f+epsilony= f + epsilony=f+epsilon

  • 生成一个散点图yyy对xxx,将真实值fff添加到图中。

  • 将线性模型拟合到数据,使用正态方程:beta=(XTX)−1XTYbeta = (X^T X )^{-1} X^TYbeta=(XTX)−1XTY 来估计 beta0beta_0beta0​ 和 beta1beta_1beta1​。

  • 将二次回归模型拟合到数据中,使用正态方程估计参数。

  • 绘制二次模型

1.让我们先生成合成数据。

import numpy as np
import matplotlib.pyplot as plt# 初始化 RNG,所以我们每次都能得到相同的结果
np.random.seed(0)# Number of training points
m = 50x = np.linspace(0.0, 1.0, m)# 函数系数/参数
beta0 = 4
beta1 = 1.5
beta2 = 3.2# 二阶多项式f value
f = beta0 + beta1 * x + beta2 * np.power(x,2)

2.让我们添加随机噪声。我们将从均值为零且方差为 0.10.10.1 的正态分布中对噪声进行采样。

#从总体生成噪声样本
sigma2 = 0.1
y = f + np.random.normal(0, np.sqrt(sigma2), m)

3.Let’s produce the scatter plot.

fig2 = plt.figure()
plt.plot(x, f, label = "f (Ground Truth)")
plt.scatter(x, y, label = "y (Observed Points)", color = "red")
plt.xlabel("Predictor/Feature Value")
plt.ylabel("Target Value")
plt.title("Underlying Function vs Observations")
plt.legend(loc="upper left")


4.让我们使用normal equation计算线性模型的解。

# 为beta_0添加一列
X = np.column_stack((np.ones(m), x))
# 将 X 转换为矩阵
X = np.asmatrix(X)# 估计线性回归系数
lin_betas = np.linalg.inv(X.T*X) * X.T * y.reshape(m,1)# beta_0
lin_intercept = lin_betas[0,0]
print("intercept (beta_0): {0:.2f}".format(lin_intercept))# beta_1
lin_beta = lin_betas[1,0]
print("beta_1: {0:.2f}".format(lin_beta))

5.让我们使用线性模型绘制预测图。

# Reconstruct our model from the coefficients
lin_func = X * lin_betasfig2 = plt.figure()
plt.plot(x, f, label = "f (Ground Truth)")
plt.scatter(x, y, label = "Observed Points", color = "red")
plt.plot(x, lin_func, label = "Linear model")
plt.legend()


6.现在,我们将估计假设二次模型的系数。

# 通过添加一列平方 x 值来构造多项式数据矩阵
poly_X = np.column_stack((np.ones(m), x, np.power(x,2)))poly_X = np.asmatrix(poly_X)# 估计多项式回归系数
poly_betas = np.linalg.inv(poly_X.T*poly_X) * poly_X.T * y.reshape(m,1)# beta_0
poly_intercept = poly_betas[0,0]
print("intercept (beta_0): {0:.2f}".format(poly_intercept))# beta_1
poly_beta1 = poly_betas[1,0]
print("beta_1: {0:.2f}".format(poly_beta1))# beta_2
poly_beta2 = poly_betas[2,0]
print("beta_2: {0:.2f}".format(poly_beta2))

7.让我们绘制估计的回归曲线。

poly_func = poly_X * poly_betasfig3 = plt.figure()
plt.plot(x, f, label = "f (Ground Truth)")
plt.scatter(x, y, label = "Observed Points", color = "red")
plt.plot(x, poly_func, label = "Poly")
plt.plot(x, lin_func, label = "Linear")
plt.legend()

任务 4 - 实践分析

使用 sklearn 中的iris数据集。使用以下代码训练和测试split:

from sklearn.model_selection import train_test_split
import numpy as np
from sklearn import datasetsiris = datasets.load_iris()X = iris.datay = iris.targetnp.random.seed(0)X_train, X_test, y_train, y_test = train_test_split(X, y)

子任务 1 - 手动调整 Logistic 回归分类器的惩罚类型和正则化量

编写自己的代码以在数据集上找到最佳惩罚类型和正则化参数"C"。您可以使用"cross_val_score"来帮助您。

提示:对 “C” 的值使用指数缩放来搜索更广泛的参数值,例如 ‘‘np.exp(np.arange(1, 10))’’

您可以从以下链接查看 LogisticRegression() 对象的详细信息。

https://scikitlearn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

子任务 2 - 自动调优

执行相同的任务,这次使用sklearn的"GridSearchCV"。

子任务 3 - 将调优模型与未调优模型进行比较

在测试集上使用 sklean 的默认参数将调优模型的性能与模型进行比较。

子任务 1

from sklearn.model_selection import train_test_split
import numpy as np
from sklearn import datasets
import warnings
warnings.filterwarnings("ignore")iris = datasets.load_iris()X = iris.datay = iris.targetnp.random.seed(0)X_train, X_test, y_train, y_test = train_test_split(X, y)
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegressioncv_scores = []
params = []k_values = np.exp(np.arange(1, 10))
penalties = ['l2', 'l1']for penalty in penalties:for k in k_values:clf = LogisticRegression(penalty = penalty, C = k)scores = cross_val_score(clf, X_train, y_train)# Get the mean of the scores from the 3 foldscv_score = np.mean(scores)cv_scores.append(cv_score)params.append((penalty, k))print("Best params: {0}".format(params[np.argmax(cv_scores)]))

Result:
Best params: (‘l1’, 2.718281828459045)

子任务 2

from sklearn.model_selection import GridSearchCVparam_grid = {'C': np.exp(np.arange(1, 10)),'penalty': ['l2', 'l1']
}model = LogisticRegression()searcher = GridSearchCV(model, param_grid)searcher.fit(X_train, y_train)searcher.best_params_

Result:
{‘C’: 54.598150033144236, ‘penalty’: ‘l2’}

子任务 3

from sklearn.metrics import classification_report
base_model = LogisticRegression().fit(X_train, y_train) # Use default parameter setbase_preds = base_model.predict(X_test)print(classification_report(y_test, base_preds))

tuned_model = searcher.best_estimator_tuned_preds = tuned_model.predict(X_test)print(classification_report(y_test, tuned_preds))

Python 基本功能应用与简单数据分析相关推荐

  1. 简单python数据获取分析_python学习——简单数据分析

    引入 斜杠青年:即跨界青年 做一个不可替代的数据分析师 介绍几个包: 用于web开发的包:django,flask 包 数据分析常用包:NumPy(数学计算),Pandas(基于NumPy的分析工具) ...

  2. python 豆瓣电影top250_[python爬虫]豆瓣电影Top250简单数据分析绘图

    一:简介 通过抓取豆瓣电影Top250的数据,分别进行了三个数据统计,分别是:上榜的电影上映的年份,该年份总共上榜的电影数量,数量为0的就没有统计了:各个国家地区出品的电影数量:250部电影的各个类型 ...

  3. [转载] Python 天气 简单 数据分析及可视化

    参考链接: 使用Python Pandas进行数据分析和可视化 Python 天气情况数据分析及可视化 环境配置 Pycharm开发环境 python 版本 python3.7 Anconda 集成开 ...

  4. python公园售票小程序(身份证获取简单信息+简单数据分析+简单多线程)

    1.文件目录 2.main.py主文件 from utils import welcome,examineIdCard,playMusic,dataAnalysis import _thread th ...

  5. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  6. [转载] 利用python对csv文件进行简单的数据分析

    参考链接: Python中的探索性数据分析 利用python对csv文件进行简单的数据分析 在通过爬虫爬取数据后,将数据放到csv文件里,为了方便观察,可以对数据进行简单的分析.下面我将对爬取的51j ...

  7. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  8. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  9. Python 实现按键精灵的功能,超简单详细(Windows版)

    Python 实现按键精灵的功能,超简单详细 前言: 实现步骤 一.安装三个库 二.试运行简单的功能 三.根据需求自己写代码 注明 前言: 最近公司的同事让我帮他点点点,懒得亲自点,便在网上查找了相关 ...

  10. python做按键精灵脚本_Python 实现按键精灵的功能,超简单详细(MAC版)

    前言: 想看Windows版的同窗能够看Python 实现按键精灵的功能,超简单详细(Windows版) 以前写了Windows版的python实现按键精灵功能.如今我鸟枪换炮换了个新的mac.发现以 ...

最新文章

  1. 利用radio实现Datagrid的单选
  2. Linux 下 SVN 添加多个文件的方法
  3. 分级查询(Hierarchical Path-Finding )
  4. 看到了商机,为什么赚不到钱?
  5. 吴恩达 coursera ML 第一课总结
  6. Leetcode771.Jewels and Stones宝石与石头
  7. LeetCode—211. 添加与搜索单词 - 数据结构设计
  8. linux安装mysql8依赖的环境_CentOS Linux release 8 安装mysql8.
  9. 软件工程专插本_2021年专插本部分招生专业(拟),广科/广东理工/华商/培正/松田/工商大!...
  10. 北电PBX资料_LD 24 進線直撥功能設定
  11. mysql 5.6 禁用 innodb_MYSQL 5.6中禁用INNODB引擎
  12. c语言统计字母数字符号个数程序,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  13. Struts2标签库(四)之非表单标签
  14. 静默安装oracle11,Oracle11g静默安装
  15. vue文件在服务器上乱码,解决vue-pdf查看pdf文件及打印乱码的问题
  16. React 16.x折腾记 - (7) 基于React+Antd封装聊天记录(用到React的memo,lazy, Suspense这些)
  17. Unreal Engine 4(UE4)下载教程
  18. excel中通过下拉菜单显示不同的报表内容,类似下拉选项中,一旦切换内容,后面的表格内容全都不同?
  19. php base64encode 长度,base64_encode
  20. Source Insight 4.0安装教程(附上安装包及破解文件)

热门文章

  1. 用Docker构建与环境无关的系统
  2. pandas 调整列的顺序
  3. keras可视化模型训练过程
  4. python的invalid syntax是什么意思_python中出现invalid syntax报错的几种原因
  5. Ubuntu 挂载磁盘
  6. L1-043 阅览室 (20 分)—团体程序设计天梯赛
  7. ubuntu系统使用命令行播放MP3歌曲
  8. mm和mmm编译说明
  9. 2n个数的中位数问题_python_算法与数据结构
  10. git命令的理解与扩展