學習使用Python做簡單圖表
- 分析目標:探查成為地市級黨委書記與各類因素的關(guān)系碘菜,共六個表格
- 使用數(shù)據(jù):“地市級黨委書記數(shù)據(jù)庫”队魏,以Excel格式保存
- 先把數(shù)據(jù)文件導出為.csv格式文件
代碼如下
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("C:\\Users\\HY\\Desktop\\python視頻\\微專業(yè)\\數(shù)據(jù)資料\\地市級黨委書記數(shù)據(jù)庫(2000-10).csv",engine = 'python',encoding = "gbk")
# 年齡情況:整體年齡分布 / 入職年齡分布 / 卸任年齡分布
data_age = data[['出生年份','黨委書記姓名','年份']]
data_age_re = data_age[data_age['出生年份'].notnull()]
# 新建變量data_age,賦值包括年份臼疫、出生年份字段內(nèi)容
# 清除缺失值
df1 = 2017 - data_age_re['出生年份']
# 計算出整體年齡數(shù)據(jù)
df_yearmin = data_age_re[['黨委書記姓名','年份']].groupby(data_age_re['黨委書記姓名']).min()
df2 = df_yearmin['年份'].groupby(df_yearmin['年份']).count()
# 計算出入職年齡數(shù)據(jù)
df_yearmax = data_age_re[['黨委書記姓名','年份']].groupby(data_age_re['黨委書記姓名']).max()
df3 = df_yearmax['年份'].groupby(df_yearmax['年份']).count()
# 計算出卸任年齡數(shù)據(jù)
# 專業(yè)情況:專業(yè)結(jié)構(gòu) / 專業(yè)整體情況 / 專業(yè)大類分布
data_major = data[['黨委書記姓名','年份','專業(yè):人文','專業(yè):社科','專業(yè):理工','專業(yè):農(nóng)科','專業(yè):醫(yī)科']]
data_major_re = data_major[data_major['專業(yè):人文'].notnull()]
# 新建變量data_major择份,賦值包括年份、專業(yè)等字段內(nèi)容烫堤,其中1代表是荣赶,0代表否
# 清除缺失值
data_major_re['專業(yè)'] = data_major_re[['專業(yè):人文', '專業(yè):社科', '專業(yè):理工', '專業(yè):農(nóng)科', '專業(yè):醫(yī)科']].idxmax(axis=1)
# 統(tǒng)計每個人的專業(yè)
data_major_st = data_major_re[['專業(yè)','黨委書記姓名']].drop_duplicates()
# 去重
df4 = data_major_st['專業(yè)'].groupby(data_major_st['專業(yè)']).count()
# 計算出學歷結(jié)構(gòu)數(shù)據(jù)
df5 = pd.crosstab(data_major_re['年份'], data_major_re['專業(yè)'])
# 計算每年專業(yè)整體情況數(shù)據(jù)
df5['社科比例'] = df5['專業(yè):社科'] / (df5['專業(yè):理工'] + df5['專業(yè):醫(yī)科'] + df5['專業(yè):社科'] + df5['專業(yè):農(nóng)科'] + df5['專業(yè):人文'])
df5['人文比例'] = df5['專業(yè):人文'] / (df5['專業(yè):理工'] + df5['專業(yè):醫(yī)科'] + df5['專業(yè):社科'] + df5['專業(yè):農(nóng)科'] + df5['專業(yè):人文'])
df5['理工農(nóng)醫(yī)比例'] = (df5['專業(yè):理工'] + df5['專業(yè):醫(yī)科'] + df5['專業(yè):農(nóng)科'])/ (df5['專業(yè):理工'] + df5['專業(yè):醫(yī)科'] + df5['專業(yè):社科'] + df5['專業(yè):農(nóng)科'] + df5['專業(yè):人文'])
# 計算每年專業(yè)大類分布數(shù)據(jù)
# 年齡情況:圖表繪制
fig_q2 = plt.figure(figsize = (12,8))
# 創(chuàng)建一個圖表,大小為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)
# 創(chuàng)建一個3*2的表格矩陣
ax1.hist(df1,bins = 11,color = 'gray', alpha=0.9) #bins N個條形
ax1.set_title('整體年齡分布')
ax1.grid(True) #加網(wǎng)格
# 繪制第一個表格
ax2.plot(df2,color = 'r',marker = 'o',alpha=0.9) #marker節(jié)點是什么
ax2.set_title('入職年齡分布')
ax2.set_xticks(range(2000,2011,2))
ax2.grid(True)
# 繪制第二個表格
ax3.plot(df3,color = 'g',marker = 'o',linestyle = "dashed",alpha=0.9) #linestyle設(shè)置虛線
ax3.set_title('卸任年齡分布')
ax3.set_xticks(range(2000,2011,2))
ax3.grid(True)
# 繪制第三個表格
ax4.bar(range(len(df4)),df4,color = 'y')
ax4.set_xticklabels(['人文','農(nóng)科','醫(yī)科','理工','社科'])
ax4.grid(True)
ax4.set_title('專業(yè)結(jié)構(gòu)')
# 繪制第四個表格
ax5.plot(df5.index,df5[['專業(yè):人文','專業(yè):農(nóng)科','專業(yè):醫(yī)科','專業(yè):理工','專業(yè):社科']])
ax5.grid(True)
ax5.set_title('專業(yè)整體情況')
# 繪制第五個表格
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['理工農(nóng)醫(yī)比例'],color = 'darkred',bottom = df5['人文比例'] + df5['社科比例'],alpha=0.3)
ax6.grid(True)
ax6.set_title('專業(yè)大類分布:社科塔逃、人文讯壶、理工農(nóng)醫(yī)')
# 繪制第六個表格
plt.show()
代碼運行結(jié)果如下
- 圖一:整體年齡分布(直方圖)
- 圖二:入職年齡分布(折線圖)
- 圖三:卸任年齡分布(折線圖)
- 圖四:專業(yè)結(jié)構(gòu)(條形圖)
- 圖五:專業(yè)整體情況(折線圖)
- 圖六:專業(yè)大類分布情況(堆積圖)