当前位置: 首页 > news >正文

Python数据分析之数据处理与分析

Python 数据分析重点知识点

本系列不同其他的知识点讲解,力求通过例子让新同学学习用法,帮助老同学快速回忆知识点

可视化系列:

  1. Python基础
  2. 数据分析工具
  3. 数据处理与分析
  4. 数据可视化
  5. 机器学习基础
三、数据处理与分析
  • 数据清洗
    • 处理缺失值(删除、填充)、异常值(识别、处理),数据标准化、归一化等。
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 创建示例数据 
#一般是.csv文件或者.xls文件,这里为了清楚直接写了两行数据
data = {
    'Age': [25, 30, 45, np.nan, 60, 70, 80],
    'Salary': [50000, 60000, 120000, 150000, 180000, np.nan, 210000]
}
df = pd.DataFrame(data)

# 处理缺失值
# 删除含有NaN的行
df_dropped = df.dropna()

# 填充缺失值,这里我们用平均值填充
df_filled = df.fillna(df.mean())

# 数据标准化
scaler = StandardScaler()
df_standardized = df_filled.copy()
df_standardized[['Age', 'Salary']] = scaler.fit_transform(df_filled[['Age', 'Salary']])

# 数据归一化
min_max_scaler = MinMaxScaler()
df_normalized = df_filled.copy()
df_normalized[['Age', 'Salary']] = min_max_scaler.fit_transform(df_filled[['Age', 'Salary']])

print("原始数据:\n",df)
print("\n删除缺失值后的数据:\n",df_dropped)
print("\n填充缺失值后的数据:\n",df_filled)
print("\n标准化后的数据:\n",df_standardized)
print("\n归一化后的数据:\n",df_normalized)
  • 数据探索
    • 通过统计方法和可视化手段了解数据特征和分布。
import pandas as pd
import matplotlib.pyplot as plt

data = {'Age': [25, 30, 45, 60, 70, 80],
        'Salary': [50000, 60000, 120000, 180000, None, 210000]}
df = pd.DataFrame(data)
print(df.describe())

plt.figure(figsize=(10, 5))

# 绘制年龄的直方图
plt.subplot(1, 2, 1) #可以设置多个子图,表示一行两列的第一个图
plt.hist(df['Age'], bins=5, color='blue', alpha=0.7)
plt.title('Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')

# 绘制薪水的直方图
plt.subplot(1, 2, 2) #表示一行两列的第二个图
plt.hist(df['Salary'].dropna(), bins=5, color='green', alpha=0.7)
plt.title('Salary Distribution')
plt.xlabel('Salary')
plt.ylabel('Frequency')

# 当你使用 plt.subplot() 创建多个子图时,默认情况下,子图可能会彼此重叠或与边缘过于接近,这会影响图形的可读性。
# 调用 plt.tight_layout() 后,Matplotlib 会自动调整子图的布局,使得它们更加整洁和易于阅读。
plt.tight_layout()
plt.show()

在这里插入图片描述

  • 数据转换
    • 数据类型转换、数据重塑(pivot、melt 等函数),特征工程(创建新特征、特征选择)。
import pandas as pd
import numpy as np

# 创建示例数据集
data = {
    'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston'],
    'Temperature': [32, 75, 68, 85],
    'Humidity': [85, 60, 70, 90]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

# 转换日期列为日期时间类型
df['Date'] = pd.to_datetime(df['Date'])

# 转换温度和湿度列为浮点数类型
df['Temperature'] = df['Temperature'].astype(float)
df['Humidity'] = df['Humidity'].astype(float)

print("\n数据类型转换后的数据:")
print(df.dtypes)

# 使用pivot函数重塑数据,意思就是指定数据的行和列
df_pivot = df.pivot(index='City', columns='Date', values='Temperature')
print("\n数据重塑后的数据 (pivot):")
print(df_pivot)

# 使用melt函数重塑数据
df_melt = pd.melt(df_pivot.reset_index(), id_vars=['City'], var_name='Date', value_name='Temperature')
print("\n数据重塑后的数据 (melt):")
print(df_melt)

# 创建新特征:温度的平方
df['Temperature_Squared'] = df['Temperature'] ** 2
print("\n添加新特征后的数据:")
print(df)

# 选择特定的列作为新的特征集
selected_features = df[['City', 'Temperature', 'Humidity']]
print("\n特征选择后的数据:")
print(selected_features)

关于pivot和melt的区别,请先看以上的运行结果然后再理解会更加清楚

  • pivot:

    • index:指定作为新表格行索引的列。

    • columns:指定作为新表格列索引的列。

    • values:指定在新表格中填充数据的列。

  • melt:

    • id_vars:指定在转换过程中保留的列。

    • value_vars:指定要合并的列。

    • var_name:指定新变量列的名称。

    • value_name:指定新值列的名称。

相关文章:

  • 重生之我在学Vue--第5天 Vue 3 路由管理(Vue Router)
  • AI 帮我精准定位解决 ReferenceError: process is not defined (文末附AI名称)
  • mobaxterm,闪退处理方法
  • 一学就会的深度学习基础指令及操作步骤(3)模型训练验证
  • FPGA|Verilog-自己写的SPI驱动
  • 【测试框架篇】单元测试框架pytest(4):assert断言详解
  • SpringBoot(1)——创建SpringBoot项目的方式
  • 【Vue3】详细探究 watch ref 数组不生效的问题
  • LeetCode 2380 二进制字符串重新安排顺序需要的时间
  • 无人机楼宇间物资运输技术详解
  • 【算法 C/C++】二维前缀和
  • 【密码学——基础理论与应用】李子臣编著 第三章 分组密码 课后习题
  • mysql的MGR
  • 在mac中设置环境变量
  • 校验pytorch是否支持显卡GPU 不支持卸载并安装支持版本
  • 报表控件stimulsoft操作:使用 Angular 应用程序的报告查看器组件
  • ngx_openssl_create_conf
  • Zookeeper实践指南
  • BI 工具响应慢?可能是 OLAP 层拖了后腿
  • 【报错】微信小程序预览报错”60001“
  • 海军“吉祥方舟”号医院船开展海上卫勤演练
  • 三人在共享单车上印小广告被拘,北京警方专项打击非法小广告
  • 中国旅游日|上天当个“显眼包”!低空经济的“飞”凡魅力
  • “马上涨价”再到“吞下关税”,美政策让沃尔玛“输两次”
  • 南宁一学校发生伤害案件,警方通报:嫌疑人死亡,2人受伤
  • 体坛联播|巴萨提前2轮西甲夺冠,郑钦文不敌高芙止步4强