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://xiahunao.cn/news/3250216.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[003-02-10].第10节:Docker环境下搭建Redis主从复制架构

我的博客大纲 我的后端学习大纲 我的Redis学习大纲 1.cluster&#xff08;集群&#xff09;模式-docker版 哈希槽分区进行亿级数据存储 1.1.面试题&#xff1a;1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 1.回答&#xff1a;单机单台100%不可能&#xff0c;肯…

Adobe国际认证详解-影视后期

在当今的数字媒体时代&#xff0c;影视后期制作作为创意产业的核心环节&#xff0c;对于专业技能的要求日益提高。Adobe国际认证&#xff0c;作为全球创意设计领域的重要标杆&#xff0c;为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期&#xff1f;…

matlab 异常值检测与处理——Robust Z-score法

目录 一、算法原理1、概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠翻译,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 Robust Z-score法也被称为中位数绝对偏差法。它类似于Z-sc…

10. Hibernate LazyFetch

1. 前言 本节和大家一起聊聊 Hibernate 中的 Lazy 和 Fetch 的区别&#xff0c;及两者适合的开发场景。通过本节课程的学习&#xff0c;你将了解到&#xff1a; 什么是延迟加载&#xff1b;延迟加载的意义。 2. 又见 get() 和 load() Session 对象提供了 2 个方法用来查询 &…

基于深度残差网络迁移学习的浸润性导管癌检测

1. 引言 癌症是一种异常细胞不受控制地分裂损害健康组织的疾病。皮肤或覆盖我们内脏的组织中的癌细胞被称为癌。乳房中的大多数癌是导管癌。侵袭性导管癌(Invasive Ductal Carcinoma, IDC)始于乳管&#xff0c;侵犯乳房周围纤维组织&#xff0c;晚期可通过血液扩散至淋巴结或身…

【鸿蒙学习笔记】位置设置・position・绝对定位・子组件相对父组件

官方文档&#xff1a;位置设置 目录标题 position・绝对定位・子组件相对父组件Row Text position position・绝对定位・子组件相对父组件 正→ ↓ Row Text position Entry Component struct Loc_position {State message: string Hello World;build() {Column() {Co…

二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a;…

求职学习day5

安排明天hr面 投一下平安可能。 hr面准备&#xff0c;复习java核心技术&#xff0c;复习java项目。 正视自己&#xff0c;调整心态。 也是很早接触了javaguide但是没有持续学习&#xff0c;项目介绍 | JavaGuide&#xff0c;面试前复习一下感觉还是很有收获的。 还有一些…

【QT】label中添加QImage图片并旋转(水平翻转、垂直翻转、顺时针旋转、逆时针旋转)

目录 0.简介 1.详细代码及解释 1&#xff09;原label显示在界面上 2&#xff09;水平翻转 3&#xff09;垂直翻转 4&#xff09;顺时针旋转45度 5&#xff09;逆时针旋转 0.简介 环境&#xff1a;windows11 QtCreator 背景&#xff1a;demo&#xff0c;父类为QWidget&a…

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存&#xff0c;而Go语言中多Goroutine通信的主要方案是Cha…

笔记 7 :linux 011 注释,函 bread () , get_hash_table () , find_buffer ()

&#xff08;57&#xff09;接着介绍另一个读盘块的函数 bread&#xff08;&#xff09;&#xff1a; &#xff08;58&#xff09;因为 函数 get_blk&#xff08;&#xff09;大量调用了其它函数&#xff0c;一版面列举不完&#xff0c;故对其调用的函数先行注释&#xff1a;ge…

【驱动程序】霍尔编码器电机_CubeMX_HAL库

【驱动程序】霍尔编码器电机_CubeMX_HAL库 电机型号&#xff1a;MG310 霍尔编码器电机 驱动模块&#xff1a;L298N 接线 注&#xff1a; L298N 12V接线柱位置可以接50V~5V当跳线帽接入时&#xff0c;5V接线柱为5V输出&#xff0c;可以给驱动板供电当跳线帽拔出时&#xff0…

单片机主控的基本电路

论文 1.复位电路 2.启动模式设置接口 3.VBAT供电接口 4.MCU 基本电路

昇思25天学习打卡营第30天 | MindNLP ChatGLM-6B StreamChat

今天是第30天&#xff0c;学习了MindNLP ChatGLM-6B StreamChat。 今天是参加打卡活动的最后一天&#xff0c;经过这些日子的测试&#xff0c;昇思MindSpore效果还是不错的。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;具有62亿参数&#xff0c;基于 …

Blender4.2版本正式上线,新版本的5个主要功能!

​Blender刚刚推出了备受瞩目的 Blender 4.2 版本&#xff0c;这款软件专为那些在视觉特效、动画制作、游戏开发和可视化设计领域工作的艺术家们量身打造。作为最新的长期稳定更新&#xff0c;Blender 4.2 不仅稳定可靠&#xff0c;还引入了备受期待的“Eevee Next”实时渲染引…

unity渲染人物模型透明度问题

问题1&#xff1a;有独立的手和衣服的模型&#xff0c;但最终只渲染出来半透明衣服 问题2&#xff1a;透明度贴图是正确的但显示却不正确 这上面两个模型的问题都是因为人物模型是一个完整的&#xff0c;为啥有些地方可以正常显示&#xff0c;有些地方透明度却有问题。 其中…

嵌入式香橙派人工智能AI开发板详细操作与远程聊天实现

大家好&#xff0c;今天给大分享一个OrangePi AIpro&#xff08;20T&#xff09;采用昇腾作为主控芯片的开发板&#xff0c;开箱以及对应功能的详细实现。 第一&#xff1a;板子基本介绍 接通电源给对应的开发板上电&#xff0c;观察其中的现象&#xff0c;如下&#xff1a; 注…

Vue 组件插槽 slot 简单例子

https://andi.cn/page/621582.html

GZ032 信息安全管理与评估赛项参考答案-模块1任务二11-20

GZ032 信息安全管理与评估赛项参考答案-模块1任务二 后面的题可能有的地方没有验证但是步骤都对&#xff0c;第13个小题没有做跳过去了等下一期或者最后在做 文章目录 GZ032 信息安全管理与评估赛项参考答案-模块1任务二11.总公司和分公司今年进行IPv6试点&#xff0c;要求总公…

TikTok内嵌跨境商城全开源_搭建教程/前端uniapp+后端源码

多语言跨境电商外贸商城 TikTok内嵌商城&#xff0c;商家入驻一键铺货一键提货 全开源完美运营&#xff0c;接在tiktok里面的商城内嵌&#xff0c;也可单独分开出来当独立站运营 二十一种语言&#xff0c;可以做很多国家的市场&#xff0c;支持商家入驻&#xff0c;多店铺等等…