现学现卖之pandas-02数据的选择

本文介绍了使用Python的Pandas库进行数据处理的基本方法,包括Series和DataFrame的创建、数值提取及布尔条件筛选等操作,适合初学者快速掌握Pandas的核心功能。

数据的选择(简略版)[2020年3月]

1 Series AND Dataframe

series,只是一个一维数据结构,它由index和value组成。
dataframe,是一个二维结构,除了拥有index和value之 外,还拥有column。数值提取的方法并不唯一,形式也并不固定,这里列出的也并非全部,有兴趣可以继续探索。

2 取值
import numpy as np  
import pandas as pd
#假设某天的温度,湿度,降雨量
test = np.arange(1,4)

#创建Series对像
T = pd.Series(test)

#创建DataFrame对象
D = pd.DataFrame((test,test,test),columns=['温度','湿度','降水量'])


Series

名称示例
取单个值T[1],取索引为1的值
取多个值T[1:4],取索引1到索引3的数
取不连续的多个T[1:5:2],取索引1到4的数,间隔2
布尔T[T>4], 取T中大于4的数

DataFrame

名称示例
取单个值未写
取单列D.温度\D[‘温度’]\D.iloc[:,1]\D.loc[:,‘温度’],不连续的不在赘述,以上。
取多列D[[‘温度’,‘降水量’]].iloc[:,1:3:1]\D.loc[:,[‘温度’,‘湿度’]]
取单行D[:1]\D.iloc[0,:]\D.iloc[[1]]\D.loc[[1]]\D.loc[0,:]
取多行D[0:2]\D.iloc[0:2,:]\D.loc[0:2,:]
取单行多列/取多行单列都是在前面的基础上进行变化,这里大家自己试试比较好。
布尔形式布尔形式的取值方式灵活多变,这里就不再举例,原理上来讲,就是通过需求限制行列和值,获取想要的数据。

iloc和loc

名称注释
ilocloc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"1"的行),由于创建的时候没有指定索引,所以这里默认的索引是和行号一致的。
ilociloc函数:通过行号来取行数据(如取第二行的数据)
# 题目重述 你需要基于某大型快运企业的运单数据(存储于SQLite数据库的三张表中),构建客户群识别系统。目标是: 1. 整合客户历史运单与业务量数据,形成客户行为分析数据集; 2. 使用K-means聚类算法对客户进行分群(如高价值、潜力、常规客户); 3. 分析各客户群特征,并制定差异化服务与营销策略。 现询问如何在程序中实现这一流程。 --- # 详解 ### 步骤一:理解数据结构 从提供的`QQ_1762702956713.png`截图可知,存在一张名为 `order` 的表,字段包括: - 运单号、件数、毛重、体积、计费重量、始发站、目的站、客户账号、客户名称、收入金额、录入时间等。 这表明每条记录是一个运单,可通过 `客户账号` 或 `客户名称` 聚合统计每位客户的运输行为。 假设另外两张表可能为: - `customer_info`:客户基本信息 - `delivery_record`:配送状态记录 但当前仅确认 `order` 表结构。 --- ### 步骤二:数据预处理与客户行为特征构建 使用 Python + pandas + sqlite3 实现如下逻辑: ```python import sqlite3 import pandas as pd from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt # 1. 连接数据库并读取订单数据 conn = sqlite3.connect('logistics.db') # 替换为实际数据库路径 query = """ SELECT "客户账号", COUNT(*) AS total_orders, SUM("件数") AS total_pieces, SUM("收入金额") AS total_revenue, AVG("计费重量") AS avg_charge_weight, COUNT(DISTINCT "目的城市") AS unique_destinations, SUM(CASE WHEN "收入月份_time" LIKE '2023%' THEN 1 ELSE 0 END) AS recent_orders FROM "order" GROUP BY "客户账号" HAVING total_orders > 0 """ df = pd.read_sql(query, conn) df.dropna(inplace=True) conn.close() ``` > ⚠️ 注意:字段名含特殊字符需用双引号包围,如 `"收入金额"` --- ### 步骤三:特征工程与标准化 选取关键指标作为客户价值维度: ```python # 提取特征列 features = df[["total_orders", "total_pieces", "total_revenue", "avg_charge_weight", "unique_destinations", "recent_orders"]] # 标准化(K-means依赖距离) scaler = StandardScaler() features_scaled = scaler.fit_transform(features) ``` --- ### 步骤四:K-means聚类 ```python # 确定K值(肘部法) inertias = [] k_range = range(1, 10) for k in k_range: kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(features_scaled) inertias.append(kmeans.inertia__) # 绘制肘部图 plt.plot(k_range, inertias, 'bo-') plt.xlabel('Number of Clusters (k)') plt.ylabel('Inertia') plt.title('Elbow Method for Optimal k') plt.show() # 假设选k=3 optimal_k = 3 kmeans = KMeans(n_clusters=optimal_k, random_state=42) df['cluster'] = kmeans.fit_predict(features_scaled) ``` --- ### 步骤五:客户群命名与特征分析 ```python # 查看各类别均值 summary = df.groupby('cluster')[features.columns].mean() print(summary) # 示例命名规则(依据 revenue 和 order 水平) def label_cluster(row): if row['total_revenue'] > summary.loc[1, 'total_revenue']: return '高价值客户' elif row['recent_orders'] > summary['recent_orders'].median(): return '潜力客户' else: return '常规客户' df['customer_segment'] = df.apply(label_cluster, axis=1) ``` --- ### 步骤六:输出结果与策略建议 ```python # 保存结果 df.to_csv('customer_segments.csv', index=False) # 可视化(例如用PCA降维后绘图) from sklearn.decomposition import PCA pca = PCA(n_components=2) components = pca.fit_transform(features_scaled) plt.scatter(components[:, 0], components[:, 1], c=df['cluster'], cmap='viridis') plt.title('Customer Clusters (PCA Visualization)') plt.show() ``` --- ### 差异化服务策略建议 | 客户群 | 特征描述 | 服务策略 | |------------|----------------------------------|----------------------------------------| | 高价值客户 | 单量大、收入高、网络广 | 专属客服、优先派送、定期回访、价格优惠 | | 潜力客户 | 近期活跃、增长趋势明显 | 推送促销活动、引导增加发货频次、提供增值服务 | | 常规客户 | 发货少、稳定性差 | 自助服务平台推广、批量下单激励、成本控制优化 | --- # 知识点 1. **K-means聚类算法** 基于距离的无监督学习方法,将样本划分为K个簇,使簇内平方和最小。 2. **数据标准化(StandardScaler)** 消除量纲影响,使各特征具有相同权重,避免大数值特征主导聚类过程。 3. **客户RFM变体建模思想** 通过消费频率、金额、最近活跃度等维度构建客户画像,适用于物流客户分层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值