標籤: 新北清潔

  • G20部長會議 矢言永續農業 消除饑餓

    摘錄自2018年7月30日青年日報報導

    G20農業部長會議28日於阿根廷布宜諾斯艾利斯落幕,會後各國農業部長發表聯合聲明,矢言「共同努力消除饑餓、促進永續農業,以實現未來糧食的不虞匱乏」。這將成為此屆G20的三大優先目標。

    聲明且強調創新的重要性,並對「愈來愈常採取保護主義的非關稅貿易措施感到擔憂」;因為「農業發展、投資與貿易及引進改良技術,近數十年成為人類進步的驅動力,並改善全球數百萬人的生活條件」。G20農業部長因此鼓勵創新農業技術,提升農業生產力與永續性。

    另重申土壤健康的重要性,認為其能強化農業在人類發展與資訊通訊技術(ICTs)中的角色,進而加強生產力、糧食安全與農業永續。同時呼籲減少食物損失與浪費,以增進糧食安全,減輕對氣候、水與土地資源造成壓力,並改善農夫、經銷商與家庭經濟的收入。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

    FB行銷專家,教你從零開始的技巧

  • 電動車、太陽能福音 科學家找到可極速充電的材料

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※超省錢租車方案

    ※教你寫出一流的銷售文案?

    網頁設計最專業,超強功能平台可客製化

  • 日政府看好燃料電池車 加碼補助研發

    環保意識抬頭,豐田汽車(Toyota Motor)的油電混合車Prius搖身一變成了全球暢銷車款。日本當局看好這股綠色趨勢,計畫投資新一代節能車,讓該國未來一、二十年能穩坐車壇霸主地位。

    華爾街日報26 日報導,日本政府擬斥資研發燃料電池車,這種汽車靠氫燃料發動,只排放水蒸汽,不會造成空氣汙染。該國政府24 日宣布,2014 年4 月起的會計年度,將撥款72 億日圓,補助建造氫燃料站;同時也將挹注64 億日圓研發如何降低燃料電池的製造成本。

    此外,當局任命東芝(Toshiba)、東京瓦斯(Tokyo Gas)等企業和學界專家共組委員會,草擬計畫,要在2030 年前協助燃料電池科技獲得採用。政府也希望運用水力、風力、地熱、太陽能發電,從水中製造氫氣,不要再從煤炭、石油、天然氣中提煉。

    豐田和本田汽車(Honda)先前宣布,計畫在2015 年推出燃料電池車。不過南韓現代汽車(Hyundai Motor)搶先一步,11 月表示氫燃料電池車Tucson SUV 將於明(2014)年上市。

    環保車市火熱,豐田和特斯拉(Tesla Motors)曾隔空交火。華爾街日報報導,Toyota 董事長內山田武2013 年9 月30 日受訪指出,Toyota 之所以並未推出任何一款重量級純電動車,是因為該公司不認為這種產品會有市場。

    十月底報導,執行長Elon Musk 在德國慕尼黑最新開幕的特斯拉展示中心向支持者表示,很多人都說純電動車根本沒有未來,但他認為氫燃料電池才胡扯、簡直是垃圾。Musk 說,燃料電池基本上只是行銷伎倆,氫是危險性頗高的氣體,比較適合用來推動火箭。

    原始來源、授權:TechNews—

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※推薦評價好的iphone維修中心

  • 李澤楷收購菲斯科前夕遭遇萬向集團競購

    據悉,去年11月,停產一年的美國電動車製造商菲斯科(Fisker)申請破產保護。香港商人李澤楷組成的財團以2500萬美元購入Fisker欠美國政府的未償還貸款,並計畫購入該電動汽車廠商的餘下資產。

    按照原計劃,法院將於1月3日決定Fisker是否出售給李澤楷的關聯公司。不過,在交易得到美國法院首肯前夕,傳中國大陸萬向集團報價收購Fisker。

    據外媒報導,Fisker 12月31日提交給法院的檔顯示,Fisker債權人已經要求法院廢止Fisker同意將資產售予李澤楷的交易,並開展公開競拍,而萬向集團旗下萬向美國公司將參與競購。萬向集團已經同意初步開出2472.5萬美元的報價,並承擔Fisker部分債務。

    Fisker的產品為卡瑪插電式混合動力跑車,在美國市場售價高達10萬美元,但銷量一直不理想。據提交的檔顯示,萬向計畫最早在4月使Fisker恢復生產,並最終把製造業務從芬蘭遷回美國密西根州。

    去年1月,萬向集團曾以2.566億美元的價格收購了美國最大的新能源電池製造商A123系統公司。而菲斯科此前是A123系統公司的最大客戶。

    Fisker和A123兩家公司均獲得了美國能源部的綠色能源貸款,美國政府此前曾試圖阻撓把A123出售股權給萬向,因為美國監管方擔心敏感技術可能競爭對手手中。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※回頭車貨運收費標準

  • 豐田氫燃料電池車FCV明年先在加州地區上路

    豐田氫燃料電池車FCV明年先在加州地區上路

    日本汽車龍頭豐田6日表示,將於2015年首先在美國市場推出具「零排放」功能的「氫燃料電池車」,此款車型名稱暫定為FCV,利用氫燃料電池做為動力來源,行駛時僅排放水蒸氣。該款車型的售價將控制在5~10萬美元之間。該款車型在日本市場的推出時間,料將與美國市場同步。豐田的競爭對手現代與本田也表示將於明年推出同類型的汽車。

    豐田銷售副資深副總卡特(Bob Carter)表示,FCV在功能上屬於一般車型,是一款零排放、電力驅動、中型規格、4門轎車的車款,將配合加州政府的充電站政策,於當地優先推出。

    豐田大幅改造氫燃料電池車的車型設計,使氫燃料電池在運作過程中,大幅降低對氧氣的需求。氫氣車在充滿電力後,可行駛300英里(約480公里)的車程。充電時間僅需費時3~5分鐘。

    豐田近來與加州大學合作,表示最初的1萬輛氫氣車,僅有舊金山與聖地牙哥一帶的68座充電站,能夠支援氫燃料電力。但為方便未來的充電需求,加州政府已通過2億美元經費,規劃在2015年、2016年、與2024年,分別新增20座、40座,與100個充電站。卡特指出,如果設置適當,只須利用加州目前1萬座加油站當中的15%,將其轉型成氫燃料充電站,就可充分提供電力需求。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※教你寫出一流的銷售文案?

  • 三菱汽車計畫到2020年 擴增環保車款比重至20%

    三菱汽車計畫到2020年 擴增環保車款比重至20%

    據日經新聞11日報導,因看好今後日本國內快速充電器可望日益普及,汽車大廠三菱汽車(Mitsubishi Motors)計畫擴增插電式油電混合車(PHV)的車種數量;並計畫投資約50億日圓改良主力生產據點「名古屋製作所」的產線,目標為在2015年5月底前將PHV年產能倍增至6萬台的水準、並計劃於2015年開始出口至北美進行販售。

    目前PHV等環保車款佔三菱汽車整體產量比重僅2%,但三菱汽車計劃於2020年度將其比重提高至20%的水準。三菱汽車已於2013年1月開賣PHV車種「Outlander PHEV」,目前日本國內累計銷售量為1萬台、歐洲市場累銷也約1萬台。而除了Outlander車種之外,三菱汽車也計畫推出「Pajero」及「RVR」車款的PHV。

    Outlander PHEV

    日經新聞曾於2013年7月報導指出,豐田汽車(Toyota)、日產汽車(Nissan)、本田汽車(Honda)及三菱汽車(Mitsubishi Motors)等日本4大車廠計畫攜手合作,計畫將日本國內使用於電動車等車種的快速充電器設置數量擴增至4,000座以上,將較現行提高1倍。以期望藉由擴充充電設備,擴大電動車及插電式油電混合車(PHV)市場。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※別再煩惱如何寫文案,掌握八大原則!

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • 中國醞釀小範圍試點扶持微型電動車

    據上證報從第四屆全球新能源大會上獲悉,中國大陸主管部門正在研究在全國部分城市開展小範圍示範試點工作,以加強管理,規範市場,對微型電動車的發展「謹慎扶持」。中國微型電動車市場潛力巨大,有車企人士表示,「去年大陸國內銷售達35萬輛左右,今年有望增至50萬輛。」

    中汽協副秘書長葉盛基指出,國家正研究制定相關政策,推動微型電動車向準電動車發展,未來將提升微型電動車的安全標準,確保符合環保要求,並不斷提高微型電動車的電池性能。

    此外,因採取租賃模式,微型電動車在浙江等省份發展迅速,如2,000元人民幣左右就能租到一輛微型電動車,使消費者的用車成本大幅下降,促進了微型電動車的快速成長。

    據瞭解,已在美國納斯達克上市的浙江康迪車業(KNDI.US)是中國微型電動車的代表企業,受益於新能源汽車產業的廣闊空間,公司股價自去年底以來已創歷史新高。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

    FB行銷專家,教你從零開始的技巧

  • 萬向集團收購價更優厚 Fisker將再次公開拍賣

    據悉,萬向集團與李澤楷爭奪已破產的美國豪華電動車廠Fisker的官司,上周五(10日)有了結果,法官拒絕了李澤楷的收購建議,並同意萬向集團提出將Fisker公開拍賣的請求。Fisker的律師其後開會討論拍賣日期,以及萬向集團取代混合動力控股作為Fisker的破產貸方事宜。

    此前,萬向旗下美國公司VL向當地法院提出,對Fisker的收購提價1000萬美元,令總作價達3570萬美元,該價格無疑對負債纍纍的Fisker極具吸引,並獲Fisker債權人支持。

    美國能源部曾為Fisker提供5.29億美元貸款,Fisker在2007年成立後,於民間及公開集資逾14億美元,但最終仍要破產。

    去年10月,混合動力控股於拍賣中,僅花2500萬美元,從美國政府方面購入Fisker的貸款而控制該公司。但Fisker的無擔保債權人為保利益,與萬向聯手提出反對,聲言可為債權人追收近40%的債款。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※超省錢租車方案

    ※教你寫出一流的銷售文案?

    網頁設計最專業,超強功能平台可客製化

  • 對象創建與堆

    對象創建與堆

    這一節主要介紹對象創建時,在堆中的一些過程。

    回憶下,我們之前說的,什麼時候會發生垃圾回收?

    除了在一些安全點處也許會發生垃圾回收(只是也許),如果在所需內存不足的情況下,一定會發生垃圾回收。

    分配堆空間

    首先通過設置參數,把堆空間設置為 20M,其中 新生代 10M,老年代 10M。

    參數設置:

    -Xms20m -Xmx20m -Xmn10m -XX:+PrintGCDetails

    結果為:

    Heap
     PSYoungGen      total 9216K, used 1685K [0x00000007bf600000, 0x00000007c0000000, 0x00000007c0000000)
      eden space 8192K, 20% used [0x00000007bf600000,0x00000007bf7a5580,0x00000007bfe00000)
      from space 1024K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007c0000000)
      to   space 1024K, 0% used [0x00000007bfe00000,0x00000007bfe00000,0x00000007bff00000)
     ParOldGen       total 10240K, used 0K [0x00000007bec00000, 0x00000007bf600000, 0x00000007bf600000)
      object space 10240K, 0% used [0x00000007bec00000,0x00000007bec00000,0x00000007bf600000)
    

    創建一個新對象

    我們首先創建一個對象,這個對象佔用 2M 的空間。

    package heap;
    
    public class CreateObject {
        public static void main(String[] args) {
            byte[] obj1 = new byte[1024 * 1024 * 2];
        }
    }
    

    最後的輸出:

    Heap
     PSYoungGen      total 9216K, used 3733K [0x00000007bf600000, 0x00000007c0000000, 0x00000007c0000000)
      eden space 8192K, 45% used [0x00000007bf600000,0x00000007bf9a5590,0x00000007bfe00000)
      from space 1024K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007c0000000)
      to   space 1024K, 0% used [0x00000007bfe00000,0x00000007bfe00000,0x00000007bff00000)
     ParOldGen       total 10240K, used 0K [0x00000007bec00000, 0x00000007bf600000, 0x00000007bf600000)
      object space 10240K, 0% used [0x00000007bec00000,0x00000007bec00000,0x00000007bf600000)
    

    可以看到,新生代 被佔用了,老年代佔用為 0K,沒有被使用。

    所以,new 的對象先放在 eden 區。

    填滿 eden 區

    在填滿 eden 區后,會發生什麼呢?因為 survivor 區實在太小了,很難看到。所以,這裏可以藉助 Visual VM,來觀察,更加直觀。

    程序如下:

    package heap;
    
    public class CreateObject {
        public static void main(String[] args) {
            while(true){
                byte[] bytes = new byte[1024 * 512];
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }
    

    重點是看右邊的記錄圖。注意,這裏我們將每次創建對象的大小設置為了 0.5M。

    當 Eden 滿的時候,會調用垃圾回收器,調用垃圾回收器后,Eden 出現了低谷,Survivor 出現了一個增長。老年區也出現了一個增長。

    當 Eden 滿的時候,如果 Survivor 區有足夠的空間容納存活對象,那麼可以把存活對象放入 Survivor,多的對象放入老年區。

    現在,我們把對象的大小調大。設置為 2M,這樣 Survivor 就無法存放下。

    可以看到,在經過一次垃圾回收的時候(可以看到GC Time 上有波峰,說明執行了一次垃圾回收),但我們注意到,Survivor 區中並沒有被佔用。說明垃圾回收過程中,直接將存活對象放到了老年代中。

    再來聊聊 survivor 區

    對象通常在 Eden 區里誕生,如果經過第一次 MInor GC 后仍然存活,並且能夠被 Survivor 容納的話,該對象會被移動到 Survivor 區,並且將其年齡設置為 1 歲。對象在 Survivor 區每熬過一次 Minor GC,年齡就增加 1 歲,當它年齡增大到一定程度(默認是 15 歲),就會被晉陞到老年代。

    特殊情況

    有些時候,如果用戶創建了大對象,如很長的字符串或者元素很多的數組的時候。這種大對象都佔用大量的內存,像這種大對象,有很大概率是長時間使用的,不然為什麼要創建大對象。

    如果大對象朝生夕滅,我們知道在 Java 8 中,新生代默認採用的 標記-複製 算法,那麼對於大對象而言,是非常耗時的。

    所以,如果 JVM 設置了一個閾值,那麼當分配的對象大於這個閾值的時候,會直接被分配到老年代。

    總結

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※推薦評價好的iphone維修中心

  • python動態柱狀圖圖表可視化:歷年軟科中國大學排行

    python動態柱狀圖圖表可視化:歷年軟科中國大學排行

    本來想參照:https://mp.weixin.qq.com/s/e7Wd7aEatcLFGgJUDkg-EQ搞一個往年編程語言動態圖的,奈何找不到數據,有數據來源的歡迎在評論區留言。

    這裏找到了一個,是2020年6月的編程語言排行,供大家看一下:https://www.tiobe.com/tiobe-index/

     

    我們要實現的效果是:

    大學排名來源:http://www.zuihaodaxue.com/ARWU2003.html

    部分截圖:

    在http://www.zuihaodaxue.com/ARWU2003.html中的年份可以選擇,我們解析的頁面就有了:

    "http://www.zuihaodaxue.com/ARWU%s.html" % str(year)

    初步獲取頁面的html信息的代碼:

    def get_one_page(year):
        try:
            headers = {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
                }
            url = "http://www.zuihaodaxue.com/ARWU%s.html" % str(year)
            response=requests.get(url,headers=headers)
            if response.status_code == 200:
                return response.content
        except RequestException:
            print('爬取失敗')

    我們在頁面上進行檢查:

    數據是存儲在表格中的,這樣我們就可以利用pandas獲取html中的數據,基本語法:

    tb = pd.read_html(url)[num]

    其中的num是標識網頁中的第幾個表格,這裏只有一個表格,所以標識為0。初步的解析代碼就有了:

    def parse_on_page(html,i):
        tb=pd.read_html(html)[0]
        return tb

    我們還要將爬取下來的數據存儲到csv文件中,基本代碼如下:

    def save_csv(tb):
        start_time=time.time()
        tb.to_csv(r'university.csv', mode='a', encoding='utf_8_sig', header=True, index=0)
        endtime = time.time()-start_time
        print('程序運行了%.2f秒' %endtime)

    最後是一個主函數,別忘了還有需要導入的包:

    import requests
    from requests.exceptions import RequestException
    import pandas as pd
    import time
    def main(year):
        for i in range(2003,year):
            html=get_one_page(i)
            tb=parse_on_page(html,i)
            #print(tb)
            save_csv(tb)
    if __name__ == "__main__":
        main(2004)

    運行之後,我們在同級目錄下就可以看到university.csv,部分內容如下:

    存在幾個問題:

    (1)缺少年份

    (2)最後一列沒有用

    (3)國家由於是圖片表示,沒有爬取下來

    (4)排名100以後的是一個區間

    我們接下來一一解決:

    (1)刪掉沒用的列

    def parse_on_page(html,i):
        tb=pd.read_html(html)[0]
        # 重命名表格列,不需要的列用數字錶示
        tb.columns = ['world rank','university', 2, 'score',4]
        tb.drop([2,4],axis=1,inplace=True)
        return tb

    新的結果:

    (2) 對100以後的進行唯一化,增加一列index作為排名標識

    tb['index_rank'] = tb.index
    tb['index_rank'] = tb['index_rank'].astype(int) + 1

    (3)新增加年份

    tb['year'] = i

    (4)新增加國家

    首先我們進行檢查:

    發現國家在td->a>img下的圖像路徑中有名字:UnitedStates。 我們可以取出src屬性,並用正則匹配名字即可。

    def get_country(html):
        soup = BeautifulSoup(html,'lxml')
        countries = soup.select('td > a > img')
        lst = []
        for i in countries:
            src = i['src']
            pattern = re.compile('flag.*\/(.*?).png')
            country = re.findall(pattern,src)[0]
            lst.append(country)
        return lst

    然後這麼使用:

    # read_html沒有爬取country,需定義函數單獨爬取
    tb['country'] = get_country(html)

    最終解析的整體函數如下:

    def parse_on_page(html,i):
        tb=pd.read_html(html)[0]
        # 重命名表格列,不需要的列用數字錶示
        tb.columns = ['world rank','university', 2, 'score',4]
        tb.drop([2,4],axis=1,inplace=True)
        tb['index_rank'] = tb.index
        tb['index_rank'] = tb['index_rank'].astype(int) + 1
        tb['year'] = i
        # read_html沒有爬取country,需定義函數單獨爬取
        tb['country'] = get_country(html)
        return tb

    運行之後:

    最後我們要提取屬於中國部分的相關信息:

    首先將年份改一下,獲取到2019年為止的信息:

    if __name__ == "__main__":
        main(2019)

    然後我們提取到中國高校的信息,直接看代碼理解:

    def analysis():
        df = pd.read_csv('university.csv')
        # 包含港澳台
        # df = df.query("(country == 'China')|(country == 'China-hk')|(country == 'China-tw')|(country == 'China-HongKong')|(country == 'China-Taiwan')|(country == 'Taiwan,China')|(country == 'HongKong,China')")[['university','year','index_rank']]
    
        # 只包括內地
        df = df.query("(country == 'China')")
        df['index_rank_score'] = df['index_rank']
        # 將index_rank列轉為整形
        df['index_rank'] = df['index_rank'].astype(int)
    
        # 美國
        # df = df.query("(country == 'UnitedStates')|(country == 'USA')")
    
        #求topn名
        def topn(df):
            top = df.sort_values(['year','index_rank'],ascending = True)
            return top[:20].reset_index()
        df = df.groupby(by =['year']).apply(topn)
    
        # 更改列順序
        df = df[['university','index_rank_score','index_rank','year']]
        # 重命名列
        df.rename (columns = {'university':'name','index_rank_score':'type','index_rank':'value','year':'date'},inplace = True)
    
        # 輸出結果
        df.to_csv('university_ranking.csv',mode ='w',encoding='utf_8_sig', header=True, index=False)
        # index可以設置

    本來是想爬取從2003年到2019年的,運行時發現從2005年開始,頁面不一樣了,多了一列:

    方便起見,我們就只從2005年開始了,還需要修改一下代碼:

        # 重命名表格列,不需要的列用數字錶示
        tb.columns = ['world rank','university', 2,3, 'score',5]
        tb.drop([2,3,5],axis=1,inplace=True)

    最後是整體代碼:

    import requests
    from requests.exceptions import RequestException
    import pandas as pd
    import time
    from bs4 import BeautifulSoup
    import re
    def get_one_page(year):
        try:
            headers = {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
                }
            url = "http://www.zuihaodaxue.com/ARWU%s.html" % str(year)
            response=requests.get(url,headers=headers)
            if response.status_code == 200:
                return response.content
        except RequestException:
            print('爬取失敗')
    def parse_on_page(html,i):
        tb=pd.read_html(html)[0]
        # 重命名表格列,不需要的列用數字錶示
        tb.columns = ['world rank','university', 2,3, 'score',5]
        tb.drop([2,3,5],axis=1,inplace=True)
        tb['index_rank'] = tb.index
        tb['index_rank'] = tb['index_rank'].astype(int) + 1
        tb['year'] = i
        # read_html沒有爬取country,需定義函數單獨爬取
        tb['country'] = get_country(html)
        return tb
    def save_csv(tb):
        start_time=time.time()
        tb.to_csv(r'university.csv', mode='a', encoding='utf_8_sig', header=True, index=0)
        endtime = time.time()-start_time
        print('程序運行了%.2f秒' %endtime)
    # 提取國家名稱
    def get_country(html):
        soup = BeautifulSoup(html,'lxml')
        countries = soup.select('td > a > img')
        lst = []
        for i in countries:
            src = i['src']
            pattern = re.compile('flag.*\/(.*?).png')
            country = re.findall(pattern,src)[0]
            lst.append(country)
        return lst
    def analysis():
        df = pd.read_csv('university.csv')
        # 包含港澳台
        # df = df.query("(country == 'China')|(country == 'China-hk')|(country == 'China-tw')|(country == 'China-HongKong')|(country == 'China-Taiwan')|(country == 'Taiwan,China')|(country == 'HongKong,China')")[['university','year','index_rank']]
    
        # 只包括內地
        df = df.query("(country == 'China')")
        df['index_rank_score'] = df['index_rank']
        # 將index_rank列轉為整形
        df['index_rank'] = df['index_rank'].astype(int)
    
        # 美國
        # df = df.query("(country == 'UnitedStates')|(country == 'USA')")
    
        #求topn名
        def topn(df):
            top = df.sort_values(['year','index_rank'],ascending = True)
            return top[:20].reset_index()
        df = df.groupby(by =['year']).apply(topn)
    
        # 更改列順序
        df = df[['university','index_rank_score','index_rank','year']]
        # 重命名列
        df.rename (columns = {'university':'name','index_rank_score':'type','index_rank':'value','year':'date'},inplace = True)
    
        # 輸出結果
        df.to_csv('university_ranking.csv',mode ='w',encoding='utf_8_sig', header=True, index=False)
        # index可以設置
    def main(year):
        for i in range(2005,year):
            html=get_one_page(i)
            tb=parse_on_page(html,i)
            save_csv(tb)
            print(i,'年排名提取完成完成')
            analysis()
    if __name__ == "__main__":
        main(2019)

    運行之後會有一個university_ranking.csv,部分內容如下:

    接下來就是可視化過程了。

    1、 首先,到作者的github主頁:  
    https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js

    2、克隆倉庫文件,使用git

    # 克隆項目倉庫
    git clone https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js
    # 切換到項目根目錄
    cd Historical-ranking-data-visualization-based-on-d3.js
    # 安裝依賴
    npm install

    這裏如果git clone超時可參考:

    https://www.cnblogs.com/xiximayou/p/12305209.html

    需要注意的是,這裏的npm是我之前裝node.js裝了的,沒有的自己需要裝一下。

    在執行npm install時會報錯:

    先執行:

    npm init

    之後一直回車即可:

    再執行npm install

    任意瀏覽器打開bargraph.html網頁,點擊選擇文件,然後選擇前面輸出的university_ranking.csv文件,看下效果:

    只能製作動圖上傳了。

    可以看到,有了大致的可視化效果,但還存在很多瑕疵,比如:表順序顛倒了、字體不合適、配色太花哨等。可不可以修改呢?

    當然是可以的,只需要分別修改文件夾中這幾個文件的參數就可以了:

    • config.js 全局設置各項功能的開關,比如配色、字體、文字名稱、反轉圖表等等功能;

    • color.css 修改柱形圖的配色;

    • stylesheet.css 具體修改配色、字體、文字名稱等的css樣式;

    • visual.js 更進一步的修改,比如圖表的透明度等。

    知道在哪裡修改了以後,那麼,如何修改呢?很簡單,只需要簡單的幾步就可以實現:

    • 打開網頁,右鍵-檢查,箭頭指向想要修改的元素,然後在右側的css樣式表裡,雙擊各項參數修改參數,修改完元素就會發生變化,可以不斷微調,直至滿意為止。

        

    • 把參數複製到四個文件中對應的文件里並保存。

    • Git Bash運行npm run build,之後刷新網頁就可以看到優化后的效果。(我發現這一步其實不需要,而且會報錯,我直接修改config.js之後運行也成功了)

    這裏我主要修改的是config.js的以下項:

      // 倒序,使得最短的條位於最上方 
      reverse: true,
      // 附加信息內容。
      // left label
      itemLabel: "本年度第一大學",
      // right label
      typeLabel: "世界排名",
      //為了避免名稱重疊
      item_x: 500,
      // 時間標籤坐標。建議x:1000 y:-50開始嘗試,默認位置為x:null,y:null
      dateLabel_x: 1000,
      dateLabel_y: -50,

    最終效果:

    至此,就全部完成了。

    看起來簡單,還是得要自己動手才行。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※回頭車貨運收費標準