数据分析–numpy、pandas、matplotlib
Matplotlib
Matplotlib是一个用于创建静态、动态和交互式图形的2D绘图库。它可以绘制线图、散点图、直方图等各种类型的图表,用于可视化数据和结果。
1、创建图表和子图
plt.figure()
:创建一个新的图表。plt.subplots()
:创建一个包含多个子图的图表。
2、绘制图形
plt.plot()
:绘制折线图。x
: x 轴的数据。y
: y 轴的数据。color
(或c
): 线条的颜色。linestyle
(或ls
): 线条的风格,如实线 (-
)、虚线 (--
)。linewidth
(或lw
): 线条的宽度。marker
: 点的标记样式,如圆圈 (o
)、方块 (s
)。markersize
(或ms
): 点的大小。label
: 线条的标签,用于图例。
plt.scatter()
:绘制散点图。x
: x 轴的数据。y
: y 轴的数据。color
(或c
): 点的颜色。marker
: 点的标记样式,如圆圈 (o
)、方块 (s
)。s
: 点的大小。alpha
: 点的透明度。label
: 点的标签,用于图例。
plt.bar()
:绘制柱状图。x
: 柱状图的 x 轴位置。height
(或y
): 柱状图的高度。width
: 柱状图的宽度。color
(或c
): 柱状图的颜色。edgecolor
: 柱状图的边框颜色。linewidth
: 柱状图的边框宽度。tick_label
: 柱状图的刻度标签。align
: 柱状图的对齐方式。
plt.hist()
:绘制直方图。x
: 数据。bins
: 分组数量或分组边界。color
(或c
): 直方图的颜色。edgecolor
: 直方图的边框颜色。alpha
: 直方图的透明度。label
: 直方图的标签,用于图例。
plt.pie()
:绘制饼图。x
: 饼图的数值。labels
: 饼图每个部分的标签。colors
: 饼图每个部分的颜色。explode
: 突出显示某些部分。autopct
: 控制饼图上显示的百分比格式。startangle
: 饼图开始的角度。
plt.imshow()
: 显示图像数据。
3、图表装饰和设置
-
plt.title()
:设置图表标题。 -
plt.xlabel()
和plt.ylabel()
:设置 x 轴和 y 轴标签。 -
plt.xlim()
和plt.ylim()
:设置 x 轴和 y 轴的显示范围。 -
plt.xticks()
和plt.yticks()
:设置 x 轴和 y 轴的刻度标签。 -
plt.legend()
:显示图例。 -
plt.grid()
:显示网格线。 -
plt.color()
:设置颜色。 -
plt.()
:设置线条样式。 -
plt.marker()
:设置标记样式。 -
plt.text()
: 在图中添加文本。 -
plt.annotate()
: 添加带有箭头的注释。
4、图像保存与显示
plt.savefig()
:保存图表为图片文件。plt.show()
:显示图表。
6、中文
- fontproperties=zhfont1
# fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
plt.title("中文题目", fontproperties=zhfont1)
Numpy
NumPy(Numerical Python)是一个开源的Python科学计算库,它提供了强大的多维数组对象和用于处理这些数组的函数。NumPy是许多其他Python科学计算库的基础,例如pandas和matplotlib。它也可以用于线性代数、傅立叶变换和随机数生成等方面。
1、创建数组
-
np.array()
:从列表或元组等序列对象创建数组。import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr) # 输出:[1 2 3 4 5]
-
np.zeros()
:创建全零数组。zeros_arr = np.zeros((2, 3)) print(zeros_arr) """ 输出: [[0. 0. 0.] [0. 0. 0.]] """
-
np.ones()
:创建全一数组。ones_arr = np.ones((3, 2)) print(ones_arr) """ 输出: [[1. 1.] [1. 1.] [1. 1.]] """
-
np.arange()
:创建等差数组。arange_arr = np.arange(1, 10, 2) print(arange_arr) # 输出:[1 3 5 7 9]
-
np.linspace()
:创建等间距数组。linspace_arr = np.linspace(1, 10, 5) print(linspace_arr) # 输出:[ 1. 3.25 5.5 7.75 10. ]
-
np.random.rand()
:创建指定形状的随机数组,返回的为[0.0,1.0]的数。random_arr = np.random.rand(2, 3) print(random_arr) """ 输出: [[0.09762701 0.43037873 0.20552675] [0.08976637 0.15257277 0.08977303]] """
-
np.random.uniform()
:创建指定形状的范围数组random_uniform = np.random.uniform(low=1,high=10,size=(2,3)) print(random_uniform) """ 输出: [[4.59762701 1.43037873 9.20552675] [3.08976637 8.15257277 6.08977303]] """
-
np.random.randn()
:从标准正态分布中返回一个或多个样本值 -
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,只输出一个值
-
np.random.randint
:创建指定形状的范围数组,类型为整数 -
np.random.randint
:创建指定形状的范围数组,类型为整数
2、数组操作
-
ndarray.shape
:返回数组的形状。arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.shape) # 输出:(2, 3)
-
ndarray.ndim
:返回数组的维数。print(arr.ndim) # 输出:2
-
ndarray.dtype
:返回数组的数据类型。print(arr.dtype) # 输出:int64
-
ndarray.size
:返回数组的元素总数。print(arr.dtype) # 输出:6
-
ndarray.reshape()
:改变数组的形状。reshaped_arr = arr.reshape(3, 2) print(reshaped_arr) """ 输出: [[1 2] [3 4] [5 6]] """
-
ndarray.ravel()、ndarray.flatten()
:将多维数组转换为一维数组。raveled_arr = arr.ravel() print(raveled_arr) # 输出:[1 2 3 4 5 6]
-
ndarray.transpose()
:转置数组。transposed_arr = arr.transpose() print(transposed_arr) """ 输出: [[1 2] [3 4] [5 6]] """
3、数组运算
-
np.add()
:数组元素求和。arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) sum_arr = np.add(arr1, arr2) print(sum_arr) # 输出:[5 7 9]
-
np.subtract()
:数组元素求差。diff_arr = np.subtract(arr1, arr2) print(diff_arr) # 输出:[-3 -3 -3]
-
np.multiply()
:数组元素相乘。prod_arr = np.multiply(arr1, arr2) print(prod_arr) # 输出:[4 10 18]
-
np.divide()
:数组元素相除。div_arr = np.divide(arr2, arr1) print(div_arr) # 输出:[4. 2.5 2. ]
-
np.dot()
:数组的点积。dot_product = np.dot(arr1, arr2) print(dot_product) # 输出:32
-
np.sum()
:计算数组元素的和。sum_elements = np.sum(arr1) print(sum_elements) # 输出:6
-
np.mean()
:计算数组元素的平均值。mean_value = np.mean(arr2) print(mean_value) # 输出:5.0
-
np.where
:三元运算符,替换值# 在数组中,小于10的改为0,不小于的改为10 np.where(array<10,0,10)
-
np.clip
:裁剪,替换值# 把小于10的替换为10,大于20的替换为20 array.clip(10,20)
4、数组索引和切片
-
使用索引访问数组元素。
array[0] # 取第一个值(一维) array[2,3] # 取第三行第四列的值(二维) # 取第二层第三行第四列的值(三维) array[1,2,3]
-
使用切片访问部分数组 。
# 一维 array[1:5] # 取第二行到第五行 # 冒号(:)可以省略 array[1,:] # 取第二行 array[2:,:] # 取第三行到最后一行 array[[2,3,10],:] # 取第3、4、11行 array[:,0] # 取第一列 array[:,2:] # 取第三行到最后一列 array[:,[0,2]] # 取第1、3列 # 二维 # 取第三行到第五行、第二列到第四列的结果 array[2:5,1:4] # 取得是交叉点的位置 # 取多个不相邻的点 # 选出来的结果: (0,0) (2,1) (2,3) # 第一行第一列,第三行第二列,第三行第四列 array[[0,2,2],[0,1,3]]
5、数组聚合和统计
np.min()
和np.max()
:计算数组的最小值和最大值。np.mean()
和np.median()
:计算数组的平均值和中位数。np.std()
和np.var()
:计算数组的标准差和方差。np.unique()
:返回数组中的唯一值。
6、数组拼接和分割
-
np.hstack()
、np.vstack()
:水平和垂直堆叠数组。 -
np.concatenate()
:沿指定轴拼接数组。arr3 = np.array([7, 8, 9]) concat_arr = np.concatenate((arr1, arr3)) print(concat_arr) # 输出:[1 2 3 7 8 9]
-
np.split()
:将数组分割为多个子数组。split_arr = np.split(concat_arr, 2) print(split_arr) """ 输出: [array([1, 2, 3]), array([7, 8, 9])] """
Pandas
pandas是一个数据处理库,提供了用于快速、灵活地处理结构化数据的数据结构。它主要包括两种数据结构:Series(一维标记数组)和DataFrame(二维标记数据结构),可以用来处理缺失数据、合并/连接数据、重塑数据等。
1、创建数据结构
-
pd.Series()
:创建一个序列(一维数组)。s = pd.Series([1, 2, 3, 4, 5])
-
pd.DataFrame()
:创建一个数据帧(二维表格)。df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
2、数据读取与写入
-
pd.read_csv()
:从 CSV 文件中读取数据。data = pd.read_csv('data.csv')
-
pd.to_csv()
:将数据写入 CSV 文件。data.to_csv('data.csv', index=False)
3、数据查看
df.head()
和df.tail()
:查看数据框的前几行和后几行。df.info()
:显示数据帧的基本信息,包括列名和数据类型。df.describe()
:显示数据帧的统计摘要信息,如平均值、标准差等。
4、数据选择与过滤
- 使用标签选择行列:
df['A']
或df.loc[:, 'A']
。 - 使用位置选择行列:
df.iloc[0]
(位置下标)。 - 使用条件选择行列:
df[df['A'] > 1]
。
5、数据处理
-
df.dropna()
:删除缺失值。# inplace原地替换,不用重新赋值 df.dropna(inplace=True)
-
df.fillna()
:填充缺失值。filled_df = df.fillna(value=0)
-
df.drop_duplicates()
: 删除重复值。df.drop_duplicates(inplace=True)
-
df.drop()
:删除指定行或列。new_df = df.drop(columns=['C'])
-
df.rename()
:重命名列名或索引名。renamed_df = df.rename(columns={'A': 'new_A'})
6、数据操作与计算
-
df.sum()
、df.mean()
、df.std()
、df.var()
:对数据进行求和、均值、标准差、方差等计算。 -
df.sort_values()
、df.sort_index()
:对数据进行排序。# 按指定列的值对数据框进行排序。 sorted_df = df.sort_values(by='A', ascending=False) #按索引排序数据框。 sorted_df = df.sort_index()
-
df.replace()
:替换特定值。replaced_df = df.replace({1: 'one', 2: 'two'})
-
df.value_counts()
:计算每个唯一值的频率。counts = df['A'].value_counts()
7、数据分组与聚合
-
df.groupby()
:按列分组。groupby_A = df.groupby('A')
-
聚合函数(如
mean()
、sum()
):对分组后的数据进行聚合计算。
8、数据合并与连接
-
df1.join(df2)
:根据df1合并df2 -
pd.concat()
:按行或列将多个数据框连接在一起。new_df = pd.concat([df1, df2], axis=0)
-
pd.merge()
:根据指定列将两个数据框合并。merged_df = pd.merge(df1, df2, on='key')
9、数据转换
-
df.pivot()
:将数据从长格式转换为宽格式。pivoted_df = df.pivot(index='date', columns='variable', values='value')
-
df.melt()
:将数据从宽格式转换为长格式。melted_df = df.melt(id_vars=['id'], value_vars=['var1', 'var2'])
-
df.apply()
:对数据框中的每一列应用函数。df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
-
df.astype()
:将数据框中的数据类型转换为指定类型。df['A'] = df['A'].astype(str)
10、时间序列
-
pd.date_range()
:生成日期范围。dates = pd.date_range('2022-01-01', periods=10)
-
pd.to_datetime()
:将字符串转换为日期时间格式。dates = pd.to_datetime(['2022-01-01', '2022-01-02'])
-
频率的缩写:
别名 偏移量类型 说明 D Day 每日历日 B BusinessDay 每工作日 H Hour 每小时 T或min Minute 每分钟 S Second 每秒 L或ms Milli 每毫秒 U Micro 没微秒 M MonthEnd 每月最后一个日历日 BM BusinessMonthEnd 每月最后一个工作日 MS MonthBegin 每月第一个日历日 BMS BusinessMonthBegin 每月第一个工作日