【復(fù)習(xí)】mysql+python基礎(chǔ)應(yīng)用(20190815)

一丝蹭、mysql:

1.1深入淺出:
  • 數(shù)據(jù)分析的典型四步驟:確定問(wèn)題(心智模型 )→分解問(wèn)題→評(píng)估數(shù)據(jù)→做出決策
    (CRISP-DM(cross-industry standard process for data mining) 模型:商業(yè)理解→數(shù)據(jù)理解→數(shù)據(jù)準(zhǔn)備→建立模型→模型評(píng)估→發(fā)布模型)

  • 貝葉斯統(tǒng)計(jì)宵荒,在自己被診斷為陽(yáng)性的情況下分俯,患陽(yáng)的概率县钥。
    實(shí)際就是recall和precision的問(wèn)題,我想知道precision违诗,預(yù)測(cè)的精度是90%(100個(gè)有90個(gè)是準(zhǔn)的)牧牢,那我就有90%的概率是陽(yáng)性咯。但實(shí)際只知道recall誓沸,即陽(yáng)性患者梅桩,能被診斷出來(lái)的概率為95%(100個(gè)陽(yáng)性,模型能診斷出來(lái)95個(gè))拜隧,所以需要貝葉斯轉(zhuǎn)換啊宿百。

  • 主觀(guān)概率,講的有點(diǎn)是皮爾遜相似度的問(wèn)題虹蓄,就是說(shuō)兩個(gè)人意見(jiàn)相差很大(比如對(duì)電影的評(píng)價(jià))犀呼,但實(shí)際上很有可能是因?yàn)閮扇说臉?biāo)準(zhǔn)偏差很大,A對(duì)電影整體就是比較寬容薇组,B對(duì)電影整體就是比較嚴(yán)苛外臂。用主觀(guān)概率律胀,就能比較直觀(guān)地比較宋光。

1.2 必知必會(huì):
  • 順序是賓 where 狀groupby 然后是orderby 最后才是主(最后主語(yǔ)選出來(lái)的哪怕沒(méi)有orderby的關(guān)鍵字貌矿,也是會(huì)先經(jīng)過(guò)排序再顯示)。
    ps:有join聯(lián)結(jié)的時(shí)候罪佳,where統(tǒng)一放在on的后面逛漫,不然會(huì)報(bào)錯(cuò)
  • 主:檢索列/行的基本用法;處理:concat赘艳、as酌毡、算數(shù)計(jì)算和函數(shù)計(jì)算、日期計(jì)算(常用select day(...)/year(...)/date(...))蕾管、文本處理(常用 select Ltrim(...) /upper(...))

  • 賓:where的基本用法:and or組合邏輯枷踏、in/not in篩選邏輯、控制檢查null掰曾、剩下過(guò)濾的問(wèn)題:
    a. 通配符like旭蠕,完全匹配“where prod_name like 'jet'、限定匹配“where prod_name like 'jet_'旷坦、任意匹配“where prod_name like 'jet%'.
    ..............................
    b.正則表達(dá)式regexp掏熬,首先說(shuō)明一點(diǎn),like的話(huà)是必須完全匹配才會(huì)返回秒梅,regexp是列名中含有表達(dá)式則返回旗芬,如果要完全匹配的話(huà),要配合定位符使用(加一個(gè)首定位符和尾定位符就可以了)番电。完全匹配“where prod_name regexp 'jet'岗屏、限定匹配“where prod_name like 'jet.'(正則里面變成了.)、任意匹配可以用.* 的方法漱办,實(shí)際上正則比通配符優(yōu)勢(shì)的地方就在于他對(duì)任意匹配的控制到了隨意的地步:
    匹配范圍:or匹配:“where prod_name regexp 'jet[0-9]'或者“where prod_name regexp 'jet[1|2|3|4|5|6|7|8|9]'或者“where prod_name regexp 'jet[:digit:]'这刷;特殊字符匹配“where prod_name regexp 'jet\.'(匹配jet.)以及其他的符號(hào)匹配(比如什么換行符 制表符)
    匹配限定:個(gè)數(shù):*任意個(gè)數(shù)、+至少1個(gè)娩井、暇屋? 0或者1個(gè)、{n} 制定n個(gè)數(shù)目匹配洞辣,{n咐刨,}至少n個(gè),{n,m}n~m個(gè)扬霜; 位置限定^ 開(kāi)始(放在[]里面表示否定定鸟,比如[^1-9]表示不匹配1-9),$結(jié)尾
    ..............................
    c.全文本搜索match against:首先是要建表的時(shí)候采用myisam引擎開(kāi)啟fulltext才可以建立索引并搜索(或者用布爾搜索進(jìn)行強(qiáng)行搜索)
    create table .....(....., fulltext(note_text))engine=myisam著瓶。
    采用match against進(jìn)行匹配 where match(note_text) against('jet')等同于where note_text like '%jet%'联予。如果只是match against的話(huà),相比正則表達(dá)式,會(huì)更智能沸久,因?yàn)闀?huì)按一定順序返回季眷,排名方式是按照匹配到的目標(biāo)的多少。真正厲害的方法是采用布爾搜索模式where match(note_text) against('jet' in boolean mode)卷胯,可以支持查詢(xún)擴(kuò)展(根據(jù)關(guān)鍵詞引申查詢(xún)其他相關(guān)項(xiàng))以及除了匹配子刮,還可以直接限定非匹配,等等功能窑睁。

  • 狀:group by :group by +having的組合

  • 最后:orderby:desc asc

  • 其他細(xì)則:
    聯(lián)結(jié)概念挺峡,除了where聯(lián)結(jié)、join聯(lián)結(jié)卵慰,還可以用union聯(lián)結(jié)沙郭,在很復(fù)雜的表達(dá)力佛呻,union聯(lián)結(jié)可能會(huì)更簡(jiǎn)單裳朋,因?yàn)椴挥每紤]邏輯。
    ..............................
    便捷功能:
    視圖(就是打包的select語(yǔ)句):create view xxx as xxx吓著。鲤嫡。。
    存儲(chǔ)(就是def 函數(shù)绑莺,允許輸入輸出參數(shù)):create procedure xxx() begin... end暖眼; 要執(zhí)行的時(shí)候用call: call xxx();
    游標(biāo)(指向一個(gè)select語(yǔ)句纺裁,一般是配合存儲(chǔ)過(guò)程使用的诫肠,而且會(huì)用repeate來(lái)反復(fù)select):declare XXXX cursor for select.....。執(zhí)行游標(biāo)就用open...fetch...close 欺缘。配合repeate有固定套路栋豫。
    觸發(fā)器:就是delete insert update語(yǔ)句,在指定時(shí)候觸發(fā):create trigger XXX after XXXX for XXXXX谚殊。
    事務(wù)管理transaction:回退rollback丧鸯、提交commit、保留點(diǎn)savepoint嫩絮。

1.3 經(jīng)典50題
  • sum+case的用法:


    image.png
  • 排序問(wèn)題:
    a. 允許rank()over函數(shù):
    a.1 有相同排名丛肢,則名次要空缺,不連續(xù)編號(hào):
    select sc.sid,rank()over(order by sc.score desc)rank01 from sc where sc.cid='01')
    ..............................
    a.2 有相同排名剿干,也連續(xù)編號(hào)(dense_rank):
    select sc.sid,dense_rank()over(order by sc.score desc)rank01 from sc where sc.cid='01')
    ..............................
    a.3 組內(nèi)排名:
    select sc.sid,rank()over(partition by sc.cid order by sc.score desc)rank01 from sc where sc.cid='01')
    ..............................
    ..............................
    b. 不允許rank()over函數(shù):
    b.0 無(wú)相同排名:
    select sid,score,(@a:=@a+1) rank01 from (select * from sc where cid=01 order by score desc)scc,(select @a:=0) a;
    上面這種寫(xiě)法蜂怎,實(shí)際上只適用于無(wú)相同排名
    b.1 有相同排名,則名次要空缺置尔,不連續(xù)編號(hào):(一旦有相同排名杠步,就用聯(lián)結(jié)的方式更簡(jiǎn)單)
    思路:先按無(wú)相同排名排名,再groupby取排名最小值,再聯(lián)立
    select sid,sc.score,rank01 from sc,(select score, min(rank01) rank01 from (select score,(@a:=@a+1) rank01 from (select * from sc where cid=01 order by score desc)scc,(select @a:=0) a)c group by score)d where sc.cid=01 and sc.score=d.score order by rank01 asc;


    image.png

    感覺(jué)寫(xiě)的有點(diǎn)復(fù)雜篮愉,思考了一下腐芍,如果用兩表聯(lián)立的方法,來(lái)找比自己高的數(shù)目(或者低的數(shù)目)來(lái)排名试躏,更簡(jiǎn)單猪勇,但要小心有兩個(gè)第一名的情況,比如說(shuō)如果有兩個(gè)第一名颠蕴,那么大于等于自身分?jǐn)?shù)的會(huì)有兩個(gè)值泣刹,rank自動(dòng)會(huì)是2:
    select a.sid,(count(*))rank01 from sc a,sc b where a.cid=01 and b.cid=01 and a.score<=b.score group by a.sid;
    這種情況你怎么都不好調(diào)整,因?yàn)槟阒挥械谝幻呐琶清e(cuò)誤的犀被,后面的排名都是對(duì)的椅您。。寡键。


    image.png

用left join也不能完美解決這個(gè)問(wèn)題(我真的試過(guò)了)

用自聯(lián)結(jié)+sum case是很通用的方法:
select a.sid,(sum(case when a.score <b.score then 1 else 0 end)+1)rank01 from sc a,sc b where a.cid=01 and b.cid=01 group by a.sid;


image.png

..............................
b.2 有相同排名掀泳,也連續(xù)編號(hào)(dense_rank):
思路:先distinct分?jǐn)?shù)排名,再聯(lián)結(jié)
..............................
b.3 組內(nèi)排名:
思路1:先分組西轩,再排序员舵,再u(mài)nion一起;
思路2:自聯(lián)結(jié)+left join/sum case+groupby

總結(jié)下排序問(wèn)題:在允許rank()over的情況下就盡情使用藕畔,不允許的話(huà):1马僻、@a:=@a+1方法比較粗暴,但是寫(xiě)起來(lái)有點(diǎn)復(fù)雜注服;2韭邓、如果沒(méi)有兩個(gè)第一名,用聯(lián)結(jié)+count()的方法是最簡(jiǎn)單的方法溶弟;3女淑、如果有兩個(gè)第一名,用聯(lián)結(jié)+sum case是通用的方法可很,也是最不會(huì)錯(cuò)的方法诗力。

1.4 leecode
  • ifnull函數(shù)

  • 聚集函數(shù)不能用in匹配

delete from person where id not in (select min(id) id from person group by email);

是錯(cuò)誤的,因?yàn)閙in(id)是聚集函數(shù)我抠,外面還得再包一層select * from

  • 善用case+when else end的組合(基本上難題都是靠這個(gè)解決)

  • 排序苇本,能用limit(offset)就用limit,不然就是自連接(比sum case簡(jiǎn)單)菜拓,不行再用sum case

二瓣窄、python

2.1 python菜鳥(niǎo)+應(yīng)用

看多少遍都不為過(guò),要經(jīng)常復(fù)習(xí)
tips:多行注釋用ctrl+/纳鼎,或者打三引號(hào)

2.1.1 7大類(lèi)型(6+1)

number,string,tuple是不可變類(lèi)型
list,set,dictionary是可變類(lèi)俺夕。

  • number
    兩點(diǎn):
    a.分為int,float,bool,complex,并且可以互相轉(zhuǎn)換
    b.number必然會(huì)涉及運(yùn)算裳凸,傳統(tǒng)的運(yùn)算是在math模塊里面,但是現(xiàn)在直接用 numpy就可以涵蓋全了劝贸。

  • 字符串
    四點(diǎn):
    a.轉(zhuǎn)義字符的使用\n(順便說(shuō)一句姨谷,用\n可以實(shí)現(xiàn)字符串換行,但是格式上并不簡(jiǎn)潔映九,可以用三引號(hào)的方式梦湘,在里面直接換行)
    b.常用運(yùn)算符:+ 、*件甥、[]切片
    c.字符串格式化s%捌议,如果是數(shù)值格式化,常用%d和%f


    image.png

    d.其他常用函數(shù):upper、capitalize引有、lstrip(mysql是ltrim 瓣颅,一個(gè)是trim,一個(gè)是strip)譬正、全局函數(shù)len和del(基本上所有類(lèi)型都可以用的)...

  • list
    兩點(diǎn)
    a.list和str的區(qū)別在于list是可變的宫补,所以除了str具備的基本特征(+、*預(yù)算符等)导帝,還有一些自建函數(shù)和全局函數(shù)進(jìn)行數(shù)據(jù)更新守谓,常用:list.count(obj)、list.sort( reverse=False)以及增刪查改等等您单。
    b.因?yàn)閘ist可變同時(shí)可索引,因此應(yīng)用是最廣泛的荞雏,經(jīng)常當(dāng)堆棧使用(append和pop)虐秦,還有自己具有強(qiáng)大而又漸變的列表推導(dǎo)式功能:


    image.png
  • tuple
    和列表的區(qū)別在于,不允許更改凤优,所以是沒(méi)有更改數(shù)據(jù)的自建函數(shù)的悦陋,可以用全局函數(shù)進(jìn)行運(yùn)算。

  • set集合
    兩點(diǎn):
    a.set有兩種生成方式筑辨,一種是直接生成俺驶,一種是利用str或者tuple轉(zhuǎn)化,參見(jiàn)以下三種區(qū)別:


    image.png

    b.集合的增刪查改

  • 字典dict
    兩點(diǎn):
    a.沒(méi)有順序之說(shuō)棍辕,只有key和value的鏈接
    b.增刪查改的幾個(gè)函數(shù)都比較重要

  • 其他
    NoneType:a=None (mysql是null)
    bytes:a=b'sdfsdf' (就是采用ASCII編碼的str暮现!)

增刪查改看這個(gè)表

image.png

2.1.2 運(yùn)算符

7種運(yùn)算符類(lèi)型:


image.png

需要注意的是,兩個(gè)數(shù)值的時(shí)候 &楚昭、|是位運(yùn)算栖袋,如果是邏輯變量,&抚太、|可以當(dāng)邏輯運(yùn)算符塘幅,而且實(shí)際應(yīng)用其實(shí)更廣泛昔案,尤其是在dataframe的時(shí)候,很多時(shí)候都只能用這種邏輯運(yùn)算电媳,不能用and和or踏揣。

2.1.3 控制與循環(huán)
  • 循環(huán)語(yǔ)句
    主要是三點(diǎn):
    a.if else循環(huán);
    b.while else循環(huán)匾乓;
    c.for else循環(huán)(用得很少呼伸,基本上是用來(lái)判定for循環(huán)的內(nèi)容里面有沒(méi)有想要的內(nèi)容,沒(méi)有的話(huà)就break跳出钝尸,不執(zhí)行else括享,有的話(huà)就順帶執(zhí)行下else語(yǔ)句,表明有想要的內(nèi)容)
  • 迭代器和生成器
    通常都是用range來(lái)進(jìn)行迭代了珍促,iter迭代器和yield生成器暫時(shí)都用不著铃辖,有簡(jiǎn)單的方法干嘛用復(fù)雜的呢。
2.1.4 函數(shù)
2.1.4.1 基礎(chǔ)問(wèn)題
  • 可變對(duì)象和不可變對(duì)象的參數(shù)傳遞問(wèn)題


    image.png

    總結(jié)起來(lái)就是猪叙,不可變對(duì)象number娇斩、string、tuple傳入函數(shù)穴翩,只是把值傳進(jìn)去犬第,無(wú)論函數(shù)內(nèi)部怎么操作,元數(shù)據(jù)都不會(huì)受到影響芒帕。

  • 幾種傳入?yún)?shù)
    分別是必須參數(shù)/關(guān)鍵字參數(shù)歉嗓、默認(rèn)參數(shù)、不定長(zhǎng)參數(shù)(一個(gè) * 以tuple存儲(chǔ)背蟆,兩個(gè) * 以dict儲(chǔ)存)

  • 匿名函數(shù)
    summ=lambda a,b:a+b (就是不要搞忘就行了)

2.1.4.2 內(nèi)置常用函數(shù)

(這個(gè)很重要鉴分,其實(shí)介紹完幾個(gè)類(lèi)型之后,就應(yīng)該介紹這個(gè)的带膀,這幾個(gè)基本上都是適用于list的志珍,因?yàn)閘ist迭代和索引起來(lái)都最方便)

  • 取整求余
    求余:x%2 →→mysql是mod(x,2)
    四舍五入:round(x) →→mysql一樣
    向下取整:int(x) 或者math.floor(x) →→mysql是:floor(x)
    向上取整:int(x)+1或者math.ceil(x) →→mysql一樣

  • enumerate
    配合list使用,成為迭代器(相當(dāng)于range垛叨,或者iter)伦糯,但他會(huì)返回兩個(gè)值,一個(gè)是list的索引嗽元,一個(gè)是值:


    image.png
  • sorted
    跟list.sort類(lèi)似

  • reversed
    跟list.reverse類(lèi)似

  • zip
    配合list使用敛纲,很好用。比起zip()的用法还棱,更好用的是zip(*)的用法载慈,可以方便地處理多維矩陣:


    image.png
  • map(很方便!)
    配合list使用珍手!


    image.png
  • join和split方法
    https://blog.csdn.net/qq_38786209/article/details/78304974
    雖然str用的比較多办铡,但是list,tuple,dict都能用

    image.png

2.1.5 模塊

就三點(diǎn):

  • 模塊的導(dǎo)入方式
  • 最常見(jiàn)的sys模塊辞做,含有模塊搜索路徑
  • dir()查看模塊所有定義(目前基本上用不到),name的用法(用于判定是引用的模塊寡具,還是自身函數(shù)):
    image.png
2.1.6 輸入輸出
  • 格式美化問(wèn)題秤茅,str.format()是新的格式方式,%是舊的格式方式(額童叠。框喳。)
  • 讀寫(xiě)文件問(wèn)題
    open→read/write→close


    image.png

    常用的幾種模式:
    r→只讀
    w→只寫(xiě),原有內(nèi)容會(huì)被刪除
    r+→讀寫(xiě)
    w+→讀寫(xiě)厦坛,原有內(nèi)容會(huì)被刪除

2.1.7 其他
  • 錯(cuò)誤和異常:try +except+else+raise語(yǔ)句五垮;清理行為,一種是在最后使用finally語(yǔ)句保證完成清理杜秸,一種是有些模塊有標(biāo)準(zhǔn)清理行為放仗,用with使用(比如open模塊有close的清理行為,避免打開(kāi)文件后忘記關(guān)閉)
  • 面向?qū)ο?br> 三點(diǎn):
    a.面向?qū)ο蟮木柙谟诳梢岳^承撬碟,子類(lèi)繼承父類(lèi)诞挨,甚至可以更改父類(lèi);
    b.類(lèi)化和實(shí)例化的區(qū)別呢蛤,x = MyClass(2)就是實(shí)例化惶傻,(把需要的參數(shù)都輸入進(jìn)去了,不就是實(shí)例么其障,參數(shù)也可以是空)银室,x = MyClass就是類(lèi)化。class定義里面肯定有一個(gè)init静秆,是對(duì)參數(shù)進(jìn)行傳遞:
    image.png

    上面粮揉,def init(self,n,a,w)就是將具體參數(shù)如的參數(shù)n賦值給name,a賦值給age抚笔,w賦值給__weight,具體利用這些參數(shù)怎么用侨拦,則需要進(jìn)一步定義殊橙,比如下面的def speak(self)。(思路總算是清晰一點(diǎn)了狱从,要先用init將所有參數(shù)賦值膨蛮,再針對(duì)各種參數(shù)進(jìn)行函數(shù)定義)
  • 常用模塊:
    math模塊,datetime模塊季研,smtplib模塊敞葛,sys模塊...
2.2 pandas
2.2.1 基本操作
  • 文件讀取
    df1=pd.read_csv('/desktop/xxx.csv')

  • 兩種數(shù)據(jù)結(jié)構(gòu) dataframe和series
    dataframe和series的主要區(qū)別在于一個(gè)是多維,一個(gè)是一維(當(dāng)然dataframe也可以是一維与涡,比如series自帶的to_frame函數(shù)轉(zhuǎn)化成dataframe)惹谐;次要區(qū)別在于series有一些自己的函數(shù)持偏,比如series.map(....),map就只能對(duì)一維使用氨肌,多維的話(huà)就只能用apply吧鸿秆。
    a.讀取的文件會(huì)被自動(dòng)轉(zhuǎn)化為dataframe
    b.用df=pd.DataFrame()或者df=pd.Series()創(chuàng)建結(jié)構(gòu)的話(huà),要注意index和column的制定(這個(gè)稍微查看下用法就知道了怎囚,避免自己忘了)
    c.一般將字典轉(zhuǎn)化為DataFrame比較多卿叽,因?yàn)椴挥弥贫╟olumns;另外一種就是將多維數(shù)組array或者多維列表list轉(zhuǎn)化為DataFrame恳守,但此時(shí)需要額外制定列名考婴;

  • 基本屬性查看
    df.columns/index/dtypes/shape/size/head/tail/describe
    series.value_counts()

ps,dtype顯示的類(lèi)型一般有int/float/bool/時(shí)間類(lèi)型/object類(lèi)型以及其他擴(kuò)展類(lèi)型催烘,所以如果是數(shù)值類(lèi)型他會(huì)明確顯示(int/float/bool沥阱,因?yàn)閜andas是基于numpy開(kāi)發(fā)的誒),其他的一般會(huì)顯示為object

  • 索引(索引就是index颗圣,一般都是指針對(duì)行的哈)
    https://www.cnblogs.com/jiaxin359/p/8995133.html
    a.常規(guī)索引喳钟,弄清楚df[0]和df[0:5]的區(qū)別,df[0]相當(dāng)于df.0在岂,df[0:5]相當(dāng)于df.iloc[0:5]
    b.loc索引,以行的名字進(jìn)行索引奔则,不存在切片操作,允許范圍操作蔽午,比如df.loc[10:15]易茬,會(huì)返回index為10,11及老,12抽莱,13,14的數(shù)據(jù)
    c.iloc索引骄恶,以行數(shù)進(jìn)行索引食铐,允許切片操作。
    ps僧鲁,經(jīng)常會(huì)用df.set_index進(jìn)行(多重)索引設(shè)置虐呻,不過(guò)建議用pivot_table來(lái)設(shè)置。寞秃。斟叼。

  • 常規(guī)數(shù)據(jù)清洗(增刪查改)操作
    先說(shuō)大宗旨:axis=1為列操作,最后以行形式展示,axis=0為對(duì)行操作春寿,最后以列形式展示朗涩,在pandas中一般會(huì)默認(rèn)為axis=0操作最后展示位列(符合csv表的數(shù)據(jù)處理習(xí)慣)
    a.增:
    兩種主要思路
    直接新增df['new column']=;多表聯(lián)結(jié)的方式
    b.刪:
    常規(guī)刪除:del df或者df.drop
    刪除重復(fù)行:df.drop_duplicates()或者df.drop([df.duplicated],axis=0)
    這里的duplicate都是對(duì)行數(shù)據(jù)而言的。(如果要?jiǎng)h除列绑改,用drop可以完成谢床,但如果是刪除重復(fù)列兄一,考慮先轉(zhuǎn)置,再刪除萤悴,再還原)
    刪除缺失值:df.dropna(),或者先用df.isnull檢測(cè)再刪除
    c.查
    索引方法
    d.改
    常規(guī)更改:用索引的方法更改列或者行
    填充:用df.fillna()填充缺失值(有很多填充方法)

  • 函數(shù)計(jì)算
    下面講的是針對(duì)groupby后的函數(shù)計(jì)算瘾腰,但實(shí)際上很多計(jì)算是可以單獨(dú)使用的哈。
    a.groupby的基本使用和基本計(jì)算:
    df.groupby(by='A').sum()
    b.groupby后的復(fù)雜函數(shù)使用(各種復(fù)雜函數(shù)也是可以單獨(dú)使用的):
    https://blog.csdn.net/zwhooo/article/details/79696558
    df.groupby().agg()覆履,agg里面接的是內(nèi)置函數(shù)
    df.groupby().tansform(),series的單列計(jì)算蹋盆,允許匿名函數(shù)
    df.groupby().apply()龙填,多列計(jì)算盏筐,允許匿名函數(shù)
    df.groupby().map()氢烘,series單個(gè)元素計(jì)算(本質(zhì)就跟內(nèi)置map一樣的)猎塞,允許匿名函數(shù)
    df.groupby().applymap(),多列所有元素計(jì)算徽鼎,允許匿名函數(shù)

  • 表聯(lián)結(jié)
    https://www.cnblogs.com/bawu/p/7701810.html
    pd.concat()和pd.merge()

  • 文本處理
    這個(gè)其實(shí)是針對(duì)series的慷垮,用到的很少绵患,series本身的字符串方法和python內(nèi)置方法也差不多凳厢,比如series.str.split和' '.split()是一個(gè)用法账胧。
    比較常用的就是join、split先紫、lstrip治泥、rstrip之類(lèi)的
    https://blog.csdn.net/qq_28219759/article/details/52919233

2.2.2 實(shí)際應(yīng)用中常用的函數(shù)
  • 利用pivot_table進(jìn)行透視
    透視其實(shí)就是表的重建,利用pivot_table特別方便可以構(gòu)造復(fù)合index和columns(以后要構(gòu)建復(fù)合index和columnes可以?xún)?yōu)先考慮透視方法)


    image.png
  • stack和unstack
    看似和pivot_table一樣遮精,其實(shí)還是很不一樣居夹,pivot_table無(wú)論怎么透視,都是dataframe本冲,相當(dāng)于改變分組方式准脂;stack是將dataframe完全展開(kāi)為series。
    另外還有一個(gè)series.to_frame()的方法檬洞,把series轉(zhuǎn)化為dataframe:


    image.png

    所以如果要進(jìn)行表的透視狸膏,pivot_table是最方便的,但用stack+to_frame的方法也能夠取得類(lèi)似的效果添怔,就是不夠方便环戈;
    如果只是想dataframe變?yōu)閟eries的話(huà),stack就方便多了澎灸;

  • isnull函數(shù)查看有多少空值
    df.isnull().sum()

  • isin函數(shù)
    媽呀,竟然還有這個(gè)函數(shù)遮晚,相當(dāng)于sql的 where xxx in xxx
    df.['columns'].isin(xxx)

2.3 numpy(數(shù)據(jù)分析用的很少性昭,可能在數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)才會(huì)多)
  • 創(chuàng)建
    a.用list轉(zhuǎn)化:arr=np.array(list)
    b.自行創(chuàng)建:arr=np.zeros()。县遣。糜颠。x=np.linspace()等等就看你想創(chuàng)建什么形式的汹族。(np.linspace()在畫(huà)圖的時(shí)候用的很多,用于生成x軸數(shù)據(jù))
    ps:常用隨機(jī)數(shù)創(chuàng)建


    image.png
  • 常用屬性和基本方法
    a.屬性查看:size/shape/len
    b.shape改變方法:鋪平flatten/ravel其兴,reshape顶瞒,T
    ps,看到數(shù)組的鋪平想起list的鋪平元旬,list是沒(méi)有內(nèi)置函數(shù)提供直接的鋪平方式的榴徐,不過(guò)可以用循環(huán)語(yǔ)句依次鋪平,或者就把list轉(zhuǎn)化為array再鋪平

  • 基本數(shù)值運(yùn)算
    umm...就那些吧
    sum/mean/std/max/min
    以及數(shù)組間運(yùn)算匀归,不過(guò)現(xiàn)在都還沒(méi)遇到

  • 索引
    跟dataframe一樣的

2.4 可視化
  • 最基本屬性
    a.導(dǎo)入模塊指令:import matplotlib.pyplot as plt
    b.在線(xiàn)現(xiàn)實(shí)圖像指令:%matplotlib inline
    c.全局性參數(shù)plt.rcParams里面坑资,通常要進(jìn)行設(shè)置的有:


    image.png
  • 圖表類(lèi)型


    image.png
  • 畫(huà)布屬性控制
    分圖:plt.subplot()配合axes坐標(biāo)軸參數(shù)畫(huà)圖
    標(biāo)題:plt.title()
    坐標(biāo)軸范圍:plt.xlim() 和plt.ylim()
    坐標(biāo)軸刻度:plt.xticks()和plt.yticks()
    注釋?zhuān)簆lt.text() 和plt.annotate()(這個(gè)是指向性注釋?zhuān)?/p>

  • 圖像內(nèi)置屬性控制(有的有,有的沒(méi)有)
    color:c穆端、width寬度袱贮、alpha透明度、s面積

  • pandas api
    兩種方法畫(huà)圖
    a. df.plot.scatter()/bar()/hist()用屬性的方法畫(huà)圖
    b. df.plot(kind='box')用通用的方法畫(huà)圖

  • seaborn api
    import seaborn as sns導(dǎo)入模塊
    a.圖像類(lèi)型:


    image.png

    b.利用seaborn做簡(jiǎn)單回歸分析


    image.png

    image.png

三体啰、常用排序算法

  • 二分查找
    list已經(jīng)完成正序排序攒巍,從中間找起+遞歸函數(shù)
  • 線(xiàn)性查找
    挨個(gè)找,簡(jiǎn)單粗暴
  • 插入排序
    挨個(gè)把list中的數(shù)據(jù)排好荒勇,新的list數(shù)據(jù)柒莉,從后往前對(duì)比,每對(duì)比一個(gè)枕屉,原來(lái)的數(shù)據(jù)往后挪一個(gè)常柄。
  • 快速排序
    選定基準(zhǔn)值→小于基準(zhǔn)值的放在左邊的list,大于基準(zhǔn)值的放在右邊的list→反復(fù)遞歸
  • 選擇排序
    最簡(jiǎn)單粗暴的一種搀擂,把最小的放在第一位西潘,把次小的放在第二位。哨颂。喷市。
  • 冒泡排序
    冒泡的本質(zhì)是,小的數(shù)不斷往上冒威恼,最大的數(shù)會(huì)沉在最下面品姓。。箫措。(所以其實(shí)我會(huì)理解為下沉排序)
    1號(hào)2號(hào)比較腹备,把更大值放到2號(hào),2號(hào)再與3號(hào)比較斤蔓。植酥。。第一輪沉完→反復(fù)遞歸完畢
  • 歸并排序
    先比較2個(gè),再比較2個(gè)友驮,再組合起來(lái)比較這4個(gè)→再和另外4個(gè)組合起來(lái)比較8個(gè)(另外4個(gè)也要先比較2個(gè)2個(gè))漂羊。。卸留。umm走越。。耻瑟。
  • 堆排序(二叉樹(shù)排序)
    原理是:先排一個(gè)無(wú)序堆→再?gòu)牡箶?shù)第二層子節(jié)點(diǎn)開(kāi)始調(diào)整(把大的往上調(diào))旨指,如果調(diào)整了一個(gè)子節(jié)點(diǎn),要對(duì)下面的非底層子節(jié)點(diǎn)進(jìn)行遞歸判定和調(diào)整→第一輪排完之后父節(jié)點(diǎn)就是最大值匆赃,將其放到list最后一位淤毛,把底層子節(jié)點(diǎn)的最后一位拿到父節(jié)點(diǎn)來(lái),再進(jìn)行判定
    所以理論上有三個(gè)步驟:
    a.創(chuàng)建原始堆的函數(shù)算柳,這個(gè)不用管嘛低淡,就是list本身的索引位置;
    b.從倒數(shù)第二層開(kāi)始調(diào)整瞬项,確定第一個(gè)父節(jié)點(diǎn)蔗蹋;
    c.可以反復(fù)遞歸的從上而下調(diào)整的函數(shù)heapify(父節(jié)點(diǎn)要調(diào)整的話(huà),還要檢查調(diào)整后的子節(jié)點(diǎn)下面是否還需要調(diào)整)囱淋。
    b步驟猪杭,實(shí)際也可以用heapify函數(shù),只用依次從底層把小堆用heapify調(diào)整好妥衣,再對(duì)上一層節(jié)點(diǎn)用heapify皂吮,直到到達(dá)頂層為止。
    所以關(guān)鍵就在于heapify函數(shù)税手。蜂筹。
  • 計(jì)數(shù)排序
    犧牲空間換時(shí)間,額外建立兩個(gè)數(shù)組芦倒,一個(gè)數(shù)組生成一組固定數(shù)據(jù)(已經(jīng)排序號(hào))艺挪,一個(gè)數(shù)組用來(lái)記錄原始list在固定數(shù)據(jù)組中出現(xiàn)的次數(shù)(所以肯定會(huì)有些是0),最后再釋放出來(lái)
  • 希爾排序
    插入排序的改進(jìn)版本兵扬,但是不穩(wěn)定麻裳,有可能會(huì)比排序算法花費(fèi)時(shí)間更多。
    第一次以lenth/2為間隔器钟,對(duì)所有數(shù)據(jù)進(jìn)行分組調(diào)序(一共lenth/2組)→第二次以lenth/4為間隔津坑,對(duì)所有數(shù)據(jù)分組判斷,當(dāng)需要調(diào)序時(shí)傲霸,需要以lenth/4為間隔往前傳遞直到不再調(diào)序位置(因?yàn)榍胺叫蛄幸呀?jīng)是對(duì)的国瓮,所以到某一處不用再調(diào)序,也就不用往前推了)→第三次以lenth/8為間隔。乃摹。「疲→最后以1位間隔依次分組判斷孵睬,以及往前傳遞。最后排序完成伶跷。 需要注意掰读,每次如果有兩個(gè)數(shù)進(jìn)行了調(diào)序,那么要繼續(xù)往前回推看前面的數(shù)需不需要調(diào)序(就跟堆排序的父節(jié)點(diǎn)發(fā)生改變叭莫,要檢查子節(jié)點(diǎn)一樣)
  • 拓?fù)渑判?br> 暫時(shí)不管了吧蹈集,圖排序方法

四、兩個(gè)案例分析

  • 構(gòu)建NaN值的方法
    float('NaN')/float('nan')雇初,所以這好像是唯一構(gòu)建Nan值的方法


    image.png

五拢肆、python和mysql的時(shí)間函數(shù)及字符串函數(shù)比較

http://www.reibang.com/p/52fb1f812286
http://www.reibang.com/p/91a1ecd57b0d

5.1 時(shí)間函數(shù)
  • 返回當(dāng)前日期
    mysql:select curdate(),current_date();


    image.png

    python:datetime庫(kù),或者time庫(kù)


    image.png
  • 返回當(dāng)前時(shí)間
    mysql:select curtime,current_time()


    image.png

    python:同上

  • 時(shí)間增加
    mysql:函數(shù)date_add(date,interval int keyword)或者函數(shù)adddate(date,interval int keyword)


    image.png

    image.png

    pthon:函數(shù)timedelta


    image.png
  • 時(shí)間減少
    mysql:函數(shù)date_sub(date,interval int keyword)或者函數(shù)adddate(date,interval int keyword),int為負(fù)就行
    python:函數(shù)timedelta
  • 時(shí)間日期的標(biāo)準(zhǔn)格式化
    mysql:select date_formate(date,'%Y-%m-%d %H-%i-%s')


    image.png

    python:datetime和time模塊都有函數(shù)strftime


    image.png
  • 返回日期函數(shù)的年靖诗、月郭怪、日等
    mysql:select year(now()), month(now()), day(now()), hour(now()), minute(now()), quarter(now());


    image.png

    python:


    image.png
5.2 字符串函數(shù)
  • 返回字符串長(zhǎng)度
    mysql:select lenth()
    python:len()
  • 連接字符串
    mysql:select concat('a','b')

    python:
    image.png
  • 替換字符
    mysql:INSERT(str,x,y,instr):將字符串str從第x位置開(kāi)始,y個(gè)字符長(zhǎng)的子串替換為字符串instr刊橘,返回結(jié)果;REPLACE(str,str1,str2):在字符串str中用str2替換掉str1


    image.png

    image.png

    python:
    image.png
  • 顛倒字符串
    mysql:select reverse('SQL');

    python:
    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鄙才,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子促绵,更是在濱河造成了極大的恐慌攒庵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件败晴,死亡現(xiàn)場(chǎng)離奇詭異浓冒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)位衩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)裆蒸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人糖驴,你說(shuō)我怎么就攤上這事僚祷。” “怎么了贮缕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵辙谜,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我感昼,道長(zhǎng)装哆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮蜕琴,結(jié)果婚禮上萍桌,老公的妹妹穿的比我還像新娘。我一直安慰自己凌简,他們只是感情好上炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著雏搂,像睡著了一般藕施。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凸郑,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天裳食,我揣著相機(jī)與錄音,去河邊找鬼芙沥。 笑死诲祸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的憨愉。 我是一名探鬼主播烦绳,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼配紫!你這毒婦竟也來(lái)了径密?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤躺孝,失蹤者是張志新(化名)和其女友劉穎享扔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體植袍,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惧眠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了于个。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氛魁。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厅篓,靈堂內(nèi)的尸體忽然破棺而出秀存,到底是詐尸還是另有隱情,我是刑警寧澤羽氮,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布或链,位于F島的核電站,受9級(jí)特大地震影響档押,放射性物質(zhì)發(fā)生泄漏澳盐。R本人自食惡果不足惜祈纯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叼耙。 院中可真熱鬧腕窥,春花似錦、人聲如沸旬蟋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)倾贰。三九已至,卻和暖如春拦惋,著一層夾襖步出監(jiān)牢的瞬間匆浙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工厕妖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留首尼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓言秸,卻偏偏與公主長(zhǎng)得像软能,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子举畸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類(lèi): pyspark.sql...
    mpro閱讀 9,446評(píng)論 0 13
  • 50個(gè)常用的sql語(yǔ)句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,225評(píng)論 0 7
  • Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cname,T#) 課程表 S...
    忘了呼吸的那只貓閱讀 2,837評(píng)論 0 8
  • mysql數(shù)據(jù)庫(kù)中 :database : 文件夾table : 數(shù)據(jù)表(數(shù)據(jù)文件) 進(jìn)入mysqlmysql -...
    賦閑閱讀 557評(píng)論 0 0
  • 說(shuō)明:以下五十個(gè)語(yǔ)句都按照測(cè)試數(shù)據(jù)進(jìn)行過(guò)測(cè)試查排,最好每次只單獨(dú)運(yùn)行一個(gè)語(yǔ)句。 問(wèn)題及描述: --1.學(xué)生表 Stud...
    lijun_m閱讀 1,288評(píng)論 0 1