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

爬取代表数据

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1807 最长路_NOI导刊2010提高(07)

题目描述 设G为有n个顶点的有向无环图,G中各顶点的编号为1到n,且当为G中的一条边时有i < j。设w(i,j)为边的长度,请设计算法,计算图G中<1,n>间...

31770
来自专栏数据结构与算法

洛谷P3372 【模板】线段树 1(树状数组)

$= sum_{i = 1}^x (x+1)d_i - \sum_{i = 1}^x id_i$

23250
来自专栏数据结构与算法

cf567E. President and Roads(最短路计数)

首先确定哪些边一定在最短路上,一个条件是 从起点到该点的最短路 + 边权 + 从该点到终点的最短路 = 从起点到终点的最短路

11820
来自专栏聊聊技术

原 初学算法 - 求凸包的Garham's

482100
来自专栏ACM小冰成长之路

HDU-6249-Alice’s Stamps

ACM模版 描述 ? 题解 DPDP 问题,设 dp[i][j]dp[i][j] 表示前 ii 个位置选取 jj 个区间的最优解。当然 ii 要加以处理,因为我...

26770
来自专栏数据结构与算法

1225 八数码难题

1225 八数码难题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果 题目描述 Descri...

28840
来自专栏数据结构与算法

P1133 教主的花园

题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损...

31760
来自专栏calmound

poj 3126 Prime Path (广搜)

http://poj.org/problem?id=3126 题意:从一个素数,挨个数位的变换,在此过程中保证每次变换的数位都是素数,最后变到所给的另一个素数最...

30850
来自专栏数据结构与算法

洛谷P3704 [SDOI2017]数字表格

题目描述 Doris刚刚学习了fibonacci数列。用f[i]f[i] 表示数列的第ii 项,那么 f[0]=0f[0]=0 ,f[1]=1f[1]=1 , ...

34790
来自专栏calmound

HDU 2011 菜鸟杯

A:该题写了很久,一直TLE,主要是枚举到n/2时间复杂度实在太高了,其实嘛,这道题就是因式分解,所以就是i*i=n,也就是sqrt(n) #include<s...

31740

扫码关注云+社区

领取腾讯云代金券