前言
之前写了一个简单的python爬虫,爬取了赶集网上二手物品的的大概2000条数据,代码已经写完好久了,今天通过对商品数据中所处地区的分析,做一个简单数据分析。
工具&环境
- python 3.6
- jupyter notebook
- Mongodb
准备工作
首先,导入我们所需要的包,其中charts是图表绘制的相关的python包。之后,再通过pymongo连接本地数据库。
import pymongo
import types
import charts
from string import punctuation
#连接数据库
client = pymongo.MongoClient('localhost',27017)
ganji = client['ganji_data']
url_list = ganji['url_list']
item_info = ganji['item_info']
现在我们可以通过简单的一行代码查看前300条数据集的地区信息
for i in item_info.find().limit(300):
print(i['area'])
数据整理
因为数据比较多,数据格式不统一,为了减少错误,可以通过简单的代码,对数据格式进行整理与清洗。具体代码如下所示:
for i in item_info.find():
if isinstance(i['area'],str):
item_info.update_one({'_id':i['_id']},{'$set':{'area':i['area'].split('-')}})
对数据格式进行简单清洗之后,接下来要做的就是重新生成一个由地区信息重新组成的新的列表。去除重复信息,可以看到地区信息如下:
item_list = []
for i in item_info.find():
item_list.append(i['area'][0])
area_index = list(set(item_list))
print(area_index)
现在,重新查看数据中个地区出现的次数,如下:
post_times = []
for index in area_index:
post_times.append(item_list.count(index))
print(post_times)
因为charts包中的绘图函数参数有特定的格式,所以,需要定义一个可以生成字典格式的函数,在这个函数中,通过yield返回一种新的的数据格式。其实,简单来说,就是通过zip函数生成由地区信息和地区出现次数所组成的字典。
def data_gen(types):
length = 0
if length <= len(area_index):
for area,times in zip(area_index,post_times):
data = {
'name':area,
'data':[times],
'type':types
}
yield data
length = length + 1
调用函数,出现如下信息,说明data_gen()函数能够成功运行。
data_gen('column')
传入column参数,返回信息如下:
现在,重新遍历数据,可以发现,返回字典形式的数据结构,其中,name代表地区信息,data代表地区出现的次数,type是我们传入的参数。
for i in data_gen('column'):
print(i)
数据可视化分析
做完之前的准备工作,可以利用charts包进行简单的可视化分析了,通过简单的分析,可以看到,出货量最大的城市是北上广深,不愧是一线城市!
series = [data for data in data_gen('column')]
charts.plot(series,show='inline',options = dict(title = dict(text = 'This is genji data')))