【课程作业】课程大作业:分析中国石油大学(华东)2019年-2021年转专业情况

一、项目概述

本项目主要统计了 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a9c93f2300

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值