<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何快速學(xué)會Python處理數(shù)據(jù)?(5000字走心總結(jié))

          共 8443字,需瀏覽 17分鐘

           ·

          2021-03-26 08:18

          多同學(xué)抱怨自己很想學(xué)好Python,但學(xué)了好久,書也買不少,視頻課程也看了不少,但是總是學(xué)了一段時間,感覺還是沒什么收獲,碰到問題沒思路,有思路寫不出多少行代碼,遇到報錯時也不知道怎么處理。


          從入門到放棄,這是很多學(xué)習(xí)python的同學(xué)常常掛在嘴邊上的口頭禪。今天我分享一些自己學(xué)習(xí)Python的心得,并用一個案例來說明python解決問題的基本思路和框架。


          01

          如何學(xué)好Python

          01

          明確自己的需求

          聽到別人說Python很牛很厲害,也想跟著學(xué),這樣的人肯定是學(xué)不好python的。沒有明確的需求和動力,就會導(dǎo)致你學(xué)python兩天打魚三天曬網(wǎng),沒有恒心也沒有決心。

          假如你有明確的需求,比如:
          • 老板讓我1周內(nèi)完成一個數(shù)據(jù)分析報告
          • 老板讓我1個月內(nèi)搭建一個自己的blog網(wǎng)站
          • 我要處理很多excel文件,我想寫一個腳本幫我自動處理
          • 我每天都在手動審核數(shù)據(jù)質(zhì)量,我想寫一個腳本代替我的日常工作
          • .......

          當(dāng)你面對這樣一些需求時,你還無法求助他人幫忙時,這個時候,你就必須學(xué)習(xí)Python來幫你處理了。

          02

          明確Python的學(xué)習(xí)方向

          Python的學(xué)習(xí)方向有很多,比如:
          • WEB方向
          • GUI方向
          • 數(shù)據(jù)處理方向
          • 數(shù)據(jù)分析方向
          • 人工智能方向
          • ......

          我是日常用Python主要做數(shù)據(jù)處理和數(shù)據(jù)分析工作,所以我選擇的是數(shù)據(jù)處理和數(shù)據(jù)分析方向,其他Python功能接觸的比較少。

          03

          掌握Python的基本語法

          • import模塊導(dǎo)入方法
          • 變量及基本數(shù)據(jù)類型
          • 循環(huán)和條件基本控制語句
          • 模塊內(nèi)嵌函數(shù)和自定義函數(shù)
          • ......

          不管你選擇了什么方向,Python的基本語法是必須掌握的。對于沒有編程經(jīng)驗的人,Python是一門非常適合入門的編程語言,因為它是高度封裝的,不需要對于底層特別了解,也能夠很好學(xué)習(xí)使用。python語法非常簡單,代碼可讀性高,對于零基礎(chǔ)的人來說更容易接受和使用。

          04

          掌握Python

          數(shù)據(jù)處理方法

          • 線性代數(shù)和統(tǒng)計學(xué)
          • Pandas/Numpy/Matplotlib模塊
          • 數(shù)據(jù)導(dǎo)入、存儲
          • 數(shù)據(jù)清洗和準(zhǔn)備
          • 數(shù)據(jù)規(guī)整:連接、聯(lián)合、重塑
          • 數(shù)據(jù)整合和分組操作
          • 時間序列數(shù)據(jù)操作
          • 繪圖和可視化

          利用Python做數(shù)據(jù)處理,線性代數(shù)和統(tǒng)計學(xué)這兩門基本理論知識還是要會點,線性代數(shù)你至少得需要知道矩陣和矩陣運算規(guī)則,統(tǒng)計學(xué)你至少要知道描述性統(tǒng)計。

          常用的Python數(shù)據(jù)處理模塊有Pandas和Numpy這兩個,這是必須要掌握的,另外,Matplotlib模塊是數(shù)據(jù)可視化模塊,也是必須會的。

          數(shù)據(jù)導(dǎo)入、清洗和準(zhǔn)備、規(guī)整、分組等操作,都是數(shù)據(jù)處理中常用的方法,平常對比Excel數(shù)據(jù)操作,Python都可以實現(xiàn),而且一行簡單的代碼,就可以操作比較復(fù)雜的數(shù)據(jù)處理方法。

          05

          多練!多練!多練!

          • 自己找些小作業(yè)練習(xí)
          • 解決平常工作中的問題
          • 可以嘗試輸出文章

          重要的事情說三遍,多練!多練!多練!

          Python和數(shù)據(jù)分析都是實踐學(xué)科,光學(xué)理論,不練習(xí),是不會有任何收獲的,學(xué)完之后不練就忘掉了。最好的方式,就是先掌握一點基礎(chǔ)語法,然后把Python融合到工作中,解決日常工作中碰到的問題。在解決問題的時候,你會碰到各種問題,可以去"百度"尋找答案。最后,要定期總結(jié)和輸出。

          特別提示,假如你沒有基礎(chǔ)或者基礎(chǔ)薄弱的話,建議工作期間不要嘗試用Python解決復(fù)雜的問題,這是一個很浪費時間的事情,中間各種問題,會讓你崩潰。最終Python沒學(xué)好,還耽誤了工作。所以,要利用工作之余的時間,把python基礎(chǔ)打扎實。

          02

          Python數(shù)據(jù)處理示例

          01

          安裝并搭建

          Python環(huán)境

          首先,需要安裝python,我要推薦Anaconda3,從事數(shù)據(jù)分析的伙伴們,嚴(yán)重推薦此軟件!

          Anaconda降低了數(shù)據(jù)分析初學(xué)者的學(xué)習(xí)門檻,因為這個軟件自帶了python中大概有1000多個數(shù)據(jù)科學(xué)包,讓你無需單獨學(xué)習(xí)每個庫的安裝方法。另外,還自帶了Jupter notebook代碼編譯器。現(xiàn)在,Anaconda和Jupyter notebook已成為數(shù)據(jù)分析的標(biāo)準(zhǔn)環(huán)境。

          具體的安裝方法參考如下鏈接:
          https://mp.weixin.qq.com/s/53-KvHGYqCSx8qtUnub_vw

          安裝完成后,打開Jupter Notebook,就可以在上面輸入代碼。

          02

          問題說明

          現(xiàn)在工作中面臨一個批量化文件處理的問題:就是要把每個二級文件下csv文件合并到一個數(shù)據(jù)表里,同時要在最終的數(shù)據(jù)表里增加兩列,一列是一級文件目錄名稱,另一列是二級文件目錄名稱。

          • 總共有105個一級文件目錄
          • 每個一級文件下有若干個二級文件
          • 每個二級文件下有若干個csv格式的數(shù)據(jù)

          當(dāng)工作中,碰到這樣的問題時,我用最笨拙的方法——人工,一個一個文件整理,但是效率比較低,可能需要一個人一天的工作量。當(dāng)然,我也可以尋找技術(shù)的幫忙,找一個Java工程師,這個問題也很容易解決,但麻煩別人一次,沒問題。以后碰到類似的問題,總是麻煩,就不好了。假如自己掌握了Python,這個問題就變得很簡單了。

          03

          程序?qū)崿F(xiàn)

          其實這個問題,對于一個專業(yè)的Python程序員來說,是一個再簡單不過的問題。但是對于一個初學(xué)者來說,要解決這個問題,恐怕需要費一點時間和腦力。

          編程之前,我是如何思考的:
          1、首先,要讀取文件名稱,需要引入OS模塊下的listdir函數(shù)
          2、其次,遍歷所有一級、二級、三級文件名稱,需要用到for循環(huán)和循環(huán)嵌套
          3、然后,讀取文件下csv表,需要用到pandas模塊下的read_csv函數(shù)
          4、最后,整理合并后的所有表,需要用到DataFrame的操作方法

          實現(xiàn)代碼如下:
          #導(dǎo)入模塊
          import os
          import pandas as pd

          ##定義一個讀取文件名的函數(shù)
          def readname(a):
              filePath="D:\\\\ad_data\\\\"+a+"\\\\"
              name=os.listdir(filePath)
              return name

          #聲明初始變量
          a=""
          name= readname(a)
          data_new =pd.Dataframe()

          #循環(huán)遍歷文件名稱
          for i in name:
              name1=readname(i)
              for j in name1:
                  file_path = "D:\\\\ad_data\\\\"+i+"\\\\"+j+"\\\\"
                  name3=os.listdir(file_path)
                  for t in name3:
                      csv_path = "D:\\\\ad_data\\\\"+i+"\\\\"+j+"\\\\"+t
                      data=pd.read_csv(csv_path)
                      data['廣告主']=i
                      data['行業(yè)']=j
                      f = lambda x:x[0:7]
                      data['日期']=data['日期'].apply(f)
                      data['投放費用']=data['投放費用']/10000
                      data=data.drop(columns=['行業(yè)排名'])
                      data_new=data_new.append(data)
          #導(dǎo)出數(shù)據(jù)
          file = os.getcwd() + '\\ad.csv'
          data_new.to_csv(file, index=False,encoding='utf_8_sig')

          這段代碼雖然簡單,但基本攘括了Python的大部分基本語法,接下來我?guī)Т蠹乙灰唤馄氏逻@些基本語法。

          • import語句
          • 聲明變量
          • 數(shù)據(jù)導(dǎo)入和導(dǎo)出
          • 循環(huán)和嵌套循環(huán)
          • 模塊函數(shù)調(diào)用
          • 自定義函數(shù)
          • Lambda表達(dá)式
          • Dataframe及操作

          03

          Python基本語法詳解

          01

          import詳解

          下面程序使用導(dǎo)入整個模塊的最簡單語法來導(dǎo)入指定模塊:
          import os #導(dǎo)入OS模塊
          import pandas as pd #導(dǎo)入pandas模塊

          使用Python進(jìn)行編程時,有些功能沒必須自己實現(xiàn),可以借助Python現(xiàn)有的標(biāo)準(zhǔn)庫或者其他人提供的第三方庫。像OS和pandas,都是標(biāo)準(zhǔn)庫,導(dǎo)入后,就可以在程序中使用其模塊內(nèi)的函數(shù),使用時必須添加模塊名作為前綴。
          name3=os.listdir(file_path) #導(dǎo)入os模塊下的listdir函數(shù)

          假如模塊名長,就可以取別名,比如pandas模塊,取別名為pd。像os模塊,由于比較簡短,就沒有取別名。別名的作用,就是調(diào)用該模塊下的函數(shù)時,減少代碼的復(fù)雜度。
          import pandas as pd
          data=pd.read_csv(csv_path)

          02

          數(shù)據(jù)導(dǎo)入和導(dǎo)出

          數(shù)據(jù)的導(dǎo)入是數(shù)據(jù)處理和分析的第一步,日常我使用的比較多的是利用pandas進(jìn)行數(shù)據(jù)輸入和輸出,盡管其他庫中也有許多工具可幫助我們讀取和寫入各種格式的數(shù)據(jù)。

          將表格型數(shù)據(jù)讀取為DataFrame對象是pandas的重要特性
          • read_csv(csv文件輸入函數(shù))
          • read_table(文本文件輸入函數(shù))
          • to_csv(數(shù)據(jù)輸出函數(shù))
          #遍歷所有文件路徑,讀取所有文件下csv文件數(shù)據(jù)
          csv_path = "D:\\\\ad_data\\\\"+i+"\\\\"+j+"\\\\"+t
          data=pd.read_csv(csv_path)
          當(dāng)然,數(shù)據(jù)的輸入,也有與數(shù)據(jù)庫交互讀取數(shù)據(jù),也有與WEB API交互讀取數(shù)據(jù),這個是屬于進(jìn)階的內(nèi)容,后期帶大家學(xué)習(xí)。

          03

          聲明變量

          變量是Python語言中一個非常重要的概念,其作用就是為Python程序中的某個值起一個名字。類似于"張三"、"李四"一樣的名字。在Python語言中,聲明變量的同時需要為其賦值,畢竟不代表任何值的變量毫無意義。
          a="" #聲明一個空字符類型
          data_new =pd.Dataframe() #聲明一個空數(shù)據(jù)集格式

          聲明變量非常簡單,語法結(jié)構(gòu):等號(=)左側(cè)是變量名,右側(cè)是變量值,Python編譯器會自動識別變量的數(shù)據(jù)類型。

          說到變量,就不得不談Python的基本數(shù)據(jù)類型,Python有6個標(biāo)準(zhǔn)的數(shù)據(jù)類型:
          • Number(數(shù)字)
          • String(字符串)
          • List(列表)
          • Tuple(元組)
          • Set(集合)
          • Dictionary(字典)

          學(xué)習(xí)Python,掌握其基本數(shù)據(jù)類型,特別重要!重要!重要!詳細(xì)的介紹,見:
          https://www.runoob.com/python3/python3-data-type.html

          04

          控制語句

          我們所見到的程序,有很多程序都是按照順序從上到下執(zhí)行它們。如果你想要改變語句流的執(zhí)行順序,也就是說你想讓程序做一些決定,根據(jù)不同的情況做不同的事情。這個時候,就需要通過控制流語句來實現(xiàn)。

          在Python中有三種控制流語句——if、for和while。詳細(xì)的知識點,見如下:

          if語法講解
          https://www.runoob.com/python/python-if-statement.html

          while語法講解
          https://www.runoob.com/python/python-while-loop.html

          for語法講解
          https://www.runoob.com/python/python-for-loop.html

          嵌套for語法講解
          https://www.runoob.com/python/python-nested-loops.html

          本次實例中,需要讀取一級文件目錄名稱、二級文件目錄名稱、三級csv文件目錄名稱,并逐個遍歷它,于是選擇了for循環(huán)。for循環(huán)就是個迭代器,當(dāng)我們在使用for循環(huán)時,即重復(fù)運行一個代碼塊,或者不斷迭代容器對象中的元素,比如一些序列對象,列表,字典,元組,甚至文件等,而for循環(huán)的本質(zhì)取出可迭代對象中的迭代器然后對迭代器不斷的操作。
          for i in name: #第一層循環(huán),讀取一級文件目錄名稱
              for j in name1: #第二層循環(huán),讀取二級子文件目錄名稱
                  for t in name3: #第三層循環(huán),讀取csv文件目錄名稱

          05

          模塊函數(shù)調(diào)用

          函數(shù)是組織好的,可重復(fù)使用的,用來實現(xiàn)單一、或者相關(guān)功能的代碼段。

          函數(shù)能提高程序的模塊性,和代碼的重復(fù)利用率。Python提供了許多標(biāo)準(zhǔn)模塊的內(nèi)建函數(shù),比如os模塊下的listdir函數(shù),用來讀取文件的名稱,pandas模塊下的read_csv函數(shù),用來讀取csv文件的數(shù)據(jù)。當(dāng)然,也可以自己創(chuàng)建函數(shù),也就是所謂的自定義函數(shù),下一節(jié)詳細(xì)講。
          import os #導(dǎo)入OS模塊
          import pandas as pd #導(dǎo)入pandas模塊
          name=os.listdir(filePath) #調(diào)用os模塊下的listdir函數(shù)
          data=pd.read_csv(csv_path) #調(diào)用pandas模塊下的read_csv函數(shù)

          06

          自定義函數(shù)

          我們可以自定義一個自己想要的功能函數(shù),通常遵循以下規(guī)則:

          • 函數(shù)代碼塊以def關(guān)鍵詞開頭,后接圓括號()和參數(shù)。
          • 函數(shù)內(nèi)容以冒號起始,并且縮進(jìn)。
          • return結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回None。
          #自定義一個函數(shù),動態(tài)傳參,讀取文件的名稱
          def readname(a):
              filePath="D:\\\\ad_data\\\\"+a+"\\\\"
              name=os.listdir(filePath)
              return name

          定義一個函數(shù)只給了函數(shù)一個名稱,指定了函數(shù)里包含的參數(shù)和代碼結(jié)構(gòu)。這個函數(shù)的基本機(jī)構(gòu)完成以后,你就可以通過調(diào)用該函數(shù)來實現(xiàn)你想要的返回結(jié)果。
          a=""
          #調(diào)用自定義函數(shù)
          name= readname(a) #參數(shù)傳遞,傳一個空字符串

          07

          Lambda表達(dá)式

          Lambda是一個表達(dá)式,定義了一個匿名函數(shù),代碼x為入口參數(shù),x[0:7]為函數(shù)體。非常容易理解,在這里lambda簡化了函數(shù)定義的書寫形式。使得代碼更為簡潔,更為直觀易理解。

          但是lambda函數(shù),在Python社區(qū)是一個存在爭議的函數(shù),支持方認(rèn)為,Lambda函數(shù)的使用,使得代碼更加緊湊。反對法認(rèn)為該函數(shù)用多了反而看起來不那么清晰。
          f = lambda x:x[0:7]
          data['日期']=data['日期'].apply(f)

          在用pandas做數(shù)據(jù)處理的時候,個人習(xí)慣,apply+lambda配合使用,可以對dataframe數(shù)據(jù)集中的列做很多很多事情。

          08

          DataFrame及操作

          DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),在概念上,它跟關(guān)系型數(shù)據(jù)庫的一張表,Excel里的數(shù)據(jù)表一樣。

          創(chuàng)建一個DataFrame
          #根據(jù)字典創(chuàng)建一個DataFrame
          import pandas as pd

          data = {
              'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
              'year':[2000,2001,2002,2001,2002],
              'pop':[1.5,1.7,3.6,2.4,2.9]
          }

          frame = pd.DataFrame(data)
          frame

          #輸出
          state year pop
          0 Ohio 2000 1.5
          1 Ohio 2001 1.7
          2 Ohio 2002 3.6
          3 Nevada 2001 2.4
          4 Nevada 2002 2.9

          日常數(shù)據(jù)處理的過程中,通常是通過讀取文件生成DataFrame,最常用的是read_csv,read_table方法。下面是最簡單的讀取文件語句,該方法中有很多重要的參數(shù),在導(dǎo)入文件時候,通過這些參數(shù),可以控制導(dǎo)入數(shù)據(jù)的格式和數(shù)量。其他創(chuàng)建DataFrame的方式也有很多,比如我經(jīng)常會從SQL SERVER讀取數(shù)據(jù)來生成。這里就不詳細(xì)介紹。
          pd.read_csv('C:\\Users\\ivan\\Desktop\\數(shù)據(jù).csv')

          DataFrame索引、切片
          我們可以根據(jù)列名來選取一列,返回一個Series,同時也可以對這一列的數(shù)據(jù)進(jìn)行操作。
          #日期格式 2020-07-01,定義一個把日轉(zhuǎn)換成月的函數(shù),轉(zhuǎn)換出2020-07
          f = lambda x:x[0:7]
          data['日期']=data['日期'].apply(f)

          #對"投放費用"這一列進(jìn)行處理,把單位轉(zhuǎn)換成"萬"

          data['投放費用']=data['投放費用']/10000


          04

          總結(jié)

          最后,我說下Python與Excel之間的關(guān)系,為什么要拿這兩個工具比較,因為很人覺得:
          • 日常工作中,Excel足夠應(yīng)對數(shù)據(jù)處理工作
          • 有人寧愿使用Excel賊6,也不愿意使用python

          從根本上來說,Python和excel都可以作為數(shù)據(jù)處理和分析以及展現(xiàn)的工具,工具本身沒有好與壞,關(guān)鍵在于使用者的業(yè)務(wù)場景以及使用自身對工具的掌握程度。當(dāng)兩種工具都能達(dá)到使用者業(yè)務(wù)場景想要的效果時,使用者會更傾向于使用自己熟練或者更易于實現(xiàn)的工具高效地解決實際問題。

          所以說,日常大部分與數(shù)據(jù)相關(guān)的工作中,少量數(shù)據(jù)的處理和分析,excel都足以勝任,除非遇到大樣本數(shù)據(jù)導(dǎo)致excel無法處理或者計算很慢時,這時候python的優(yōu)勢才會體現(xiàn)出來。

          除此之外,如果使用者的業(yè)務(wù)場景是報表呈現(xiàn)時,excel做出來的結(jié)果直接就是可以交付的結(jié)果。

          當(dāng)然,當(dāng)面臨大量需要重復(fù)處理的文件或者經(jīng)常要做的數(shù)據(jù)工作,這個時候,如果自動化,會大大提高工作效率,這個時候,python的優(yōu)勢也很明顯。
          瀏覽 84
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  西西4444www无码大胆 | 翔田千里最猛的A片 | 色婷网站| 91人妻人人人人爽 | 国产激情精品视频 |