首页 > 编程语言 >【python 简易入门应用教程】第二部分:数据处理与分析

【python 简易入门应用教程】第二部分:数据处理与分析

时间:2024-10-12 19:49:20浏览次数:8  
标签:教程 plt python print np 数组 数据处理 array 数据

第二部分:数据处理与分析

1. Numpy 基础

Numpy(Numerical Python)是一个强大的Python库,专为科学计算而设计。它提供了高效的多维数组对象,以及丰富的函数库来操作这些数组。Numpy 是数据分析和机器学习项目的基础模块之一,相比于纯Python,其处理大规模数据的效率更高。

1.1 Numpy 数组创建与操作

Numpy的核心数据结构是ndarray(n-dimensional array),可以用来存储同一类型的多维数据。理解和掌握Numpy数组的创建和基本操作是后续深入学习的基础。

  • 创建Numpy数组

    • 从Python列表创建:最简单的方式是直接从Python的列表(或嵌套列表)来创建数组。
    • 使用Numpy内置函数
      • np.array(): 从列表或元组创建数组。
      • np.zeros(): 创建一个全部元素为0的数组。
      • np.ones(): 创建一个全部元素为1的数组。
      • np.arange(): 类似于Python的range(),用于创建一个范围数组。
      • np.linspace(): 创建一个指定起始点和结束点的等差数列数组。
    import numpy as np
    
    list_a = [1, 2, 3]
    array_a = np.array(list_a)  # 从列表创建Numpy数组
    array_b = np.zeros((2, 2))  # 创建2x2的全零数组
    array_c = np.ones((3, 3))   # 创建3x3的全一数组
    array_d = np.arange(0, 10, 2)  # 创建从0到10,间隔为2的数组
    array_e = np.linspace(0, 1, 5) # 创建从0到1,等距的5个数
    
  • 数组属性:

    • ndarray.ndim: 数组的维度。
    • ndarray.shape: 数组的形状。
    • ndarray.size: 数组中元素的总数。
    • ndarray.dtype: 数组中元素的数据类型。
    print(array_a.ndim)   # 输出数组的维度
    print(array_b.shape)  # 输出数组的形状
    print(array_c.size)   # 输出数组总元素数量
    print(array_d.dtype)  # 输出数组的数据类型
    
  • 数组操作

    • 索引和切片:可类似于Python的列表来对数组进行操作以获取元素。
    • 数组变形:使用reshape()flatten()方法改变数组的形状。
    • 数组合并:使用hstack()vstack()concatenate()等方法合并数组。
    • 数组分割:使用split()hsplit()vsplit()等方法对数组进行分割。
    array_f = np.array([[1, 2, 3], [4, 5, 6]])
    print(array_f[1, 2])  # 数组索引,输出6
    
    array_g = array_f.reshape(3, 2)  # 改变数组形状为3x2
    array_h = array_f.flatten()  # 将多维数组展平成一维
    
    array_i = np.hstack((array_a, array_d))   # 水平合并数组
    array_j = np.vsplit(array_i, 2)  # 将数组垂直分割为两部分
    
1.2 数组运算与广播

Numpy提供了灵活而高效的数组运算机制,可以对数据进行逐元素操作和复杂的数学计算。

  • 数组运算

    • Numpy支持数组间的逐元素运算,如加、减、乘、除等。
    • 支持矩阵运算(dot)和线性代数函数。
    array_k = np.array([1, 2, 3])
    array_l = np.array([4, 5, 6])
    
    print(array_k + array_l)  # 输出 [5 7 9]
    print(array_k * 2)        # 输出 [2 4 6]
    print(np.dot(array_k, array_l))  # 输出dot乘积 [32]
    
  • 广播机制

    • 当两个数组的形状不相同时,Numpy会自动启用广播机制,使得小尺寸数组沿着大尺寸数组的某个维度进行复制,以便在进行元素间运算时能够匹配。
    • 广播的原则是从后向前匹配维度,维度值一致或者其中之一为1即可匹配。
    array_m = np.array([[1, 2, 3], [4, 5, 6]])
    array_n = np.array([1, 2, 3])
    print(array_m + array_n)   # 广播机制下进行逐元素加法
    # 输出:[[ 2  4  6]
    #       [ 5  7  9]]
    

掌握Numpy数组的创建、操作以及运算和广播机制能够极大地提升你在数据处理中编写代码的效率和简洁性,也为后续更复杂的数据分析和机器学习任务打下坚实基础。

2. Pandas 数据处理

Pandas 是 Python 中的一个强大的数据分析和处理库,特别适用于结构化数据(如表格或时间序列数据)的操作。Pandas 提供了两种核心数据结构,Series 和 DataFrame,便于我们进行数据操作和分析。

  • Pandas 的核心组件
    • Series:一维数据结构,类似于Python中的列表,但带有标签(标签索引)。
    • DataFrame:二维数据结构,类似于电子表格或SQL表,由多列的系列组成。

系列和数据框(Series 和 DataFrame)
  • Series

    • 作用:处理一维数据,提供基于标签的索引,使得数据访问更加便捷。
    • 特点:Series 既有数据的索引也有数据值;索引可以是字符、时间戳等,数据值可以是整数、浮点数、字符串等。
    • 示例
      import pandas as pd
      
      s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
      print(s)
      # Output:
      # a    1
      # b    2
      # c    3
      # d    4
      # dtype: int64
      
  • DataFrame

    • 作用:处理二维数据,适合各种数据分析任务。
    • 特点:DataFrame 是一种类似于数据库的表,包括行和列,每一列可以是不同的数据类型。
    • 示例
      import pandas as pd
      
      data = {
          'Name': ['Alice', 'Bob', 'Charlie'],
          'Age': [25, 30, 35],
          'City': ['New York', 'Los Angeles', 'Chicago']
      }
      df = pd.DataFrame(data)
      print(df)
      # Output:
      #       Name  Age         City
      # 0    Alice   25     New York
      # 1      Bob   30  Los Angeles
      # 2  Charlie   35      Chicago
      

数据的读取与存储(CSV, Excel, SQL)

Pandas 提供了便捷的接口用于读取和存储多种格式的数据:

  • 从 CSV 文件读取和存储

    • 读取pd.read_csv('file_path.csv') - 可以读取 CSV 文件中的数据。
    • 存储df.to_csv('file_path.csv', index=False) - 可以将 DataFrame 保存为CSV文件,不保存行索引。
  • 从 Excel 文件读取和存储

    • 读取pd.read_excel('file_path.xlsx') - 适用于读取 Excel 文件。
    • 存储df.to_excel('file_path.xlsx', index=False) - 保存为 Excel 文件。
  • 从 SQL 数据库读取和存储

    • 读取:通过 pd.read_sql('SQL query', connection) 读取数据库数据。
    • 注意:需要借助 数据库连接器,如 SQLite、MySQL 的 SQLAlchemy来连接数据库。

数据清洗与处理(缺失值处理、数据格式化)
  • 缺失值处理

    • 标识缺失值df.isnull() - 返回一个布尔值的DataFrame,用于显示数据缺失情况。
    • 填充缺失值df.fillna(value) - 用指定值填充缺失数据。
    • 删除缺失值df.dropna() - 删除含缺失值的行或列。
  • 数据格式化

    • 类型转换df['column_name'].astype(data_type) - 将列转换为指定的数据类型,比如字符串到整数。
    • 重命名列df.rename(columns={'old_name': 'new_name'}) - 重命名列名字。
    • 数据排序df.sort_values(by='column_name') - 按照某列数据进行排序。

通过这些操作,我们可以对数据进行基本的清洗和格式化,为后续分析或建模做好准备。

3. 数据可视化

数据可视化是数据分析过程中非常重要的一步,它能够帮助我们直观地理解数据的分布和趋势。在 Python 中,我们可以使用多个强大的库来实现数据的可视化。

使用 Matplotlib 绘制基本图形

Matplotlib 是一个广泛使用的绘图库,它能够绘制多种静态图表。在学习数据可视化时,Matplotlib 常常是我们接触的第一个库。

  • 作用:创建基本的静态图表,如折线图、柱状图、散点图等。
  • 特点
    • 丰富的图形种类:支持线型图、柱状图、散点图、饼图等多种图表。
    • 自定义能力强:可以对图形的各个方面进行详细的调整,如颜色、标签、刻度等。
  • 示例代码
    import matplotlib.pyplot as plt
    
    # 数据
    x = [1, 2, 3, 4, 5]
    y = [2, 3, 5, 7, 11]
    
    # 绘制折线图
    plt.plot(x, y, label='数据', color='b')
    plt.xlabel('X 轴')
    plt.ylabel('Y 轴')
    plt.title('简单线型图')
    plt.legend()
    plt.show()
    
    • 基础绘图:使用 plt.plot() 创建折线图,plt.xlabel()plt.ylabel() 设置坐标轴标签,plt.title() 设置图表标题。
    • 调用 plt.show():渲染并显示图形。
使用 Seaborn 进行统计图形展示

Seaborn 是基于 Matplotlib 构建的高级可视化库,它能够轻松创建更加美观和信息丰富的统计图表。

  • 作用:用于进行统计数据的可视化,扩展和简化了 Matplotlib 的绘图功能。
  • 特点
    • 美观的默认主题:内置多种风格,使图表看起来更专业。
    • 高级的统计功能:如箱线图、热力图、密度图等。
  • 示例代码
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # 示例数据
    data = sns.load_dataset('iris')
    
    # 绘制箱线图
    sns.boxplot(x='species', y='sepal_length', data=data)
    plt.title('Iris 数据集的箱线图')
    plt.show()
    
    • 内置数据集:如 Iris 数据集,使用 sns.load_dataset() 很方便地加载。
    • 高层次 API:只需几行代码即可绘制复杂的统计图形。
绘制交互式图表(Plotly 或 Bokeh)

交互式图表可以更好地展现数据细节,用户可以与图表进行交互以获得更多信息。Plotly 和 Bokeh 是两种常用的 Python 可交互可视化库。

  • 作用:创建具有交互功能的图表。
  • 特点
    • 支持交互:如缩放、平移、悬停显示数据等功能。
    • Web 友好:生成的图表可以很方便地嵌入到网页中。
  • 示例代码(Plotly)
    import plotly.express as px
    
    # 示例数据
    df = px.data.gapminder().query("year == 2007")
    
    # 绘制散点图
    fig = px.scatter(df, x='gdpPercap', y='lifeExp', size='pop', color='continent',
                     hover_name='country', log_x=True, size_max=60)
    fig.update_layout(title='2007 年 GDP 与预期寿命')
    fig.show()
    
    • 简洁的 API:如 px.scatter(),使得创建互动图表变得简单。
    • 动态特性:通过 fig.show() 在网络浏览器中查看交互式图表。

通过这些工具和库,我们可以将复杂的数据以直观的方式展示出来,帮助我们更好地理解和分析数据。

4. 统计与分析

在数据科学中,统计与分析是理解和解释数据的关键步骤。通过各种统计方法,我们能够揭示数据中的模式、趋势和关系,为决策提供有力的支持。

  • 作用:通过统计方法和分析技术,帮助理解数据,识别数据中的模式、趋势和关系。
  • 特点:提供数据的汇总信息,支持预测和决策。

描述性统计分析

描述性统计用于总结和描述数据集的基本特征。它是理解数据的第一步,通过各种统计量来概括数据的整体情况。

  • 常用统计量
    • 平均值(Mean):数据的算术平均,表示数据的集中趋势。
    • 中位数(Median):将数据排序后位于中央的值,不受极端值影响。
    • 众数(Mode):数据集中出现次数最多的值。
    • 标准差(Standard Deviation):数据散布程度的度量,数值越大表示数据的分散程度越高。
    • 方差(Variance):标准差的平方,表示数据的变异程度。
    • 最大值、最小值:数据分布的边界。
    • 四分位数(Quartiles):用于描述数据的分布,通过分位数将数据划分为若干部分。
  • 案例
    import numpy as np
    data = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9]
    mean = np.mean(data)
    median = np.median(data)
    std_dev = np.std(data)
    print(f"平均值: {mean}, 中位数: {median}, 标准差: {std_dev}")
    

假设检验与数据分布

假设检验是统计推断的基础,用于检测数据样本是否支持一些特定的假设。结合数据分布知识,假设检验可以帮助我们判断结果的显著性。

  • 常用方法
    • t检验(T-test):用于比较两个均值是否有显著差异。
    • 卡方检验(Chi-square test):用于检验两个类别变量之间的独立性。
    • p值(P-value):用于判断结果的显著性,一般设定0.05为显著性水平。
  • 案例
    from scipy import stats
    data1 = [20, 21, 22, 19, 18, 19]
    data2 = [30, 29, 29, 30, 28]
    t_stat, p_value = stats.ttest_ind(data1, data2)
    print(f"t统计量: {t_stat}, p值: {p_value}")
    

回归分析与相关性研究

回归分析用于建立变量之间的关系模型,从而可以根据一个或多个自变量预测因变量。相关性研究则用于评估两个变量之间相关程度。

  • 线性回归:最简单的回归分析形式,用于预测连续因变量。
  • 相关系数(Correlation Coefficient):表示两个变量的相关程度,取值范围为-1到1。
  • 案例
    from sklearn.linear_model import LinearRegression
    import numpy as np
    
    # 假设我们有以下数据
    X = np.array([[1], [2], [3], [4], [5]])
    y = np.array([2, 4, 5, 4, 5])
    
    model = LinearRegression().fit(X, y)
    r_squared = model.score(X, y)
    print(f"线性回归模型的R^2: {r_squared}")
    

通过这些分析工具,能够更深入地理解数据,建立预测模型,并解决现实问题。

标签:教程,plt,python,print,np,数组,数据处理,array,数据
From: https://blog.csdn.net/fjw12998/article/details/142750865

相关文章

  • 使用Python爬取免费代理并测试其有效性
    前言在本篇文章中,我们将使用Python编写一个脚本来爬取免费的代理IP地址,并对其进行有效性测试。我们将会用到playwright、aiohttp、pandas等库来完成这个任务。最终我们会得到一个包含有效代理IP地址的列表,并将其保存到本地文件中。1.环境准备首先,你需要确保你的Python环......
  • python统计人的视角(1)——python基础
    3D画图importmatplotlibimportmatplotlib.pyplotaspltimportnumpyasnpfig=plt.figure()ax=fig.add_subplot(111,projection="3d")x=np.arange(-10,10,0.5)y=np.arange(-10,10,0.5)X,Y=np.meshgrid(x,y)Z=X**2+Y**2ax.plot_wireframe(X,Y,......
  • 简易快速搭建全景VR服务器教程
    近期有一些朋友在使用BZ全景可视化编辑器的过程中,不了解如何把全景编辑器生成的静态全景VRHTML项目部署到自己的服务器上,本篇文章将详细介绍如何使用宝塔面板来搭建一个全景VR服务器我们将从安装宝塔面板开始,配置静态网页服务器,上传全景静态HTML项目,并最终预览效果,每一步......
  • python怎么引用文件
    新建python文件:在同目录lib下创建mylib.py和loadlib.py两个文件。在mylib.py文件中创建一个Hello的类,并且给这个类添加一个sayHello的方法,让它输出hellopython在loadlib.py文件中引入mylibimport mylib在loadlib中调用引用过来的python文件mylib.py中的Hello......
  • proteus-7.8的安装教程+安装产生的问题+创建桌面快捷方式
    20241012,记录一下老师教的Proteus7.8的安装过程,以及自己在安装过程中产生的问题目录安装过程1-21出现Nolicencekeyisinstalled的问题解决方法,请看8proteus的破解方法,请看17-20寻找proteus,创建桌面快捷方式,请看211.新建一个文件夹,Proteus(建议放在D盘)2.解压Proteus-......
  • python3 mysql 连接
    python3mysql连接脚本#-*-coding:utf-8-*-#importMySQLdb,sys,osimportpymysqlasMySQLdb,sys,osimportos,sys,traceback#importMySQLdb.cursors#importmysql.connectordefsingleton(cls):instances={}defget_instance():ifcls......
  • 【python-数据分析】pandas时间序列处理
    1.timestamp1.1创建timestamp自定义timestamp语法:pd.Timestamp(ts_input,tz,year,month,day,hour,minute,second,microsecond,nanosecond,tzinfo)代码示例:importpandasaspdimportpytz#当ts_input为字符串时,一般要与tz参数搭配使用timestamp=pd.Timestamp(ts......
  • 【python-日期和时间处理】datetime模块基本使用
    1.获取datetime对象获取当前datetime对象方法:datetime.now(cls,tz=None)->datetime参数说明:tz:时区信息,不传该参数时,默认使用当地时区示例代码:now=datetime.now()print(now)#2023-01-0509:38:43.084062print(type(now))#datetime.datetime如果需......
  • 【python-数据分析】pandas数据提取
    importpandasaspd1.直接索引df=pd.DataFrame({'AdmissionDate':['2021-01-25','2021-01-22','2021-01-20','2021-01-18','2021-01-17','2021-01-17','2021-01-2......
  • 【python日期和时间处理】time模块基本使用
    1.time模块中三种时间格式时间戳time模块获取各种精度的时间戳importtimetimestamp=time.time()timestamp_s=int(time.time())#s精度timestamp_ms=int(time.time()*1000)#ms精度timestamp_us=int(time.time()*1000_000)#μs精度timestamp_ns=t......