数据分析代码

not image

好的!以下是一段更复杂的 **数据分析代码示例**,基于经典的 **Titanic 数据集**,展示了完整的分析流程:数据加载、清洗、探索性分析、可视化、特征工程和简单预测(使用逻辑回归模型)。代码使用 `pandas`, `matplotlib`, `seaborn`, 和 `scikit-learn` 库。 --- ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix # 加载数据 def load_data(): url = "https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv" df = pd.read_csv(url) return df # 数据预处理 def preprocess_data(df): # 处理缺失值 df['Age'].fillna(df['Age'].median(), inplace=True) df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True) # 特征工程 df['FamilySize'] = df['SibSp'] + df['Parch'] + 1 # SibSp + Parch + 自己 df['IsAlone'] = 1 df['IsAlone'].loc[df['FamilySize'] > 1] = 0 # 类别特征编码 df = pd.get_dummies(df, columns=['Sex', 'Embarked'], drop_first=True) return df # 可视化 def visualize_data(df): # 生存率分布 plt.figure(figsize=(12, 6)) sns.countplot(x='Survived', data=df) plt.title('Survival Count') plt.show() # 不同性别的生存率 plt.figure(figsize=(12, 6)) sns.barplot(x='Sex_male', y='Survived', data=df) plt.title('Survival Rate by Gender') plt.xlabel('Male (1) / Female (0)') plt.ylabel('Survival Rate') plt.show() # 年龄分布与生存率 plt.figure(figsize=(12, 6)) sns.kdeplot(df.loc[df['Survived'] == 0, 'Age'], label='Not Survived') sns.kdeplot(df.loc[df['Survived'] == 1, 'Age'], label='Survived') plt.title('Age Distribution by Survival') plt.xlabel('Age') plt.legend() plt.show() # 模型训练与评估 def train_model(df): # 特征选择 features = ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare', 'Sex_male', 'Embarked_Q', 'Embarked_S', 'FamilySize', 'IsAlone'] target = 'Survived' X = df[features] y = df[target] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 特征标准化 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # 训练逻辑回归模型 model = LogisticRegression(max_iter=1000) model.fit(X_train, y_train) # 预测与评估 y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) cm = confusion_matrix(y_test, y_pred) print(f"模型准确率: {accuracy:.2f}") print("混淆矩阵:\n", cm) return model # 主函数 def main(): df = load_data() print("原始数据前五行:") print(df.head()) df = preprocess_data(df) visualize_data(df) model = train_model(df) if __name__ == "__main__": main() ``` --- ### 功能说明: #### 1. **数据加载** - 使用 `pandas` 从网络加载 Titanic 数据集。 #### 2. **数据预处理** - **处理缺失值**:用中位数填充 `Age`,用众数填充 `Embarked`。 - **特征工程**: - 创建 `FamilySize`(家庭成员数量)。 - 创建 `IsAlone`(是否独身)。 - **类别特征编码**:将 `Sex` 和 `Embarked` 转为数值型(One-Hot Encoding)。 #### 3. **数据可视化** - **生存率分布**:展示幸存与未幸存人数。 - **性别对生存率的影响**:用柱状图显示男性和女性的生存率。 - **年龄分布与生存率**:用密度图对比不同年龄群体的生存情况。 #### 4. **模型训练与评估** - **特征选择**:选择关键特征(如 `Pclass`, `Age`, `Fare`, `Sex` 等)。 - **数据标准化**:对数值特征进行标准化(`StandardScaler`)。 - **逻辑回归模型**: - 划分训练集和测试集(80/20)。 - 训练模型并计算准确率和混淆矩阵。 --- ### 运行要求: - 需要安装以下库: ```bash pip install pandas matplotlib seaborn scikit-learn ``` ### 扩展建议: 1. **尝试其他模型**:将逻辑回归替换为随机森林或梯度提升树(如 `XGBoost`)。 2. **特征工程优化**:探索 `Name` 或 `Ticket` 列中的隐藏信息(如头衔、舱位等级)。 3. **超参数调优**:使用网格搜索(`GridSearchCV`)优化模型参数。 4. **更复杂的可视化**:使用 `seaborn.pairplot` 或 `plotly` 进行交互式分析。 如果需要进一步解释或调整,请随时告诉我! 😊

评论区:

评论:

请输入内容: