21 Numpy、共享单车骑行数据

2018-07-17  本文已影响34人  夏威夷的芒果
基本流程 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

需要注意的地方

结果图

image.png

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

上一篇下一篇

猜你喜欢

热点阅读