首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人大代表数据分析爬取代表数据正则表达式提取需要的数据还可以把上面数据画成饼图民族词云图统计代表姓氏人数姓氏词云

人大代表数据分析爬取代表数据正则表达式提取需要的数据还可以把上面数据画成饼图民族词云图统计代表姓氏人数姓氏词云

作者头像
用户1733462
发布2018-06-07 15:04:41
8920
发布2018-06-07 15:04:41
举报
文章被收录于专栏:数据处理数据处理

爬取代表数据

import requests
import re
import time
from lxml import html
from selenium import webdriver
r = requests.get(url='http://www.sohu.com/a/223885358_118392')    # 最基本的GET请求
time.sleep(60)
html = r.text

正则表达式提取需要的数据

content = re.findall(u'<p>([\u2E80-\u9FFF]{2,3})[u"市"u"省"u"特"u"壮"u"回"u"维"u"自"u"人"].{0,6}\uff08(\d*)\u540d\uff09 </p>.*?<p>(.*?)</p>', html, re.S)  
from pyecharts import Map
data = [_[0:2] for _ in content]

map = Map("人大代表分布", title_pos="center",width=800, height=500)
attr, value =map.cast(data)
attr[-1] = u"南海诸岛"
map.add("", attr, value, maptype='china',
        is_label_show=True,label_pos="inside",label_text_color="#000",
        is_visualmap=True, visual_text_color='#000', visual_range=[12, 172],visual_range_text=['低','高'],
       visual_pos = [500,500])
#map.show_config()
map.render()
map

使用pandas,将数据转化为pandas表

import pandas as pd
import re
# 取地区,姓名,性别,族
data = [(_[0],_[2]) for _ in content]
def get_locality_name_sex_race(param):
    locality = param[0]
    # '、'分割姓名
    for el in param[1].split(u'、'):
        temp = re.split(u'\uff08|\uff0c|\uff09', el)
        length = len(temp)
        if length == 1:
            temp += [u'男', u'汉族']
        elif length == 3:
            if len(temp[1]) == 1:
                temp[2] = u'汉族'
            else:
                temp[2] = temp[1]
                temp[1] = u'男'
        elif length == 4:
            temp.pop()
            if u'族' not in temp[2]:
                temp[2] = u'汉族'

        df.loc[df.shape[0]] = [locality]+temp

df = pd.DataFrame(columns=('locality', 'name', 'sex', 'race'))#生成空的pandas表              
map(get_locality_name_sex_race, data) 
df
def get_attr_sex_v(race_groupby_sex):
    attr_sex = race_groupby_sex.count().index.values.tolist()
    attr_v = race_groupby_sex.count().values[0:2,0].tolist()
    return attr_sex,attr_v

race_groupby_sex = df[df.race==u'汉族'].groupby(df['sex'])
attr_sex,attr_v = get_attr_sex_v(race_groupby_sex)
bar = Bar("", "", width=600, height=400)
bar.add("汉族", attr_sex, attr_v, is_more_utils=True)
race_groupby_sex = df[df.race!=u'汉族'].groupby(df['sex'])
minorities_sex,minorities_v = get_attr_sex_v(race_groupby_sex)
bar.add("少数民族", minorities_sex, minorities_v, is_more_utils=True)
bar.render()
bar

还可以把上面数据画成饼图

pie = Pie("")
pie.add("", ['汉族女','汉族男','少数民族女','少数民族男'], attr_v+minorities_v, is_label_show=True, is_legend_show=False)
pie.render()
pie

民族词云图

from pyecharts import WordCloud

wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", race_name, race_values, word_size_range=[20, 100])
wordcloud.render()
wordcloud
from pyecharts import Bar

race_nums = df['race'].value_counts()

race_name = race_nums.index.values.tolist()
race_values = race_nums.values.tolist()
bar = Bar("", "少数民族")
bar.add("少数民族", race_name[1:], race_values[1:], 
        is_label_show=True,is_more_utils=True)

bar.render()
bar

统计代表姓氏人数

df['surname'] = [_[0] for _ in df['name']]
surname_Data = df['surname'].value_counts()
bar = Bar("", "", width=800, height=400)
bar.add("", surname_Data.index.values.tolist()[0:30],
        surname_Data.values.tolist()[0:30], is_label_show=True, 
        is_legend_show=True,is_more_utils=True)
bar.render()
bar

姓氏词云

from pyecharts import WordCloud

wordcloud = WordCloud(width=1200, height=600)
wordcloud.add("", surname_Data.index.values.tolist(),
              surname_Data.values.tolist(), word_size_range=[20, 100])
wordcloud.render()
wordcloud
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬取代表数据
  • 正则表达式提取需要的数据
  • 还可以把上面数据画成饼图
  • 民族词云图
  • 统计代表姓氏人数
  • 姓氏词云
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档