Python 数据分析重点知识点
本系列不同其他的知识点讲解,力求通过例子让新同学学习用法,帮助老同学快速回忆知识点
即将更新如下板块:
- Python基础
- 数据分析工具
- 数据处理与分析
- 数据可视化
- 机器学习基础
三、数据处理与分析
- 数据清洗
- 处理缺失值(删除、填充)、异常值(识别、处理),数据标准化、归一化等。
python">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)
- 数据探索
- 通过统计方法和可视化手段了解数据特征和分布。
python">import pandas as pd
import matplotlib.pyplot as pltdata = {'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 等函数),特征工程(创建新特征、特征选择)。
python">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:指定新值列的名称。
-