1. 程式人生 > >python資料視覺化: 使用 pandas

python資料視覺化: 使用 pandas

資料

連結

以下是本資料集的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')

在這裡插入圖片描述