【数学建模】——【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中编写以下代码来读取数据 :

import pandas as pd# 读取CSV文件
data = pd.read_csv('data.csv')# 打印数据
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中编写以下代码:

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

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

bb9ca93917b04d85bf2b6b7458009754.png

3.2 数据转换

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

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

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

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

3fc750a4e8114db38970cf606437165d.png

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

1.数据统计:

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

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

  • 41b84a22b5594fb7ae9d0873f0b871df.png

2.数据可视化:

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

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

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

 909506a0a851457a839b0b21a14b9860.png

步骤5:高级操作

5.1 数据分组和聚合

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

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

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

运行结果 

8d138f4ed4fa427a8205186aa113ca08.png

5.2 数据透视表

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

main.py中添加以下代码:

pivot_table = data_with_nan.pivot_table(values='Score', index='Age', columns='Name', aggfunc='mean')
print("\n数据透视表:")
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.数据分析与可视化

高级可视化

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

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

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

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

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

4.时间序列分析

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

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

1.扩展数据清洗技术

1.去除重复值

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

2.处理异常值: 

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

3.转换数据类型: 

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

2.详细分析数据 

1.更多统计分析

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

2.高级可视化: 

import seaborn as sns# 绘制箱线图
sns.boxplot(x=data['Score'])
plt.title('Score Boxplot')
plt.show()# 绘制散点图
sns.scatterplot(x=data['Age'], y=data['Score'])
plt.title('Age vs Score')
plt.show()

9.实战 接单

242fe09b34ff4610be62d974ba2073e0.png

ddd1a61cdc8447c093dc62d6d34aabe0.png

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties# 设置字体
plt.rcParams['font.sans-serif'] = ['SimSun']  # 设置默认字体为宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 读取数据
file_path = 'E:/python/零食大礼包销售/SuperMarket_order.txt'
data = pd.read_csv(file_path, sep=',')# 按照付款金额分类
bins = [0, 100, 500, float('inf')]
labels = ['100以下', '100-500', '500以上']
data['付款金额分类'] = pd.cut(data['931.79'], bins=bins, labels=labels)# 分别对订单状态、物品类别、购物方式、支付类别、付款人所在省份进行统计分析
status_counts = data['已完成'].value_counts()
category_counts = data['文体类'].value_counts()
shopping_method_counts = data['PC'].value_counts()
payment_type_counts = data['微信'].value_counts()
province_counts = data['江苏省'].value_counts()
amount_category_counts = data['付款金额分类'].value_counts()# 绘制图表
fig, axes = plt.subplots(2, 3, figsize=(18, 12))# 订单状态统计图
axes[0, 0].bar(status_counts.index, status_counts.values)
axes[0, 0].set_title('订单状态统计')
axes[0, 0].set_xlabel('订单状态')
axes[0, 0].set_ylabel('数量')# 物品类别统计图
axes[0, 1].bar(category_counts.index, category_counts.values)
axes[0, 1].set_title('物品类别统计')
axes[0, 1].set_xlabel('物品类别')
axes[0, 1].set_ylabel('数量')# 购物方式统计图
axes[0, 2].bar(shopping_method_counts.index, shopping_method_counts.values)
axes[0, 2].set_title('购物方式统计')
axes[0, 2].set_xlabel('购物方式')
axes[0, 2].set_ylabel('数量')# 支付类别统计图
axes[1, 0].pie(payment_type_counts.values, labels=payment_type_counts.index, autopct='%1.1f%%')
axes[1, 0].set_title('支付类别统计')# 付款人所在省份统计图
axes[1, 1].scatter(province_counts.index, province_counts.values)
axes[1, 1].set_title('付款人所在省份统计')
axes[1, 1].set_xlabel('省份')
axes[1, 1].set_ylabel('数量')# 付款金额分类统计图
axes[1, 2].bar(amount_category_counts.index, amount_category_counts.values)
axes[1, 2].set_title('付款金额分类统计')
axes[1, 2].set_xlabel('付款金额分类')
axes[1, 2].set_ylabel('数量')plt.tight_layout()
plt.show()

94cac4f7c2b841178008da5f280c6ba7.png

 39718f204d3346bb975fdd18fbffde61.png

10.相关应用

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

1.金融数据分析

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

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

2.市场营销数据分析

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

3.社会科学研究

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

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

11.注意事项

1.数据隐私

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

2.性能优化

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

3.版本兼容性

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总结一下Linux、Windows、Ubuntu、Debian、CentOS等到底是啥?及它们的区别是什么

小朋友你总是有很多问好 你是否跟我一样&#xff0c;不是计算机科班出身&#xff0c;很多东西都是拿着在用&#xff0c;并不知道为什么&#xff0c;或者对于它们的概念也是稀里糊涂的&#xff0c;比如今天说的这个。先简单描述下&#xff0c;我先前的疑问&#xff1a; Linux是…

layui+jsp项目中实现table单元格嵌入下拉选择框功能,下拉选择框可手动输入内容或选择默认值,修改后数据正常回显。

需求 table列表中的数据实现下拉框修改数据&#xff0c;当默认的下拉框不符合要求时&#xff0c;可手动输入内容保存。内容修改后表格显示修改后的值同时表格不刷新。 实现 layui框架下拉框组件只能选择存在的数据&#xff0c;不支持将输入的内容显示在input中的功能&#x…

【C++进阶9】异常

一、C语言传统的处理错误的方式 终止程序&#xff0c;如assert 如发生内存错误&#xff0c;除0错误时就会终止程序返回错误码 需要程序员自己去查找对应的错误 z如系统的很多库的接口函数都是通 过把错误码放到errno中&#xff0c;表示错误 二、C异常概念 异常&#xff1a;函…

传神论文中心|第14期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…

steam搬砖

​   CS2/Steam游戏拆砖项目如何赚钱&#xff0c;利润在哪里&#xff1f;    1、利润主要来自于汇差。例如&#xff0c;今天美元的汇率是1美元7.3人民币&#xff0c;100美元730人民币。但事实上&#xff0c;通过某些特定渠道&#xff08;如TB&#xff09;充值100美元仅需55…

Meet AI4S 直播预告丨房价分析新思路:神经网络直击复杂地理环境中的空间异质性

近年来&#xff0c;房地产市场起起落落&#xff0c;房价已经成为了扰动居民幸福感的重要影响因素。大多数家庭都需要面对「买不买房、何时买房、在哪儿买房、买什么房」的艰难抉择&#xff0c;每一个问题的答案都在某种程度上与房价的波动息息相关。 近年来&#xff0c;我国各…

RocketMq源码解析九:刷盘机制及过期文件删除

一、刷盘机制 刷盘策略在不同时间进行刷写磁盘。RocketMQ的存储是基于JDK NIO的内存映射机制(MappedByteBuffer)的,消息存储首先将消息追加到内存,再根据配置的刷写磁盘 同步刷盘表示消息追加到内存后,立即将数据刷写到文件系统中。代码的调用链如下: submi…

【新版本来袭】ONLYOFFICE桌面编辑器8.1 —— 重塑办公效率与体验

文章目录 一、功能完善的PDF编辑器&#xff1a;重塑文档处理体验编辑文本插入和修改各种对象&#xff0c;如表格、形状、文本框、图像、艺术字、超链接、方程式等添加、旋转和删除页面添加文本注释和标注 二、幻灯片版式设计&#xff1a;创意展示的无限舞台三、改进从右至左显示…

OCR训练和C#部署英文字符训练

PaddleOCR是一个基于飞桨开发的OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。以下是其优点&#xff1a; 高精度&#xff1a;PaddleOCR采用深度学习算法进行训练…

Web渗透:php反序列化漏洞

反序列化漏洞&#xff08;Deserialization Vulnerability&#xff09;是一种在应用程序处理数据的过程中&#xff0c;因不安全的反序列化操作引发的安全漏洞&#xff1b;反序列化是指将序列化的数据&#xff08;通常是字节流或字符串&#xff09;转换回对象的过程&#xff0c;如…

【MySQL备份】lvm-snapshot篇

目录 1.简介 1.1.如何工作 1.2.应用场景 1.3.注意事项 1.4.优缺点 2.为什么选择lvm快照备份&#xff1f; 3.创建LVM 3.1.操作流程 3.2.正常安装MySQL后进行备份 3.3.MySQL运行一段时间后进行备份 3.3.1.准备lvm及文件系统//先添加一块磁盘 3.3.2.将数据迁移到LVM …

MySQL学习(5):SQL语句之数据查询语言:DQL

1.DQL语法 select 字段列表 from 表名列表 #DQL是可以进行多表查询的 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数 2.基本查询&#xff08;select&#xff09; 2.1查询多字段 select 字段1,字段2,字段3,......fro…

基于Volov7的安全帽检测系统

1 项目介绍 1.1 摘要 随着工业化和城市化的迅猛推进&#xff0c;工作场所的安全管理愈发受到重视。安全帽作为保护工人头部安全的关键装备&#xff0c;其实时监测和检测的重要性不言而喻。本文提出并深入研究了基于YOLOv7算法的安全帽佩戴检测技术&#xff0c;该技术旨在实现…

Day.js

Day.js 是什么&#xff1f; Day.js是一个极简的JavaScript库&#xff0c;可以为现代浏览器解析、验证、操作和显示日期和时间。 Day.js中文网 为什么要使用Day.js &#xff1f; 因为Day.js文件只有2KB左右&#xff0c;下载、解析和执行的JavaScript更少&#xff0c;为代码留下更…

作物检测:YOLOv8+SwanLab

1. 项目介绍 基于深度学习的作物检测通过精准管理和数据驱动决策&#xff0c;能够提高作物产量和质量&#xff0c;优化农业资源利用&#xff0c;推动农业自动化进程&#xff0c;从而保障粮食安全。目前&#xff0c;作物检测领域大多针对单类作物进行检测。因此&#xff0c;本项…

SDIO学习(2)--SD卡 2.0协议

本文参考文档&#xff1a; 《SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00》 1 SD卡简介 1.1 SD卡概念 1.2 SD卡外形和接口 Clk&#xff1a;时钟线&#xff0c;由SDIO主机产生 CMD&#xff1a;命令控制线&#xff0c;SDIO主机通过改…

基于C++标准库实现定时器类

基于C标准库实现定时器类 定时器类是多线程编程中经常设计到的工具类 简单的定时器原理其实很简单&#xff08;是不是有点GNU is not unix的味道;&#xff09;&#xff1a; 创建一个新线程在那个线程里等待等待指定时长后做任务 python标准库中就有这么一个定时器类&#xf…

升级!升级!升级!MobPush基础标签推送全新升级,助力开发者精细化运营

“广播推送点击率不高&#xff0c;会员转化差” “新用户拉新后留存不高&#xff0c;次留、3日留存不达标” “用户的复购较低&#xff0c;黏性不高&#xff0c;导致GMV未达预期” 我们总是会听到运营人员关于目标达成过程中遇到这样或者那样的问题。这些问题汇总起来就回到…

STM32 HAL库 外部中断 实现按键控制LED亮灭

目录 1、为什么使用GPIO外部中断控制LED亮灭&#xff1f; 2、NVIC嵌套向量中断控制器 3、EXTI外部中断 4、项目的硬件排线 5、STM32CUBE_MX配置 6、HAL库代码 7、实际效果 1、为什么使用GPIO外部中断控制LED亮灭&#xff1f; 实现LED亮灭控制有很多方式&#xff0c;其中…

公文出错事非小,这些公文写作的常见错误,你中过招吗?

公文是企事业单位、相关部门内外沟通交流的重要工具&#xff0c;不少“笔杆子”经常需要与公文打交道&#xff0c;每天会接触大量的公文。然而在公文撰写的细微之处&#xff0c;稍有不慎&#xff0c;便可能犯下一些常见的错误。这些错误如同蚁穴&#xff0c;虽小却足以破坏公文…