概覽
MLSQL Console 是一款集數(shù)據(jù)研發(fā)部逮,數(shù)據(jù)分析,機(jī)器學(xué)習(xí)等于一體Web產(chǎn)品嫂易。他的目標(biāo)是讓產(chǎn)品兄朋,運(yùn)營,分析師怜械,研發(fā)颅和,算法等都有一個統(tǒng)一的數(shù)據(jù)工作臺。這篇文章重點(diǎn)面向產(chǎn)品和運(yùn)營缕允,在該文章中峡扩,他們會學(xué)習(xí)到如何在該平臺上操作excel,關(guān)聯(lián)多個excel,同時將結(jié)果進(jìn)行圖表化障本。
工作區(qū)介紹
快捷菜單區(qū)可以自動幫我們生成MLSQL語句教届,一般而言,用戶只需要自己能夠手動寫一些select 語句即可彼绷。
該文章可在try.mlsql.tech 體驗(yàn)
登錄賬號:
demo@gmail.com
123456
待處理數(shù)據(jù)描述
有兩個excel文件:
內(nèi)容分別如下:
第一個excel有每天每個科室的接待病人的數(shù)量。第二個excel有主任和對應(yīng)的郵箱茴迁。
分析任務(wù)列表
現(xiàn)在我們的目標(biāo)是:
- 繪制每個科室每天接收到病人的分布圖寄悯,從而方便查看兩個科室的就診人數(shù)的分布情況。
- 找到日均就診病人最多的那個醫(yī)生的郵箱
- 將我們的分析結(jié)果保存成新的excel堕义,并且下載到自己電腦猜旬。
任務(wù)一
我們大致會分成四個步驟:
- 將excel文檔上傳脆栋,上傳完成后下載到自己的工作區(qū)得到操作路徑
- 加載excel文件,然后給他們?nèi)”砻?/li>
- 使用SQL對這些excel進(jìn)行數(shù)據(jù)操作
- 使用SQL生成圖標(biāo)
下面我們看下具體步驟:
Step1:上傳文件(在try.mlsql.tech可略過)
打開操作界面的 Tools/Dashboard,然后拖拽excel-example(目錄里包含了兩個示例excel)到上傳區(qū)進(jìn)行上傳操作:
上傳成功后洒擦,即可在/tmp/upload目錄查看到椿争。你也可以通過如下指令確認(rèn):
!hdfs -ls /tmp/upload;
Step2: 加載Excel并且查看
接著我們要加載我們的excel,把它們轉(zhuǎn)化為SQL能操作的表熟嫩。拖拽 Load data到編輯區(qū):
填寫路徑以及表名秦踪。表名隨意,只要你自己記得就行掸茅。點(diǎn)擊Ok椅邓,那么就能生成對應(yīng)的語句了。
同理完成另外一個腳本的處理昧狮。
這個時候你已經(jīng)可以通過表名來查看內(nèi)容了:
excel里的內(nèi)容能夠被正確的展示景馁。
Step3: 對數(shù)據(jù)做預(yù)處理
現(xiàn)在我們開始用SQL繪圖,我們需要的是折線圖逗鸣,橫坐標(biāo)是date, 縱坐標(biāo)是patientNum兩條曲線合住,分別是眼科和皮膚科。眼科對應(yīng)的patientNum我們?nèi)∶衴1,皮膚科對應(yīng)的patientNum叫y2撒璧。為了方便透葛,我們先把把皮膚科的都過濾出來,然后y1設(shè)置為0,y2設(shè)置為實(shí)際的病人數(shù)沪悲,
同理眼科获洲,然后把這些數(shù)據(jù)放到一起,最后的SQL大致如下:
select date as x, 0 as y1, patientNum as y2 from triagePatient where triage="皮膚科"
union all
select date as x, patientNum as y1, 0 as y2 from triagePatient where triage="眼科"
as tempTable;
Step4: 生成圖表并分析
select x,sum(y1) as `眼科`,sum(y2) as `皮膚科`,
-- 告訴系統(tǒng)需要生成圖表
"line" as dash
from tempTable where x is not null group by x order by x asc
as finalTable;
為了展示出圖殿如,橫坐標(biāo)名字一定要為x,然后通過dash參數(shù)告訴系統(tǒng)使用什么圖做展示贡珊。這里是折線圖,寫line就好涉馁。最后的SQL大概是如下的:
我們點(diǎn)擊運(yùn)行门岔,運(yùn)行的結(jié)果如下:
點(diǎn)擊 Tools/Dashboard 查看圖標(biāo):
可以看到 兩者差異還是非常大的,而且皮膚科還有數(shù)據(jù)缺失烤送。
任務(wù)二
因?yàn)槲覀円呀?jīng)做完了文件上傳和加載excel文件等寒随,所以任務(wù)二里,我們只要做數(shù)據(jù)預(yù)處理和生成圖標(biāo)即可帮坚。
Step1: 數(shù)據(jù)預(yù)處理
那么現(xiàn)在妻往,第一個任務(wù)已經(jīng)做好了,我們接著做第二任務(wù)试和,第二個任務(wù)核心就是要關(guān)聯(lián)兩張表,
這可以用Join語法:
select tp.*,me.email from triagePatient as tp left join masterEmail as me on tp.master==me.master
as triagePatientWithEmail;
Step2: 生成圖表并做分析
這樣我們得到了一張新表讯泣,該表有email字段了。接著我們根據(jù)用戶進(jìn)行聚合:
select first(email) as x,
avg(patientNum) as patientEveryDay
"bar" as dash
from triagePatientWithEmail
group by master
order by patientEveryDay desc
as output;
我們用email做橫坐標(biāo)阅悍,然后平均病人數(shù)作為縱坐標(biāo)的值好渠,同時使用柱狀圖:
可以看到 jack@hotmail的科室日均接診量遙遙領(lǐng)先昨稼。
任務(wù)三:保存和下載包含email的新表為excel文件
最后我們希望把triagePatientWithEmail表保存下來,然后下載到自己的電腦上拳锚。拖拽
Save data到編輯區(qū)假栓,打開對話框,選擇excel格式霍掺,然后將triagePatientWithEmail 表保存到/tmp/triagePatientWithEmail.xlsx 文件:
點(diǎn)擊ok后自動生成語句匾荆,然后點(diǎn)擊運(yùn)行,結(jié)果顯示保存完畢。我們可以用前面查看excel的方法加載他:
很完美抗楔。然后我們現(xiàn)在要下載他棋凳,拖拽
到編輯區(qū),然后填寫路徑:
點(diǎn)擊Ok,會打開新標(biāo)簽頁進(jìn)行下載连躏。
完整腳本
最后完整腳本如下:
--------------------------------------------------------------------------------
-- 數(shù)據(jù)描述:
--
-- 我們有兩個excel文件剩岳,第一個文件是每個科室每天接收的病人,并且有這個科室的負(fù)責(zé)人入热。
-- 第二個文件是科室負(fù)責(zé)人以及對應(yīng)的email信息拍棕。
--
-- 需求描述:
-- 1. 我們希望看到科室每天接收到的人的一個時間分布圖。
-- 2. 日均接收用戶最高的科室負(fù)責(zé)人的email
--------------------------------------------------------------------------------
-- 需求一
-- 下載文件
-- run command as DownloadExt.`` where
-- from="excel-example" and
-- to="/tmp";
load excel.`/tmp/excel-example/triage-patient.xlsx` where useHeader="true" as triagePatient;
load excel.`/tmp/excel-example/master-email.xlsx` where useHeader="true" as masterEmail;
-- select date_format(cast (UNIX_TIMESTAMP(date, 'dd/MM/yy') as TIMESTAMP),'dd/MM/yy') as x,date from triagePatient as output;
select date as x, 0 as y1, patientNum as y2 from triagePatient where triage="皮膚科"
union all
select date as x, patientNum as y1, 0 as y2 from triagePatient where triage="眼科"
as tempTable;
select x,sum(y1) as `眼科`,sum(y2) as `皮膚科`,
-- 告訴系統(tǒng)需要生成圖表
"line" as dash
from tempTable where x is not null group by x order by x asc
as finalTable;
select tp.*,me.email from triagePatient as tp left join masterEmail as me on tp.master==me.master
as triagePatientWithEmail;
select first(email) as x,
avg(patientNum) as patientEveryDay,master,first(email) as email,
"bar" as dash
from triagePatientWithEmail
group by master
order by patientEveryDay desc
as output;
save overwrite triagePatientWithEmail as excel.`/tmp/triagePatientWithEmail.xlsx`;