一、项目概述
本项目主要统计了 2019 年至 2021 年中国石油大学(华东)转专业的信息并进行了可视化汇总
本项目从中国石油大学(华东)教务处官方网站查询 2018 年至 2019 年各年度转专业的信息,并进行数据获取、数据清洗、数据存储、数据汇总和数据可视化分析
二、项目流程
三、项目成果
1. 转专业情况词云
2. 转专业情况柱状图
四、项目具体内容
1. 头部声明:
设置编码、引入相关包、设置pandas的输出格式
# coding=gbk
import numpy as np
import time
import pandas as pd #此处使用Pandas
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import requests
import tabula #pdf转csv文件
from var_dump import var_dump
from collections import Counter
from wordcloud import WordCloud
import matplotlib
import matplotlib.pyplot as plt
pd.set_option('display.max_columns', None) #此处使用Pandas
pd.set_option('display.max_rows',None) #此处使用Pandas
2. 对应年份页面链接获取:
该部分通过调用 ChromeDriver 模拟网页操作打开教务系统网站,在输入框中输入关键字 并通过获取的结果依次获取2019、2020、2021年的转专业页面的超链接
def webAction ( ) :
print('网页操作模拟================>开始')
print('\n')
driver = webdriver.Chrome(R"D:\LargeSoftwareInstallation\chromeDriver\chromedriver.exe")
url = 'http://jwc.upc.edu.cn/'
driver.get(url)
xInput = '//*[@id="header"]/div/div/div[2]/div/div/form/div[1]/input'
input = driver.find_element_by_xpath(xInput)
inf = "学生办理学籍异动手续的通知"
ActionChains(driver).click(input).send_keys(inf).perform()
input.send_keys( Keys.ENTER )
windows = driver.window_handles
driver.switch_to.window(windows[1])
time.sleep(3)
x2021Page = '//*[@id="search_body"]/div[1]/div/div[1]/h3/a'
x2020Page = '//*[@id="search_body"]/div[1]/div/div[2]/h3/a'
x2019Page = '//*[@id="search_body"]/div[1]/div/div[3]/h3/a'
page2021 = driver.find_element_by_xpath(x2021Page)
ActionChains(driver).click(page2021).perform()
windows = driver.window_handles
driver.switch_to.window(windows[2])
url2021 = driver.current_url
windows = driver.window_handles
driver.switch_to.window(windows[1])
page2020 = driver.find_element_by_xpath(x2020Page)
ActionChains(driver).click(page2020).perform()
windows = driver.window_handles
driver.switch_to.window(windows[3])
url2020 = driver.current_url
windows = driver.window_handles
driver.switch_to.window(windows[1])
page2019 = driver.find_element_by_xpath(x2019Page)
ActionChains(driver).click(page2019).perform()
windows = driver.window_handles
driver.switch_to.window(windows[4])
url2019 = driver.current_url
print('\n'+'网页操作模拟================>结束')
return url2019, url2020, url2021
3. 文件下载
该部分将第一部分获取的超链接通过 Requests 进行获取,并用 lxml 解析器解析,找到对应 的文件超链接所在div位置,获取超链接并在链接前面加上前缀
程序通过request.get.content方 法获取对应的文件的内容,并通过write方法进行文件的下载
def Requests_2021 (url) :
print('2021年转专业信息pdf文件链接================>开始获取')
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
a_list = soup.find('div', class_='wp_articlecontent').find_all('a')
pdf_a = 'http://jwc.upc.edu.cn'+str(a_list[1].get('href'))
print('2021年转专业信息pdf文件链接================>已获取')
print('2021年转专业信息pdf文件================>开始下载')
pdf = requests.get(pdf_a).content
file=open('2021转专业信息pdf版.pdf', mode='wb') #此处使用文件
file.write(pdf) #此处使用文件
file.close() #此处使用文件
print('2021年转专业信息pdf文件================>已下载')
def Requests_2020 (url) :
print('2020年转专业信息html文件================>开始下载')
content_html = requests.get(url).content
file = open('2020转专业信息html版.html', mode = 'wb') #此处使用文件
file.write(content_html) #此处使用文件
file.close() #此处使用文件
print('2020年转专业信息html文件================>已下载')
def Requests_2019 (url) :
print('2019年转专业信息excel文件链接================>开始获取')
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
a_list = soup.find('div', class_='wp_articlecontent').find_all('a')
xlsx_a = 'http://jwc.upc.edu.cn'+str(a_list[1].get('href'))
print('2019年转专业信息excel文件链接================>已获取')
print('2019年转专业信息excel文件================>开始下载')
xlsx = requests.get(xlsx_a).content
file=open('2019转专业信息excel版.xlsx', mode='wb') #此处使用文件
file.write(xlsx) #此处使用文件
file.close() #此处使用文件
print('2019年转专业信息excel文件================>已下载')
4. 解析下载的文件
(1). pdf 文件解析
2021年转专业的信息是以 pdf 信息保存的,对于 pdf 文件的处理我通过网上查阅了解到 Tabula 包 可以对 pdf 进行文件的解析,但发现解析出来的 DataFrame 对象有的页面列名有问题,为 Unnamed: x,这里对有问题的页面通过 try − except 语句进行获取,并对有问题的页面进行单独处理,最终获得了对应年份的全部转专业信息的 DataFrame 对象,通过 tocsv 方法将其保存到 csv 文件中。
(2). Excel 文件和 html 文件解析
2020年转专业的信息是以 html 信息保存的,2019年转专业的信息是以 excel 信息保存的,该 部分主要通过对pandas读取 html 和读取 excel 进行了文件的读取,并将其保存到 csv 文件中
def inf2csv_2019():
print('2019年转专业信息excel文件转化为csv文件================>开始转换')
content_excel = pd.read_excel('2019转专业信息excel版.xlsx') #此处使用Pandas #此处使用文件
content_excel = content_excel['Unnamed: 6'].drop(0, axis=0)
content_excel.to_csv('2019转专业信息csv版.csv', index=False) #此处使用文件
content = pd.read_csv('2019转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content.columns = ['转入专业']
content.to_csv('2019转专业信息csv版.csv', index=False) #此处使用文件
print('2019年转专业信息excel文件转化为csv文件================>转换完成')
def inf2csv_2020():
print('2020年转专业信息html文件转换为csv文件================>开始转换')
content_table = pd.read_html('2020转专业信息html版.html') #此处使用Pandas #此处使用文件
'''
由于不知道输出的一些变量有什么内容
所以该程序仿照php引入了var_dump包帮助理解df是什么样的内容
var_dump(content_table)
list(3)
[0] => object(DataFrame) (5)
_is_copy => NoneType(None)
_mgr => object(BlockManager) (0)
_item_cache => dict(0)
_attrs => dict(0)
_flags => object(Flags) (2)
_allows_duplicate_labels => bool(True)
_obj => object(weakref) (<weakref at 0x000001961AA0D670; to 'DataFrame' at 0x000001961AB50880>)
[1] => object(DataFrame) (5)
_is_copy => NoneType(None)
_mgr => object(BlockManager) (0)
_item_cache => dict(0)
_attrs => dict(0)
_flags => object(Flags) (2)
_allows_duplicate_labels => bool(True)
_obj => object(weakref) (<weakref at 0x000001961AB553F0; to 'DataFrame' at 0x000001961AB50460>)
[2] => object(DataFrame) (5)
_is_copy => NoneType(None)
_mgr => object(BlockManager) (0)
_item_cache => dict(0)
_attrs => dict(0)
_flags => object(Flags) (2)
'''
content_table = content_table[0][[2]].drop(0,axis=0)
content_table.columns=['转入专业']
content_table.to_csv('2020转专业信息csv版.csv', index=False) #此处使用文件
print('2020年转专业信息html文件转换为csv文件================>转换完成')
def inf2csv_2021():
print('2021年转专业信息pdf文件转换为csv文件================>开始转换')
content_df = pd.DataFrame( columns=['原专业', '转入专业']) #此处使用Pandas
for i in range (1, 18):
df = tabula.read_pdf('2021转专业信息pdf版.pdf', encoding='gbk', pages=i)[0] #此处使用文件 #包含新功能-pdf解析 #包含新功能-try-except语句
try:
if(i==1):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['原专业','转入专业']].dropna()
content_df = pd.concat([content_df, df], axis=0)
elif(i==2):
print(' 第'+str(i)+'页pdf信息================>已转换')
df = df[['Unnamed: 0', '拟转入专业']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==6):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 0', '拟转入专业']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==8):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['班级','拟转入专业']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==9):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['原专业', 'Unnamed: 0']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==10):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 0', '拟转入专业']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==14):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 2', 'Unnamed: 3']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==15):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 2', 'Unnamed: 3']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
else:
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['原专业', '拟转入专业']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0) #此处使用Pandas
except:
print(' 第'+str(i)+'页有问题')
content_df.drop(0)
print('2021年转专业信息如下')
print('已将该信息存入csv文件')
content_df.to_csv('2021转专业信息csv版.csv', index=False)
print('2021年转专业信息pdf文件转换为csv文件================>已完成')
5. 数据分析和可视化
该部分首先通过 Counter 对于转入转出专业的数据出现都频率进行了统计,并将其转换为 DataFrame 类型
对于词云则调用词云的相关代码,对于频次柱状图首先将2021年的转入专业名称设置为索引,之后进行2019、2020、2021年三年的数据合并,合并后的 DataFrame 变量 通过 plot 方法直接输出柱状图
def analysis():
print('近三年转专业情况云图================>开始生成')
print('近三年转专业情况柱状统计图================>开始生成')
plt.rcParams['font.sans-serif'] = ['SimHei']
content_2021 = pd.read_csv('2021转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content_from_2021 = content_2021['原专业']
count_from_2021=Counter(content_from_2021)
content_to_2021 = content_2021['转入专业']
count_to_2021=Counter(content_to_2021)
content_2020 = pd.read_csv('2020转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content_to_2020 = content_2020['转入专业']
count_to_2020=Counter(content_to_2020)
content_2019 = pd.read_csv('2019转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content_to_2019 = content_2019['转入专业']
count_to_2019 = Counter(content_to_2019)
counter2dataframe_2019 = pd.DataFrame(count_to_2019.items(), columns=['转入专业', '2019年人数']) #此处使用Pandas
counter2dataframe_2019.index=counter2dataframe_2019['转入专业']
counter2dataframe_2020 = pd.DataFrame(count_to_2020.items(), columns=['转入专业', '2020年人数']) #此处使用Pandas
counter2dataframe_2020.index=counter2dataframe_2020['转入专业']
counter2dataframe = pd.concat([counter2dataframe_2019.drop('转入专业',axis=1),counter2dataframe_2020.drop('转入专业',axis=1)],axis=1) #此处使用Pandas
counter2dataframe_2021 = pd.DataFrame(count_to_2021.items(), columns=['转入专业', '2021年人数']) #此处使用Pandas
counter2dataframe_2021.index=counter2dataframe_2021['转入专业']
counter2dataframe = pd.concat([counter2dataframe,counter2dataframe_2021.drop('转入专业',axis=1)],axis=1) #此处使用Pandas
counter2dataframe = counter2dataframe.sort_values(by='2021年人数', ascending=False)
color=['#020202', '#5b5b5b', '#828282']
color_list=['#020202','#0c0c0c','#161616','#202020','#2a2a2a','#333333','#3d3d3d','#474747','#515151']
colormap=matplotlib.colors.ListedColormap(color_list)
wcd = WordCloud(width=1000, scale=4,
font_path="D:\Project\PythonProject\MajorChangmentAnalysis_UPC\msyhbd.ttc",
colormap=colormap,
background_color='white',)
figure, ax = plt.subplots(4,1)
plt.subplots_adjust(hspace=0.75)
wcd.generate_from_frequencies(count_from_2021)
ax[0].set_title('中国石油大学(华东)2021年转专业 转出专业词云')
ax[0].imshow(wcd)
ax[0].axis("off")
wcd.generate_from_frequencies(count_to_2021)
ax[1].set_title('中国石油大学(华东)2021年转专业 转入专业词云')
ax[1].imshow(wcd)
ax[1].axis("off")
wcd.generate_from_frequencies(count_to_2020)
ax[2].set_title('中国石油大学(华东)2020年转专业 转入专业词云')
ax[2].imshow(wcd)
ax[2].axis("off")
wcd.generate_from_frequencies(count_to_2019)
ax[3].set_title('中国石油大学(华东)2019年转专业 转入专业词云')
ax[3].imshow(wcd)
ax[3].axis("off")
counter2dataframe[0:30].plot(kind='barh', color={'2019年人数':'#020202','2020年人数':'#5b5b5b','2021年人数':'#828282'})
plt.ylabel=None
plt.yticks(range(0,30,1), counter2dataframe.index[0:30])
plt.show()
print('近三年转专业情况云图================>已生成')
print('近三年转专业情况柱状统计图================>已生成')
print('程序运行完成')
6. 主函数调用
def MajorChangInf2021 ( url ):
Requests_2021 (url)
inf2csv_2021()
def MajorChangInf2020 ( url ):
Requests_2020 (url)
inf2csv_2020()
def MajorChangInf2019 ( url ):
Requests_2019 (url)
inf2csv_2019()
url = np.array(['str1', 'str2', 'str3']) #此处使用Numpy
url= webAction( ) #此处使用Numpy
for i in range(3):
print(url[i]) #此处使用Numpy
MajorChangInf2021( url[2] ) #此处使用Numpy
MajorChangInf2020( url[1] ) #此处使用Numpy
MajorChangInf2019( url[0] ) #此处使用Numpy
analysis()
四、完整代码
# coding=gbk
import numpy as np
import time
import pandas as pd #此处使用Pandas
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import requests
import tabula #pdf转csv文件
from var_dump import var_dump
from collections import Counter
from wordcloud import WordCloud
import matplotlib
import matplotlib.pyplot as plt
pd.set_option('display.max_columns', None) #此处使用Pandas
pd.set_option('display.max_rows',None) #此处使用Pandas
#以下为数据获取
def webAction ( ) :
print('网页操作模拟================>开始')
print('\n')
driver = webdriver.Chrome(R"D:\LargeSoftwareInstallation\chromeDriver\chromedriver.exe")
url = 'http://jwc.upc.edu.cn/'
driver.get(url)
xInput = '//*[@id="header"]/div/div/div[2]/div/div/form/div[1]/input'
input = driver.find_element_by_xpath(xInput)
inf = "学生办理学籍异动手续的通知"
ActionChains(driver).click(input).send_keys(inf).perform()
input.send_keys( Keys.ENTER )
windows = driver.window_handles
driver.switch_to.window(windows[1])
time.sleep(3)
x2021Page = '//*[@id="search_body"]/div[1]/div/div[1]/h3/a'
x2020Page = '//*[@id="search_body"]/div[1]/div/div[2]/h3/a'
x2019Page = '//*[@id="search_body"]/div[1]/div/div[3]/h3/a'
page2021 = driver.find_element_by_xpath(x2021Page)
ActionChains(driver).click(page2021).perform()
windows = driver.window_handles
driver.switch_to.window(windows[2])
url2021 = driver.current_url
windows = driver.window_handles
driver.switch_to.window(windows[1])
page2020 = driver.find_element_by_xpath(x2020Page)
ActionChains(driver).click(page2020).perform()
windows = driver.window_handles
driver.switch_to.window(windows[3])
url2020 = driver.current_url
windows = driver.window_handles
driver.switch_to.window(windows[1])
page2019 = driver.find_element_by_xpath(x2019Page)
ActionChains(driver).click(page2019).perform()
windows = driver.window_handles
driver.switch_to.window(windows[4])
url2019 = driver.current_url
print('\n'+'网页操作模拟================>结束')
return url2019, url2020, url2021
def Requests_2021 (url) :
print('2021年转专业信息pdf文件链接================>开始获取')
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
a_list = soup.find('div', class_='wp_articlecontent').find_all('a')
pdf_a = 'http://jwc.upc.edu.cn'+str(a_list[1].get('href'))
print('2021年转专业信息pdf文件链接================>已获取')
print('2021年转专业信息pdf文件================>开始下载')
pdf = requests.get(pdf_a).content
file=open('2021转专业信息pdf版.pdf', mode='wb') #此处使用文件
file.write(pdf) #此处使用文件
file.close() #此处使用文件
print('2021年转专业信息pdf文件================>已下载')
def Requests_2020 (url) :
print('2020年转专业信息html文件================>开始下载')
content_html = requests.get(url).content
file = open('2020转专业信息html版.html', mode = 'wb') #此处使用文件
file.write(content_html) #此处使用文件
file.close() #此处使用文件
print('2020年转专业信息html文件================>已下载')
def Requests_2019 (url) :
print('2019年转专业信息excel文件链接================>开始获取')
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
a_list = soup.find('div', class_='wp_articlecontent').find_all('a')
xlsx_a = 'http://jwc.upc.edu.cn'+str(a_list[1].get('href'))
print('2019年转专业信息excel文件链接================>已获取')
print('2019年转专业信息excel文件================>开始下载')
xlsx = requests.get(xlsx_a).content
file=open('2019转专业信息excel版.xlsx', mode='wb') #此处使用文件
file.write(xlsx) #此处使用文件
file.close() #此处使用文件
print('2019年转专业信息excel文件================>已下载')
#以下为数据处理
def inf2csv_2019():
print('2019年转专业信息excel文件转化为csv文件================>开始转换')
content_excel = pd.read_excel('2019转专业信息excel版.xlsx') #此处使用Pandas #此处使用文件
content_excel = content_excel['Unnamed: 6'].drop(0, axis=0)
content_excel.to_csv('2019转专业信息csv版.csv', index=False) #此处使用文件
content = pd.read_csv('2019转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content.columns = ['转入专业']
content.to_csv('2019转专业信息csv版.csv', index=False) #此处使用文件
print('2019年转专业信息excel文件转化为csv文件================>转换完成')
def inf2csv_2020():
print('2020年转专业信息html文件转换为csv文件================>开始转换')
content_table = pd.read_html('2020转专业信息html版.html') #此处使用Pandas #此处使用文件
'''
由于不知道输出的一些变量有什么内容
所以该程序仿照php引入了var_dump包帮助理解df是什么样的内容
var_dump(content_table)
list(3)
[0] => object(DataFrame) (5)
_is_copy => NoneType(None)
_mgr => object(BlockManager) (0)
_item_cache => dict(0)
_attrs => dict(0)
_flags => object(Flags) (2)
_allows_duplicate_labels => bool(True)
_obj => object(weakref) (<weakref at 0x000001961AA0D670; to 'DataFrame' at 0x000001961AB50880>)
[1] => object(DataFrame) (5)
_is_copy => NoneType(None)
_mgr => object(BlockManager) (0)
_item_cache => dict(0)
_attrs => dict(0)
_flags => object(Flags) (2)
_allows_duplicate_labels => bool(True)
_obj => object(weakref) (<weakref at 0x000001961AB553F0; to 'DataFrame' at 0x000001961AB50460>)
[2] => object(DataFrame) (5)
_is_copy => NoneType(None)
_mgr => object(BlockManager) (0)
_item_cache => dict(0)
_attrs => dict(0)
_flags => object(Flags) (2)
'''
content_table = content_table[0][[2]].drop(0,axis=0)
content_table.columns=['转入专业']
content_table.to_csv('2020转专业信息csv版.csv', index=False) #此处使用文件
print('2020年转专业信息html文件转换为csv文件================>转换完成')
def inf2csv_2021():
print('2021年转专业信息pdf文件转换为csv文件================>开始转换')
content_df = pd.DataFrame( columns=['原专业', '转入专业']) #此处使用Pandas
for i in range (1, 18):
df = tabula.read_pdf('2021转专业信息pdf版.pdf', encoding='gbk', pages=i)[0] #此处使用文件 #包含新功能-pdf解析 #包含新功能-try-except语句
try:
if(i==1):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['原专业','转入专业']].dropna()
content_df = pd.concat([content_df, df], axis=0)
elif(i==2):
print(' 第'+str(i)+'页pdf信息================>已转换')
df = df[['Unnamed: 0', '拟转入专业']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==6):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 0', '拟转入专业']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==8):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['班级','拟转入专业']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==9):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['原专业', 'Unnamed: 0']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==10):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 0', '拟转入专业']]
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==14):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 2', 'Unnamed: 3']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
elif(i==15):
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['Unnamed: 2', 'Unnamed: 3']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0)
else:
print(' 第'+str(i)+'页pdf信息================>已转换')
df=df[['原专业', '拟转入专业']].dropna()
df.columns = ['原专业', '转入专业']
content_df = pd.concat([content_df, df], axis=0) #此处使用Pandas
except:
print(' 第'+str(i)+'页有问题')
content_df.drop(0)
print('2021年转专业信息如下')
print('已将该信息存入csv文件')
content_df.to_csv('2021转专业信息csv版.csv', index=False)
print('2021年转专业信息pdf文件转换为csv文件================>已完成')
#以下为数据分析 和 数据可视化
def analysis():
print('近三年转专业情况云图================>开始生成')
print('近三年转专业情况柱状统计图================>开始生成')
plt.rcParams['font.sans-serif'] = ['SimHei']
content_2021 = pd.read_csv('2021转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content_from_2021 = content_2021['原专业']
count_from_2021=Counter(content_from_2021)
content_to_2021 = content_2021['转入专业']
count_to_2021=Counter(content_to_2021)
content_2020 = pd.read_csv('2020转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content_to_2020 = content_2020['转入专业']
count_to_2020=Counter(content_to_2020)
content_2019 = pd.read_csv('2019转专业信息csv版.csv') #此处使用Pandas #此处使用文件
content_to_2019 = content_2019['转入专业']
count_to_2019 = Counter(content_to_2019)
counter2dataframe_2019 = pd.DataFrame(count_to_2019.items(), columns=['转入专业', '2019年人数']) #此处使用Pandas
counter2dataframe_2019.index=counter2dataframe_2019['转入专业']
counter2dataframe_2020 = pd.DataFrame(count_to_2020.items(), columns=['转入专业', '2020年人数']) #此处使用Pandas
counter2dataframe_2020.index=counter2dataframe_2020['转入专业']
counter2dataframe = pd.concat([counter2dataframe_2019.drop('转入专业',axis=1),counter2dataframe_2020.drop('转入专业',axis=1)],axis=1) #此处使用Pandas
counter2dataframe_2021 = pd.DataFrame(count_to_2021.items(), columns=['转入专业', '2021年人数']) #此处使用Pandas
counter2dataframe_2021.index=counter2dataframe_2021['转入专业']
counter2dataframe = pd.concat([counter2dataframe,counter2dataframe_2021.drop('转入专业',axis=1)],axis=1) #此处使用Pandas
counter2dataframe = counter2dataframe.sort_values(by='2021年人数', ascending=False)
color=['#020202', '#5b5b5b', '#828282']
color_list=['#020202','#0c0c0c','#161616','#202020','#2a2a2a','#333333','#3d3d3d','#474747','#515151']
colormap=matplotlib.colors.ListedColormap(color_list)
wcd = WordCloud(width=1000, scale=4,
font_path="D:\Project\PythonProject\MajorChangmentAnalysis_UPC\msyhbd.ttc",
colormap=colormap,
background_color='white',)
figure, ax = plt.subplots(4,1)
plt.subplots_adjust(hspace=0.75)
wcd.generate_from_frequencies(count_from_2021)
ax[0].set_title('中国石油大学(华东)2021年转专业 转出专业词云')
ax[0].imshow(wcd)
ax[0].axis("off")
wcd.generate_from_frequencies(count_to_2021)
ax[1].set_title('中国石油大学(华东)2021年转专业 转入专业词云')
ax[1].imshow(wcd)
ax[1].axis("off")
wcd.generate_from_frequencies(count_to_2020)
ax[2].set_title('中国石油大学(华东)2020年转专业 转入专业词云')
ax[2].imshow(wcd)
ax[2].axis("off")
wcd.generate_from_frequencies(count_to_2019)
ax[3].set_title('中国石油大学(华东)2019年转专业 转入专业词云')
ax[3].imshow(wcd)
ax[3].axis("off")
counter2dataframe[0:30].plot(kind='barh', color={'2019年人数':'#020202','2020年人数':'#5b5b5b','2021年人数':'#828282'})
plt.ylabel=None
plt.yticks(range(0,30,1), counter2dataframe.index[0:30])
plt.show()
print('近三年转专业情况云图================>已生成')
print('近三年转专业情况柱状统计图================>已生成')
print('程序运行完成')
def MajorChangInf2021 ( url ):
Requests_2021 (url)
inf2csv_2021()
def MajorChangInf2020 ( url ):
Requests_2020 (url)
inf2csv_2020()
def MajorChangInf2019 ( url ):
Requests_2019 (url)
inf2csv_2019()
url = np.array(['str1', 'str2', 'str3']) #此处使用Numpy
url= webAction( ) #此处使用Numpy
for i in range(3):
print(url[i]) #此处使用Numpy
MajorChangInf2021( url[2] ) #此处使用Numpy
MajorChangInf2020( url[1] ) #此处使用Numpy
MajorChangInf2019( url[0] ) #此处使用Numpy
analysis()