本系列採用turtle、matplotlib、numpy這三個Python工具,以分形與計算機影像處理的經典演算法為例項,通過程式和影像,來幫助讀者一步步掌握Python繪圖和資料視覺化的方法和技巧,並且讓讀者感受到“ 龍枝屈曲競分形,瑰麗綺錯千萬狀”的分形魅力。
中國傳統中的『分形』
『分』是會意字,由八和刀上下組合而成,表示用刀把物體切開。分的本義是分別、分開,引申為辨別、分辨,又引申為從主體分出的部分、分支。
『形』在篆文中是形聲字,『彡』為形,『幵』(jian)為聲,『彡』表示繪製的圖案花紋。形的本義指形體,引申指物體的形狀和樣子。又引申指事物表現出的較為抽象的特徵、情狀。再轉作動詞,引申為顯露、表現。
--商務印書館《新華大字典》
『分形』由『分』與『形』組成,融合了兩個字的含義,在古漢語中有三種意義:
- 相似且關係密切。如成語“分形同氣”,出自《呂氏春秋.精通》:“父母之於子也,子之於父母也,一體而兩分,同氣而異息。”,意思是父母與子女雖形體個別,但氣息相通,彼此之間的關係相似、密切。
- 分離。如南朝.宋.鮑照的《贈故人馬子喬》中言道:“雙劍將別離,先在匣中鳴。煙雨交將夕,從此遂分形。”這裡的『分形』表示形同而分,形似而別的意思。
- 形態複雜。如張衡的《西京賦》中道:“奇幻倏忽,易貌分形。”這裡的『分形』指的是變化的各種形態。
宋明期間,理學盛行,其中的一個核心命題叫做『理一分殊』,也就是『分形』的哲學。『理一分殊』這一觀點強調的是:理為萬殊的根源,是本體,由本體可以化生出形相各異的天地萬物。這裡的『分』,不是指分散分解,而是化生。
這種分形化生的思想在佛教之中更為流傳,千手觀音、化身五五圖以及觀音菩薩三十三化身圖都是這種思想的表現。《慧命經》中有一首解釋《化身五五圖》的詩:“分念成形窺色相,共靈顯跡化虛無。”這首詩中的“分念成形窺色相”的含義,可以用南宋文學家陸游的一首詠梅絕句來詮釋:
聞道梅花坼曉風,雪堆遍滿四山中。
何方可化身千億,一樹梅前一放翁。
聽聞梅花已在晨風中綻放,紛繁似雪,遍佈山中,我要如何才能靠近每一株梅花呢?“分念成形”,一而二,二而三,化生千億個身影,讓每一棵梅花樹前都有一個陸游常在。
大自然的分形幾何
“雲彩不是球體,山嶺不是錐體,海岸線不是圓周,樹皮並不光滑,閃電更不是沿直線傳播。”
--《大自然的分形幾何》
“內外靈光到處同,一佛國在一沙中。一粒沙含大千界,一個身心萬法同。”
--《西遊記》第14回
變化莫測的雲彩,連綿起伏的山脈,風起雲湧的波浪,犬牙交錯的海岸線,樹木、閃電、星團、水系、泥裂、凍豆腐,火焰、真菌,小麥鬚根、樹冠、花草、支氣管,以及小腸絨毛、大腦皮層……,從巨集觀到微觀,從自然現象到生物構造,大自然向人類展示著各式各樣、千變萬化的形態,而這些形態都有著一個共同點,那就是:不規則、支離破碎,無法用經典的、規則的幾何圖形來進行描述。
在經典的歐氏幾何中,圖形是規則的,無論是牆壁、車輪、道路還是建築物,都可以用直線、圓弧、圓錐或球等形狀來描述。這些物體是基於規則生成的,所以在這些領域,歐氏幾何遊刃有餘,然而,當面對大自然,面對各式各樣的鬼斧神工時,它卻往往顯得力不從心。面對這樣的狀況,科學家們一直探索著從歐氏幾何體系中脫離出來的方法。直到1975年,著名數學家Mandelbrot構思和發展了一種新的幾何學:分形幾何。這種幾何學把自然形態看作是具有無限巢狀層次的精細結構,這種結構在不同的尺度下保持著某種相似性,也就是說,區域性與整體相似,亦或是,區域性是整體的縮影。
分形的原文Fractal是Mandelbrot用拉丁詞根拼造出來的單詞,意思是細片、破碎、分數、分級等等。70年代末,fractal傳到中國,臺灣根據其意直譯為“碎形”,然而,中國科學院物理所的李蔭遠院士提出“fractal”應當譯成“分形”,得到許多科學家的贊同,最終,fractal被定譯為“分形”。李蔭遠院士的“分形”之譯,準確地抓住了fractal的本質,並結合中國傳統文化中『分形』的內涵。由此,中國傳統的自然哲學思想,與幾何學中的“fractal”理念,完美地融合到了一起 ——“簡單產生複雜,混沌孕育秩序”。
資料視覺化
“在計算機學科的分類中,利用人眼的感知能力對資料進行互動的可視表達以增強認知的技術,稱為視覺化,它將不可見或難以直接顯示的資料轉化為可感知的圖形、符號、顏色、紋理等,增強資料識別效率,傳遞有效資訊。 -- 《資料視覺化》陳為
我們有一種與生俱來的“語言天賦”,無須後天的訓練和學習,就可以流利地解讀影像語言。一份數字化報表,人們需要逐條瀏覽,才能獲知銷量情況,但是隻要一張柱狀圖,就可以讓人一眼知曉所需要的資訊。一座城市,道路複雜、河流交錯、人群聚居,但是隻要一張地圖,就可以讓人快速地瞭解這座城市的物理空間結構和人群分佈。一家大型企業,有很多不同職能的部門,工作的細分程度也很高,但是隻要一張組織結構圖,就可以讓人迅速地明瞭這家企業的層級關係和職責分工。
人眼是一個視覺訊號輸入處理器,這個處理器可以同時處理大量的資訊,它具有很強的模式識別能力,可以快速地、甚至潛意識地解讀圖形、顏色、紋理等影像符號,解讀的速度更是遠遠大於對數字或文字等形式的感知。正是因為人類視覺的這個特點,從文明初始起,人類便開始通過視覺化來進行資訊的記錄、推理和分析,藉助圖形和影像,來研究、探索和傳播萬事萬物的原理和規律。分形幾何的發展也是如此,科學家們建立模型,在計算機上進行實驗,然後將實驗資料視覺化,並在形成圖形和影像的過程中,來捕獲和探索大自然各種形態的奧祕。在本系列中,我們將採用Python繪圖工具,來還原這些計算機實驗以及資料視覺化的過程。
資料視覺化的工具有許多,最經典的莫過於Excel,大多數人都有使用Excel生成各種資料統計圖的經驗,然而Excel的缺點是流程的操作步驟繁瑣、容易出錯,並且很多時候不可複用,相比之下,Python的繪圖更簡單,只需要幾行程式碼,便可以呼叫資料,生成各式圖表,並且可以複用。
作為資料視覺化工具,Python有以下優點:
- Python是一門開源的高階程式語言,有著簡潔、易讀、靈活、易維護和模組化的優良特性,並且可以輕鬆地與其它程式語言及軟體整合;
- Python有著豐富的第三方工具庫,視覺化工具有基本的Matplotlib,也有複雜的Seaborn、Bokeh,這些工具的使用簡便,程式碼可複用、可互動,並且可以畫出Excel不具備的圖以及特殊效果;
本系列採用的Python工具為turtle、matplotlib和numpy,其中以turtle模組開始,作為入門,逐步過渡到專業級的matplotlib和numpy庫。matplotlib庫是比較底層的python視覺化第三方庫,有著可定製性強、圖表資源豐富、簡單易用、達到出版質量級別的特點。Python中有許多可用於資料視覺化的庫,但大多數庫都是基於matplotlib進行開發封裝的,所以,學習python資料視覺化,必須要學習matplotlib庫,它的語法雖然略複雜,但非常靈活,幾乎可以生成任何型別的圖形,無論是簡筆畫、藝術圖還是資料統計圖。
(未完待續)
編後語:
這個系列是一個大雜燴,但並不是把材料簡單地進行堆砌,它更像是一鍋燉菜,豬肉燉粉條、小雞燉蘑菇,諸如此類地,材料如下:
- 主料:Python繪圖、分形與混沌;
- 輔料:中國傳統自然哲學思想、古風配色、古詩詞等等;
大火燒開,小火慢燉,希望成品能有新意,並富有營養。:)
寫作,對我來說是件快樂的事,分享自己的知識和思想,在輸入-輸出-反饋的迴圈過程中,不斷地提升自己,生活也由此變得充實而有趣,所以,無論是問題、糾錯,還是建議、意見,都希望您能反饋給我,幫助我提升文章的質量。