panda强化练习2
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
#读取excel数据并转化为csv格式
data_xls=pd.read_excel('地市级党委书记数据库(2000-10).xls','中国人民共和国地市级党委书记数据库(2000-10)',index_col = 0)
data_xls.to_csv('test_csv.csv', encoding='utf-8')
#读取csv格式的文件
data=pd.read_csv('test_csv.csv')
data.head(5)
省级政区代码 | 省级政区名称 | 地市级政区代码 | 地市级政区名称 | 年份 | 党委书记姓名 | 出生年份 | 出生月份 | 籍贯省份代码 | 籍贯省份名称 | ... | 民族 | 教育 | 是否是党校教育(是=1,否=0) | 专业:人文 | 专业:社科 | 专业:理工 | 专业:农科 | 专业:医科 | 入党年份 | 工作年份 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 130000 | 河北省 | 130100 | 石家庄市 | 2000 | 陈来立 | NaN | NaN | NaN | NaN | ... | NaN | 硕士 | 1.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1 | 130000 | 河北省 | 130100 | 石家庄市 | 2001 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
2 | 130000 | 河北省 | 130100 | 石家庄市 | 2002 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
3 | 130000 | 河北省 | 130100 | 石家庄市 | 2003 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
4 | 130000 | 河北省 | 130100 | 石家庄市 | 2004 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
5 rows × 23 columns
#把列名转化长一个列表
filed=data.columns.tolist()
print(filed)
print(data.columns)
['省级政区代码', '省级政区名称', '地市级政区代码', '地市级政区名称', '年份', '党委书记姓名', '出生年份', '出生月份', '籍贯省份代码', '籍贯省份名称', '籍贯地市代码', '籍贯地市名称', '性别', '民族', '教育', '是否是党校教育(是=1,否=0)', '专业:人文', '专业:社科', '专业:理工', '专业:农科', '专业:医科', '入党年份', '工作年份'] Index(['省级政区代码', '省级政区名称', '地市级政区代码', '地市级政区名称', '年份', '党委书记姓名', '出生年份','出生月份', '籍贯省份代码', '籍贯省份名称', '籍贯地市代码', '籍贯地市名称', '性别', '民族', '教育','是否是党校教育(是=1,否=0)', '专业:人文', '专业:社科', '专业:理工', '专业:农科', '专业:医科', '入党年份','工作年份'],dtype='object')
print(data.describe(include=[np.number]))
print('----------')
# .describe()返回基本数据信息
# .describe(include=[np.number])只统计数值类型
# ()中没有任何参数时,会默认只统计数值类型的字段内容,包括:计数,平均数,方差,最小值,最大值,四分位数,若其中有字符串数据会报错
print(data.describe(include=[np.object]))
# 这里代表只统计字符串类型的字段内容:计数,唯一值数量,出现频率最高的内容,最高出现频率
省级政区代码 地市级政区代码 年份 出生年份 出生月份 \ count 3663.000000 3663.000000 3663.000000 2676.000000 2645.000000 mean 403393.393393 404456.756757 2005.000000 1953.622571 6.790548 std 148176.721620 148485.810327 3.162709 4.416316 3.614664 min 130000.000000 130100.000000 2000.000000 1941.000000 1.000000 25% 330000.000000 330100.000000 2002.000000 1951.000000 3.000000 50% 420000.000000 420200.000000 2005.000000 1954.000000 7.000000 75% 510000.000000 513400.000000 2008.000000 1956.000000 10.000000 max 650000.000000 654300.000000 2010.000000 1966.000000 14.000000 籍贯省份代码 籍贯地市代码 是否是党校教育(是=1,否=0) 专业:人文 \ count 2624.000000 2615.000000 2493.000000 2370.000000 mean 364428.353659 365742.332696 0.430405 0.275527 std 126267.485520 125961.993399 0.576136 0.446874 min 110000.000000 120000.000000 0.000000 0.000000 25% 320000.000000 320700.000000 0.000000 0.000000 50% 370000.000000 370700.000000 0.000000 0.000000 75% 430000.000000 431300.000000 1.000000 1.000000 max 640000.000000 640500.000000 9.000000 1.000000 专业:社科 专业:理工 专业:农科 专业:医科 入党年份 \ count 2376.000000 2371.000000 2369.000000 2370.000000 2384.000000 mean 0.627525 0.256854 0.067539 0.009705 1976.906879 std 0.483566 0.436990 0.251006 0.098054 5.310080 min 0.000000 0.000000 0.000000 0.000000 1961.000000 25% 0.000000 0.000000 0.000000 0.000000 1973.000000 50% 1.000000 0.000000 0.000000 0.000000 1976.000000 75% 1.000000 1.000000 0.000000 0.000000 1981.000000 max 1.000000 1.000000 1.000000 1.000000 1994.000000 工作年份 count 2568.000000 mean 1973.129673 std 4.856564 min 1958.000000 25% 1970.000000 50% 1972.500000 75% 1976.000000 max 1990.000000 ----------省级政区名称 地市级政区名称 党委书记姓名 籍贯省份名称 籍贯地市名称 性别 民族 教育 count 3663 3663 3021 2624 2615 2708 2517 2550 unique 27 333 901 29 240 2 2 7 top 广东省 白山市 焉荣竹 山东省 威海市 男 汉族 硕士 freq 231 11 11 313 58 2633 2351 1381
#取出性别这一列
data_gender=data['性别']
data_gender.head()
0 NaN 1 NaN 2 NaN 3 NaN 4 NaN Name: 性别, dtype: object
#过来吃掉空值
data_gender_re=data_gender[data_gender.notnull()]
data_gender_re.head()
121 男 122 男 123 男 124 男 125 男 Name: 性别, dtype: object
#查看性别这一列都有那些数值
data_gender_re.unique()
array(['男', '女'], dtype=object)
#统计总数
count_total=data_gender_re.count()
count_total
2708
#分别统计男女占比
count_m=data_gender_re[data_gender_re=='男'].count()
count_m
2633
#统计女的数量
count_f=data_gender_re[data_gender_re=='女'].count()
count_f
75
#分别查看男女数量
data_gender_re.value_counts()
男 2633 女 75 Name: 性别, dtype: int64
#查看男占比
count_m/count_total
0.9723042836041359
#查看女占比
count_f/count_total
0.027695716395864108
按省份分析市委书记的女性比例
#取出省份和性别这两列,过滤掉性别为空的
data_gender2 = data[['省级政区名称','性别']]
data_gender2_re = data_gender2[data_gender2['性别'].notnull()]
data_gender2_re.head()
省级政区名称 | 性别 | |
---|---|---|
121 | 山西省 | 男 |
122 | 山西省 | 男 |
123 | 山西省 | 男 |
124 | 山西省 | 男 |
125 | 山西省 | 男 |
#按省份分组,统计性别的频数
pt=pd.crosstab(data_gender2_re['省级政区名称'],data_gender2_re['性别'])
pt.head()
性别 | 女 | 男 |
---|---|---|
省级政区名称 | ||
云南省 | 2 | 73 |
内蒙古自治区 | 0 | 86 |
吉林省 | 4 | 72 |
四川省 | 8 | 155 |
宁夏回族自治区 | 0 | 49 |
#给pt1新增一列女性占比,按男性占比后赋值给pt2
pt['女性占比']=pt['女']/(pt['男']+pt['女'])
pt2=pt.sort_values(by=['女性占比'],ascending=False)
pt2.head()
性别 | 女 | 男 | 女性占比 |
---|---|---|---|
省级政区名称 | |||
辽宁省 | 13 | 121 | 0.097015 |
陕西省 | 9 | 93 | 0.088235 |
吉林省 | 4 | 72 | 0.052632 |
山西省 | 6 | 112 | 0.050847 |
四川省 | 8 | 155 | 0.049080 |
#根据上面结构绘图
#创建一张8*4的图标
fig_q1_1=plt.figure(figsize=(8,4))
#把省份作为横轴,取钱10个
index=pt2.index[:10]
plt.bar(range(10), # 横坐标
pt2['女性占比'][:10], # 纵坐标
tick_label=index, # 横轴标签
color = 'red' ) # 颜色
plt.title('不同省份女性市委书记占比')
plt.xlabel('省份')
plt.ylabel('女性占比')
plt.show()
##图标2:女性视为书籍的占比结构
fig_q1_2=plt.figure(figsize=(4,4))
plt.boxplot(pt2['女性占比'],#值
vert=True,#纵向
showmeans=True)#显示均值
plt.title('女性市委书记占比')
plt.xticks([])
plt.ylabel('女性占比')
plt.show()
年龄情况 ,专业情况
#年龄情况,整体年龄情况/入职年龄情况/退休年龄情况
data_age=data[['出生年份','党委书记姓名','年份']]
data_age.head()
出生年份 | 党委书记姓名 | 年份 | |
---|---|---|---|
0 | NaN | 陈来立 | 2000 |
1 | NaN | 吴振华 | 2001 |
2 | NaN | 吴振华 | 2002 |
3 | NaN | 吴振华 | 2003 |
4 | NaN | 吴振华 | 2004 |
#过滤掉出生年份为空的
data_age_re=data_age[data_age['出生年份'].notnull()]
data_age_re.head()
出生年份 | 党委书记姓名 | 年份 | |
---|---|---|---|
121 | 1945.0 | 侯伍杰 | 2000 |
122 | 1945.0 | 侯伍杰 | 2001 |
123 | 1950.0 | 云公民 | 2002 |
124 | 1950.0 | 云公民 | 2003 |
125 | 1950.0 | 云公民 | 2004 |
#查看出生年份的组成值
data_age_re['出生年份'].unique()
array([1945., 1950., 1956., 1949., 1952., 1957., 1953., 1960., 1955.,1951., 1954., 1948., 1947., 1946., 1944., 1962., 1964., 1942.,1963., 1958., 1965., 1943., 1961., 1959., 1941., 1966.])
#查看出生年份的描述
data_age_re.describe()
出生年份 | 年份 | |
---|---|---|
count | 2676.000000 | 2676.000000 |
mean | 1953.622571 | 2005.214499 |
std | 4.416316 | 3.046486 |
min | 1941.000000 | 2000.000000 |
25% | 1951.000000 | 2003.000000 |
50% | 1954.000000 | 2005.000000 |
75% | 1956.000000 | 2008.000000 |
max | 1966.000000 | 2010.000000 |
#计算出整体年龄数据
df1=2017-data_age_re['出生年份']
df1.head()
121 72.0 122 72.0 123 67.0 124 67.0 125 67.0 Name: 出生年份, dtype: float64
df1.describe()
count 2676.000000 mean 63.377429 std 4.416316 min 51.000000 25% 61.000000 50% 63.000000 75% 66.000000 max 76.000000 Name: 出生年份, dtype: float64
#计算入职年龄(先计算每个人入职年龄的最小值),再看每个年份的入职人数
df_yearmin = data_age_re[['党委书记姓名','年份']].groupby(data_age_re['党委书记姓名']).min()
df2=df_yearmin['年份'].groupby(df_yearmin['年份']).count()
df2
年份 2000 190 2001 69 2002 65 2003 88 2004 51 2005 55 2006 50 2007 59 2008 99 2009 23 Name: 年份, dtype: int64
#查看卸任年龄
df_yearmax = data_age_re[['党委书记姓名','年份']].groupby(data_age_re['党委书记姓名']).max()
df3=df_yearmax.groupby(df_yearmax['年份']).count()
df3
党委书记姓名 | |
---|---|
年份 | |
2000 | 47 |
2001 | 44 |
2002 | 71 |
2003 | 38 |
2004 | 48 |
2005 | 49 |
2006 | 58 |
2007 | 105 |
2008 | 25 |
2009 | 41 |
2010 | 223 |
##专业情况 专业结构 / 专业整体情况 / 专业大类分布
data_major=data[['党委书记姓名','专业:人文','专业:社科','专业:理工','专业:农科','专业:医科']]
data_major_re=data[data_major['专业:人文'].notnull()]
data_major_re.head()
省级政区代码 | 省级政区名称 | 地市级政区代码 | 地市级政区名称 | 年份 | 党委书记姓名 | 出生年份 | 出生月份 | 籍贯省份代码 | 籍贯省份名称 | ... | 民族 | 教育 | 是否是党校教育(是=1,否=0) | 专业:人文 | 专业:社科 | 专业:理工 | 专业:农科 | 专业:医科 | 入党年份 | 工作年份 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 130000 | 河北省 | 130100 | 石家庄市 | 2001 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
2 | 130000 | 河北省 | 130100 | 石家庄市 | 2002 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
3 | 130000 | 河北省 | 130100 | 石家庄市 | 2003 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
4 | 130000 | 河北省 | 130100 | 石家庄市 | 2004 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
5 | 130000 | 河北省 | 130100 | 石家庄市 | 2005 | 吴振华 | NaN | NaN | NaN | NaN | ... | NaN | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN |
5 rows × 23 columns
data_major_re.mean()
省级政区代码 388046.413502 地市级政区代码 388781.772152 年份 2005.479747 出生年份 1954.297048 出生月份 6.704082 籍贯省份代码 369873.772791 籍贯地市代码 371312.159624 是否是党校教育(是=1,否=0) 0.406809 专业:人文 0.275527 专业:社科 0.626582 专业:理工 0.256540 专业:农科 0.067539 专业:医科 0.009705 入党年份 1977.430507 工作年份 1973.622338 dtype: float64
data_major_re.describe()
省级政区代码 | 地市级政区代码 | 年份 | 出生年份 | 出生月份 | 籍贯省份代码 | 籍贯地市代码 | 是否是党校教育(是=1,否=0) | 专业:人文 | 专业:社科 | 专业:理工 | 专业:农科 | 专业:医科 | 入党年份 | 工作年份 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 2370.000000 | 2370.000000 | 2370.000000 | 2168.000000 | 2156.000000 | 2139.000000 | 2130.000000 | 2350.000000 | 2370.000000 | 2370.000000 | 2370.000000 | 2369.000000 | 2370.000000 | 1993.000000 | 2113.000000 |
mean | 388046.413502 | 388781.772152 | 2005.479747 | 1954.297048 | 6.704082 | 369873.772791 | 371312.159624 | 0.406809 | 0.275527 | 0.626582 | 0.256540 | 0.067539 | 0.009705 | 1977.430507 | 1973.622338 |
std | 137507.595852 | 137533.425865 | 3.040290 | 4.250503 | 3.618283 | 126451.656681 | 126006.184835 | 0.491343 | 0.446874 | 0.483814 | 0.436815 | 0.251006 | 0.098054 | 5.265569 | 4.857468 |
min | 130000.000000 | 130100.000000 | 2000.000000 | 1941.000000 | 1.000000 | 110000.000000 | 120000.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1964.000000 | 1960.000000 |
25% | 320000.000000 | 321300.000000 | 2003.000000 | 1952.000000 | 3.000000 | 320000.000000 | 320900.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1974.000000 | 1970.000000 |
50% | 410000.000000 | 410600.000000 | 2006.000000 | 1954.000000 | 7.000000 | 370000.000000 | 370900.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 1976.000000 | 1973.000000 |
75% | 450000.000000 | 451175.000000 | 2008.000000 | 1957.000000 | 10.000000 | 440000.000000 | 440500.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 0.000000 | 0.000000 | 1982.000000 | 1976.000000 |
max | 650000.000000 | 650200.000000 | 2010.000000 | 1966.000000 | 14.000000 | 640000.000000 | 640500.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1994.000000 | 1990.000000 |
#统计每个人的专业
data_major_re['专业']=data_major_re[['专业:人文', '专业:社科', '专业:理工', '专业:农科', '专业:医科']].idxmax(axis=1)
data_major_re.head()
C:\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
省级政区代码 | 省级政区名称 | 地市级政区代码 | 地市级政区名称 | 年份 | 党委书记姓名 | 出生年份 | 出生月份 | 籍贯省份代码 | 籍贯省份名称 | ... | 教育 | 是否是党校教育(是=1,否=0) | 专业:人文 | 专业:社科 | 专业:理工 | 专业:农科 | 专业:医科 | 入党年份 | 工作年份 | 专业 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 130000 | 河北省 | 130100 | 石家庄市 | 2001 | 吴振华 | NaN | NaN | NaN | NaN | ... | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN | 专业:理工 |
2 | 130000 | 河北省 | 130100 | 石家庄市 | 2002 | 吴振华 | NaN | NaN | NaN | NaN | ... | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN | 专业:理工 |
3 | 130000 | 河北省 | 130100 | 石家庄市 | 2003 | 吴振华 | NaN | NaN | NaN | NaN | ... | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN | 专业:理工 |
4 | 130000 | 河北省 | 130100 | 石家庄市 | 2004 | 吴振华 | NaN | NaN | NaN | NaN | ... | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN | 专业:理工 |
5 | 130000 | 河北省 | 130100 | 石家庄市 | 2005 | 吴振华 | NaN | NaN | NaN | NaN | ... | 本科 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | NaN | 专业:理工 |
5 rows × 24 columns
#去重
data_major_st=data_major_re[['党委书记姓名','专业']].drop_duplicates()
data_major_st.head()
党委书记姓名 | 专业 | |
---|---|---|
1 | 吴振华 | 专业:理工 |
7 | 吴显国 | 专业:社科 |
9 | 车俊 | 专业:社科 |
10 | 孙瑞彬 | 专业:社科 |
11 | 白润璋 | 专业:理工 |
#统计专业结构
df4=data_major_st['专业'].groupby(data_major_st['专业']).count()
df4
专业 专业:人文 187 专业:农科 21 专业:医科 5 专业:理工 127 专业:社科 346 Name: 专业, dtype: int64
#计算每年专业的整体数据情况(这是未去重的)
df5=pd.crosstab(data_major_re['年份'],data_major_re['专业'])
df5
专业 | 专业:人文 | 专业:农科 | 专业:医科 | 专业:理工 | 专业:社科 |
---|---|---|---|---|---|
年份 | |||||
2000 | 33 | 7 | 2 | 43 | 53 |
2001 | 42 | 6 | 3 | 36 | 78 |
2002 | 56 | 5 | 4 | 35 | 90 |
2003 | 67 | 7 | 2 | 25 | 106 |
2004 | 68 | 7 | 2 | 28 | 118 |
2005 | 63 | 7 | 2 | 31 | 123 |
2006 | 67 | 9 | 2 | 34 | 123 |
2007 | 69 | 8 | 2 | 34 | 128 |
2008 | 68 | 8 | 0 | 44 | 130 |
2009 | 67 | 8 | 0 | 42 | 131 |
2010 | 71 | 7 | 0 | 38 | 131 |
# 计算每年专业大类分布数据
df5['社科比例'] = df5['专业:社科'] / (df5['专业:理工'] + df5['专业:医科'] + df5['专业:社科'] + df5['专业:农科'] + df5['专业:人文'])
df5['人文比例'] = df5['专业:人文'] / (df5['专业:理工'] + df5['专业:医科'] + df5['专业:社科'] + df5['专业:农科'] + df5['专业:人文'])
df5['理工农医比例'] = (df5['专业:理工'] + df5['专业:医科'] + df5['专业:农科'])/ (df5['专业:理工'] + df5['专业:医科'] + df5['专业:社科'] + df5['专业:农科'] + df5['专业:人文'])
print(df5[['社科比例','人文比例','理工农医比例']])
专业 社科比例 人文比例 理工农医比例 年份 2000 0.384058 0.239130 0.376812 2001 0.472727 0.254545 0.272727 2002 0.473684 0.294737 0.231579 2003 0.512077 0.323671 0.164251 2004 0.529148 0.304933 0.165919 2005 0.544248 0.278761 0.176991 2006 0.523404 0.285106 0.191489 2007 0.531120 0.286307 0.182573 2008 0.520000 0.272000 0.208000 2009 0.528226 0.270161 0.201613 2010 0.530364 0.287449 0.182186
年龄情况的图标绘制
fig_q2=plt.figure(figsize=(12,8))
ax1=fig_q2.add_subplot(2,3,1)
ax2=fig_q2.add_subplot(2,3,2)
ax3=fig_q2.add_subplot(2,3,3)
ax4=fig_q2.add_subplot(2,3,4)
ax5=fig_q2.add_subplot(2,3,5)
ax6=fig_q2.add_subplot(2,3,6)
#亿创建的图标划分成2*3#的表格矩阵
ax1.hist(df1,bins=11,color='gray',alpha=0.9)
ax1.set_title('整体年龄分布')
ax1.grid(True)
ax2.plot(df2,color='r',marker='o',alpha=0.9)
ax2.set_title('入职年龄分布')
ax2.set_xticks(range(2000,2011,2))
ax2.grid(True)
ax3.plot(df3,color='g',marker='o',alpha=0.9)
ax3.set_title('卸任年龄分布')
ax3.set_xticks(range(2000,2011,2))
ax3.grid(True)
ax4.bar(range(len(df4)),df4,color='y')
ax4.set_xticklabels(['人文','农科','医科','理工','社科'])
ax4.grid(True)
ax4.set_title('专业结构')
ax5.plot(df5.index,df5[['专业:人文','专业:农科','专业:医科','专业:理工','专业:社科']])
ax5.grid(True)
ax5.set_title('专业整体情况')
ax6.bar(df5.index,df5['社科比例'],color = 'darkred',alpha=0.7)
ax6.bar(df5.index,df5['人文比例'],color = 'darkred',bottom = df5['社科比例'],alpha=0.5)
ax6.bar(df5.index,df5['理工农医比例'],color = 'darkred',bottom = df5['人文比例'] + df5['社科比例'],alpha=0.3)
ax6.grid(True)
ax6.set_title('专业大类分布:社科、人文、理工农医')
plt.show()
任期
#出生年份与任期的关系
# 新建变量data_term,赋值包括年份、姓名、出生年份字段内容
# 清除缺失值
data_term=data[['年份','党委书记姓名','出生年份']]
data_term_re=data_term[data_term['出生年份'].notnull()]
data_term_re.head()
年份 | 党委书记姓名 | 出生年份 | |
---|---|---|---|
121 | 2000 | 侯伍杰 | 1945.0 |
122 | 2001 | 侯伍杰 | 1945.0 |
123 | 2002 | 云公民 | 1950.0 |
124 | 2003 | 云公民 | 1950.0 |
125 | 2004 | 云公民 | 1950.0 |
year_max = data_term_re[['出生年份','年份']].groupby(data_term_re['党委书记姓名']).max()
year_max.rename(columns={'年份':'年份max'}, inplace = True)
year_max['姓名'] = year_max.index
# 统计每个党委书记任期年份最大值,且更改列明
# 将index提取出字段内容
year_min = data_term_re[['出生年份','年份']].groupby(data_term_re['党委书记姓名']).min()
year_min.rename(columns={'年份':'年份min'}, inplace = True)
year_min['姓名'] = year_min.index
# 统计每个党委书记任期年份最小值,且更改列明
# 将index提取出字段内容
data_term_fin = pd.merge(year_max,year_min)
print(data_term_fin.head())
print(data_term_fin.dtypes)
# 合并表格,默认重叠重复列明
# .dtypes查看字段类型 → 年份均为int
出生年份 年份max 姓名 年份min 0 1951.0 2009 丁海中 2003 1 1948.0 2003 丁耀民 2000 2 1951.0 2007 丁解民 2001 3 1964.0 2007 万庆良 2005 4 1957.0 2010 丰立祥 2008 出生年份 float64 年份max int64 姓名 object 年份min int64 dtype: object
data_term_fin['任期'] = data_term_fin['年份max'] - data_term_fin['年份min']
print(data_term_fin.head())
# 计算任期
出生年份 年份max 姓名 年份min 任期 0 1951.0 2009 丁海中 2003 6 1 1948.0 2003 丁耀民 2000 3 2 1951.0 2007 丁解民 2001 6 3 1964.0 2007 万庆良 2005 2 4 1957.0 2010 丰立祥 2008 2
# 绘制图表1:任期与出生年份关系
fig_q3_1 = plt.figure(figsize = (8,4))
# 创建一个图表,大小为8*4
plt.scatter(data_term_fin['出生年份'],data_term_fin['任期'],color = 'black', alpha=0.2, s = 10)
plt.title('任期与出生年份关系')
plt.xlabel('出身年份')
plt.ylabel('任期(年)')
plt.grid(True)
plt.show()
# 创建散点图,aplha代表透明度 → 点颜色叠加,s代表点大小,
# 参数添加,grid添加网格
# plt.show():显示图表
# 绘制图表2:任期与出生年份关系 - 热图
fig_q3_2 = plt.figure(figsize = (8,4))
# 创建一个图表,大小为8*4
df = pd.crosstab(data_term_fin['任期'], data_term_fin['出生年份'])
print(df.head())
print('----------')
# 整合数据
ax = fig_q3_2.add_subplot(111)
cax = ax.pcolor(df, cmap='Blues')
#cax = ax.matshow(df, cmap='Blues_r')
fig_q3_2.colorbar(cax)
plt.title('任期与出生年份关系 - 热图\n')
ax.set_xticklabels(data_term_fin['出生年份'].tolist())
plt.show()
# 创建热图,横坐标为出生年份,纵坐标为任期,
出生年份 1941.0 1942.0 1943.0 1944.0 1945.0 1946.0 1947.0 1948.0 1949.0 \ 任期 0 4 2 6 5 6 7 3 5 7 1 2 3 1 6 3 6 3 6 8 2 0 2 1 4 6 9 5 11 11 3 0 0 0 1 1 4 2 4 7 4 0 0 0 0 2 1 0 0 3 出生年份 1950.0 ... 1957.0 1958.0 1959.0 1960.0 1961.0 1962.0 1963.0 \ 任期 ... 0 3 ... 2 2 0 1 1 0 0 1 8 ... 13 6 4 3 1 7 1 2 5 ... 19 9 5 3 9 7 3 3 8 ... 6 5 3 4 1 4 0 4 5 ... 8 2 2 1 1 2 0 出生年份 1964.0 1965.0 1966.0 任期 0 0 1 0 1 2 0 2 2 4 0 0 3 2 2 0 4 0 1 0 [5 rows x 26 columns] ----------
转载于:https://www.cnblogs.com/tjp40922/p/10709529.html
panda强化练习2相关推荐
- 《强化学习周刊》第36期:DDA3C、因果推理干预、逆强化学习
No.36 智源社区 强化学习组 强 化 学 习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...
- 机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播
1. 监督学习和无监督学习 监督学习 ( Supervised Learning ) 和无监督学习 ( Unsupervised Learning ) 是在机器学习中经常被提及的两个重要的学习方法. ...
- python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)
[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...
- 读后感和机翻《人类因果迁移:深度强化学习的挑战》
研究朱松纯FPICU体系的第1篇文章 <Human Causal Transfer: Challenges for Deep Reinforcement Learning>CogSci 2 ...
- ADPRL - 近似动态规划和强化学习 - Note 8 - 近似策略迭代 (Approximate Policy Iteration)
Note 8 近似策略迭代 Approximate Policy Iteration 近似策略迭代 Note 8 近似策略迭代 Approximate Policy Iteration 8.1 通用框 ...
- ADPRL - 近似动态规划和强化学习 - Note 7 - Approximate Dynamic Programming
Note 7 - 近似动态规划 Approximate Dynamic Programming 7. 近似动态规划 (Approximate Dynamic Programming) 7.1 近似架构 ...
- 强化学习(九)- 策略梯度方法 - 梯度上升,黑箱优化,REINFORCE算法及CartPole实例
策略梯度方法 引言 9.1 策略近似和其优势 9.2 策略梯度定理 9.2.1 梯度上升和黑箱优化 9.2.2 策略梯度定理的证明 9.3 REINFORCE:蒙特卡洛策略梯度 9.3.1 轨迹上的R ...
- 强化学习(八) - 深度Q学习(Deep Q-learning, DQL,DQN)原理及相关实例
深度Q学习原理及相关实例 8. 深度Q学习 8.1 经验回放 8.2 目标网络 8.3 相关算法 8.4 训练算法 8.5 深度Q学习实例 8.5.1 主程序 程序注释 8.5.2 DQN模型构建程序 ...
- 强化学习(七) - 函数近似方法 - 随机梯度下降, 半梯度下降,及瓦片编码(Tile Coding)实例
函数近似方法 7.1 目标预测(VE‾\overline{VE}VE) 7.2 随机梯度下降和半梯度下降 例7.1: 1000态随机行走的状态收敛 7.3 线性近似 7.4 线性方法的特征构造 7.4 ...
最新文章
- angular模拟web API
- 兼顾稳定和性能,58大数据平台的技术演进与实践
- BASIC-9 特殊回文数
- 源码学习之RunWith annotation used in JUnit debug
- IntelliJ IDEA查看方法在哪里被调用(Usage Search/Call Hierarchy)
- 逐行读文件_用python比较两个文件的内容是否相同
- C#.Net工作笔记012---c# 文件操作_文件路径操作_随时更新
- python--列表,元组,字符串互相转换
- unity简单动画学习
- Neo4j ---windows下载安装neo4j
- 规则引擎groovy
- python计算圆柱体的表面积和体积_圆柱体体积和表面积计算(一)
- 5 秒克隆声音「GitHub 热点速览 v.21.34」
- ZenTao不支持Win8.1问题解决
- 欢迎大家加入Xcode公社
- 绘制系列(五)-DrawText()详解
- 韩语 计算机术语,韩语计算机、互联网术语(1)
- [electron]Electron安装报错connect ETIMEDOUT
- 京东回应显卡售后传闻;​IBM发布第一个2纳米芯片;苹果以工程师数量评估收购对象 | EA周报...
- MIPI屏和LVDS屏有什么区别
热门文章
- mariadb ROW格式复制下从库结构变更引发1677错误
- SpringCloud学习笔记(十四)Zuul网关
- 计算机软件工程学校二本大学,“软件工程专业”实力较强的二本大学,高考分数不理想报考合适...
- go语言的iota是什么意思_golang 使用 iota
- Android事件总线——EventBus的使用
- ae绘图未指定错误怎么办_设计高手总结47个快捷键50个CAD使用技巧,助你神速绘图拒绝加班!...
- 程序员去大公司面试,阿里P8面试官都说太详细了,社招面试心得
- 知识产权日特稿:谁动了程序员的源代码版权?
- c语言的内存布局规律
- 英特尔第十代处理器为什么不支持win7_为什么英特尔新推出,i7处理器不支持w7系统,只支持w10...