跳到主要內容

發表文章

目前顯示的是 2020的文章

python與SAS資料處理入門--條件限制(邏輯判斷)

  運用邏輯判斷進行資料篩選,這也是資料處理中重要的環節。   資料清理時經常會需要篩選或是排除某些條件下的資料,最簡單的例子就是當原始資料的年齡為 0-99 歲時,但所需要用於後續分析的資料只需留下 20-30 歲的數據時,就需要用到邏輯判斷進行資料篩選。 一般在 SAS 上會使用 IF+ 邏輯條件來進行判斷, python 則較為不同,以下分別做示範。   以 SAS 進行邏輯判斷 單一條件,篩選出性別為男性的資料 data id_m; set id; if gender= "M" ; run ; /* 用保留的邏輯判斷留下性別為男性的資料 */ (1) 大小寫:這邊要注意欄位裡面的 coding 方式, 大小寫有差別 ,如果寫成 if gender= "m" ,那這樣不會留下我們想要的資料了。 (2) 文字欄位條件,需要加上 雙引號 。   也可以用排除的方式留下資料 : data id_m; set id; if gender= "F" then delete ; run ; /* 用排除的方式保留資料 */ 這兩種寫法都可以,但是在某些情況下結果會有差異,當我們很確認欄位的 coding 只有 F 跟 M 時,這兩個寫法得到的結果會相同,但如果欄位中有其他 coding 或是 missing value 時,後面的寫法只會將性別 coding 為 F 的資料排除,所以如果裡面包含 missing value 則會一同被留下,所以使用上大家依據需求採用最恰當的寫法。 多重條件,篩選出性別為男性且年齡 <50 的資料 data id_m; set id; if gender= "M" and age< 50 ; run ; 利用 and 或 or 連接多個條件,進行邏輯判斷。 以 Python 進行邏輯判斷 單一條件,篩選出性別為男性的資料 id_m=id_list[id_list["Gender"].isin(["M"])] 不過 pandas 中只有 isin 指令,所以如果是要用排除的方式就必須要繞路執行,先把要做判斷的

使用Tableau 繪製—折線圖 (Line Chart)

  折線圖是最常用來呈現兩個維度的 量化關係 圖表,與長條圖 (bar chart) 最大的不同於,折線圖適用於 連續資料 ,長條圖則是 類別資料 。折線圖可用來傳達趨勢的變化 ( 銷售金額、保險費用、醫療費用 … 等 ) ,將資料點與點之間用線接起來的變化圖。   這次我們還是用醫院服務滿意度資料,變項中多了年代,可比較不同時間點的滿意度圖表。 Step1 : 度量名稱 丟入畫布中,它會自動視為「列」的資料,此時的度量名稱包含門診、急診、住院的滿意度分數,注意這裡的數值為加總後的分數。 Step2 : Year 丟入欄中 。這時候可以看見畫布中的數值,在左邊的畫布中也同時出現折線圖的圖示。 Step3 : 點選折線圖示 。可以看見門診、急診及住院的線條,此線條從 2015~2021 年,但實際上並沒有 2015 及 2021 年的資料,且數值的加總的總和,並非平均值,因此我們下一步需要做調整。 Step4 : 調整圖表內容 。將 Year 修正成 2016~2020 ,可在 X 軸 Year 上按右鍵後,調整年代。同時在列上將門診急診住院調整成平均值,也同時將計數移除。 現在我們完成一張折線圖了,也可以自由調整線的顏色及大小,或是增加參考線等等,因為我們的滿意度每年差異不大,因此較難看出趨折的變化,這也代表每年的滿意度都維持一定的水準,至少皆有 85 分以上。

Python自動化--複製Excel工作表至另一個Excel上

  Python 可以協助處理大量重複性工作,將 Excel 上的工作表自動化複製至上百個不同的 Excel 檔案上   實務上可能會遇到必須將一個 Excel 工作表複製到不同的 Excel 檔案上的情況,一般而言利用 Excel 移動或複製工作表的功能也能處理,但是當這個動作必須執行上百次,移動到上百個不同的 Excel 檔案時,就必須耗時的一個一個執行重複性工作,然而利用 Python 就可以輕鬆簡單化這項工作。   不過 Excel 檔案因儲存的格式可分為 xlsx( 一般版本 ) 跟 xls( 相容版本 ) ,這兩個版本在 Python 處理上需要使用不同的套件處理,這次就以相容版本為例進行示範,有興趣或是有需要的人可以再去搜尋 其他版本的處理。   操作範例 : 假定手上有來自於不同地方的 20 個資料檔案,這些資料都適用一致的編碼方式,為了避免之後時間久了產生混亂,因此必須將這份編碼表分別插入這 20 份資料中,讓每份檔案都有一份編碼表可以參閱,編碼表如下所示。 這邊會用到 3 個套件,開始執行前,尚未安裝 xlrd 、 xlwt 及 xlutils 者需要先安裝,在 Window 環境下,開起命令提示字元,輸入 pip install xlrd 、 pip install xlwt 以及 pip install xlutils ,安裝完成後,開始執行後續的程式碼。 import xlrd import xlwt from xlutils.copy import copy def replace_xls(sheetname): table = xlsx.sheet_by_name(sheetname) rows = table.nrows cols = table.ncols worksheet = wb2_1.add_sheet(sheetname) for i in range(0,rows): for j in range(0, cols): # print(i,j,table.cell_value(i, j)) worksheet.write(i, j ,table.cell_value(i, j

Tableau 優化圖表技巧

  還記得之前我們使用模擬數據,醫院服務滿意度資料,繪製長條圖嗎 ?? 快速上手 Tableau 繪製—長條圖 (bar chart) 技巧 1 :重點提示工具 當我們只想看自己有興趣的變項或想凸顯某個項目做說明時,這時候需要大家把眼球停住在某個閃光點, 重點顯示 就顯得重要了。 Step1 :分析 à 醒目提示工具 (H) 。 在我們的變項中是以「 center 」作為各地區醫院的說明,因此點選至 醒目提示工具 (H) 時需再進一步點選「 center 」。 點選「 center 」後可看見以下圖示,在畫面的右邊,可以看見「醒目提示 center 」方框,可以隨意點選,若不想製作醒目提示按鈕,其實也可直接點選都市的名稱也行,差別只在做了提示按鈕,城市的名稱可以「重點顯示」變成黃色讓人一眼看出。 技巧 2 :新增註解 我們可以透過註解修改文字說明或是新增其他資訊,讓閱讀者可以更理解資料,若提到資料的說明,還可利用「標記」中的各種類型註解。   Step1 :在想要註解的長條圖上按右鍵 à 選「新增註解」 à 「標記」 。 在編輯註釋內皆可隨意修改成自己的喜好,提醒在修改時,若要改變字型、顏色、大小,皆須將文字內容先反白後才能修正,只有文字內容的說明可以直接打在方框中即可。 Step2 :註解的顯示格式修正,點選「格式」 à 「註解」 。 為了讓圖表更精緻,力求畫面協和及優美,可以開啟格式編輯來修正邊框、箭頭、背景等視覺感受。 這裡修正陰影 ( 淡黃色 ) 、角 ( 更圓 ) 、線 ( 虛線 ) 、線末端 ( 箭頭 ) 等,可自行點選試試不同設計風格。 最後我們擁有清晰的註解說明了,這個技巧可以用在任何圖表上, 另外提醒在選擇註解類型時,還有區域型註解及節點型註解兩種選項,節點型與標記型很類似,差別在是否跟隨特定資料移動,標記行顧名思義,要標記某個資料,為固定型標記,節點型則可任意移動,接下來就依自己需求修正囉,預祝大家都能修正出理想樣貌。

python與SAS資料處理入門--格式轉換

  當匯入的資料格式並非分析時所需的格式時,就需要事先進行轉換。   舉個最常見的例子,在資料處理時常常會遇到日期資料以為文字格式做儲存,如下圖所示,生日的部分為文字格式並非日期格式,分析上往往需要的是年齡變項,必須透過生日計算年齡。但是當 Birthday 變項為文字格式時,在計算上就會遇到困難,必須優先進行格式轉換的處理。 以下的操作就以生日欄位為例進行格式轉換。 以 SAS 進行日期格式轉換 基礎版,用 substr 做擷取 data id_date; set id; Birth_date=mdy(substr(Birthday, 5 , 2 ),substr(Birthday, 7 , 2 ),substr(Birthday, 1 , 4 )) ; format Birth_date yymmdd10. ; run ;   進階版,用 input 直接轉換 data id_date; set id; Birth_date=input(Birthday, yymmdd8. ) ; format Birth_date yymmdd10. ; run ;   以 Python 進行日期格式轉換 id_list["Birth_date"] = pandas.to_datetime(id_list["Birthday"], format = '%Y%m%d') #format之後設定日期格式 當然,實務上會遇到需要轉換成不同形式的日期格式,並不會種是這麼單純,因此以下彙整 SAS 與 python 日期格式的表示。   Python 程式 年 %Y 4 位數的年 %y 2 位數的年 月 %m 2 位數的月 [01,12] %b 英文月份簡寫 %B 英文月份完整寫法 日 %d 2 位數的日

使用Tableau 繪製—地圖

這次我們使用的資料為COVID-19,資料是由約翰·霍普金斯大學(Johns Hopkins University)系統科學與工程中心(JHU CCSE)收集的,自2020年1月22日以來的(COVID-19)流行病學數據。 運用此數據實作COVID-19的地圖展示。 資料來源: https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases 先至網頁處,下載資料檔,我們使用 time_series_covid19_confirmed_global.csv 檔案,在此資料集中還有死亡數及復原的個案數等資料,可依自己感興趣的檔案下載嘗試繪製。 Step1 : 修正欄位屬性與名稱 。先將 Province/State( 地區 ) 、 Country/Region( 國家 ) 、 Lat( 緯度 ) 、 Long( 經度 ) ,皆設定為地理角色 (GeoCoding) 。 Step2 : 將階層變項 Country/Region & Province/State 拖曳至工作表畫布中 。在【欄】與【列】中會自動產生經緯度,地圖也會自動顯現,也可在【標記】工作表上看見階層符號顯現。 備註:此檔案已自動生成階層概念,固可直接套用,一般資料並無此設定,需手動設定為階層方可使用。 Step3 : 將最後一天的日期 8/30/20 拖曳至【標記】中的【大小】 日期 8/30/20 中的格式內建為 SUM 總數,代表累積至這天的患病總數量。這時可將游標指向任一國家,會同時顯現出國家名稱及個案數。 另一種作法如下: Step1 : 將 Lat( 緯度 ) 放入【欄】、 Long( 經度 ) 放入【列】。 這裡必須將 Lat( 緯度 ) Long( 經度 ) 兩欄位屬性 設定為維度概念 ,內建為度量概念,因經緯度維數值呈現,故資料會內定為度量,因此需手動修改為維度。 Step2 : 將最後一天的日期 8/30/20 拖曳至【標記】中的【大小】。 現在我們學會兩種方式畫地圖,地圖強調的經緯度,因此若無經緯度需花時間整理資料檔建置欄位才能進行繪圖,一般而言若只是簡單的縣市位置則不用設置階層概念而製圖,因我們的資料屬全球屬性若設定階層概念可呈現的較完整,當然第二種做法較直觀,直接放入經緯度也是很方便