码以致用03 - 用 Pandas 分析爬虫抓取的数据
码以致用01 - Scrapy 爬虫框架简介
码以致用02 - 用 Scrapy 爬虫抓取简单心理咨询师资料
上一篇,我们用 Scrapy 从简单心理网站上抓取了心理咨询师的信息。
接下来试着分析一下咨询师的价格。
如何去掉某一列中不需要的字符?
在 price
列中,数据格式是 600 元/次
。很明显,中文字符会给统计价格带来不便,需要想办法去掉。
- 取
price
列:df['name']
- 去掉
元/次
字符:str.rstrip()
- 把剩下字符转换成数字:
pd.to_numeric
Pandas 语句可以这样写:
df['price'].str.rstrip('元/次').apply(pd.to_numeric)
结果:
如何统计价格?
用 Pandas 做基本的数据统计如均值、最大值、最小值等,非常方便,分别用 mean()
, max()
, min()
就可以:
print("平均价格:{:.1f}元 \n最高价格:{}元 \n最低价格:{}元".format(df['price'].mean(),df['price'].max(),df['price'].min()))
- 平均价格:570.9元
- 最高价格:3000元
- 最低价格:100元
另外,Pandas 还提供了 describe()
函数,快速给出概要统计值:
然后单独取出收费最高和最低的咨询师资料:
df.loc[df['price'].idxmax()]
df.loc[df['price'].idxmin()]
如何统计咨询师介绍里的词频?
方法 1 :用 jieba 分词,用 Counter 统计
import jieba
from collections import Counter
# 单独导出咨询师介绍列
df['info'].to_csv('info.txt')
with open('info.txt', 'r') as f:
text = f.read()
wordlist = Counter()
words = jieba.cut(text)
for word in words:
if len(word) > 1:
wordlist[word] += 1
def gen_cloud_word():
words = []
for word,cnt in wordlist.most_common(30):
words.append(word)
return words
列出前 30 个高频词:
方法 2 :用 wordcloud 直接制作标签云
word cloud 是一个 python 的标签云生成库,可以直接输入文本,得到标签云图片,还可以定制图片形状和颜色,小巧好用。(https://github.com/amueller/word_cloud)
结合 matplotlib,很快就可以画出高频词的标签云:
%matplotlib inline
%config InlineBackend.figure_format='retina'
from os import path
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
d = path.dirname('info.txt')
# 设置字体
font = r'/Users/kidult/Library/Fonts/MFKeSong_Noncommercial-Regular.TTF'
# Read the whole text
text = open(path.join(d, 'info.txt')).read()
# 排除词
stopwords=('Dr','of','to','and','The','in','zx','至今','中国','同时','当然')
# 用图片截取并取色
heart_coloring = np.array(Image.open(path.join(d, "heart.png")))
# Generate a word cloud image
wordcloud = WordCloud(max_words=80, background_color='white', mask=heart_coloring,
max_font_size=60, relative_scaling=0.4, font_path=font,stopwords=stopwords, random_state=42)
wordcloud.generate(text)
image_colors = ImageColorGenerator(heart_coloring)
plt.figure(figsize=(12,8))
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation="bilinear");
结果如下:
完整的 Jupyter Notebook,请查看 00 的 Github。
Ref
- PANDAS 数据合并与重塑(concat篇) - CSDN博客
- 初学pandas(八)条件选取行的便捷… - CSDN博客
- pandas数据清洗,排序,索引设置,数据选取 - CSDN博客
- amueller/word_cloud: A little word cloud generator in Python
You might be also interested in:
- The Ambiguities of Experience | 组织和经验的迷思
- Upgrade your design thinking | 升级你的设计思维
- 5 Key Concepts of Programming | 学编程?从五个思维训练开始
- Why and How You Should Use Git | 多用 Git 少交税
- Learning tips for our brain | 别傻了,傲娇大脑爱学习?
- Model about behavior change | 你为什么不想做,想做也做不到
- Change about change | 莫弃疗——关于改变的改变
@kidult00 . Thanks for Upvoting !