背景
学校竟然会讲机器学习
现在是下载一个anaconda,我已经有pycharm,所以选择的方案是
jupyter notebook + anaconda(学校推荐的初学者方案,单行代码单行显示,比较方便)
pycharm + anaconda(bilibili有的教学视频是用pycharm,也没浪费)
关于anaconda的用法,是直接自己创建虚拟环境,到ide里直接配置它生成的虚拟环境就好了。
关于jupyter notebook打开方式,打开Anaconda Prompt输入jupyter notebook浏览器会弹出一个交互界面(这个界面的服务器在本地)
PS:jupyter notebook一进去显示的根目录是输入“jupyter notebook”时所在的位置
(可是我还不会调默认路径,每次一进bash shell就要重新输路径
PS:吐槽
- 用anaconda navigator去安装包,竟然没有pygal,我还要跑到中端去pip
- jupyter notebook的分行代码输出,只会输出这个块的最后一行元素
python基础课程
定义
- 关于python是解释型语言
编译型语言(如 C、C++)在执行程序之前,需要通过编译器将源代码一次性翻译成目标机器的机器码,生成可执行文件,之后直接运行这个可执行文件。而解释型语言则是在程序运行时,由解释器逐行读取源代码,并将其翻译成机器可执行的指令,然后立即执行 - Python 作为交互式语言的特点
实时反馈:在 Python 的交互式环境中,你可以逐行输入代码并立即看到执行结果
操作
注释方式
单行注释用#
多行用"""
或'''
数据结构
- 数字:
int
,long
,float
,complex
- 字符串:
'
,"
,'''
- 元组:比如
a_tuple = (1, 0.2, '0.3', 'data')
。不能二次赋值,相当于只读列表,内部带有索引,从0开始编号。count()
对象出现的次数。index()
对象出现的位置 - 列表:[]
- 集合:遵循集合论的运算方法,返回无序,无重复的集合
- 字典:无序。key - value
列表的特殊结构
通过可推导的公式编写列表
1 | a_list = [i for i in range(9)] |
列表的插入与删除
1 | a_list.insert(0, 'stuff')#插入 |
列表的排序
1 | b_list = sorted(a_list) |
基本语句
条件语句if-elif-else
循环for,while
模块
包——多个py文件——一个目录,包含——init.py文件
模块——一个py文件
类class
函数function
代码块block
包管理工具——pippip --version
, pip list
, pip install/uninstall
模块调用。import与from(从客户端)
函数
函数定义: def xxx():
用来区分当前脚本是作为主程序直接运行,还是作为模块被其他脚本导入使用——if __name__ == '__main__'
当脚本作为主程序直接运行时,name 的值会被自动设置为 ‘main‘。
当脚本作为模块被其他脚本导入时,name 的值会被设置为该脚本文件的名称(不包含 .py 扩展名)。
匿名函数lambda,lambda表达式所返回的函数对象与由def创建并赋值的函数对象工作区来基本一致lambda x: x**2
接受x,返回x**2
文件操作
打开函数(需要文件路径与打开方式)——file = open(file_path, 'r')
关闭函数——file.close()
路径函数——os.path.realpath('xxxx.ipynb')
, os.path.dirname(current_file)
, os.path.join(os.path.dirname(current_dir), 'data')
关于对os.path 模块的使用
os.path.realpath(path) 函数用于返回指定路径的真实路径。如果路径中包含符号链接,该函数会将其解析为实际的物理路径。
os.path.dirname(path) 函数用于返回指定路径的目录部分。也就是说,它会去掉路径中的文件名,只返回文件所在的目录路径。
os.path.dirname(current_dir) 用于获取 current_dir 路径的目录部分。
os.path.join(path1, path2, …) 函数用于将多个路径组件连接成一个完整的路径,它会根据操作系统的不同自动处理路径分隔符。
文件读取——with open(file_path, 'r') as simple_file
, simple_file = open(file_path, 'r')
隐式读取与显式读取
写入——my_file.write('xxxx')
删除(需要先通过if os.path.exists(new_path)
确认文件是否存在)——os.remove(new_path)
OOP(面向对象编程)
class声明类后要用__init__(函数填入属性,实例化)
当你创建一个类的对象时,Python 会自动调用 init() 方法,你可以在这个方法里对对象的属性进行初始化设置,确保对象在创建后就具备合适的初始状态。
init() 方法可以接收参数,这些参数通常用于设置对象的属性值。
第一个参数必须是 self,它代表类的实例本身,通过 self 可以访问和修改对象的属性。
1 | class Person: |
python库函数
python科学栈(Scientific Stack)是python库的集合的统称,包括:
- Numpy,n维数组
- Scipy,用于科学计算的技术库
- Matplotlib,二维图形的输出
- Ipython,交互式的
- Sympy,符号数学
- Pandas,数据结构及分析
Numpy
易错:注意,x = np.array([1, 2, 3])
这是中括号在小括号里面
1 | import numpy as np |
对于数组进行算术运算,是对每个元素分别,同时进行
python中没有++或–,用+=
1 | #运算 |
数组变形:
reshape():转换数组的形状,是其中数据重新排列
ravel():将多维数组转换为一维数组
transpose():行列转置
Matplotlib
- 散点图(scatter plot)如果把两个数据作对比输出到同一个图中
1
2
3
4
5
6
7
8import matplotlib as plt
plt.axis([0,5,0,20])
plt.title('My first plot')
plt.plot([1,2,3,4],[1,4,9,16], 'ro')#两个列表分别表示x,y轴坐标ro代表输出点的颜色为红色
plt.show()
###被封装起来的x,y变量,再来制作散点图,plt.scatter(x, y, color='blue')
就要注意数据的封装,横坐标要一致 - 线图(line plot)
- 柱状图(bar plot)
- 3d图(3d plot)
使用matplotlib
要导入的是import matplotlib.pyplot as plt
用的是matplotlib的子模块
1 | import matplotlib.pyplot as plt |
当有多条曲线时
用参数来区分颜色(颜色取英文单词也可以)
符号 | 代码 | 符号 | 代码 | 符号 | 代码 | 符号 | 代码 |
---|---|---|---|---|---|---|---|
g | 绿色 | b | 蓝色 | c | 蓝绿色 | m | 品红色 |
. | 点 | v | 实心倒三角 | ^ | 实心三角 | o | 实心圆 |
* | 实心五角星 | + | 加号 | s | 实心方块 | - | 实线 |
– | 虚线 | -. | 点划线 |
用法:plt.plot(t, y1, 'b*', t, y2, 'g^', t, y3, 'ys')
,跑龙套。plot(t, y1, 'b--', t, y2, 'g', t, y3, 'r--')
Sudplot绘制子图
1 | plt.subplot(2, 1, 1)#第一个子图设置,2 行 1 列的子图布局,编号1 |
pygal实现数据可视化
显示掷色子的结果
1 | from random import randint |
Pandas
基础是Numpy,Scipy,Matplotlib
数据结构:
- 一维数据结构——Series——
pd.Series(data, index[])
可以通过索引的方式获取Series中的单个或一组值,若index为空,则为默认索引,0,1,2…s= pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"])
- 二维数据结构——DataFrame——
pd.DataFram(data, columns = [], index = [])
columns为列索引,index为行
- 三维数据结构——Panel
I/O操作: - 读写CSV文件
- 读写Excel文件
Seaborn
是基于matplotlib的统计数据的图形可视化工具
具有更高层级的封装,使用更简洁
相较于matplotlib要手动调整参数,seaborn有默认的参数,主题供选择
分为两类。区别在于是否有图框
- figure-level,图级别能绘制多种图像
图级函数会创建一个新的图形窗口,并根据需要创建子图布局,方便一次性绘制多个相关的图形。 - axes-level,轴级别——只能绘制一种图像
轴级函数只会在指定的 Axes 对象上绘制图形,不会创建新的图形窗口或子图布局。
displot vs histplot 直方图
区别在于一个是图级函数,一个是轴级函数
displot vs kdeplot 概率密度图
displot vs ecdf 经验累积函数
displot vs 多变量
relplot vs scatterplot 散点图
relplot vs lineplot 折线图
jointplot vs pairplot 散点图与密度图的组合
catplot-scatter
catplot-distribute 箱子图
catplot-statistic
回归分析
练习
数据结构
题目:记录通讯录
回答:
1 | def contacts(name, phone): |
关于对象进行编程
题目:有一只猫,有颜色color,动作jump,用类来描述
实例化一只猫,跳了两步
答案:
1 | class Cat: |
matplotlib绘图
题目:绘制一组散点图,颜色为蓝色
纵坐标为40,20,50,70,10
横坐标为10,20,40,60,100
答案:
1 | import numpy as np |
Seaborn库的使用
问题:绘制iris数据集的联合分布和边缘分布。联合分布使用回归分析
(。。。看不懂这些名词)
答案:
1 | import seaborn as sns |
易错,不要把python和c搞混
- python声明变量时不需要类型定义
- 声明字典用def,声明对象用class
- python的注释不是
//
,而是#
- range(1, 7) 会生成一个从 1 到 6 的整数序列
- 等于是
==
,不等是!=
,不要写成!==。。。。。。。。。