欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pandas 绘制天池O2O大赛购买趋势图

程序员文章站 2022-07-02 10:01:13
...

      今天在回顾之前做的O2O大赛时,发现了大神提供的一个完整思路https://blog.csdn.net/bryan__/article/details/53907292,其中有副趋势图,由于之前做的时候并没有对数据集做过多的了解(想想这应该也是分不高的原因吧,以后一定要充分了解数据才行)我就想试试绘制。简单的一幅图,遇到不少问题,主要是集中在时间轴的绘制上,需要先转换为时间格式,不然会一直用科学计数法表示。。。。。。

代码如下,其中对数据做了分块处理,不是本文重点。 

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import pandas as pd

offline_data = pd.read_csv("./ccf_offline_stage1_train.csv", index_col=0, chunksize=100000)
online_data = pd.read_csv("./ccf_online_stage1_train.csv", index_col=0, chunksize=1000000)

train_df = pd.DataFrame(columns=['Date', 'purchase'])
online_df = pd.DataFrame(columns=['Date', 'purchase'])
for chunk in offline_data:
# 其实没必要drop,懒得改了
    chunk.drop(['Date_received','Merchant_id', 'Coupon_id', 'Discount_rate', 'Distance'], axis=1, inplace=True)
    chunk.loc[chunk.Date.notnull(), "purchase"] = 1
    chunk = chunk[chunk.Date.notnull()]
    train_df = pd.concat([train_df, chunk], copy=False)

for chunk in online_data:
    chunk.drop(['Date_received','Merchant_id', 'Action', 'Coupon_id', 'Discount_rate'], axis=1, inplace=True)
    chunk.loc[chunk.Date.notnull(), "purchase"] = 1
    chunk = chunk[chunk.Date.notnull()]
    online_df = pd.concat([online_df, chunk], copy=False)

train_df = pd.concat([train_df, online_df]).astype("uint32")
train_df.Date = train_df.Date.map(lambda x: datetime.strptime(str(x), '%Y%m%d'))
train_df = train_df.groupby(train_df.Date)[["purchase"]].sum()  # 返回dataFrame
print(train_df)
#train_df = train_df.purchase.groupby(train_df.Date).sum()   # 返回Series

# 配置横坐标
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%y%m%d"))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())

plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.show()

 pandas 绘制天池O2O大赛购买趋势图

但是和原版还是有很大差别,有待后续研究。

pandas 绘制天池O2O大赛购买趋势图

相关标签: 天池O2O大赛