摘要
- 去除数据为空或-、/情况
- 获得累计数
- 清洗时间格式不一样的数据
- 得到时间序列
1.导入模板
client.pymongo.MongoClient('localhost',27017)
data=client['goods'] # 找到数据库是goods的库
item_info=data['beijing'] #找到数据表是beijing的表
2. 去除数据为空或者为-情况
from string import punctuation
for i in item_info.find():
if i['area']: #如果I['area']不为空
area = [I for I in i['area'] if I not in punctuation]
#punctutation是字符串中的所有符号,包括- * 等
else:
area = ['不明']
随后得到的area为清洗后的数据,更新数据
item_info.updata({'_id':i['_id']},{'$set':{'area':area}})
3. 累计值计数
- 先得到一个无重复的作为index
area_list = []
for i in item_info.find():
area_list.append(i['area'][0])
area_index = list(set(area_list)
- 再对index中出现的进行计数
post_times = []
for index in area_index:
post_time.append(area_list.count(index))
#提取出来出现了多少次
4.清洗时间格式不统一
- 时间格式中有的为2015-01-01有的为2015.01.01
for i in item_info.find():
frags=i['pub_data'].split('-')
#split是分割字符串,即存在 - 会把他分割成3个 2015 01 01 。
if len(frags)==1:
data=frags[0]
else:
data = '{}.{}.{}'.format(frags[0],frags[1],frags[2])
5. 得到特定的时间序列
- 得到特定时间间隔中的所有日期
def get_all_dates(date1, date2):
beg_date = date(int(date1.split('.')[0]),int(date1.split('.')[1]),int(date1.split('.')[2]))
end_date = date(int(date2.split('.')[0]),int(date2.split('.')[1]),int(date2.split('.')[2]))
days = timedelta(days=1)
while beg_date <= end_date:
yield(beg_date.strftime('%y.%m.%d'))
#strftime是格式化时间
the_date=the_date+days
- 得到一系列的时间序列
def get_data_within(beg_date, end_date many_lists):
for one_list in many_lists:
time_series = []
for date in get_all_dates(date1,date2):
#得到所有日期 dates date表示每个时间点
time_point = list(item_info.find({'pub_date':date,'area':one_list}))
#找到在该时点所有满足信息的时间序列a
time_point_count = len(time_point )
time_series.append(time_point_count)
#即完成了其中一个在每个时间点计数的时间序列
data={
'name':area,
'data':time_series,
'type':'line'
}
#不同的one_list 存储在不同的series中,用字典封存
yield data
- 得到输出结果
series = [i for i in get_data_within ('2010.12.12','2011.12.12',['guoguo1','guoguo2','guoguo3'])]
网友评论