python数据分析与可视化
1. 数据准备
- 数据加载:从文件、数据库、API 中导入数据。
- 数据清理:处理缺失值、重复数据、异常值,转换数据类型等。
2. 数据分析基础
数据分析的基本步骤包括数据收集、数据清理、数据探索、数据建模和数据可视化。Python 的强大生态系统支持每一个步骤。
1.1 数据收集
数据可以通过多种方式收集,如 CSV 文件、数据库、API 或爬虫等。
- 读取 CSV 文件:
import pandas as pd
# 读取 CSV 文件
df = pd.read_csv('data.csv')
- 从数据库读取数据:
import sqlite3
# 连接到 SQLite 数据库
conn = sqlite3.connect('database.db')
df = pd.read_sql_query("SELECT * FROM table_name", conn)
1.2 数据清理
数据清理是数据分析中至关重要的步骤。常见的清理操作包括处理缺失值、重复值、数据类型转换和数据格式化等。
- 处理缺失值:
# 删除缺失值
df.dropna(inplace=True)
# 用均值填充缺失值
df.fillna(df.mean(), inplace=True)
- 删除重复值:
df.drop_duplicates(inplace=True)
1.3 数据探索
数据探索用于了解数据的分布和特征。可以使用统计描述、分组和可视化等方法进行探索。
- 统计描述:
print(df.describe()) # 显示基本统计信息
- 分组:
grouped = df.groupby('category').sum()
3. 数据可视化
- 基础可视化:通过折线图、散点图、直方图等观察数据的分布和关系。
- 高级可视化:包括交互式可视化、分面图、多变量图等,进一步挖掘数据背后的复杂模式。
4. 模型构建与评估(如需)
- 机器学习模型:使用回归、分类或聚类模型,对数据进行预测、分类或分群。
- 模型评估:通过交叉验证、混淆矩阵、ROC 曲线等评价模型性能。
详细步骤和代码示例:
Step 1: 数据准备
1.1 导入必要的库
import pandas as pd # 数据处理
import numpy as np # 数值计算
import matplotlib.pyplot as plt # 基础绘图
import seaborn as sns # 高级绘图
import plotly.express as px # 交互式绘图
1.2 加载数据
使用 Pandas 读取 CSV 文件(或 Excel、SQL 数据库等)。
# 从 CSV 文件加载数据
data = pd.read_csv('data.csv')
# 查看前几行数据
print(data.head())
# 查看数据的基本信息
print(data.info())
1.3 数据清理
处理缺失值:可以使用均值填充、删除等方法。
处理重复值:检查并删除重复的行。
转换数据类型:确保数据类型正确(例如字符串转换为类别型,日期转换为 datetime)。
# 检查缺失值
print(data.isnull().sum())
# 填充缺失值或删除缺失行
data['column_name'].fillna(data['column_name'].mean(), inplace=True)
data.dropna(subset=['important_column'], inplace=True)
# 删除重复行
data.drop_duplicates(inplace=True)
# 数据类型转换
data['date'] = pd.to_datetime(data['date'])
Step 2: 数据分析
2.1 基本统计分析
通过 .describe() 方法获得数据的基本统计信息。
# 查看数值型列的基本统计信息
print(data.describe())
# 统计类别型列的分布
print(data['category_column'].value_counts())
2.2 数据分组与聚合
使用 Pandas 的 .groupby() 方法进行分组和聚合,了解数据的各类统计信息。
# 按类别分组计算均值
grouped_data = data.groupby('category')['value_column'].mean()
print(grouped_data)
# 透视表(Pivot Table)
pivot_table = data.pivot_table(index='category', columns='sub_category', values='value_column', aggfunc='mean')
print(pivot_table)
Step 3: 数据可视化
3.1 基础可视化(Matplotlib 和 Seaborn)
1. 条形图(Bar Plot):展示分类变量的比较。
# Seaborn 绘制条形图
sns.barplot(x='category', y='value_column', data=data)
plt.title("Category vs Value")
plt.show()
2. 折线图(Line Plot):展示时间序列数据或趋势。
# Matplotlib 绘制折线图
plt.plot(data['date'], data['value_column'])
plt.title("Value over Time")
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()
3. 直方图(Histogram):展示单变量的分布。
# Seaborn 绘制直方图
sns.histplot(data['value_column'], bins=30, kde=True)
plt.title("Distribution of Values")
plt.show()
4. 散点图(Scatter Plot):展示两变量间的关系。
# Seaborn 绘制散点图
sns.scatterplot(x='value_column1', y='value_column2', data=data, hue='category')
plt.title("Scatter Plot of Value 1 vs Value 2")
plt.show()
3.2 高级可视化(Seaborn、Plotly)
1. 热力图(Heatmap):展示多变量的相关性。
# 计算相关矩阵
corr_matrix = data.corr()
# 绘制热力图
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title("Correlation Matrix Heatmap")
plt.show()
2. 分面图(Facet Grid):按子集分割数据进行可视化。
# Seaborn 的 FacetGrid
g = sns.FacetGrid(data, col='category')
g.map(sns.histplot, 'value_column')
plt.show()
3. 交互式图表(Plotly):
# Plotly 绘制交互式散点图
fig = px.scatter(data, x='value_column1', y='value_column2', color='category', size='value_column3', hover_data=['extra_info'])
fig.show()
Step 4: 模型构建与评估(可选)
4.1 机器学习模型(Scikit-learn)
以回归分析为例:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 划分训练集和测试集
X = data[['feature1', 'feature2']]
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测并计算误差
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
4.2 模型评估
通过交叉验证、混淆矩阵、ROC 曲线等技术评估模型性能。
from sklearn.model_selection import cross_val_score
# 交叉验证评估模型
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print(f'Cross-validated MSE: {-np.mean(scores)}')