模块(Module)是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,能够有逻辑地组织 Python 代码段。把相关的代码分配到一个模块里能让Python代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。
模块定义好后,使用 import 语句来引入模块,语法:import module_name1[, module_name2,…]
python的常用模块有numpy、pandas、matplotlib等等。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Numerical Python,即数值Python,是Python进行科学计算的一个基础模块。
ndarray即N维数组,是numpy模块的核心数据结构。用多维数组计算,非常便捷高效并且可以节省空间。
导入numpy库:import numpy as np,并取了一个更简略的别名,在调用库函数时,通过在函数名前加np.即可调用:np.function_name()。
1、构造一维数组
import numpy as np
a = np.array([1,2,3,4]) #构造一个一维数组,其中元素的数据类型必须一致
a.ndim #输出:1。表示数组是一维的
a.size #输出:4。表示数组有四个元素
a>2 #输出array([False, False, True, True])。即大于2的元素索引值
a[a>2] #输出array([3, 4])。即取出大于2的元素
a.dtype #输出dtype('int32')。表示数组中元素是整型
2、构造二维数组
import numpy as np
b = np.array( [[1,2],[3,4]] ) #构造一个二维数组
b.shape #输出(2,2)。表示数组结构为2×2
b.ravel() #把多维数组变为一维数组
3、矩阵乘法
import numpy as np
a = np.empty((2,3))
b = np.empty((3,4))
a*a #a中每个元素自乘平方
c = a.dot(b) 或者 c = np.dot(a,b)
c.shape #输出(2, 4)
4、一些常用函数
import numpy as np
x=np.arange(20).reshape(5,4)
np.abs(x) #绝对值
np.sqrt(x) #平方根
np.square(x) #平方
np.power(x,3) #三次方
np.exp(x) #指数e的次方
np.log(x) #底数为e的log
np.log2(x) #底数为2的log
np.log10(x) #底数为10的log
np.sign(x) #计算正负号:1、0或-1
np.sin(x) #正弦
np.arcsin(x) #反三角
x.min() #最小值
x.max() #最大值
x.mean() #均值
x.max(axis=0) #在0轴上聚合求最大值
np.unique(x) #去重
np.linspace(0,5,11) #0到5之间(包含0、5),均分为11个数
pandas模块是Python用于数据导入及整理的模块,最初被作为金融数据分析工具而开发出来,它提供了大量能使我们快速便捷地处理数据的函数和方法,对于在数据挖掘工作中数据的处理起到非常大的作用。
pandas模块的常用数据结构主要有两种:
(1)、Series。一维数组,与Numpy中的一维array类似,只是在其基础上增加了一组索引。
(2)、DataFrame。二维的表格型数据结构,可以看做是由相同或不同值类型的Series组成的。
1、Series
import numpy as np
import pandas as pd
from pandas import Series
#通过list创建
s1= Series(['a','f','j','p','s'],index=[0,1,2,3,4])
s1.index #查看索引
s1.values #查看数据
#通过array创建
s2 = Series(np.ones(10,))
#通过dict创建
s3 = Series({'Tom':99,'Jerry':100,'Bob':98,'Jim':97})
s3[s3>97].mean() #计算大于97分的同学的平均分。
#空值
s4 = Series([82,100,60,70,None],index=['Bob','Tom','Jim','Jerry','James'])
s4[pd.isnull(s4)] #查看空值数据
(s3+s4)/2 #根据索引进行运算
#查找
s3['Tom']
s1[1:4]
2、DataFrame
import pandas as pd
from pandas import Series,DataFrame
s1 = Series({'Tom':99,'Jerry':100,'Bob':98,'Jim':97})
d1 = DataFrame(s1,columns=['score']) #在Series的基础上,增加列索引
d2 = DataFrame([['Tom',99,12],['Jerry',100,15],['Bob',98,13],['Jim',97,10]],columns=['name','score','age'])
d2.index #行索引
d2.columns #列索引
d2.values #值
#查找
d2['score'] #按列查找
d1.loc['Tom'] #按行索引查找
d2.iloc[0] #按行号查找
d2.iloc[1:3] #按行切片
d2.iloc[:,0:2] #按列切片
d2.iloc[1:3,0:2] #按行和列切片
d2['name'][0:2] 或 d2.name[0:2] #查找'name'列的第0、1行
d2[1:3] #查找第1、2行
d2.iloc[1,2] 或 d2.loc[1,'age'] #查找第1行第2列元素值
d2.iat[1,2] #与iloc等效,但是iat不能切片。d2.iat[1:3,0:2]会报错
d2[d2.age>12] #过滤出年龄>12的数据
d2[d2!=98] #整体过滤
d2[(d2==98)|(d2==12)] #整体过滤
d2[d2.age.isin([13])] #取出年龄=13的数据
d2.sort_values("age") #按年龄从小到大排序
d2.sort_values("age",ascending=False) #按年龄从大到小排序
d2.sort_values("age",inplace=True) #会保存排序结果(但行号不会变)
d2.reset_index(drop=True) #重置行号
len(d2) #查看数据行数
d2.shape #查看数据规模
d2.head(2) #显示头部2行
d2.tail(2) #显示末尾2行
d2["age"]=[10,11,12,13] #修改列数据
d2["num"]=[996,997,998,999] #新增列
3、聚类
import numpy as np
from pandas import DataFrame
d2 = DataFrame([['Tom',99,12],['Jerry',100,15],['Bob',98,13],['Jim',97,10]],columns=['name','score','age'])
d2.count()
d2.mean()
d2.std()
d2.min()
d2.max()
d2.sum()
d2.describe() #显示所有聚类结果
d2.count(0) #按列聚类
d2.count(1) #按行聚类
d2.age.max() #按具体列聚类
d2.apply(lambda x:x.max()+x.min()) #自定义函数计算
d3 = DataFrame([['Tom',99,12],['Tom',96,12],['Jerry',100,15],['Jerry',90,15],['Bob',98,13],['Jim',97,10]],columns=['name','score','age'])
#按name计算均值
d3.pivot_table(index="name",values=["age","score"],aggfunc=np.mean)
4、io
import pandas as pd
from pandas import DataFrame
d2 = DataFrame([['Tom',99,12],['Jerry',100,15],['Bob',98,13],['Jim',97,10]],columns=['name','score','age'])
#存储为csv文件
d2.to_csv('x.csv')
# 读取csv文件
x = pd.read_csv('x.csv',sep=',',header=0) #可以设置分隔符,表头等参数
#相同的也可以用to_excel、read_excel; read_pickle、to_pickle; to_json、read_json等来存取其他类型的文件
该模块是一款强大的数据可视化工具,包含丰富的数学绘图函数。不过Matplotlib 默认情况不支持中文,如果要显示中文文字,可以下载OTF 字体。
1、绘制折线图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
unrate = pd.read_csv("UNRATE.csv")
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
#指定x轴和y轴数据
unrate_1950 = unrate[unrate.DATE.dt.year==1950]
plt.plot(unrate_1950['DATE'], unrate_1950['VALUE'])
#x轴数据值倾斜45显示
plt.xticks(rotation=45)
#指定x轴和y轴数据的标签
plt.xlabel('Month')
plt.ylabel('Unemployment Rate')
#指定标题
plt.title('Monthly Unemployment Trends, 1950')
#是否显示辅助方格线
plt.grid(False)
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
unrate = pd.read_csv("UNRATE.csv")
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
unrate['MONTH'] = unrate['DATE'].dt.month
fig = plt.figure(figsize=(8,4))
colors = ['red', 'blue', 'green', 'orange', 'black']
for i in range(5):
start_index = i*12
end_index = (i+1)*12
subset = unrate[start_index:end_index]
plt.plot(subset['MONTH'], subset['VALUE'], c=colors[i], label=str(1948+i))
#显示图例在最佳位置
plt.legend(loc='best')
#显示主方格辅助线
plt.grid(True)
#xy轴标签和图表标题
plt.xlabel('Month, Integer')
plt.ylabel('Unemployment Rate, Percent')
plt.title('Monthly Unemployment Trends, 1948-1952')
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
unrate = pd.read_csv("UNRATE.csv")
cols = ['1948', '1949', '1950', '1951', '1952'] #列名
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
bar_heights=[]
for i in range(5):
bar_height = round(unrate[unrate.DATE.dt.year == (1948+i)].VALUE.mean(),2) #失业率均值
bar_heights.append(bar_height)
bar_positions = np.arange(5) + 1
# 返回一个 (figure, ax) 的元组
fig,ax = plt.subplots()
# 绘制纵向柱形图
ax.bar(bar_positions, bar_heights, 0.4) #0.4指定柱的宽度
# 设置x轴bar的位置和x轴数据显示的角度
ax.set_xticks(range(1,6))
ax.set_xticklabels(cols, rotation=45)
# 设置xy轴的标签和图表的标题
ax.set_xlabel('year')
ax.set_ylabel('Unemployment Rate')
ax.set_title('Unemployment Rate , 1948-1952')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])//设置散点图的颜色
plt.scatter(x, y, c=colors)
plt.show()