2018-03-31 开胃学习Data系列 - 基础知识1

.csv 处理

这里学习 通过一个.csv文件进行基本的迭代,来创建字典和收集汇总统计。
不过总的用一个词来描述 这个csv方法就是 tedious

import csv
%precision 2  #设置列印的浮点数据精度为2。
​
with open('mpg.csv') as csvfile:
    mpg = list(csv.DictReader(csvfile))
  
# 使用csv.DictReader读取我们的mpg.csv 并将其转换为列表的字典。


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 个字典key mpg[233] 是最后一个
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'])

下面这个是如何找到每个城市的平均mpg,以及每个hwy的平均mpg:
因为字典里的内容都是string,所以需要转化成float才可以计算

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

现在尝试返回数据组中所有的汽缸的数据值:

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

这里用气缸的数量来分组汽车,并找出每个组的平均mpg。

CtyMpgByCyl = []
​# 创建一个list

for c in cylinders:                     # 循环这个汽缸的list
    summpg = 0
    cyltypecount = 0
    for d in mpg:                       # 迭代所有的字典元素
        if d['cyl'] == c:               # 如果找到了当下循环的汽缸值
            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中的一些基本的知识:
应该意识到该日期和 时间的存储有许多不同的方式。
用于存储日期最常用的传统方法之一, 时间在网上系统是基于从纪元epoch 的偏移量offset。这个epoch是1970年1月1日。
所以如果看到很大的数字,而希望看到日期和时间, 需要转换它们,使数据变得有意义。

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 是两个时间之间的差值,可以用来计算前后的时间,在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 编辑部风云往事 (一) 多年后,当我历经风霜的身躯即将附下亲吻黄土地时,我想起了那个阳光明媚的下午和一个仅有三秒的...
    浪逸轩阅读 489评论 0 0
  • 这个读书方法,可能会颠覆你对读书以往的认知|开卷 或许读书已经成为你的一种生活方式,在读书中也构建了一个属于自己的...
    yuqifuli阅读 5,480评论 3 13
  • Transactions 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能...
    Kaiweio阅读 343评论 0 0
  • 西海岸自驾 第一天,早8:00出发 温哥华-波特兰 ,路途约5小时,中午路上午餐,途中停留美国温哥华半小时拍照留念...
    知行之旅阅读 412评论 0 0
  • 二姐是个苦命的女人,20岁出头就因为爱情嫁给了一无所有的姐夫,婚后三年生了两个漂亮的女儿。姐夫在外地工作,姐姐一个...
    奋斗吧爸爸阅读 442评论 0 0