Python基础语法篇(下)+ 数据可视化

Python基础语法(下)+ 数据可视化

  • 一、函数
    • (一)函数的定义
    • (二)函数的调用和传参
  • 二、文件操作
    • (一)文件读取和写入
    • (二)文件对象及方法
    • (三)实例
  • 三、模块的安装与导入
    • (一)pip包管理
      • (1)库的安装
      • (2)库的导入
    • (二)几个常用库的常用操作
      • (1)数值计算库Numpy
      • (2)绘图库Matplotlib
      • (3)表格库Pandas
  • 四、实战项目
    • (一)使用二分法求解超越方程 ex = pi 的解
    • (二)曲线拟合(数学建模)

一、函数

(一)函数的定义

  • 函数代码块以 def 关键词开头后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定
    义参数。
  • 函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明
  • 函数内容以冒号:起始,并且缩进,return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None.

在这里插入图片描述

(二)函数的调用和传参

def multiply(b,a=2): # 缺省值return a * bprint(multiply(1))def isprime(num):"""判断是否为质数:param num::return:"""for i in range(2,num):if num % i == 0:return Falsereturn Trueprint(isprime(6))
print(isprime(13))

在这里插入图片描述


二、文件操作

(一)文件读取和写入

打开一个文件

  • Python open() 方法用于打开一个文件,并返回文件对象
  • 在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError
  • 注: 使用 open()方法一定要保证关闭文件对象,即调用 close() 方法。
  • open()函数常用形式是接收两个参数:文件名(file)和模式(mode)

在这里插入图片描述

(二)文件对象及方法

file 对象使用open函数来创建
在这里插入图片描述

(三)实例

(1)注:

  • utf-8 编码方式将中英文编码进行了统一,如果不加且file_sample中有中文,会编码失败
  • 为了防止忘记手动关文件,用 with as:程序结束后,文件就自动释放掉了
## 1、文件的读取
# 法一:
file_sample = open(file="sample.txt",mode="r",encoding="utf-8")
content = file_sample.readlines()
for line in content:print(content) # 不加循环,读出来是一行列表
file_sample.close()
# 法二:为了防止忘记手动关文件
with open(file="sample.txt",mode="r",encoding="utf-8") as file_sample:content = file_sample.readlines()for line in content:print(content)## 2、文件的写入
with open(file = "sample.txt",mode="w",encoding="ulf-8") as file_sample:file_sample.write("大家好!")

(2)将100以内的质数都存到一个文件夹中,每行只能写10个数字

def isprime(num):for i in range(2, num):if num % i == 0:return Falsereturn Truewith open(file="prime.txt",mode="w") as file:count = 0for num in range(2,100):if isprime(num):print(num)count += 1file.write(str(num) + ", ") # TypeError: write() argument must be str, not intif count % 10 == 0:file.write("\n")

在这里插入图片描述


三、模块的安装与导入

(一)pip包管理

(1)库的安装

通过 pip 来安装库
pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。

指令含义
pip --version查看当前pip的版本
pip install + 包名安装包
pip uninstall + 包名卸载包
pip list查看已经安装了哪些库

在这里插入图片描述

(2)库的导入

## 法一:
import numpy as np
a = 1
b = 2
print(np.add(a,b)) 
## 法二:
from numpy import add
a = 1
b = 2
print(add(a,b)) 

(二)几个常用库的常用操作

(1)数值计算库Numpy

指令:pip install numpy
在这里插入图片描述

import numpy as np
  1. 数组的创建(列表转为数组)
arr = np.array([1,2,3,4,5]) # 列表转为数组
print(arr)
print(type(arr)) # numpy.ndarray --> N-dimensional arrayarr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
print(arr)
print(type(arr)) # numpy.ndarray
print("数组形状",arr.shape) # (4, 3)四行三列

在这里插入图片描述

辨析:

(一). 后区分:
1、(numpy.ndarray).属性(Property、Field)/.内部变量(Variable)
2、(numpy.ndarray).函数() (Method、Function)
(二)函数(Function)和方法(Method)的区别:
与类和实例 无 绑定关系的function都属于 函数(function);
与类和实例 有 绑定关系的function都属于 方法(method)。

  1. 索引和切片
arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
print(arr[0])
print(arr[0:3])
print(arr[1][2])

在这里插入图片描述

  1. 基本运算+ - * / 对应位置上的元素进行 加减乘除
print([1,2,3]+[4,5,6]) # 相当于列表拼接
print(np.array([1,2,3]) + np.array([4,5,6])) # 相当于向量相加
print(np.array([1,2,3]) * np.array([4,5,6]))

在这里插入图片描述

  1. 数组形状操作
arr = np.array([[1,2,3],[2,7,4],[99,4,5],[14,15,6]])
print(arr.shape)
new_arr = arr.reshape(2,6)
print(new_arr,"\n新数组的形状是",new_arr.shape)
new_arr_T = new_arr.transpose() # 转置
print(new_arr_T,"\n新数组转置后的形状是",new_arr_T.shape)

在这里插入图片描述

  1. 进阶使用(线性代数、统计学)

另:快捷键 ctrl+D 快速复制此行内容到下一行

arr = np.array([[1,2,3],[2,7,4],[99,4,5],[14,15,6]])
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr1_dot_arr2 = np.dot(arr1,arr2) # 数组的点乘
print(arr1_dot_arr2)
print("数组的平均值",arr.mean()) # 写法一:对象内部函数的使用 
print("数组的平均值",np.mean(arr)) # 写法二:将对象作为参数传入
print("数组的最大值",arr.max())
print("数组的最小值",arr.min()) 
print("数组的标准差",arr.std())
print("数组的和",arr.sum())
print("数组的排序\n",np.sort(arr)) # sort 是 numpy的内部函数,不是 nd数组的内部函数
print("数组的排序\n",np.sort(arr.reshape(-1))) # -1 变成一行
# 筛选
print(arr > 10)
print(arr[arr > 10]) # 通过True、False数组筛选
print(arr[(arr > 5) & (arr < 10)]) # 不能用 and (前后都只有一个量才适用),前后多个量用 & (每一位上做 and 判断)
print(arr[(arr > 5) | (arr < 10)]) # | 按位或 等效于在每一位上进行 or

在这里插入图片描述

注:
1、and、or 只适用于 前后都只有一个量 的情况
2、 & 按位与 等效于在 每一位上进行 and
3、 | 按位或 等效于在 每一位上进行 or
4、sort 是 numpy的内部函数,不是 nd数组的内部函数,只能np.sort(arr),不能 arr.sort()

  1. 数据的保存与导入.npy
arr = np.array([[1,2,3],[2,7,4],[99,4,5],[14,15,6]])
np.save("arr",arr)

在这里插入图片描述

arr = np.load("arr.npy")
print(arr)

在这里插入图片描述

练习
用numpy创建一个4x4的随机数组,只保留10以内的数,并计算出所以元素的和

import numpy as np
np.random.seed(1) # 固定随机数(想让每次随机结果可复现)
print(np.random.rand()) # rand()返回0~1的随机浮点数
arr = np.random.randint(0,100,16).reshape(4,4) # randint(m,n,k)返回m~n的随机整数k个
print(arr)
print(arr[arr <= 10])
print(np.sum(arr[arr <= 10]))

在这里插入图片描述

(2)绘图库Matplotlib

指令:pip install matplotlib
参考网站:matplotlib.org(包含 图+示例代码
在这里插入图片描述

import matplotlib.pyplot as plt # 只用到了绘图操作
import numpy as np # 数值操作需要用到
  1. 参数设置(直接复制在绘图语句最前面即可)
# plt默认的设置里面没有中文字体,中文显示不出来 --> 设置字体
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 减号和中文的折线又冲突了 --> 再改一下参数
mpl.rcParams['axes.unicode_minus'] = False
  1. 多个函数绘制到一个图中
# 模拟数据点
x = np.linspace(0,10,10) # 0~10取10个浮点数(10等分)
y = np.sin(x)# 模拟通过数据点建模,找方程,求拟合参数 --> 平滑的拟合图像
x2 = np.linspace(0,10,100) # 0~10取100个浮点数(100等分)
y2 = np.sin(x2)plt.xlabel("x")
plt.ylabel("y")# 绘制到一个图中
plt.scatter(x,y,marker='*',c='r',label="数据点") # marker 点的样式
plt.plot(x2,y2,linestyle='--',label="拟合结果")
plt.legend() # 对各种图标进行标注,加此语句标签(label)才可显示出来
plt.show()

在这里插入图片描述

  1. 一个图中绘制多个函数
# fig(figure --> 整个窗口)、axes:列表(一套axis坐标轴 --> 子图)
# subplots()生成了窗口的句柄(智能指针),要通过句柄内的操作绘图
fig,axes = plt.subplots(1,2) 
axes[0].scatter(x,y,marker='*',c='r',label="数据点")
axes[0].set_xlabel("x1") # 子图和图相关参数的设置函数不同
axes[0].set_ylabel("y")
axes[0].set_title("数据点")
axes[1].plot(x2,y2,linestyle='--',label="拟合效果")
axes[1].set_xlabel("x2")
axes[1].set_title("拟合结果")
fig.legend()
fig.show()

在这里插入图片描述
4. 直方图

x = [1,2,3]
y = [2,4,10]
plt.bar(x,y)
plt.show()

在这里插入图片描述

(3)表格库Pandas

指令:pip install pandas
在这里插入图片描述

import pandas as pd

以鸢尾花的数据为例:
在这里插入图片描述

  1. Python 中 Excel 的创建

pandas中的 DataFrame 数据类型 == pandas 提供的 excel表

data = {'样本号':[1,2,3],'萼片长(cm)':[8.9,2.1,4.5],'类型_num':[0,0,1]}
datadf = pd.DataFrame(data)
print(datadf)

在这里插入图片描述

  1. 读取Excel
    openpyxl 为读取excel用的引擎,要先安装这个库
    在这里插入图片描述
# 读取EXCEL函数
df = pd.read_excel("鸢尾花训练数据.xlsl",sheet_name="sheet1",engine="openpyxl")
print(type(df)) # <class 'pandas.core.frame.DataFrame'>
  1. 数据清洗(预处理)
  • 拿基础信息
    数据量非常大,用 Excel 打不开时,这一步很关键
print(df.head(5)) # df.head(n) 提取表格的前 n 行信息
print(df.info())  # 提取表格基本信息

在这里插入图片描述

  • 缺失值的处理
print(df.head(10))
df = df.dropna() # 丢掉缺失值
print(df.head(10))print(df.info())
df['类型_num'] = df['类型_num'].astype(float) # 更改数据类型
print(df.info())

变化1:
在这里插入图片描述
在这里插入图片描述

变化2
在这里插入图片描述
在这里插入图片描述

  • 数据的选择和过滤
# <<<< 一种类的筛选 >>>>
# df['类型_num'] 提取列,df['类型_num'] == 1 返回真假
df_1 = df[df['类型_num'] == 1] 
print(df_1.head())
print(df_1.info())# <<<< 3σ 筛选 >>>>
lb = df['花瓣宽(cm)'].mean() - 3 * df['花瓣宽(cm)'].std() # lower bound 下界
ub = df['花瓣宽(cm)'].mean() + 3 * df['花瓣宽(cm)'].std() # upper bound 上界
selected_df = df[(df['花瓣宽(cm)'] >= lb) & (df['花瓣宽(cm)'] <= ub)]
print(selected_df.info())

练习
自己创建一个dataframe,包含:姓名、身高、体重、成绩。输出第一名的学生,计算平均分并输出低于60分的同学的名字

import numpy as np
import pandas as pddata = {'姓名':["张三","李四","王五","老六","赵七"],'身高':[175 for i in range(5)], # 175 重复5次'体重':[50 for i in range(5)],'成绩':list(np.random.randint(40,90,5))}
df = pd.DataFrame(data)
print(df)print("本班最高分同学的信息\n",df[df['成绩'] == max(df['成绩'])])
print("本班的平均分是",np.mean(df['成绩']))
new_df = df[df['成绩'] < 60]
print("本班这次考试不及格的同学有\n",new_df['姓名']) # 只想取姓名出来

在这里插入图片描述


四、实战项目

(一)使用二分法求解超越方程 ex = pi 的解

import numpy as npdef f(x):# f(x) = e^x - pireturn np.e ** x - np.pi# f(x0) == 0 很难实现 --> 一般写成:np.abs(f(x0) - 0) <= resolution
resolution = 0.0001
def search_x(x1,x2):x0 = (x1 + x2) / 2if np.abs(f(x0) - 0) <= resolution:print("二分法找到的解", x0)# 解在(x1,x0)elif f(x1) * f(x0) < 0:search_x(x1,x0)pass # 仅作占位符,不做任何操作# 解在(x0,x2)elif f(x0) * f(x2) < 0:search_x(x0,x2)passprint("方程的根",np.log(np.pi))
search_x(0,10)

在这里插入图片描述

(二)曲线拟合(数学建模)

一个成年人饮酒后血液中的酒精含量虽时间变化是:
时间(h) :[0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,11,12,13,14,15,16]
酒精含量(mg/100ml) :[30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]

import matplotlib.pyplot as plt
import numpy as np
from numpy import polyfit # polyfit多项式拟合time = [0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,11,12,13,14,15,16]
alcohol = [30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]
y = [np.log(a) for a in alcohol]  # 计算机中的log以e为底
# 在进行数据分析和拟合时,有时候原始数据并不适合直接进行线性拟合,因为它们的分布可能不是线性的。
# 通过取对数变换,可以将非线性关系转换为线性关系,从而更容易进行线性拟合。
# 具体到这段代码中,alcohol 列表中的数据可能呈现出指数衰减的趋势。
# 通过取对数变换,可以将这种指数关系转换为线性关系,从而可以使用线性回归(多项式拟合)来拟合数据。alcohol_tup = alcohol[alcohol.index(max(alcohol)):] # 从最高点开始,到末尾(截断)
time_tup = time[alcohol.index(max(alcohol)):]
y_tup = y[alcohol.index(max(alcohol)):]k,b = polyfit(time_tup,y_tup,deg=1) # degree:多项式拟合最高项的次数
print(k,b)  # 和 print(polyfit(time_tup,y_tup,deg=1)) 输出结果相同
# y = kx + b --> [-0.16961681  4.51817704]前后两个值分别为 k 和 bdef model(t):a = np.e ** (k * t + b)return atime0 = np.linspace(time_tup[0],16,1000)
predy = model(time0)plt.scatter(time,alcohol,label="sample point")
plt.plot(time0,predy,c='r',label="fitting results")
plt.title("alcohol change with time")
plt.ylabel("alcohol [mg/100ml]")
plt.xlabel("time [h]")
plt.legend()
plt.show()

思路在这里插入图片描述
在这里插入图片描述
拟合后结果图
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/379467.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UniVue@v1.5.0版本发布:里程碑版本

前言 以后使用UniVue都推荐使用1.5.0以后的版本&#xff0c;这个版本之后&#xff0c;更新的速度将会放缓。 希望这个框架能够切实的帮助大家更好的开发游戏&#xff0c;做出一款好游戏&#xff01;本开源项目采用的开源协议为MIT协议&#xff0c;完全开源化&#xff0c;以后也…

LinuxShell编程2——shell搭建Discuzz论坛网站

目录 一、环境准备 ①准备一台虚拟机 ②初始化虚拟机 1、关闭防火墙 2、关闭selinux 3、配置yum源 4、修改主机名 二、搭建LAMP环境 ①安装httpd(阿帕奇apache&#xff09;服务器 查看是否安装过httpd 启动httpd 设置开机启动 查看状态 安装网络工具 测试 ②安装…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结&#xff1a; 初级&#xff1a;简单修改一下超参数&#xff0c;效果一般般但是够用&#xff0c;有时候甚至直接不够用 中级&#xff1a;optuna得出最好的超参数之后&#xff0c;再多一些epoch让train和testloss整体下降&#xff0c;然后结果就很不错。 高级&#xff1a;…

紫光展锐5G安卓核心板T760__国产手机芯片方案

展锐T760安卓核心板是具备续航和性能更加均衡的5G移动平台。其主要特点包括主流的6400万像素摄像头和高达120Hz的刷新率。 平台采用多模融合的创新架构和AI智能调节技术&#xff0c;从而在5G数据场景下降低了37%的整体功耗&#xff0c;在5G待机场景下降低了18%的整体功耗。 多…

新能源电池行业MES系统的主要功能

新能源电池行业电池生产特点 新能源电池种类繁多、生产工艺复杂&#xff0c;在市场定制化、小批量多品种的大趋势下&#xff0c;企业需要建立柔性高效的生产模式&#xff0c;以应对不同类型的客户和订单采用差异化的生产方式来实现成本的最优控制。 生产工艺复杂 锂电池生产…

Jenkins-zookeeper-docker-xxljob-rancher

文章目录 Jenkins实战1 新建任务需要的配置pipeline Zookeeper基础 Docker基础实操windows11 docker mysql DockerhouseDockerhubxxl-Job基础实战 Rancher基础思考 实战1 Rancher的某个namespace的scale为0 Jenkins 实战 1 新建任务需要的配置pipeline 该代码是Jenkinsfile&…

Linux HOOK机制与Netfilter HOOK

一. 什么是HOOK&#xff08;钩子&#xff09; 在计算机中&#xff0c;基本所有的软件程序都可以通过hook方式进行行为拦截&#xff0c;hook方式就是改变原始的执行流。 二. Linux常见的HOOK方式 1、修改函数指针。 2、用户态动态库拦截。 ①利用环境变量LD_PRELOAD和预装载机…

Linux系统及常用指令

目录 1、什么是Linux系统 2、为什么要用Linux系统 3、Linux系统的种类 4、如何安装Linux系统 5、常见的适配器种类 6、学习第一个Linux指令 7、安装ssh客户端软件 8、Linux系统的目录结构 9、Linux的常用命令 9.1 目录切换命令 9.2 查看目录下的内容 9.3 查看当前…

android13 frameworks里面常用的保存信息或者版本判断的方法

总纲 android13 rom 开发总纲说明 目录 1.前言 2. 数据库 2.1 代码读取用法参考 3.prop 属性配置 3.1 property的key值有哪些特点 4.区别 5. 其他数据存储 6.彩蛋 1.前言 frameworks 不像我们一般开发app那样,很多应用保存的方法都无法使用。这里记录我们系统rom开…

BUUCTF逆向wp [MRCTF2020]Transform

第一步 查壳。该题为64位。 第二步 进入主函数&#xff0c;跟进dword_40F040,它应该与关键字符串有关 分析一下&#xff1a; 初始化和输入 sub_402230(argc, argv, envp); 这行可能是一个初始化函数&#xff0c;用于设置程序环境或处理命令行参数。具体功能不明&#xff0c…

studio编译报错java.lang.NullPointerException

安卓studio编译报错&#xff0c;这个是一个新建的项目就报错&#xff0c;原因是 implementation androidx.appcompat:appcompat:1.7.0版本太高&#xff0c;修改后版本 implementation androidx.appcompat:appcompat:1.4.0&#xff0c; 编译又报错 18 issues were found wh…

图片如何去水印,PS 图片去水印的几种常见方法

在数字图像的世界里&#xff0c;水印常常被用来标识版权或防止未经授权的使用&#xff0c;但有时它们却成为了美观的障碍。无论是出于个人偏好还是专业需求&#xff0c;去除图片上的水印已经成为一项常见的任务。 Adobe Photoshop 作为行业标准的图像编辑软件&#xff0c;提供…

GPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建

原文链接&#xff1a;GPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608565&idx3&snd4e9d447efd82e8dd8192f7573886dab&chksmfa826912cdf5e00414e01626b52bab83a96199a6bf69cbbef7f7fe…

docker 安装并测试(Ubuntu下)

1. 确认安装环境&#xff08;操作系统版本和 CPU 架构&#xff09; 2. 如果有旧版本的 docker 需要进行卸载 使用 docker 命令检查是否已经安装了 docker 如果 docker 已经安装&#xff0c;使用以下命令卸载&#xff1a; apt-get purge docker-ce docker-ce-cli containerd…

C#医学影像管理系统源码(VS2013)

目录 一、概述 二、系统功能 系统维护 工作站 三、功能介绍 影像采集 统计模块 专业阅片 采集诊断报告 报告管理 一、概述 医学影像存储与传输系统&#xff08;PACS&#xff09;是一种集成了影像存储、传输、管理和诊断功能的系统。它基于数字化成像技术、计算机技术和…

最新开源的PDF版面分析工具 PDF-Extract-Kit

最近有一个新开源的版面分析的模型&#xff0c;做PDF版面分析效果非常好。而且对公式的解析效果比较好。虽然现在star数量不高&#xff0c;但是绝对会涨起来的。我们调研对比过很多开源的工具&#xff0c;效果都强差人意&#xff0c;这个是我看到的最满意的一个。甚至要比我们生…

【面试题】数据结构:堆排序的排序思想?

堆排序的排序思想&#xff1f; 堆排序是一种高效的排序算法&#xff0c;其基本思想是利用堆这种数据结构来实现排序。堆是一种特殊的完全二叉树&#xff0c;通常用数组来表示。堆排序的基本步骤如下&#xff1a; 1. 构建初始堆&#xff1a; 将待排序的数组转换成一个最大堆&a…

VS code配置docker远程连接

一 前置条件 1、本地已安装docker 2、服务端docker已配置Docker配置远程连接 二 VScode安装docker扩展 三 执行docker命令 1、切换到远程docker节点 docker context create remote-docker --docker "hosthttp://192.168.6.9:2375" 2、使用远程节点 docker cont…

Xcode进行真机测试时总是断连,如何解决?

嗨。大家好&#xff0c;我是兰若姐姐。最近我在用真机进行app自动化测试的时候&#xff0c;经常会遇到xcode和手机断连&#xff0c;每次断连之后需要重新连接&#xff0c;每次断开都会出现以下截图的报错 当这种情况出现时&#xff0c;之前执行的用例就相当于白执行了&#xff…

分布式搜索引擎ES-Elasticsearch进阶

1.head与postman基于索引的操作 引入概念&#xff1a; 集群健康&#xff1a; green 所有的主分片和副本分片都正常运行。你的集群是100%可用 yellow 所有的主分片都正常运行&#xff0c;但不是所有的副本分片都正常运行。 red 有主分片没能正常运行。 查询es集群健康状态&…