python基础
一.数据类型知识点(type查看)
1.万物皆可转字符串(加""即可),但字符串不一定能转成数字等。
2.字符串可以用单引号,双引号,三引号(与多行注释写法相同,但需要变量接收)。
3.若想在字符串内包含单、双或三引号,则可以用转义字符\解除引号的效用。
a = "\"hello world\""
4.字符串的拼接使用“+”即可(不可用于和非字符串的拼接)。
a = "\"hello world\""
b = "I'm li hua"
print(a+b)
5.数字和字符串的拼接。
a = "\"hello world\""
b = 10086
print("%s%s"%(a,b))
6.“m.n”控制数据的宽度和精度(宽度小于数字自身,不生效;n控制小数点精度,四舍五入)。
b = 10086.878
print("%2.2f"%(b))
7.字符串格式化(format 格式化,缺点是不能控制精度)。
b = "十一"
print(f"我最喜欢的数字是{b}")
8.若数字开头为0,则不可直接定义,应用字符串定义。
9.无论键盘输入什么数据,获取到的数据永远都是字符串类型。
二.语句
1.input()输入,括号内可以直接输入提示语句。
2.多条件判断:if,elif,else.条件之间是互斥的,如果执行if,elif是不会执行的。
3.输出后不换行
b = "十一"
print("我最喜欢的数字是",end='')
print(b)
4."\t"制表符,效果相当于tab建,使多行字符串进行对齐。
print("hello\tworld")
5.print( )相当于输出一个换行。
6.range()前闭后开,默认步长为1。
7.continue中断之后的语句(临时中断,不执行continue之后的语句,只影响本层)
break直接结束本层所有循环(永久中断)。
三.运算符优先级
单目运算符、算术运算符、左移右移、关系运算符、按位与,异或、按位或、逻辑运算符、条件运算符、赋值( 从高到低“单算移关与,异或逻条赋”)。
四.函数
1.格式:def 函数名(传入参数):
函数体
return 返回值
定义完函数后必须调用(调用方法:函数名()),参数不需要可以省,返回值不需要可以省。
如果一个函数有多个返回值,则需要多个变量接收。
def add(a,b):
result = a + b
return result
r = add(7,8)
print(r)
2.函数体内定义的变量为局部变量,若要修改为全局变量用global定义即可。
五.列表
1.用[ ]表示,元素类型可不同,支持嵌套
2.功能
3.遍历,迭代:依次取出元素(while 或for均可)。
六.元组
1.tuple,用( )表示,不可修改(但是如果元组里嵌套了一个list,list的内容是可以修改的),逗号隔开,支持嵌套。
2.只有一个数据时,这个数据后面要加逗号,不写的话就不是元组类型了。
3.功能
七.字符串
1.字符串也是一种数据容器,不支持修改,空格也算一个元素。
2.功能
a.
b.
c.
d.
e.
八.集合
1.set, 允许修改,不支持重复元素且内容无序,使用{ },逗号隔开,不支持下标索引。
2.功能
补充:
a = {1,2,3,4,5,6,7}
b = {2,4,6,8}
c = {6,7,8,9,10}
#取出2个集合的差集(a有而b没有的),得到一个新集合,a和b不变
print(a.difference(b))
#消除差集(在a中删除和b相同的元素),a被修改,不变
a.difference_update(b)
print(a)
#集合合并(得到新集合,b与c不变)
print(b.union(c))
3.集合不支持下标索引,不能用while循环,可以用for。
九.字典
1.dict,以键值对储存,不允许key重复,若key重复则后面的值将前面的覆盖,支持嵌套(从嵌套字典中取出信息: 字典[ ][ ])。
2.不可以使用下标索引,通过key值来取得对应的value。eg.print(dict[key]).
3.字典的key和value可以是任意数据类型(key不可以是字典)。
4.功能
5.字典转成列表,元组,集合时,value会丢失, 但是转换成字符串没问题。
机器学习
matplotlib
折线图
import random
from matplotlib import pyplot as plt
#往下三行代码的作用是使中文可以显示
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = range(0,120)
#一个图中显示两根折线
y_1 = [random.randint(17,25) for i in range(120)]
y_2 = [random.randint(15,22) for j in range(120)]
plt.figure(figsize = (10,8))
#明确两个折线发表代表什么,设置颜色,线条格式(:表示虚线),线条粗细
plt.plot(x,y_1,label="长春",color="orange",linestyle=':',linewidth=5)
plt.plot(x,y_2,label="苏州",color="cyan",linestyle='-.')
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]
#rotation是旋转角度,将x强制转换为列表,每3个取一个
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=45)
#直接下面这样也可以
#plt.yticks(y)
#设置y轴的刻度
plt.yticks(range(15,26))
plt.xlabel("时间")
plt.ylabel("温度 单位(℃)")
plt.title("气温变化情况")
#绘制网格,设置透明度alpha(范围是0到1),设置网格的线条
plt.grid(alpha=0.4,linestyle=':',linewidth=1)
#添加图例,loc设置图例的位置
plt.legend(loc="lower left")
plt.show()
散点图
与折线图的唯一区别是plt.scatter()
#散点图
from matplotlib import pyplot as plt
import random
#往下三行代码的作用是使中文可以显示
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
y_3 = [random.randint(10,12) for i in range(31)]
y_10 = [random.randint(25,27) for j in range(31)]
x_3 = range(1,32)
x_10 = range(41,72)
#设置图形大小
plt.figure(figsize=(20,8),dpi=80)
#绘制散点图(与折线图的唯一区别)
plt.scatter(x_3,y_3,label="3月份")
plt.scatter(x_10,y_10,label="10月份")
#调整x轴刻度
_x = list(x_3)+list(x_10)
_xtick_labels = ["3月{}日".format(i) for i in x_3]
_xtick_labels +=["10月{}日".format(i-40) for i in x_10]
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45)
#添加图例
plt.legend(loc="upper left")
#添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("变化")
#展示
plt.show()
条形图
竖着
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
#当字符串过长时可以通过\n换行
a = ["战狼2", "速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5\n∶最后的骑士","摔跤吧!爸爸","加勒比海盗"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8]
#设置图片大小
plt.figure(figsize=(20,8),dpi=80)
#绘制条形图,调整条形宽度
plt.bar(range(len(a)),b,width=0.3)
#设置字符串到x轴
plt.xticks(range(len(a)),a)
plt.show()
横着
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
a = ["战狼2", "速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5∶最后的骑士","摔跤吧!爸爸","加勒比海盗"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8]
#设置图片大小
plt.figure(figsize=(20,8),dpi=80)
#绘制条形图,调整条形宽度
plt.barh(range(len(a)),b,height=0.3)
#设置字符串到y轴
plt.yticks(range(len(a)),a)
plt.show()
其他
1. 设置画板多图:matplotlib.pyplot.add_subplot(nrows,ncols,**fig_kw)
nrows:第几行; ncols:第几列; **fig_kw:代表第几个图
2.颜色
3.直方图:plt.hist(x,bins=None)
x:需要传递的数据; bins:组距
4.饼图
plt.pie(x,explode=None,labels=None,autopct=None,pctdistance=0.6,shadow=False,
labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,
textprops=None,center=(0,0),frame=False,rotatelabels=False,data=None)
x:表示扇形或锲形的数据
explode:表示扇形或锲形离开圆心的距离
labels:表示扇形或锲形对应的标签文本
autopct:表示控制扇形或锲形的数值显示的字符串,可通过格式字符串指定小数点后的位数. pctdistance:表示扇形或锲形对应的数值标签距离圆心的比例,默认为0.6
shadow:表示是否显示阴影
labeldistance:表示标签文本的绘制位置(相对于半径的比例),默认为1.1.
startangle:表示起始绘制角度,默认从x轴的正方向逆时针绘制
radius:表示扇形或锲形的半径.
wedgeprops:表示控制扇形或锲形属性的字典.例如:通过wedgeprops={’‘width’:0.7}将锲形的宽度设为0.7.
textprops:表示控制图表中文本属性的字典
center:表示图表中心点位置,默认为(0,0) frame:表示是否显示图框
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
labels = ['大型','中型','小型', '微型']
#每块值
sizes = [46, 253, 321, 66]
colors = ['red','yellowgreen','lightskyblue','yellow']
#将某一块分割出来,值越大分割出的间隙越大
explode = (0, 0, 0.02, 0)
patches,text1,text2 = plt.pie(sizes,explode=explode,labels=labels,colors=colors,labeldistance = 1.2,
autopct='%3.2f%%',shadow=False,startangle=90,pctdistance=0.6)
# x,y轴刻度设置一致,保证饼图为圆形
plt.axis('equal')
plt.legend()
plt.show()
numpy
1.基础知识
import numpy as np
import random
#创建数组
t1 = np.array([1,2,3])
print(t1)
t2 = np.array(range(10))
print(t2)
t3 = np.arange(10)
print(t3)
#查看数据类型
print(t3.dtype)
#设置数据类型
t4 = np.arange(5,dtype=float)
print(t4)
print(t4.dtype)
#类型转换
t5 = t4.astype("int")
print(t5)
print(t5.dtype)
#保留小数,四舍五入
t6 = np.array([random.random() for i in range(10)])
print(t6)
print(t6.dtype)
t7 = np.round(t6,2)
print(t7)
#查看形状,shape里面有几个数就代表几维
print(t6.shape)
#修改形状,但对本身不会修改,如果想对本身修改,则t5=t5.reshape()即可
print(t6.reshape(2,5))
t8 = np.arange(24).reshape(2,3,4)
print(t8)
#转一维,shape[0]表示行数,shape[1]表示列数;或者直接用flatten展开
t9 = t8.reshape(t8.shape[0]*t8.shape[1]*t8.shape[2],)
print(t9)
print(t8.flatten())
#数组的计算(广播原则)
# 与常数运算,每个元素都加2,乘除同理
# 与数组运算,对应元素相加减乘除,如果只有行(列)的维数对应,则每一行(列)都进行对应的运算
# 在某个方向上形状一样,则可以进行计算,在每一个方向上形状都一样,则不可以计算
print(t8+2)
t10 = [0,1,2,3]
print(t8-t10)
#数组的转置
t11 = np.arange(24).reshape(4,6)
print(t11.transpose())
print(t11.T)
print(t11.swapaxes(1,0))
#轴(axis)(用0,1,2表示)
#读取数据
# np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
# frame文件(字符串,或产生器);dtype数据类型(默认np.float);delimiter分隔字符串(默认为空格)
# skiprows跳过前x行(一般跳过第一行表头),usecols读取指定的列,索引,元组类型;unpack转置
2.统计指标
axis轴的取值并不一定,Numpy中不同的API轴的值都不一样
方法 | 作用 |
---|---|
np.min(ndarray,axis) | 查询所有行或所有列的最小值 |
np.max(ndarray,axis) | 查询所有行或所有列的最大值 |
np.median(ndarray,axis) | 查询所有行或所有列的中位数 |
np.mean(ndarray,axis) | 查询所有行或所有列的平均值 |
np.std(ndarray,axis,dtype) | 查询所有行或所有列的标准差 |
np.var(ndarray,axis,dtype) | 查询所有行或所有列的方差 |
np.ardmax(ndarray) | 查询最大值的位置 |
np.ardmin(ndarray) | 查询最小值的位置 |
3.正态分布
a. np.random.randn
功能:从标准正态分布中返回一个或多个样本值
b. np.random.normal(loc = 0.0,scale = 1.0,size = None)
loc:float 此概率分布的均值(对应整个分布的中心)
scale:float 此概率分布的标准差(对应于分布的宽度,scale值越大越矮胖,scale值越小越瘦高)
size:int or tuple of ints 输出的shape,默认为None,只输出一个值
c. np.random.standard_normal(size = None)
返回指定形状的标准正态分布的数组
pandas
1.数据结构
数据结构 | 描述 |
---|---|
Series | 一维数据结构 |
DataFrame | 二维数据结构 |
MultiIndex | 三维数据结构 |
Panel | 三维数据结构(MultiIndex老版本) |
2.DataFrame
a. pd.DataFrame(data = None,index = None,columns = None)
index:行标签,如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引 columns:列标签,如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引
b.
属性 | 作用 |
---|---|
dataframe.shape | 获取维度 |
dataframe.index | 获取行索引表 |
dataframe.columns | 获取列索引表 |
dataframe.values | 获取其中array的值 |
dataframe.T | 行列互换(转置) |
dataframe.head() | 默认获取前5行,其他行数自行添加 |
dataframe.tail() | 默认获取后5行,其他行数自行添加 |
dataframe.info | 获取每一列的非空元素个数 |
3.画图
a.图行种类(与matplotlib类似)
种类 | 描述 |
---|---|
line | 折线图 |
bar | 条形图(竖直条状) |
bath | 条形图(水平条状) |
hist | 直方图 |
pie | 饼图 |
scatter | 散点图 |
b.举例
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
a = ['a','b','c','d']
b = ['a1','b1','c1','d1']
c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a,columns = b)
plt.figure(figsize = (20,8),dpi = 100)
c.plot(kind='bar',stacked=True)
plt.show()
4.文件读取和储存
类 | 数据类型 | 读取文件 | 存储文件 |
---|---|---|---|
text | CSV | read_csv | to_csv |
text | JSON | read_json | to_json |
text | HTML | read_html | to_json |
text | Local clipboard | read_clipboard | to_clipboard |
binary | MS Excel | read_excel | to_excel |
binary | HDF5 Format | read_hdf | to_hdf |
binary | Feather Format | read_feather | to_feather |
binary | Parquet Format | read_parquet | to_parquet |
binary | Msgpack | read_msgpack | to_msgpack |
binary | Stata | read_stata | to_stata |
binary | SAS | read_sas | -- |
binary | Python Pickle Format | read_pickle | to_pickle |
SQL | SQL | read_sql | to_sql |
SQL | Google Big Query | read_gbp | to_gbp |
a. pd.read_csv(filepath_or_buffer,sep = ',',usecols = None)
filepath_or_buffer:文件路径
sep:分隔符,默认用','隔开
usecols:指定读取的列名,列表形式
b. dataframe.to_csv(path_or_buffer=None,sep = ',',columns = None,header = True,index = True,mode = 'w',encoding = None)
path_or_buf:文件路径
sep:分隔符,默认用','隔开
columns:选择需要的列索引
header:是否写进列索引值
index:是否写进行索引值
mode:'w':重写,'a':追加
5.缺失值处理
a.判断是否含MAN
方法 | 描述 |
---|---|
pd.isnull(dataframe) 或dataframe.isnull() | 有缺失值返回True,没有缺失值返回False |
pd.notnull(dataframe)或dataframe.isnull() | 没有缺失值返回True,有缺失值返回False |
b.删除存在缺失值的对象:dataframe.dropna(axis = 0)
axis=1删除所在列,不会修改原数据,需要接收返回值
c.替换缺失值:dataframe.fillna(value, inplace = True)
True则会修改原数据,False则不替换修改原数据,生成新的对象
d.缺失值未被MAN标记:dataframe.replace(to_replace = '?',value = np.nan)
用其他标记(比如’?‘)替换为NAN,再使用上面的方法处理