电商数据源 提取码: zivw
电商数据分析
1. 加载数据
加载数据分析使用的库
加载数据前,先用文本编辑器看下数据的格式,首行是什么,分隔符是什么
加载好数据之后,第一步先分别使用describe和info方法看下数据的大概分布
# 加载数据分析使用的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 加载数据前,先用文本编辑器看下数据的格式,首行是什么,分隔符是什么
df = pd.read_csv('./order_info_2016.csv', index_col='id')
print(df.head())
print(df.shape)
# 加载好数据之后,第一步先分别使用describe和info方法看下数据的大概分布
print(df.describe())
print(df.info())
orderId userId productId cityId price payMoney channelId \
id
1 232148841 2794924 268 110001 35300 35300 9058255c90
2 222298971 1664684 801 330001 51200 49900 e0e6019897
3 211494392 2669372 934 220002 62100 62100 9058255c90
4 334575272 1924727 422 230001 50600 42000 46d5cea30d
5 144825651 4148671 473 130006 149100 142000 6ff1752b69
deviceType createTime payTime
id
1 3 2016-01-01 12:53:02 2016-01-01 12:53:24
2 2 2016-01-01 21:42:51 2016-01-01 21:43:30
3 3 2016-01-01 14:10:13 2016-01-01 14:11:18
4 2 2016-01-01 17:43:35 2016-01-01 17:43:53
5 2 2016-01-01 18:52:04 2016-01-01 18:52:47
orderId userId productId cityId price \
count 1.045570e+05 1.045570e+05 104557.000000 104557.000000 1.045570e+05
mean 2.993341e+08 3.270527e+06 504.566275 154410.947225 9.167350e+04
std 5.149818e+07 4.138208e+07 288.130647 72197.163762 9.158836e+04
min 1.035627e+08 2.930600e+04 0.000000 30000.000000 6.000000e+02
25% 2.633627e+08 2.179538e+06 254.000000 100011.000000 3.790000e+04
50% 2.989828e+08 2.705995e+06 507.000000 150001.000000 5.920000e+04
75% 3.349972e+08 3.271237e+06 758.000000 220002.000000 1.080000e+05
max 4.871430e+08 3.072939e+09 1000.000000 380001.000000 2.295600e+06
(104557, 10)
payMoney deviceType
count 1.045570e+05 104557.000000
mean 8.686689e+04 2.385292
std 9.072028e+04 0.648472
min -1.000000e+03 1.000000
25% 3.360000e+04 2.000000
50% 5.500000e+04 2.000000
75% 1.040000e+05 3.000000
max 2.294200e+06 6.000000
<class 'pandas.core.frame.DataFrame'>
Int64Index: 104557 entries, 1 to 104557
Data columns (total 10 columns):
orderId 104557 non-null int64
userId 104557 non-null int64
productId 104557 non-null int64
cityId 104557 non-null int64
price 104557 non-null int64
payMoney 104557 non-null int64
channelId 104549 non-null object
deviceType 104557 non-null int64
createTime 104557 non-null object
payTime 104557 non-null object
dtypes: int64(7), object(3)
memory usage: 8.8+ MB
None
从上面的运行结果得出
一共有104557行,10列数据
productId中存在为0的数据
payMoney中有负数
channelId中缺失8条数据
2. 数据清洗 # orderId
我们都知道orderId在一个系统里是唯一值,所以先看一下有没有重复值
如果有重复值,我们一般最后处理,因为其他的列可能会影响到删除哪一条重复的记录
print(df.orderId.unique().size)
104530
一共104557行数据,但是只有104530个orderId,所以存在27个重复值
3. 数据清洗 # userId
userId我们只要从上面的describe和info看下值是不是在正常范围就行了
对于订单数据,一个用户可能有多个订单,重复值是合理的
print(df.userId.unique().size)
102672
4. 数据清洗 # productId
productId最小值为0,先看下值为0的记录数量
print(df.productId[(df['productId'] == 0)].size)