《Head First Python》學(xué)習(xí)筆記 Chapter5:數(shù)據(jù)處理

本章的目的是學(xué)習(xí)簡(jiǎn)單的數(shù)據(jù)處理窿侈,首先給出了一些文本數(shù)據(jù)念秧,需要將這些文本數(shù)據(jù)讀取,并轉(zhuǎn)換為列表聊闯,然后對(duì)列表中的數(shù)據(jù)進(jìn)行統(tǒng)一格式化工猜,最后進(jìn)行排序。

本章所需的數(shù)據(jù)獲取地址:獲取數(shù)據(jù)

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

未優(yōu)化的代碼

# 對(duì)時(shí)間字符串進(jìn)行格式化菱蔬,統(tǒng)一形式為mins.secs
def sanitize(time_string):
    if '-' in time_string:
           splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

# 讀取文件篷帅,并將記錄時(shí)間轉(zhuǎn)換成列表
with open('james.txt') as jaf:
    data = jaf.readline()
james = data.strip().split(',')

with open('julie.txt') as juf:
    data = juf.readline()
julie = data.strip().split(',')

with open('mikey.txt') as mif:
    data = mif.readline()
mikey = data.strip().split(',')

with open('sarah.txt') as saf:
    data = saf.readline()
sarah = data.strip().split(',')

clean_james = []
clean_julie = []
clean_mikey = []
clean_sarah = []

---------臃腫的部分------------
for each_t in james:
    clean_james.append(sanitize(each_t))

for each_t in julie:
    clean_julie.append(sanitize(each_t))

for each_t in mikey:
    clean_mikey.append(sanitize(each_t))

for each_t in sarah:
    clean_sarah.append(sanitize(each_t))

print(sorted(clean_james))
print(sorted(clean_julie))
print(sorted(clean_mikey))
print(sorted(clean_sarah))
---------臃腫的部分------------

優(yōu)化的代碼

def sanitize(time_str):
    if '-' in time_str:
        spliter = '-'
    elif ':' in time_str:
        spliter = ':'
    else:
        return time_str
    (mins, secs) = time_str.split(spliter)
    return(mins + '.' + secs)

# 將讀取文件的代碼抽取成函數(shù)
def get_coach_data(filename):
    try:
        with open(filename) as file:
            data = file.readline();
        return data.strip().split(',')
    except IOError as err:
        print('File error:' + str(err))
        return None

# 去除列表中的重復(fù)數(shù)據(jù)
def clean_data(data):
    clean_data = []
    for item in data:
        if item not in clean_data:
            clean_data.append(item)
    return clean_data

james = get_coach_data('james.txt')
julie = get_coach_data('julie.txt')
mikey = get_coach_data('mikey.txt')
sarah = get_coach_data('sarah.txt')

james_format = [sanitize(data) for data in james]
julie_format = [sanitize(data) for data in julie]
mikey_format = [sanitize(data) for data in mikey]
sarah_format = [sanitize(data) for data in sarah]

clean_james = clean_data(james_format)
clean_julie = clean_data(julie_format)
clean_mikey = clean_data(mikey_format)
clean_sarah = clean_data(sarah_format)

print(sorted(clean_james)[0:3])
print(sorted(clean_julie)[0:3])
print(sorted(clean_mikey)[0:3])
print(sorted(clean_sarah)[0:3])

兩種排序方法

原地排序(In-place sorting):data.sort()

該方法會(huì)對(duì)排列數(shù)據(jù)(data)按指定的順序進(jìn)行排序,然后用排好順序的數(shù)據(jù)替換掉原有的數(shù)據(jù)拴泌,因此原有的數(shù)據(jù)順序會(huì)丟失魏身。

復(fù)制排序(Copied sorting):sorted(data)

對(duì)數(shù)據(jù)按指定的順序進(jìn)行排序,然后返回原數(shù)據(jù)的一個(gè)有序副本蚪腐。原數(shù)據(jù)依然保留箭昵,只是對(duì)副本進(jìn)行排序

>>> data = [6,3,1,2,5,4]
>>> data
[6, 3, 1, 2, 5, 4]


>>> data.sort() # 對(duì)數(shù)據(jù)進(jìn)行原地排序
>>> data
[1, 2, 3, 4, 5, 6] # 原數(shù)據(jù)的順已經(jīng)改變
>>> 
>>> data = [6,3,1,2,5,4]
>>> data_sort = sorted(data) # 對(duì)數(shù)據(jù)進(jìn)行復(fù)制排序,返回一個(gè)有序副本
>>> data
[6, 3, 1, 2, 5, 4] # 原數(shù)據(jù)順序仍然存在


>>> data_sort
[1, 2, 3, 4, 5, 6]

列表推導(dǎo)式(list comprehension)

使用方法

[表達(dá)式 for 變量 in 列表] 或者 [表達(dá)式 for 變量 in 列表 if 條件]

使用示例

# 將分鐘數(shù)轉(zhuǎn)化成秒數(shù)
>>> mins = [1,2,3]
>>> secs = [m * 60 for m in mins]
>>> secs
[60, 120, 180]

# 求列表中數(shù)字的平方
>>> data = [1,2,3,4]
>>> data_square = [num * num for num in data]
>>> data_square
[1, 4, 9, 16]

# 還可以跟其他條件回季,對(duì)列表中的數(shù)據(jù)進(jìn)行篩選處理
>>> result = [num * 2 for num in data if num > 2]
>>> result
[6, 8]

# 也可以增加更多的for語(yǔ)句的部分:
>>> result = [[x,y] for x in range(2) for y in range(2)]
>>> result
[[0, 0], [0, 1], [1, 0], [1, 1]]
>>> 

Set:無(wú)序家制、不可重復(fù)

初始化

1.創(chuàng)建一個(gè)空的set

distances = set()

2.為set提供一個(gè)數(shù)據(jù)列表(需要用大括號(hào)包圍

>>> distances = {10.6,11,8,10.6,"two",7}
>>> distances
{8, 10.6, 11, 'two', 7} # 自動(dòng)過(guò)濾掉了重復(fù)的數(shù)據(jù)

3.為set指定一個(gè)現(xiàn)有的列表

>>> list = [2,2,3,5,6]
>>> distances = set(list)
>>> distances
{2, 3, 5, 6}

零碎知識(shí)點(diǎn)

list列表分片

列表分片主要用于獲取列表的一個(gè)子部分,即通過(guò)L[x:y]取得并返回列表L在偏移量x到y(tǒng)(包括x不包括y)之間的一個(gè)新列表泡一,如下所示:

>>> [1,2,3,4,5,6][2:5]
[3, 4, 5]

另外颤殴,如果偏移量留空,則第一個(gè)偏移量默認(rèn)為列表的頭部鼻忠,第二個(gè)默認(rèn)為末尾:

>>> [1,2,3,4,5,6][:]
[1, 2, 3, 4, 5, 6]

如果這樣做诅病,相當(dāng)于對(duì)原列表做一個(gè)淺拷貝。

分片實(shí)際還接收第三個(gè)參數(shù)粥烁,其代表步長(zhǎng)贤笆,默認(rèn)情況下,該值為1讨阻。下面將步長(zhǎng)改為2:

>>> [1,2,3,4,5,6][::2]
[1, 3, 5]

如果把步長(zhǎng)設(shè)為負(fù)值會(huì)有什么效果呢芥永?

>>> [1,2,3,4,5,6][::-2]
[6, 4, 2]

相當(dāng)于反轉(zhuǎn)了列表,從列表的尾部開(kāi)始遍歷钝吮。

工廠函數(shù)

工廠函數(shù)用于創(chuàng)建某種類型的新的數(shù)據(jù)項(xiàng)埋涧,例如set()就是一個(gè)工廠函數(shù),因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的集合奇瘦。


如果覺(jué)得有用棘催,歡迎關(guān)注我的微信,有問(wèn)題可以直接交流:

你的關(guān)注是對(duì)我最大的鼓勵(lì)耳标!
你的關(guān)注是對(duì)我最大的鼓勵(lì)醇坝!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市次坡,隨后出現(xiàn)的幾起案子呼猪,更是在濱河造成了極大的恐慌画畅,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宋距,死亡現(xiàn)場(chǎng)離奇詭異轴踱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谚赎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門淫僻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人壶唤,你說(shuō)我怎么就攤上這事雳灵。” “怎么了视粮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)橙凳。 經(jīng)常有香客問(wèn)我蕾殴,道長(zhǎng),這世上最難降的妖魔是什么岛啸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任钓觉,我火速辦了婚禮,結(jié)果婚禮上坚踩,老公的妹妹穿的比我還像新娘荡灾。我一直安慰自己,他們只是感情好瞬铸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布批幌。 她就那樣靜靜地躺著,像睡著了一般嗓节。 火紅的嫁衣襯著肌膚如雪荧缘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天拦宣,我揣著相機(jī)與錄音截粗,去河邊找鬼。 笑死鸵隧,一個(gè)胖子當(dāng)著我的面吹牛绸罗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播豆瘫,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼珊蟀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了外驱?” 一聲冷哼從身側(cè)響起系洛,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俊性,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后描扯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體定页,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年绽诚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了典徊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恩够,死狀恐怖卒落,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜂桶,我是刑警寧澤儡毕,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站扑媚,受9級(jí)特大地震影響腰湾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疆股,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一费坊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旬痹,春花似錦附井、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至人弓,卻和暖如春卷雕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背票从。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工漫雕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峰鄙。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓浸间,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吟榴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子魁蒜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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

  • 個(gè)人學(xué)習(xí)批處理的初衷來(lái)源于實(shí)際工作;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過(guò)程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,718評(píng)論 0 11
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,965評(píng)論 6 13
  • 一兜看、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)使用 weka 中的常用分類器锥咸,完成數(shù)據(jù)分類任務(wù)。 二细移、實(shí)驗(yàn)內(nèi)容 了解 weka 中 explo...
    yigoh閱讀 8,527評(píng)論 5 4
  • 斑駁的印痕至今還清晰的留在那里搏予,磚墻上你的名字依舊還在。那殘陽(yáng)如血映紅了半邊天弧轧,如今我們都四散而去雪侥。外面的世界雖說(shuō)...
    _Dtath閱讀 326評(píng)論 0 2
  • 房?jī)r(jià)已經(jīng)高過(guò)天了速缨,不過(guò)它還是如雨后春筍,一路高歌猛進(jìn)代乃。 高到了什么程度呢旬牲,高到一個(gè)普通人需要二三十年不吃不喝才能擁...
    致遠(yuǎn)投資黃紹國(guó)閱讀 315評(píng)論 0 0