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

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'])
    
  • 频率的缩写:

    别名偏移量类型说明
    DDay每日历日
    BBusinessDay每工作日
    HHour每小时
    T或minMinute每分钟
    SSecond每秒
    L或msMilli每毫秒
    UMicro没微秒
    MMonthEnd每月最后一个日历日
    BMBusinessMonthEnd每月最后一个工作日
    MSMonthBegin每月第一个日历日
    BMSBusinessMonthBegin每月第一个工作日
  • 52
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值