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()
但是和原版还是有很大差别,有待后续研究。
上一篇: 有这样的颜值做什么都好