前些天发现家附近的一个新楼盘有名字了,
那是个什么字我都不认识。。。
现在的小区是命名越来越随性了,记忆中那些XX新村,XX花园,现在感觉都不会再出现了,正好最近爬链家的时候把深圳所有小区都存了下来,就来看看这些年在小区名字上留下了什么印记。
主要工具
- wordcloud 词云
- jieba 结巴分词
先放代码
import jieba
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import pymongo
from scipy.misc import imread
client = pymongo.MongoClient('localhost',27017)
db = client['bjsz']
list1 = []
for i in db['sz'].find():
list1.append(i['title'])
text = ','.join(list1)
cut_text = ' '.join(jieba.cut(text)) #结巴分词,然后空格连接
color_mask = imread('background.jpg') #设置图云背景
cloud = WordCloud(
background_color='white', # 设置背景颜色,默认颜色则为黑色
font_path='C:\Windows\Fonts\msyh.ttf', # 中文图云必须指定字体,不然全是框框
max_words=1000, # 词云显示的最大词数
font_step=2, # 字号的步调
mask=color_mask, #设置背景图片
random_state= 15, # 随机配色方案
min_font_size=5, #最小字号
max_font_size=100, #最大字号
stopwords = {''}, #设置词云中不想要显示的词
prefer_horizontal=0.1, #设置词云中水平显示的词的比例
scale= 2 #生成图片与背景图片比例,默认为1
)
cloud.generate(cut_text) #对分词后的文本生成词云
image_colors = ImageColorGenerator(color_mask) # 从背景图片获取颜色
plt.show(cloud.recolor(color_func=image_colors)) # 词云中词的颜色按照背景中获取的颜色
plt.imshow(cloud) # 以图片的形式显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 展示图片
cloud.to_file('cloud.jpg') # 图片保存
wordcloud根据文本生成词云是通过空格分隔不同的词,而中文不像英文那样本来中间就有空格,必须要通过结巴分词,然后在用空格把词全连起来。
WordCloud里面有一堆参数可以设置,需要注意的是一定要设置字体,不然出来的中文字全是框框。
这里面有很多地方涉及到背景啊颜色之类的。举例子说下:
1、
random_state=15
这个值会影响到词云中词的配色,词云中横向竖向词的比例等,大概意思就是换一个值就能生成一个新的词云图片。
2、
background_color='white'
这个是词云的背景颜色,默认是黑色。
设置其他值就能改变背景颜色。
3、
color_mask = imread('background.jpg')
mask=color_mask
mask可以设置词云的形状。其实生成的图形还是方的,但是通过mask可以让词云排列出background.jpg中的图形。mask会忽略背景图片中白色的部分,词的分布都在背景图片中有颜色的部分。比如如下图片:
通过设置以上参数,可以生成这样的图片。
4、
image_colors = ImageColorGenerator(color_mask)
plt.show(cloud.recolor(color_func=image_colors))
这两行可以设置词云中词的颜色,使用背景图片中词的颜色,并且可以生成接近背景图片那样的效果。
小区名那些事
花园依旧是命名主力,华府、公馆、广场、国际之类的越来越多,逼格见长。
对比下北京的,
北京在印象中的胡同和大院出现最多,可是都过了2010年了还在用几号院命名的小区是什么情况。
最后
上篇文章分析链家房源,因为对mongodb和highcharts都不是那么熟,花了好几天时间摸索,耗费了好多时间,结果阅读还是滑铁卢,哭晕在厕所。。
不过咱还是要屡败屡战,继续前行,毕竟哭完还得继续活着。