Advertisement

数据分析-numpy、pandas、matplotlib

阅读量:

数据分析–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)
    
    
    python
    
    

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]
    
    
    python
    
    

np.zeros():创建全零数组。

复制代码
    zeros_arr = np.zeros((2, 3))

    print(zeros_arr)
    """
    输出:
    	[[0. 0. 0.]
    	 [0. 0. 0.]]
    """ 
    
    
    python
    
    

np.ones():创建全一数组。

复制代码
    ones_arr = np.ones((3, 2))

    print(ones_arr)
    """
    输出:
    [[1. 1.]
     [1. 1.]
     [1. 1.]]
    """
    
    
    python
    
    

np.arange():创建等差数组。

复制代码
    arange_arr = np.arange(1, 10, 2)

    print(arange_arr)
    # 输出:[1 3 5 7 9]
    
    
    python
    
    

np.linspace():创建等间距数组。

复制代码
    linspace_arr = np.linspace(1, 10, 5)

    print(linspace_arr)
    # 输出:[ 1. 3.25 5.5 7.75 10. ]
    
    
    python
    
    

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]]
    """
    
    
    
    python
    
    

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]]
    """
    
    
    python
    
    

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)
    
    
    python
    
    

ndarray.ndim:返回数组的维数。

复制代码
    print(arr.ndim)

    # 输出:2
    
    
    python
    
    

ndarray.dtype:返回数组的数据类型。

复制代码
    print(arr.dtype)

    # 输出:int64
    
    
    python
    
    

ndarray.size:返回数组的元素总数。

复制代码
    print(arr.dtype)

    # 输出:6
    
    
    python
    
    

ndarray.reshape():改变数组的形状。

复制代码
    reshaped_arr = arr.reshape(3, 2)

    print(reshaped_arr)
    """
    输出:
    [[1 2]
     [3 4]
     [5 6]]
    """
    
    
    python
    
    

ndarray.ravel()、ndarray.flatten():将多维数组转换为一维数组。

复制代码
    raveled_arr = arr.ravel()

    print(raveled_arr)
    # 输出:[1 2 3 4 5 6]
    
    
    python
    
    

ndarray.transpose():转置数组。

复制代码
    transposed_arr = arr.transpose()

    print(transposed_arr)
    """
    输出:
    [[1 2]
     [3 4]
     [5 6]]
    """
    
    
    python
    
    

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]
    
    
    python
    
    

np.subtract():数组元素求差。

复制代码
    diff_arr = np.subtract(arr1, arr2)

    print(diff_arr)
    # 输出:[-3 -3 -3]
    
    
    python
    
    

np.multiply():数组元素相乘。

复制代码
    prod_arr = np.multiply(arr1, arr2)

    print(prod_arr)
    # 输出:[4 10 18]
    
    
    python
    
    

np.divide():数组元素相除。

复制代码
    div_arr = np.divide(arr2, arr1)

    print(div_arr)
    # 输出:[4. 2.5 2. ]
    
    
    python
    
    

np.dot():数组的点积。

复制代码
    dot_product = np.dot(arr1, arr2)

    print(dot_product)
    # 输出:32
    
    
    python
    
    

np.sum():计算数组元素的和。

复制代码
    sum_elements = np.sum(arr1)

    print(sum_elements)
    # 输出:6
    
    
    python
    
    

np.mean():计算数组元素的平均值。

复制代码
    mean_value = np.mean(arr2)

    print(mean_value)
    # 输出:5.0
    
    
    python
    
    

np.where:三元运算符,替换值

复制代码
    # 在数组中,小于10的改为0,不小于的改为10

    np.where(array<10,0,10)
    
    
    python
    
    

np.clip:裁剪,替换值

复制代码
    # 把小于10的替换为10,大于20的替换为20

    array.clip(10,20)
    
    
    python
    
    

4、数组索引和切片

使用索引访问数组元素。

复制代码
    array[0] # 取第一个值(一维)

    array[2,3] # 取第三行第四列的值(二维)
    # 取第二层第三行第四列的值(三维)
    array[1,2,3]
    
    
    python
    
    

使用切片访问部分数组 。

复制代码
    # 一维

    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]]
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-17/gsFiT9bMR7DWxOS43Z1ewyJpNjtz.png)

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]
    
    
    python
    
    

np.split():将数组分割为多个子数组。

复制代码
    split_arr = np.split(concat_arr, 2)

    print(split_arr)
    """
    输出:
    [array([1, 2, 3]), array([7, 8, 9])]
    """
    
    
    python
    
    

Pandas

pandas是一个数据处理库,提供了用于快速、灵活地处理结构化数据的数据结构。它主要包括两种数据结构:Series(一维标记数组)和DataFrame(二维标记数据结构),可以用来处理缺失数据、合并/连接数据、重塑数据等。

1、创建数据结构

pd.Series():创建一个序列(一维数组)。

复制代码
    s = pd.Series([1, 2, 3, 4, 5])

    
    
    python
    
    

pd.DataFrame():创建一个数据帧(二维表格)。

复制代码
    df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

    
    
    python
    
    

2、数据读取与写入

pd.read_csv():从 CSV 文件中读取数据。

复制代码
    data = pd.read_csv('data.csv')

    
    
    python
    
    

pd.to_csv():将数据写入 CSV 文件。

复制代码
    data.to_csv('data.csv', index=False)

    
    
    python
    
    

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)
    
    
    python
    
    

df.fillna():填充缺失值。

复制代码
    filled_df = df.fillna(value=0)

    
    
    python
    
    

df.drop_duplicates(): 删除重复值。

复制代码
    df.drop_duplicates(inplace=True)

    
    
    python
    
    

df.drop():删除指定行或列。

复制代码
    new_df = df.drop(columns=['C'])

    
    
    python
    
    

df.rename():重命名列名或索引名。

复制代码
    renamed_df = df.rename(columns={'A': 'new_A'})

    
    
    python
    
    

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()
    
    
    python
    
    

df.replace():替换特定值。

复制代码
    replaced_df = df.replace({1: 'one', 2: 'two'})

    
    
    python
    
    

df.value_counts():计算每个唯一值的频率。

复制代码
    counts = df['A'].value_counts()

    
    
    python
    
    

7、数据分组与聚合

df.groupby():按列分组。

复制代码
    groupby_A = df.groupby('A')

    
    
    python
    
    

聚合函数(如 mean()sum()):对分组后的数据进行聚合计算。

8、数据合并与连接

df1.join(df2):根据df1合并df2

pd.concat():按行或列将多个数据框连接在一起。

复制代码
    new_df = pd.concat([df1, df2], axis=0)

    
    
    python
    
    

pd.merge():根据指定列将两个数据框合并。

复制代码
    merged_df = pd.merge(df1, df2, on='key')

    
    
    python
    
    

9、数据转换

df.pivot():将数据从长格式转换为宽格式。

复制代码
    pivoted_df = df.pivot(index='date', columns='variable', values='value')

    
    
    python
    
    

df.melt():将数据从宽格式转换为长格式。

复制代码
    melted_df = df.melt(id_vars=['id'], value_vars=['var1', 'var2'])

    
    
    python
    
    

df.apply():对数据框中的每一列应用函数。

复制代码
    df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)

    
    
    python
    
    

df.astype():将数据框中的数据类型转换为指定类型。

复制代码
    df['A'] = df['A'].astype(str)

    
    
    python
    
    

10、时间序列

pd.date_range():生成日期范围。

复制代码
    dates = pd.date_range('2022-01-01', periods=10)

    
    
    python
    
    

pd.to_datetime():将字符串转换为日期时间格式。

复制代码
    dates = pd.to_datetime(['2022-01-01', '2022-01-02'])

    
    
    python
    
    

频率的缩写:

别名 偏移量类型 说明
D Day 每日历日
B BusinessDay 每工作日
H Hour 每小时
T或min Minute 每分钟
S Second 每秒
L或ms Milli 每毫秒
U Micro 没微秒
M MonthEnd 每月最后一个日历日
BM BusinessMonthEnd 每月最后一个工作日
MS MonthBegin 每月第一个日历日
BMS BusinessMonthBegin 每月第一个工作日

全部评论 (0)

还没有任何评论哟~