• 【数学建模】——【python库】——【Pandas学习】


    ce6fbd68767d465bbe94b775b8b811db.png

    731bd47804784fa2897220a90a387b28.gif

     专栏:数学建模学习笔记

    pycharm专业版免费激活教程见资源,私信我给你发

    python相关库的安装:pandas,numpy,matplotlib,statsmodels

    总篇:【数学建模】—【新手小白到国奖选手】—【学习路线】

    第一卷:【数学建模】—【Python库】—【Numpy】—【学习】

    本篇属于第二卷——Pandas学习笔记

    步骤1:安装PyCharm和Pandas

    1.下载并安装PyCharm:

    • 前往JetBrains官网,下载并安装PyCharm Community Edition(免费)或Professional Edition。
    • 安装完成后,启动PyCharm。

    2.安装Pandas库:

    • 打开PyCharm,新建一个项目。

    在项目窗口中,找到Terminal(终端)窗口,输入以下命令安装Pandas库:

    pip install pandas
    

    步骤2:创建并读取数据

    1.创建数据文件:

    • 在项目根目录下创建一个名为data.csv的文件,输入一些示例数据。例如:
    • Name    

         Age    

         Score

      Alice    

          23     

           88

      Bob    

          25    

           92

      Charlie  

         22    

          85

      Xiaoli    

          18      

           100 

    dd77fee7b03b483c82f30860edb7d575.png

    2.读取数据:

    • 在项目中创建一个新的Python文件,例如   Pandas学习.py。

    在Pandas学习.py中编写以下代码来读取数据 :

    1. import pandas as pd
    2. # 读取CSV文件
    3. data = pd.read_csv('data.csv')
    4. # 打印数据
    5. print(data)

    点击右上角的绿色运行按钮,或使用快捷键Shift+F10: 

    d663ab442b104984a48d1de83efc6db7.png

    步骤3:数据清洗和处理

    3.1 处理缺失值

    假设我们的数据有缺失值,可以用以下代码来处理:

    修改data.csv文件,加入一些缺失值:

    Name,Age,Score
    Alice,23,88
    Bob,25,
    Charlie,,85
    David,22,90
    xiaoli,18,100
    

    在Pandas学习.py中编写以下代码:

    1. import pandas as pd
    2. # 读取CSV文件
    3. data_with_nan = pd.read_csv('data.csv')
    4. print("原始数据带有缺失值:")
    5. print(data_with_nan)
    6. # 用平均值填充缺失的年龄
    7. data_with_nan['Age'].fillna(data_with_nan['Age'].mean(), inplace=True)
    8. # 用指定值填充缺失的分数
    9. data_with_nan['Score'].fillna(0, inplace=True)
    10. print("\n处理后的数据:")
    11. print(data_with_nan)

    运行此代码,您将看到以下输出:

    bb9ca93917b04d85bf2b6b7458009754.png

    3.2 数据转换

    假设我们需要将年龄从岁转换为月,可以用以下代码:

    在Pandas学习.py中添加以下代码:

    1. data_with_nan['Age_in_Months'] = data_with_nan['Age'] * 12
    2. print("\n添加年龄(以月为单位)后的数据:")
    3. print(data_with_nan)

    运行此代码,您将看到以下输出: 

    3fc750a4e8114db38970cf606437165d.png

    步骤4:数据分析和可视化

    1.数据统计:

    • 我们可以使用Pandas提供的统计函数进行简单的数据分析:
      1. # 计算平均年龄
      2. mean_age = data['Age'].mean()
      3. print(f'平均年龄: {mean_age}')
      4. # 计算分数的标准差
      5. score_std = data['Score'].std()
      6. print(f'分数标准差: {score_std}')

      运行此代码,您将看到以下输出:

    • 41b84a22b5594fb7ae9d0873f0b871df.png

    2.数据可视化:

    虽然你只提到Pandas,但这里简要提及如何使用Matplotlib进行简单可视化:

    1. import matplotlib.pyplot as plt
    2. # 绘制年龄分布图
    3. plt.hist(data['Age'], bins=10, alpha=0.75)
    4. plt.xlabel('Age')
    5. plt.ylabel('Frequency')
    6. plt.title('Age Distribution')
    7. plt.show()

    运行此代码,您将看到一个年龄分布的直方图。

     909506a0a851457a839b0b21a14b9860.png

    步骤5:高级操作

    5.1 数据分组和聚合

    使用groupby函数对数据进行分组和聚合,例如按年龄分组计算平均分数:

    1. Pandas学习.py中添加以下代码:

    1. age_grouped = data_with_nan.groupby('Age')['Score'].mean()
    2. print("\n按年龄分组的平均分数:")
    3. print(age_grouped)

    运行结果 

    8d138f4ed4fa427a8205186aa113ca08.png

    5.2 数据透视表

    使用pivot_table函数创建数据透视表:

    main.py中添加以下代码:

    1. pivot_table = data_with_nan.pivot_table(values='Score', index='Age', columns='Name', aggfunc='mean')
    2. print("\n数据透视表:")
    3. print(pivot_table)

    f609bd245b4b4232a9f0ab97f5df9022.png

    步骤6:保存数据

    6.1 保存处理后的数据

    将处理后的数据保存为新的CSV文件:

    main.py中添加以下代码:

    data_with_nan.to_csv('processed_data.csv', index=False)
    

    运行此代码后,您将在项目目录下看到一个名为processed_data.csv的新文件,内容如下: 

    948e9f4ef964468fb6242876f1c65ae3.png

    444e4fbb2bc743ecbcdcc10e4291532e.png

    总结

    在PyCharm中使用Pandas进行数据读取、清洗、处理、分析和保存,应用Pandas进行环境设置、数据加载、预处理、分析、可视化到简单建模的全过程。欢迎友友的提问指导!

    7.进一步细节和注意事项

    1.数据质量控制

    数据质量控制是数据分析中至关重要的一环。确保数据的准确性和完整性是数据分析成功的基础。以下是一些常见的数据质量控制方法:

    1. 数据验证

      • 检查数据是否有重复记录,确保每一行数据的唯一性。
      • 验证数据范围是否在合理范围内(例如,年龄不应超过100岁)。
    2. 数据一致性

      • 检查同一字段的数据类型是否一致。
      • 确保同一字段的数据格式一致,例如日期格式统一为YYYY-MM-DD。
    3. 数据完整性

      • 确保关键字段没有缺失值。
      • 检查数据表之间的关联性,确保外键关系的完整性。

    2.数据处理技巧

    1.处理异常值

    异常值是指与大多数数据点明显不同的数据点。处理异常值的方法包括:

    删除异常值:如果异常值是由于数据录入错误造成的,可以直接删除。

    替换异常值:使用中位数或均值替换异常值。

    data_filtered = data[(data['Age'] > 0) & (data['Age'] < 100)]
    

    2.数据转换

    数据转换是指将数据从一种形式转换为另一种形式,以便于分析。

    例如,可以将分类数据转换为数值数据,使用One-Hot编码:

    data['Gender'] = data['Gender'].map({'Male': 1, 'Female': 0})
    

    3.数据分析与可视化

    高级可视化

    数据可视化能够帮助我们更直观地理解数据。以下是一些常见的数据可视化方法:

    箱线图:用于显示数据的分布情况,特别是检测异常值。

    1. sns.boxplot(x=data['Score'])
    2. plt.title('Score Boxplot')
    3. plt.show()

    散点图:用于显示两个变量之间的关系。

    1. sns.scatterplot(x=data['Age'], y=data['Score'])
    2. plt.title('Age vs Score')
    3. plt.show()

    4.时间序列分析

    • 如果数据包含时间维度,可以进行时间序列分析。
    1. data['Date'] = pd.to_datetime(data['Date'])
    2. data.set_index('Date', inplace=True)
    3. data['Score'].plot()
    4. plt.title('Score over Time')
    5. plt.show()

    8.更多数据分析与处理细节

    1.扩展数据清洗技术

    1.去除重复值

    1. data_without_duplicates = data.drop_duplicates()
    2. print("去除重复值后的数据:")
    3. print(data_without_duplicates)

    2.处理异常值: 

    1. # 假设年龄和分数的合理范围
    2. data_filtered = data[(data['Age'] > 0) & (data['Age'] < 100) & (data['Score'] >= 0) & (data['Score'] <= 100)]
    3. print("去除异常值后的数据:")
    4. print(data_filtered)

    3.转换数据类型: 

    1. data['Age'] = data['Age'].astype(int)
    2. data['Score'] = data['Score'].astype(float)
    3. print("转换数据类型后的数据:")
    4. print(data.dtypes)

    2.详细分析数据 

    1.更多统计分析

    1. # 计算中位数
    2. median_age = data['Age'].median()
    3. print(f'年龄中位数: {median_age}')
    4. # 计算分数的方差
    5. variance_score = data['Score'].var()
    6. print(f'分数方差: {variance_score}')

    2.高级可视化: 

    1. import seaborn as sns
    2. # 绘制箱线图
    3. sns.boxplot(x=data['Score'])
    4. plt.title('Score Boxplot')
    5. plt.show()
    6. # 绘制散点图
    7. sns.scatterplot(x=data['Age'], y=data['Score'])
    8. plt.title('Age vs Score')
    9. plt.show()

    9.实战 接单

    242fe09b34ff4610be62d974ba2073e0.png

    ddd1a61cdc8447c093dc62d6d34aabe0.png

    1. import pandas as pd
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. from matplotlib.font_manager import FontProperties
    5. # 设置字体
    6. plt.rcParams['font.sans-serif'] = ['SimSun'] # 设置默认字体为宋体
    7. plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
    8. # 读取数据
    9. file_path = 'E:/python/零食大礼包销售/SuperMarket_order.txt'
    10. data = pd.read_csv(file_path, sep=',')
    11. # 按照付款金额分类
    12. bins = [0, 100, 500, float('inf')]
    13. labels = ['100以下', '100-500', '500以上']
    14. data['付款金额分类'] = pd.cut(data['931.79'], bins=bins, labels=labels)
    15. # 分别对订单状态、物品类别、购物方式、支付类别、付款人所在省份进行统计分析
    16. status_counts = data['已完成'].value_counts()
    17. category_counts = data['文体类'].value_counts()
    18. shopping_method_counts = data['PC'].value_counts()
    19. payment_type_counts = data['微信'].value_counts()
    20. province_counts = data['江苏省'].value_counts()
    21. amount_category_counts = data['付款金额分类'].value_counts()
    22. # 绘制图表
    23. fig, axes = plt.subplots(2, 3, figsize=(18, 12))
    24. # 订单状态统计图
    25. axes[0, 0].bar(status_counts.index, status_counts.values)
    26. axes[0, 0].set_title('订单状态统计')
    27. axes[0, 0].set_xlabel('订单状态')
    28. axes[0, 0].set_ylabel('数量')
    29. # 物品类别统计图
    30. axes[0, 1].bar(category_counts.index, category_counts.values)
    31. axes[0, 1].set_title('物品类别统计')
    32. axes[0, 1].set_xlabel('物品类别')
    33. axes[0, 1].set_ylabel('数量')
    34. # 购物方式统计图
    35. axes[0, 2].bar(shopping_method_counts.index, shopping_method_counts.values)
    36. axes[0, 2].set_title('购物方式统计')
    37. axes[0, 2].set_xlabel('购物方式')
    38. axes[0, 2].set_ylabel('数量')
    39. # 支付类别统计图
    40. axes[1, 0].pie(payment_type_counts.values, labels=payment_type_counts.index, autopct='%1.1f%%')
    41. axes[1, 0].set_title('支付类别统计')
    42. # 付款人所在省份统计图
    43. axes[1, 1].scatter(province_counts.index, province_counts.values)
    44. axes[1, 1].set_title('付款人所在省份统计')
    45. axes[1, 1].set_xlabel('省份')
    46. axes[1, 1].set_ylabel('数量')
    47. # 付款金额分类统计图
    48. axes[1, 2].bar(amount_category_counts.index, amount_category_counts.values)
    49. axes[1, 2].set_title('付款金额分类统计')
    50. axes[1, 2].set_xlabel('付款金额分类')
    51. axes[1, 2].set_ylabel('数量')
    52. plt.tight_layout()
    53. plt.show()

    94cac4f7c2b841178008da5f280c6ba7.png

     39718f204d3346bb975fdd18fbffde61.png

    10.相关应用

    Pandas在实际数据分析中的应用非常广泛,以下是一些常见的应用场景:

    1.金融数据分析

    分析股票市场数据,包括股价趋势分析、波动率分析、技术指标计算等。

    1. stock_data = pd.read_csv('stock_data.csv')
    2. stock_data['Daily Return'] = stock_data['Close'].pct_change()
    3. stock_data['Daily Return'].plot()
    4. plt.title('Daily Return of Stock')
    5. plt.show()

    2.市场营销数据分析

    • 分析客户购买行为,进行客户细分、预测客户价值等。
    1. sales_data = pd.read_csv('sales_data.csv')
    2. customer_segments = sales_data.groupby('CustomerID')['PurchaseAmount'].sum()
    3. customer_segments.plot(kind='bar')
    4. plt.title('Customer Purchase Amount')
    5. plt.show()

    3.社会科学研究

    分析社会调查数据,包括人口统计分析、社会行为模式分析等。

    1. survey_data = pd.read_csv('survey_data.csv')
    2. age_distribution = survey_data['Age'].value_counts()
    3. age_distribution.plot(kind='pie')
    4. plt.title('Age Distribution of Survey Respondents')
    5. plt.show()

    11.注意事项

    1.数据隐私

    • 在处理个人数据时,确保遵守相关数据隐私法律法规,如GDPR(General Data Protection Regulation)。
    • 避免在数据处理中泄露个人敏感信息,使用数据匿名化技术。

    2.性能优化

    • 对于大规模数据,使用Pandas可能会导致内存消耗过高。可以考虑使用Dask或Pandas的chunking功能进行分块处理。
      1. chunk_size = 10000
      2. chunks = pd.read_csv('large_data.csv', chunksize=chunk_size)
      3. for chunk in chunks:
      4. # 处理每个chunk
      5. process_chunk(chunk)

    3.版本兼容性

    • 使用Pandas时,确保使用相同版本的Pandas库,以避免因版本差异导致的代码不兼容问题。

  • 相关阅读:
    【c++】向webrtc学习容器操作
    vscode 编译java不通过缺少jar包.
    班级管理小程序开发
    基于内存的分布式NoSQL数据库Redis(三)常用命令
    java web学习
    jvm基础--JVM内存模型
    Enzo丨Enzo SAVIEW PLUS AP试剂解决方案
    怎么查看当前vue项目,要求的node.js版本
    chatGPT马上要支持应用商痁了 个人开发GPT应用赚钱的时代来了 海外淘金GPT4 Turbo版
    图书管理系统C语言课程设计
  • 原文地址:https://blog.csdn.net/2303_77720864/article/details/140001382