Day17: 数据魔法学院:用Pandas打开奇幻世界

各位数据巫师学徒们!准备好你们的魔法棒(其实是键盘),我们要穿越到由混乱数据组成的魔法世界,用Pandas将原始数据点石成金!✨ 从今天起,你不再是数据的搬运工,而是数据的炼金术师!


🧙♂️ 第一章:魔法基础 - 认识你的魔杖DataFrame

1.1 召唤你的第一只数据精灵

import pandas as pd
from faker import Faker

# 用魔法粉末生成虚拟数据
fake = Faker()
data_entries = []

for _ in range(100):
    data_entries.append({
        '魔法师ID': fake.uuid4()[:8],
        '魔力值': round(fake.random.uniform(50, 200), 1),
        '擅长元素': fake.random_element(['火', '水', '风', '土']),
        '毕业院校': fake.company(),
        '注册日期': fake.date_this_decade()
    })

# 铸造你的魔法卷轴(DataFrame)
mage_df = pd.DataFrame(data_entries)
print("第一份魔法契约已生成!")
print(mage_df.head(3))

1.2 魔杖基本咒语

# 选择特定魔法师
fire_mages = mage_df[mage_df['擅长元素'] == '火']

# 添加新能力字段
mage_df['战斗力'] = mage_df['魔力值'] * 0.8 + 20

# 魔法师排行榜
top_mages = mage_df.sort_values('魔力值', ascending=False).head(5)

# 元素派系统计
element_counts = mage_df.groupby('擅长元素').size()

🧼 第二章:净化仪式 - 数据清洗大作战

2.1 处理混乱的数据

# 模拟脏数据
mage_df.loc[::10, '魔力值'] = None
mage_df.loc[::7, '毕业院校'] = '未知'

# 缺失值处理魔法
clean_df = (mage_df
            .dropna(subset=['魔力值'])  # 删除缺失魔力值的记录
            .fillna({'毕业院校': '神秘学院'})  # 填充未知院校
            .query('魔力值 < 190')  # 排除异常值
           )

# 数据格式转换
clean_df['注册日期'] = pd.to_datetime(clean_df['注册日期'])

2.2 高级变形术

# 魔法值分级
def classify_magic(power):
    if power < 100: return '见习'
    elif power < 150: return '中级'
    else: return '大魔导师'

clean_df['等级'] = clean_df['魔力值'].apply(classify_magic)

# 元素组合魔法(交叉分析)
element_power = pd.pivot_table(clean_df,
                                values='魔力值',
                                index='擅长元素',
                                columns='等级',
                                aggfunc='mean')

🔍 第三章:预言水晶球 - 数据洞察魔法

3.1 基础占卜术

# 描述性统计
magic_stats = clean_df['魔力值'].describe()

# 元素分布比例
element_distribution = (clean_df['擅长元素']
                        .value_counts(normalize=True)
                        .mul(100)
                        .round(1)
                        .astype(str) + '%')

# 时间魔法(按月统计)
monthly_registration = (clean_df
                        .groupby(clean_df['注册日期'].dt.to_period('M'))
                        .size())

3.2 高级预言术

import matplotlib.pyplot as plt

# 魔力值分布图
plt.figure(figsize=(10, 6))
clean_df['魔力值'].plot(kind='hist',
                      bins=20,
                      color='purple',
                      edgecolor='black')
plt.title('魔法师能力分布图')
plt.xlabel('魔力值')
plt.ylabel('人数')
plt.show()

# 元素战力对比
(clean_df.groupby('擅长元素')['战斗力']
 .mean()
 .sort_values()
 .plot(kind='barh',
       color=['#ff9999','#66b3ff','#99ff99','#ffcc99'],
       title='各元素系平均战斗力'))

🧪 第四章:魔药实验室 - 实战配方

4.1 魔药销售分析

# 生成魔药销售数据
potion_data = {
    '订单ID': [f'ORD{1000+i}' for i in range(500)],
    '魔药类型': fake.random_elements(elements=['清醒药剂', '爱情魔药', '隐身药水'], length=500),
    '销售额': [round(fake.random.uniform(50, 500), 2) for _ in range(500)],
    '销售地区': fake.random_elements(elements=['北方大陆', '南方群岛', '西部荒漠'], length=500),
    '客户类型': fake.random_elements(elements=['个人', '批发商'], length=500)
}

potion_df = pd.DataFrame(potion_data)

# 添加日期数据
potion_df['销售日期'] = pd.date_range(start='2023-01-01', periods=500, freq='D')

# 复杂分析示例
regional_sales = (potion_df
                  .groupby(['销售地区', potion_df['销售日期'].dt.month])
                  .agg({'销售额': ['sum', 'mean']}))

4.2 数据融合魔法

# 创建客户信息表
customers = pd.DataFrame({
    '订单ID': potion_df['订单ID'].sample(200),
    '客户年龄': [fake.random_int(18, 80) for _ in range(200)],
    '客户评分': [fake.random_int(1, 5) for _ in range(200)]
})

# 数据连接
merged_df = pd.merge(potion_df, customers, on='订单ID', how='left')

# 多层分析
age_group_sales = (merged_df
                   .assign(年龄段=pd.cut(merged_df['客户年龄'],
                                     bins=[0, 25, 40, 55, 100],
                                     labels=['新生代', '中生代', '资深', '传奇']))
                   .groupby(['年龄段', '魔药类型'])
                   .agg({'销售额': 'sum'}))

🧠 第五章:智慧宝典 - 最佳实践指南

5.1 魔法师的自我修养

# 保存你的魔法成果
clean_df.to_csv('clean_mage_data.csv', index=False)

# 高效查询技巧
efficient_search = (clean_df
                    .query('魔力值 > 120 & 擅长元素 == "火"')
                    .sort_values('注册日期')
                    .head(10))

# 内存优化咒语
def optimize_memory(df):
    for col in df.columns:
        col_type = df[col].dtype
        if col_type == 'float64':
            df[col] = df[col].astype('float32')
        elif col_type == 'int64':
            df[col] = df[col].astype('int32')
    return df

optimized_df = optimize_memory(clean_df.copy())

5.2 禁术警告

# 危险操作示例(请勿模仿!)
unsafe_operation = (original_df
                    .drop(columns=['重要字段'])
                    .fillna(0)
                    .replace({'特殊值': '未知'}))

🎓 毕业考试:你的第一个分析项目

  1. 分析不同魔法学院的战斗力差异
  2. 找出每月魔力增长最快的魔法师
  3. 预测下季度魔药销量趋势
  4. 创建交互式数据仪表板
  5. 设计自动化的数据清洗管道
# 通关秘籍:魔法快捷键
print("常用咒语列表:")
print(pd.options.display.max_columns = None)  # 显示所有列
print(df.sample(5))  # 快速查看随机样本
print(df.nlargest(5, '魔力值'))  # 排行榜前五
print(df.pipe(optimize_memory))  # 管道操作

🌈 魔法师誓言

  • 永远备份你的原始数据
  • 经常用.head()检查进度
  • 善用链式方法保持代码整洁
  • 警惕SettingWithCopyWarning警告
  • 可视化是说服麻瓜的最好武器

“数据不会说谎,但需要优秀的魔法师来讲述真相。” —— 《Pandas魔法书》第127页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhysunny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值