21 Numpy、共享单车骑行数据

基本流程
Numpy模块适合做矢量化运算
Matplotlib模块适合做数据的呈现,绘图接口

这里需要三个库

import os
import numpy as np
import matplotlib.pyplot as plt

数据源:https://video.mugglecode.com/data.zip

CSV,又叫comma separated value,数据之间用逗号隔开的,第一行一般不存储数据,又叫表头。

用文本编辑器打开csv
局部放大
可以可用表格软件打开,但是体积很大的时候打开的速度很慢,超大规模的数据会加载不完全

先写一段简单的代码:

import os
import numpy as np

data_path = '/Users/miraco/PycharmProjects/DataMining/bikeshare'
data_filenames = ['2017-q2_trip_history_data.csv', '2017-q1_trip_history_data.csv',
                  '2017-q3_trip_history_data.csv','2017-q4_trip_history_data.csv']

def collect_data():   #数据收集
    data_arr_list = []
    for data_filename in data_filenames:
        data_file = os.path.join(data_path, data_filename)
        #读数据的时候默认读取是浮点数, 但是看这个csv的数据类型,各种的都有还有年月日的,所以保险起见都使用字符串类型
        data_arr = np.loadtxt(data_file, delimiter=',', dtype = 'str',skiprows = 1)  #读进来的数据
        data_arr_list.append(data_arr)
    return data_arr_list
def process_data():
    pass
def analyze_data():
    pass
def show_results():
    pass
def main():
    collect_data()
    process_data()
    analyze_data()
    show_results()
main()

这个时候,做单步调试,可以一窥变量格式,还可以使用.ndim方法看数据变量是几维的。。

用python读取时候,读取出来的对象可以看见是矩阵形式

还记不记得字符串模板

    template='token={token}&user={user}&message={msg}&title={t}&url={url}'
    #这个是字符串模板,常常是复杂字符串拼接时候会用的,是一种很简明的办法
    query = template.format(
        token = token,
        user = user,
        msg  =message,
        t = title,
        url = url
    )
format方法,字符串模板

全部代码如下

import os
import numpy as np
import matplotlib.pyplot as plt

data_path = '/Users/miraco/PycharmProjects/DataMining/bikeshare'
data_filenames = ['2017-q1_trip_history_data.csv', '2017-q2_trip_history_data.csv',
                  '2017-q3_trip_history_data.csv','2017-q4_trip_history_data.csv']

def collect_data():   #数据收集
    data_arr_list = []
    for data_filename in data_filenames:
        data_file = os.path.join(data_path, data_filename)
        print(data_file)
        #读数据默认按浮点数读, 但看这csv数据类型,各种还有年月日的,保险起见都用字符串类型
        data_arr = np.loadtxt(data_file, delimiter=',', dtype = 'str',skiprows = 1)   #读进来的数据
        data_arr_list.append(data_arr)
    return data_arr_list

def process_data(data_arr_list):  #数据处理
    duration_in_min_list = []
    for data_arr in data_arr_list:
        duration_str_col = data_arr[:,0]  #骑行时间取首列
        #得到str类型时间,是这种"23456"形式,需要去掉双引号然后再类型转换,
       #可以用replace+循环体,但是太麻烦,这里使用向量操作。
        duration_in_ms  = np.core.defchararray.replace(duration_str_col,'"','')

        #类型转换成浮点类型,再转换成分钟, 可以对列进行直接操作
        duration_in_min = duration_in_ms.astype('float')/1000/60
        duration_in_min_list.append(duration_in_min)
    return duration_in_min_list

def analyze_data(duration_in_min_list):  #数据分析
    duration_mean_list = []
    for i, duration in enumerate(duration_in_min_list):
        duration_mean = np.mean(duration)    #均值内置方法
        print('第{}个季度的平均骑行时间: {:.2f}分钟'.format(i+1, duration_mean))
        duration_mean_list.append(duration_mean)
    return duration_mean_list

def show_results(duration_mean_list):          #数据展示
    plt.figure()
    plt.bar(range(len(duration_mean_list)),duration_mean_list)
    plt.show()

def main():
    #数据收集
    data_arr_list = collect_data()

    #数据处理
    duration_in_min_list  = process_data(data_arr_list)

    #数据分析
    duration_mean_list = analyze_data(duration_in_min_list)

    #数据呈现
    show_results(duration_mean_list)
if __name__ == '__main__':
    main()

通俗理解__name__ == '__main__'

假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');
在你自己眼中,你是你自己(__name__ == '__main__')。

if __name__ == '__main__'的意思是:
.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;
.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

用到的知识点

image.png

需要注意的地方

  • 因为numpy默认是读取成浮点型,你为了方便数据处理以及保险起见,读进去的时候强行指定你读取的dtype为str,这样就可以保留全部字面上的信息了,于是乎就多了引号了,所以要去除引号,再转float,比较保险。所以这句的意思就是:数据读取按照字符串读取,不按浮点数读取,跳过第一行,避免年月日之类的信息读取出错data_arr = np.loadtxt(目标文件, delimiter=',', dtype = 'str',skiprows = 1)

  • 字符串转换成浮点型时候,需要先去掉两边的双引号,这个操作不要使用循环体,数据很大的时候会特别慢,直接np.core.defchararray.replace(目标,'"','')即可实现向量级的操作

  • 类型转换成浮点类型,再转换成分钟, 可以对列进行直接操作
    目标.astype('float')

  • 能用内置方法用内置方法,np.mean之类的,速度快。

  • 画图
    plt.figure()
    plt.bar(range(len(duration_mean_list)),duration_mean_list)
    plt.show()

结果图

image.png

图片美化事宜。来日再谈。

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

推荐阅读更多精彩内容