基于python 3.9,使用pycharm community实现,本人水平非常菜,开始想要学习知识。
内容基于这本书和一些网上资料如菜鸟网站等进行补充
2-3python编程基础
2-3-1四则运算
#2-3python编程基础
# 加法+
print(1 + 1)#2
#减法 -
print(5 - 2)#3
#乘法使用星号*
print(2 * 3)#6
#乘方使用两个星号**
print(2 ** 3)#8
#除法使用单斜杠/,但是会出现小数点
print(6 / 3)#2.0
#使用//舍弃小数点以后的数字
print(7 // 3)#2
#补充 % %就是取余数运算,也就是模运算(mod)
print(7 % 3)#1
2-3-2编写注释
pycharm注释快捷键ctrl+/
行首使用#,为单行注释
#补充 % %就是取余数运算,也就是模运算(mod)
多行注释
# #使用//舍弃小数点以后的数字
# print(7 // 3)#2
# #补充 % %就是取余数运算,也就是模运算(mod)
# print(7 % 3)#1
2-3-3数据类型
字符串类型
字符串或串(String)是由数字、字母、下划线组成的一串字符。
可使用单引号’ '和双引号" "均表示字符串
print(type('A'))#<class 'str'>
print(type("A"))#<class 'str'>
数字类型
int(有符号整型)
print(type(1))#<class 'int'>
float(浮点型)
print(type(2.4))#<class 'float'>
complex(复数)
Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。
print(type(3.14j))#<class 'complex'>
布尔型
用True表示真,False表示假的数据类型叫做布尔型
print(type(True))#<class 'bool'>
print(type(False))#<class 'bool'>
列表list= [ ‘runoob’, 786 , 2.23, ‘john’, 70.2 ]
print(type(list))#<class ‘list’>
print(list)#[‘runoob’, 786, 2.23, ‘john’, 70.2]
tuple = ( ‘runoob’, 786 , 2.23, ‘john’, 70.2 )
print(type(tuple))#<class ‘tuple’>
print(tuple)#(‘runoob’, 786, 2.23, ‘john’, 70.2)
列表用 [ ] 标识,是 python 最通用的复合数据类型。
list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
print(type(list))#<class 'list'>
print(list)#['runoob', 786, 2.23, 'john', 70.2]
元组
元组是另一个数据类型,类似于 List(列表)。
元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
print(type(tuple))#<class 'tuple'>
print(tuple)#('runoob', 786, 2.23, 'john', 70.2)
字典
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'}
print(type(tinydict))#<class 'dict'>
print(tinydict)#{'name': 'runoob', 'code': 6734, 'dept': 'sales'}
2-3-4比较运算符
比较数值的大小关系,使用比较运算符,比较运算符的结果是布尔型
#大于
print(1>0.89)#True
#小于
print(3<2)#False
#相等包括类型
print(2==2)#True
#不相等
print(2!=3)#True
#大于等于
print(4>=3)#True
#小于等于
print(4<=3)#False
2-3-5变量
变量用于保存数据
x = 2
x = x + 2
print(x)#4
2-3-6函数
函数用于保存计算逻辑。计算逻辑多称为过程。同时函数也被称为方法。
def 函数名(参数):
过程
x = 2
print((x + 2) * 4)#16
#每次写一遍上式,过于麻烦
def sample_function(data):
return ((data + 2) * 4)
print(sample_function(x))#16
print(sample_function(3))#(3+2)*4=20
print(sample_function(x) + sample_function(3))#36
2-3-7类与实例
类同时定义了数据结构和运算逻辑
生成类的模板
class 类名:
#__init__特殊函数,构造函数,用于类的初始化
def 函数名1(参数):
函数1的过程
def 函数名(参数):
函数2的过程
class Sample_Class:
#__init__特殊函数,构造函数,用于类的初始化
def __init__(self,data1,data2):
self.data1 = data1
self.data2 = data2
def method2(self):
return (self.data1 + self.data2)
sample_instance = Sample_Class(data1 = 2,data2=3)
print(sample_instance.data1)#2
print(sample_instance.data2)#3
print(sample_instance.method2())#5
2-3-8基于if语句的程序分支
如果XX,则执行XX,使用if语句
模板
if 判断条件:
执行语句……
else:
执行语句……
举个例子
#条件满足
data = 1
if(data < 2):
print("数据小于2")#结果:数据小于2
else:
print("数据不小于2")
#条件不满足
data = 3
if(data < 2):
print("数据小于2")
else:
print("数据不小于2")#数据不小于2
当判断条件为多个值时,可以使用以下形式:
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
data = 5
if(data >= 10):
print("数据>=10")
elif(data <= 5):
print("数据<=5")#数据<=5
else:
print("数据在[6,9]之间")
2-3-9基于for语句的循环
在反复执行同一计算时,可以使用for循环
其中range()表示范围左闭右开
for i in range(0,3):
print(i)
#0 1 2
打印3次hello
for i in range(0,3):
print("hello")
#hello hello hello
2-3-10编写易用程序的窍门
保证所写的程序从上到下依次执行时得到正确结果。
同样的代码不要重复白那些,放在函数或者循环语句。
让别人知道代码在干什么。
2-4认识numpy与pandas
2-4-1导入用于分析功能
导入包,如果没有使用pip install 包名下载
as 后面为别名
import numpy as np
import pandas as pd
2-4-2numpy和pandas
二者都是用于导入数据并对其进行整理和统计的包
numpy主要用于array类来存放数据。矩阵计算功能十分强大
pandas主要使用DataFrame类,这个类专门用于管理数据。
2-4-3列表
把多个数据存放在一起的数据类型叫做列表,列表是标准的数据类型
使用方括号将多个数据括起来,就形成了列表
sample_list = [1,2,3,4,5]
print(sample_list)
#[1, 2, 3, 4, 5]
2-4-4行与列
行是横向的,列是纵向的
有使用row表示行,row表示列
2-4-5数组
一维数组
使用列表生成数组,输入np.array()
同样对数组进行的运算会作用在数组的所有元素上。
sample_array = np.array([1,2,3,4,5])
print(sample_array)#[1 2 3 4 5]
print(sample_array+2)#运算在所有的元素[3 4 5 6 7]
print(sample_array*2)#[ 2 4 6 8 10]
一个数组只能存放相同类型的数据。如果同时存放数值型和字符串性的数据,则所有数据都会被当成字符串处理。
sample_array1 = np.array([1,2,"A"])
print(sample_array1)#出现字符串所有都转变成字符串,['1' '2' 'A']
二维数组
把嵌套了列表的列表作为参数输入即可
sample_array_2 = np.array(
[[1,2,3,4,5],
[6,7,8,9,10]])
print(sample_array_2)
# [[ 1 2 3 4 5]
# [ 6 7 8 9 10]]
获得行数和列数的方法是shape,2行5列
print(sample_array_2.shape)#(2, 5)
2-4-6生成等差数列
等差数列是前后元素之差相等的数列就是等差数列。前后元素只差叫做公差。使用np.arange(start,stop,step)函数
起始位置start,结束位置stop和公差step。生成位置不包含结束位置
同时也可省略start标记
c = np.arange(start=1, stop=6, step=1)
print(c)#[1 2 3 4 5]
2-4-7多种生成数组的方式
np.tile
要生成元素相同的数组,可以使用该np.tile
tile_1 = np.tile("A",5)
print(tile_1)#['A' 'A' 'A' 'A' 'A']
tile_2 = np.tile(0,4)
print(tile_2)#[0 0 0 0]
np.zeros
生成只有0的数组是,使用哈桑农户np.zeros,它的参数是数组的元素的个数
zeros_1 = np.zeros(4)
print(zeros_1)#[0. 0. 0. 0.]
zeros_2 = np.zeros([2,3])
print(zeros_2)
# [[0. 0. 0.]
# [0. 0. 0.]]
np.ones
可以生成只有1的数组,这个函数的参数也可以是列表
ones_1 = np.ones(3)
print(ones_1)#[1. 1. 1.]
2-4-8切片
使用切片(slice),可以从数组或列表中轻松取出数据
d1_array = np.array([1,2,3,4,5])
print(d1_array)#[1 2 3 4 5]
print(d1_array[0])#1
#[1:3]表示取出缩影为1和2的元素,同样是左开右闭区间
print(d1_array[1:3])#[2 3]
2行以上的数组
d2_array2 = np.array(
[[1,2,3,4,5],
[6,7,8,9,10]])
print(d2_array2)
# [[ 1 2 3 4 5]
# [ 6 7 8 9 10]]
print(d2_array2[0,3])#4
print(d2_array2[1,2:4])#[8 9]
2-4-9数据帧(DataFrame)
数据帧有多种生成方法,我们可以轻松地通过数组或列表生成
sample_df = pd.DataFrame({
'col1':sample_array,
'col2':sample_array * 2,
'col3':["A","B","C","D","E"]
})
print(sample_df)
# col1 col2 col3
# 0 1 2 A
# 1 2 4 B
# 2 3 6 C
# 3 4 8 D
# 4 5 10 E
2-4-10读取文件中的数据
我们可以自己编写数据帧,也可以从文件中读取数据
存放数据的变量名= pd.read_csv("地址+文件名")
例子
file_data = pd.read_csv("D:/knn_iris.csv")
print(file_data)
# id pred
# 0 1 1
# 1 2 1
# 2 3 1
# 3 4 1
# 4 5 1
# 5 6 0
# 6 7 0
2-4-11读取文件中的数据(pd.contact)
把数据帧连接在一起,可以生成新的数据帧
首先生成两个3行两列的数据帧
df_1 = pd.DataFrame({
'col1':np.array([1,2,3]),
'col2':["A","B","C"]
})
df_2 = pd.DataFrame({
'col1':np.array([4,5,6]),
'col2':["D","E","F"]
})
#纵向上连接,连接结果是6行2列
print(pd.concat([df_1,df_2]))
# col1 col2
# 0 1 A
# 1 2 B
# 2 3 C
# 0 4 D
# 1 5 E
# 2 6 F
#横向上连接,加入axis = 1
print(pd.concat([df_1,df_2],axis=1))
# col1 col2 col1 col2
# 0 1 A 4 D
# 1 2 B 5 E
# 2 3 C 6 F
2-4-12数据帧的列操作
sample_df = pd.DataFrame({
'col1':sample_array,
'col2':sample_array * 2,
'col3':["A","B","C","D","E"]
})
print(sample_df)
# col1 col2 col3
# 0 1 2 A
# 1 2 4 B
# 2 3 6 C
# 3 4 8 D
# 4 5 10 E
点操作符
print(sample_df.col2)
# 0 2
# 1 4
# 2 6
# 3 8
# 4 10
# Name: col2, dtype: int32
方括号
print(sample_df["col2"])
# 0 2
# 1 4
# 2 6
# 3 8
# 4 10
# Name: col2, dtype: int32
提取多列
在方括号中以列表的形式指定多个列名
print(sample_df[["col2","col3"]])
# col2 col3
# 0 2 A
# 1 4 B
# 2 6 C
# 3 8 D
# 4 10 E
删除drop
print(sample_df.drop("col1",axis=1))
# col2 col3
# 0 2 A
# 1 4 B
# 2 6 C
# 3 8 D
# 4 10 E
2-4-13数据帧的行操作
head函数
使用head函数提取sample_df最上面的3行
print(sample_df.head(3))
# col1 col2 col3
# 0 1 2 A
# 1 2 4 B
# 2 3 6 C
query函数
一个条件
query更加灵活地提取函数,如提取第一行
print(sample_df.query('index == 0'))
# col1 col2 col3
#0 1 2 A
可以按照各种各样地条件提取函数
只获取col3列中值为A的行
print(sample_df.query('col3 == "A"'))
# col1 col2 col3
# 0 1 2 A
指定多个条件
或-| 也可以叫作or条件
print(sample_df.query('col3 == "A" | col3 == "D"'))
# col1 col2 col3
# 0 1 2 A
# 3 4 8 D
且也叫做and条件
print(sample_df.query('col3 == "A" & col1 == 3'))
# Empty DataFrame
# Columns: [col1, col2, col3]
# Index: []
同时指定列和行的条件
print(sample_df.query('col3 == "A"')[["col2","col3"]])
# col2 col3
# 0 2 A
还有许多种提取数据的方法
2-4-14序列
查看类型
print(type(sample_df))
#<class 'pandas.core.frame.DataFrame'>
print(type(sample_df.col1))
#<class 'pandas.core.series.Series'>
可以使用np.array,转换为数组
print(np.array(type(sample_df.col1)))
#<class 'pandas.core.series.Series'>
print(type(sample_df.col1.values))
# <class 'numpy.ndarray'>
2-4-15函数文档
help()函数
参考资料
[日] 马场真哉 著, 吴昊天 译. 用Python动手学统计学[M]. 1. 人民邮电出版社, 2021-06-01.
菜鸟网站python3