2018-03-31 開胃學(xué)習(xí)Data系列 - 基礎(chǔ)知識(shí)1

.csv 處理

這里學(xué)習(xí) 通過一個(gè).csv文件進(jìn)行基本的迭代,來創(chuàng)建字典和收集匯總統(tǒng)計(jì)。
不過總的用一個(gè)詞來描述 這個(gè)csv方法就是 tedious

import csv
%precision 2  #設(shè)置列印的浮點(diǎn)數(shù)據(jù)精度為2。
?
with open('mpg.csv') as csvfile:
    mpg = list(csv.DictReader(csvfile))
  
# 使用csv.DictReader讀取我們的mpg.csv 并將其轉(zhuǎn)換為列表的字典。


mpg[:1] # The first dictionaries in our list.

#輸出如下
>>>
[OrderedDict([('', '1'),
              ('manufacturer', 'audi'),
              ('model', 'a4'),
              ('displ', '1.8'),
              ('year', '1999'),
              ('cyl', '4'),
              ('trans', 'auto(l5)'),
              ('drv', 'f'),
              ('cty', '18'),
              ('hwy', '29'),
              ('fl', 'p'),
              ('class', 'compact')])]
len(mpg)
# 有234 個(gè)字典key mpg[233] 是最后一個(gè)
mpg[233].keys()
>>>
234

keys gives us the column names of our csv.

mpg[233].keys()
odict_keys(['', 'manufacturer', 'model', 'displ', 'year', 'cyl', 'trans', 'drv', 'cty', 'hwy', 'fl', 'class'])

下面這個(gè)是如何找到每個(gè)城市的平均mpg,以及每個(gè)hwy的平均mpg:
因?yàn)樽值淅锏膬?nèi)容都是string,所以需要轉(zhuǎn)化成float才可以計(jì)算

sum(float(d['cty']) for d in mpg) / len(mpg)
sum(float(d['hwy']) for d in mpg) / len(mpg)

現(xiàn)在嘗試返回?cái)?shù)據(jù)組中所有的汽缸的數(shù)據(jù)值:

cylinders = set(d['cyl'] for d in mpg)
cylinders
>>> {'4', '5', '6', '8'}

這里用氣缸的數(shù)量來分組汽車,并找出每個(gè)組的平均mpg。

CtyMpgByCyl = []
?# 創(chuàng)建一個(gè)list

for c in cylinders:                     # 循環(huán)這個(gè)汽缸的list
    summpg = 0
    cyltypecount = 0
    for d in mpg:                       # 迭代所有的字典元素
        if d['cyl'] == c:               # 如果找到了當(dāng)下循環(huán)的汽缸值
            summpg += float(d['cty'])   # 把cty的mpg累加
            cyltypecount += 1           # increment the count
    CtyMpgByCyl.append((c, summpg / cyltypecount)) # append the tuple ('cylinder', 'avg mpg')
?
CtyMpgByCyl.sort(key=lambda x: x[0])  
CtyMpgByCyl
[('4', 21.01), ('5', 20.50), ('6', 16.22), ('8', 12.57)]

其他變量分類的例子:

vehicleclass = set(d['class'] for d in mpg) # what are the class types
vehicleclass
>>> {'2seater', 'compact', 'midsize', 'minivan', 'pickup', 'subcompact', 'suv'}

#average hwy mpg for each class of vehicle


HwyMpgByClass = []

for t in vehicleclass: # iterate over all the vehicle classes
    summpg = 0
    vclasscount = 0
    for d in mpg: # iterate over all dictionaries
        if d['class'] == t: # if the cylinder amount type matches,
            summpg += float(d['hwy']) # add the hwy mpg
            vclasscount += 1 # increment the count
    HwyMpgByClass.append((t, summpg / vclasscount)) # append the tuple ('class', 'avg mpg')
HwyMpgByClass.sort(key=lambda x: x[1])
HwyMpgByClass
HwyMpgByClass = []

for t in vehicleclass: # iterate over all the vehicle classes
    summpg = 0
    vclasscount = 0
    for d in mpg: # iterate over all dictionaries
        if d['class'] == t: # if the cylinder amount type matches,
            summpg += float(d['hwy']) # add the hwy mpg
            vclasscount += 1 # increment the count
    HwyMpgByClass.append((t, summpg / vclasscount)) # append the tuple ('class', 'avg mpg')
?
HwyMpgByClass.sort(key=lambda x: x[1])
HwyMpgByClass
#Output below
[('pickup', 16.88),
 ('suv', 18.13),
 ('minivan', 22.36),
 ('2seater', 24.80),
 ('midsize', 27.29),
 ('subcompact', 28.14),
 ('compact', 28.30)]














































time 和 datetime

前提:Python中的一些基本的知識(shí):
應(yīng)該意識(shí)到該日期和 時(shí)間的存儲(chǔ)有許多不同的方式。
用于存儲(chǔ)日期最常用的傳統(tǒng)方法之一, 時(shí)間在網(wǎng)上系統(tǒng)是基于從紀(jì)元epoch 的偏移量offset。這個(gè)epoch是1970年1月1日。
所以如果看到很大的數(shù)字,而希望看到日期和時(shí)間, 需要轉(zhuǎn)換它們,使數(shù)據(jù)變得有意義。

import datetime as dt
import time as tm

time returns the current time in seconds since the Epoch. (January 1st, 1970)

tm.time()
>>> 1523682711.76

dtnow = dt.datetime.fromtimestamp(tm.time())
#Convert the timestamp to datetime.
dtnow
>>>datetime.datetime(2018, 4, 14, 4, 51, 12, 996246)

#更方便的寫法
dtnow.year, dtnow.month, dtnow.day, dtnow.hour, dtnow.minute, dtnow.second 
# get year, month, day, etc.from a datetime
(2018, 4, 14, 4, 51, 12)

timedelta 是兩個(gè)時(shí)間之間的差值,可以用來計(jì)算前后的時(shí)間,在datetime 包里
datetime 返回的是今天的日期

delta = dt.timedelta(days = 100) # create a timedelta of 100 days
delta
>>> datetime.timedelta(100)


today = dt.date.today()
# 返回一百天前的日期
today - delta   
datetime.date(2018, 1, 4)

#比較日期
today > today-delta    
True
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 編輯部風(fēng)云往事 (一) 多年后,當(dāng)我歷經(jīng)風(fēng)霜的身軀即將附下親吻黃土地時(shí),我想起了那個(gè)陽光明媚的下午和一個(gè)僅有三秒的...
    浪逸軒閱讀 543評(píng)論 0 0
  • 這個(gè)讀書方法,可能會(huì)顛覆你對讀書以往的認(rèn)知|開卷 或許讀書已經(jīng)成為你的一種生活方式,在讀書中也構(gòu)建了一個(gè)屬于自己的...
    yuqifuli閱讀 5,956評(píng)論 3 13
  • Transactions 事務(wù)(Transaction),一般是指要做的或所做的事情。在計(jì)算機(jī)術(shù)語中是指訪問并可能...
    Kaiweio閱讀 405評(píng)論 0 0
  • 西海岸自駕 第一天,早8:00出發(fā) 溫哥華-波特蘭 ,路途約5小時(shí),中午路上午餐,途中停留美國溫哥華半小時(shí)拍照留念...
    知行之旅閱讀 476評(píng)論 0 0
  • 二姐是個(gè)苦命的女人,20歲出頭就因?yàn)閻矍榧藿o了一無所有的姐夫,婚后三年生了兩個(gè)漂亮的女兒。姐夫在外地工作,姐姐一個(gè)...
    奮斗吧爸爸閱讀 534評(píng)論 0 0

友情鏈接更多精彩內(nèi)容