python数据可视化: 使用 pandas

版权声明:本文为博主原创文章,如若转载请注明出处 https://blog.csdn.net/tonydz0523/article/details/85264155

数据

链接

以下是本数据集的13个特征变量的详细说明:

  • order_id:订单ID,数字组合而成,例如4283851335。
  • order_date:订单日期,格式为YYYY-MM-DD,例如2013-10-17。
  • order_time:订单日期,格式为HH:MM:SS,例如12:54:44。
  • cat:商品一级类别,字符串型,包含中文、英文。
  • attribution:商品所属的渠道来源,字符串型,包含中文、英文。
  • pro_id:商品ID,数字组合而成。
  • pro_brand:商品品牌,字符串型,包含中文、英文。
  • total_money:商品销售金额,浮点型。
  • total_quantity:商品销售数量,整数型。
  • order_source:订单来源,从哪个渠道形成的销售,字符串型,包含中文、英文。
  • pay_type:支付类型,字符串型,包含中文、英文。
  • use_id:用户ID,由数字和字母等组成的字符串。
  • city:用户订单时的城市,字符串型,中文。

数据清洗

# 模块导入
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 数据载入
dtypes = {'order_id': np.object,
          'pro_id': np.object,
          'use_id': np.object}
df = pd.read_csv('abnormal_orders.txt', dtype=dtypes)

df.head(3).T

在这里插入图片描述

# 数据行列
df.shape
#(134190, 12)

# 缺失值
df.isna().sum()

在这里插入图片描述

不是很多直接舍弃:

# 弃去缺失值
df.dropna(inplace=True)

时间数据处理:

# 合并时间,并更改类型,弃去原来时间
df['datetime'] = (df.order_date + ' ' + df.order_time ).astype('datetime64[ns]')
df.drop(columns=['order_date', 'order_time', 'abnormal_label'], inplace=True)

# 设置时间段
start_time = pd.datetime(2013, 9, 1)
end_time = pd.datetime(2013, 10, 1)

# 根据时间段截取数据
df_time = df[(df.datetime < end_time) & (df['datetime'] > start_time)]

# 提取一个月中的每天成列
df_time['day'] = df_time.datetime.dt.day

# 获取各列包含种类
df.nunique()

在这里插入图片描述

可视化

plot.bar()

简单的柱状图

# 每天的订单量
df_time.day.value_counts().sort_index().plot.bar()
plt.savefig('bar1.png')

在这里插入图片描述

添加其他设置:

# 一个月中每个类别商品的品牌数量 使用figsize更改画幅大小 title设置标题
df_time.pro_brand.groupby(df_time.cat).nunique().plot.bar(
    figsize=(10,5),
    title='商品品类品牌数量'
)
plt.savefig('bar2.png')

在这里插入图片描述

# 一个月中每个类别商品用户数量 使用color更改颜色
df_time.use_id.groupby(df_time.cat).nunique().plot.bar(figsize=(10,5), color='red')
plt.title('商品品类买家数量')
plt.savefig('bar3.png')

在这里插入图片描述

更改字体大小:

# 一个月中每个类别商品商品数量 使用fontsize更改字体大小
df_time.pro_brand.groupby(df_time.cat).nunique().plot.bar(
    figsize=(10,5), 
    color='g',
    fontsize=14
)
plt.title('商品品类商品数量', fontsize=16)

在这里插入图片描述
堆叠:

# 每种类商品不同渠道获得订单量 使用stacked=True进行堆叠
df_time[['cat', 'order_source']].pivot_table(index=['cat'], columns=['order_source'], aggfunc=len, margins=False, fill_value=0).plot.bar(stacked=True)

在这里插入图片描述

# 每种商品以不同方式支付的订单量
pd.crosstab(df_time.cat, df_time.attribution, margins=False).plot.bar(figsize=(8, 5))

在这里插入图片描述

plot.barh()

就是把柱状图横过来放

# 不同商品种类商品渠道来源情况
pd.crosstab(df_time.cat, df_time.attribution, margins=False).plot.barh(figsize=(5,6))

在这里插入图片描述

plot.pie()

饼状图用于描述占比

# 售卖不同种类商品占比情况
df_time.cat.value_counts().plot.pie(figsize=(8,8))

在这里插入图片描述

plot.line()

折线图

# 一个月每天的成交金额走势
df_time.total_money.groupby(df_time.day).sum().plot.line()

在这里插入图片描述

# 一个月每天的成交金额, 成交商品量走势 使用subplots=True进行分图
pd.DataFrame(df_time.total_money.groupby(df_time.day).sum()).join(df_time.total_quantity.groupby(df_time.day).sum()).plot.line(subplots=True)

在这里插入图片描述

plot.area()

面积填充图

# 一个月每天不同支付方式占比走势
pd.crosstab(df_time.day, df_time.pay_type, margins=False).plot.area()

在这里插入图片描述

plot.hist()

直方图:数据分布情况

# 每天成交金额直方图
df_time.total_money.groupby(df_time.day).sum().plot.hist()

在这里插入图片描述

plot.kde()

核密度估计

# 每天成交金额核密度估计
df_time.total_money.groupby(df_time.day).sum().plot.kde()

在这里插入图片描述

plot.scatter()

散点图

# 成交总金额跟售卖量大体情况
df_time[(df_time.total_money < 100000) & (df_time.total_quantity < 40)].plot.scatter(x='total_quantity', y='total_money')

在这里插入图片描述

plot.hexbin()

# 六边形分箱图 :密度通过颜色体现
df_time[(df_time.total_money < 100000)].plot.hexbin(x='total_quantity', y='total_money', gridsize=20, cmap="cool")

在这里插入图片描述

plot.box()

箱线图:用于观察分布及异常值

# 成交金额箱线图
df_time[df_time.total_money <1000].total_money.plot.box()

在这里插入图片描述

boxplot()

箱线图:用于观察分布及异常值

# 不同支付方式成交金额箱线图
df_time[df_time.total_money <1000].boxplot(column=['total_money'], by='pay_type')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tonydz0523/article/details/85264155