说在前面:这个是七月在线线下课程的一个课件,侵权的话联系删除,想学的可以点击链接买,运行环境是notebook。因为方便手机查看,所以把这个放博客上。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from datetime import datetime
from pandas import Series, DataFrame

get_ipython().run_line_magic(‘matplotlib’, ‘inline’)

In[5]:

数据来源:https://s3.amazonaws.com/tripdata/index.html

偷懒只处理最近6个月数据

bike_df = pd.read_csv(‘data/citibike/JC-201704-citibike-tripdata.csv’)
bike_df = bike_df.append(pd.read_csv(‘data/citibike/JC-201705-citibike-tripdata.csv’), ignore_index=False)
bike_df = bike_df.append(pd.read_csv(‘data/citibike/JC-201706-citibike-tripdata.csv’), ignore_index=False)
bike_df = bike_df.append(pd.read_csv(‘data/citibike/JC-201707-citibike-tripdata.csv’), ignore_index=False)
bike_df = bike_df.append(pd.read_csv(‘data/citibike/JC-201708-citibike-tripdata.csv’), ignore_index=False)
bike_df = bike_df.append(pd.read_csv(‘data/citibike/JC-201709-citibike-tripdata.csv’), ignore_index=False)
print(bike_df.shape)
bike_df.head()

In[3]:

print(‘租赁点:%d’ % len(bike_df[‘start station name’].unique()))
print(‘被骑自行车数量:%d’ % len(bike_df[‘bikeid’].unique()))
print(‘骑行次数:%d’ % bike_df.shape[0])
print(‘每部骑行时长(分钟):%.2f’ % float(bike_df[‘tripduration’].sum() / bike_df[‘bikeid’].count() / 60))
print(‘租借频率:%.2f’ % float(bike_df[‘bikeid’].count() / len(bike_df[‘bikeid’].unique())))

In[4]:

按月统计

bike_df[‘starttime’]=pd.to_datetime(bike_df[‘starttime’])
bike_df = bike_df.set_index(‘starttime’) # 转成时间序列
print(bike_df.head())
bike_df_by_month = bike_df.resample(‘M’).apply(len)
bike_df_by_month = bike_df_by_month[‘bikeid’]
bike_df_by_month

In[5]:

画出每月骑行次数

plt.rcParams[‘font.sans-serif’]=[‘SimHei’] #用来正常显示中文标签
plt.rcParams[‘axes.unicode_minus’]=False #用来正常显示负号
plt.rc(‘font’, family=‘SimHei’, size=15)
plt.plot(bike_df_by_month, ‘r8’, bike_df_by_month, ‘g-’, linewidth=1, markeredgewidth=5, alpha=0.8)
plt.xlabel(‘月份’)
plt.ylabel(‘租赁骑行次数’)
plt.title(‘最近半年Citi Bike每月骑行次数’)
plt.show()

In[6]:

画出按季度的分布

bike_df_by_quarter = bike_df.resample(‘Q’).apply(len)
bike_df_by_quarter = bike_df_by_quarter[‘bikeid’]
print(bike_df_by_quarter)

In[7]:

#绘制按季度汇总的骑行次数柱状图
plt.bar([10,15], bike_df_by_quarter, alpha=0.8, align=‘center’, edgecolor=‘white’)
plt.xlabel(‘季度’)
plt.ylabel(‘租赁骑行次数’)
plt.title(‘最近2个季度Citi Bike每季度骑行次数’)
plt.legend([‘次数’], loc=‘upper right’)
plt.grid(color=’#95a5a6’, linestyle=’–’, linewidth=1, axis=‘y’, alpha=0.4)
plt.xlim(5, 20)
plt.ylim(60000, 120000)
plt.xticks([10,15], (‘二季度’,‘三季度’))
plt.show()

In[8]:

画出性别分布

bike_df_by_gender= bike_df.groupby(‘gender’)[‘bikeid’].agg(len) / bike_df[“bikeid”].count() * 100
print(bike_df_by_gender)

plt.pie(bike_df_by_gender,labels=[‘未知’, ‘男性’, ‘女性’], colors=[‘red’, ‘blue’, ‘green’],explode=(0, 0, 0),startangle=60,autopct=’%1.1f%%’)

plt.pie(bike_df_by_gender,labels=[‘未知’, ‘男性’, ‘女性’], colors=[‘red’, ‘blue’, ‘green’], explode=(0, 0, 0), startangle=60, autopct=’%1.1f%%’)
plt.title(‘Citi Bike用户性别占比’)
plt.legend([‘未知’, ‘男性’, ‘女性’], loc=‘upper left’)
plt.show()

In[9]:

画出年龄分布

bike_df[‘age’] = 2016 - bike_df[‘birth year’] # 大于100岁虽然不合理,但先不管了,暂时保留。(15, 129)
bins = [0, 18, 30, 50, 131]
age_group = [‘少年’, ‘青年’, ‘中年’, ‘老年’]
bike_df[‘age_group’] = pd.cut(bike_df[‘age’], bins, labels=age_group)
bike_df_by_ag = bike_df.groupby(‘age_group’)[‘age_group’].agg(len)

mean_ages = bike_df.groupby(‘age_group’)[‘age’].mean()

print(bike_df.groupby(‘age_group’)[‘age_group’].value_counts())

plt.bar([1,2,3,4], bike_df_by_ag, color=‘red’, alpha=0.8, align=‘center’, edgecolor=‘white’)
plt.xlabel(‘年龄分组’)
plt.ylabel(‘租赁次数’)
plt.title(‘Citi Bike用户年龄分布’)
plt.legend([‘次数’], loc=‘upper right’)
plt.grid(color=‘green’, linestyle=’–’, linewidth=1, axis=‘y’, alpha=0.4)
plt.xticks([1,2,3,4], (‘少年’,‘青年’,‘中年’,‘老年’))
plt.show()

In[10]:

平均速度计算

#通过经纬度计算距离的函数,网上可以找到。
def haversine(lon1, lat1, lon2, lat2): # 经度1,纬度1,经度2,纬度2 (十进制度数)
from math import radians, cos, sin, asin, sqrt
“”"
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
“”"
# 将十进制度数转化为弧度,将角度转化为弧度
lon1= map(radians, np.array(lon1))
lat1= map(radians, np.array(lat1))
lon2= map(radians, np.array(lon2))
lat2= map(radians, np.array(lat2))
lon1 = np.array(list(lon1)).reshape(-1,1)
lon2 = np.array(list(lon2)).reshape(-1,1)
lat1 = np.array(list(lat1)).reshape(-1,1)
lat2 = np.array(list(lat2)).reshape(-1,1)
# haversine公式
dlon = lon2 - lon1
dlat = lat2 - lat1

a = (np.sin(dlat/2) ** 2) + np.cos(lat1) * np.cos(lat2) * (np.sin(dlon / 2)**2)
c = 2 * np.arcsin(np.sqrt(a))
r = 6371 # 地球平均半径,单位为公里
return c * r * 1000

start_lon = bike_df[‘start station longitude’]
start_lat = bike_df[‘start station latitude’]
end_lon = bike_df[‘end station longitude’]
end_lat = bike_df[‘end station latitude’]
bike_df[‘meter’]=haversine(start_lon, start_lat, end_lon, end_lat)
bike_df[“duration_hour”] = bike_df[“tripduration”] / 3600.0 # 转换为小时数
bike_df[“speed”] = bike_df[“meter”]/ 1000.0 / bike_df[“duration_hour”]
total_km = bike_df[“meter”].sum() / 1000.0
total_hour = bike_df[“tripduration”].sum() / 3600.0
speed = total_km / total_hour
print(’%.2f’ % speed)

python matplotlib,plt.pie,plt.bar(bike数据的分析)相关推荐

  1. 绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿

    绘制渐变色扇形图 -基于python - matplotlib 颜色地图cm模块儿         ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔ ...

  2. Python Matplotlib绘制多子图准备训练数据和GIF动画实践

    我们程序员.设计人员,按需求辛辛苦苦开发出来的统计图形,往往达不到用户的要求,原因一般是表达不全面,也有内容过多而比较乱,真是众口难调. 其实,是我们表达方式与业务人员工作脱节.业务人员看了一张图或及 ...

  3. python爬虫28 | 你爬下的数据不分析一波可就亏了啊,使用python进行数据可视化...

    通过这段时间 小帅b教你从抓包开始 到数据爬取 到数据解析 再到数据存储 相信你已经能抓取大部分你想爬取的网站数据了 恭喜恭喜 但是 数据抓取下来 要好好分析一波 最好的方式就是把数据进行可视化 这样 ...

  4. Python可视化利器 — pyecharts 结合爬虫对数据进行分析生成各种可视化图形

    用 pyecharts 对爬虫后的数据进行可视化处理(生成饼图.柱状图.地理位置图.3D旋转动图.词云图)及地图问题的解决 首先,pyecharts 是一款融合了Python和echarts技术的强大 ...

  5. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]

    目录 前言 一.任务详情 二.数据集来源 三.实现过程 四.运行代码 前言 在学习Python数据分析的过程中,是离不开实战的. 今天跟大家带来数据分析可视化经典项目,美国总统大选数据可视化分析,希望 ...

  6. 基于python文本挖掘的电商产品评论数据情感分析报告

    背景 近年来,随着互联网的广泛应用和电子商务的迅速发展,网络文本及用户评论分析意义日益凸显,因此网络文本挖掘及网络文本情感分析技术应运而生,通过对文本或者用户评论的情感分析,企业能够进行更有效的管理等 ...

  7. python matplotlib绘制等高线,plt.contour(),ax3.contour()和plt.contourf(),ax3.contour(), 同名函数

    引用文章 https://blog.csdn.net/lanchunhui/article/details/70495353 首先这是由不同对象调用的函数,ax3指3D Figure对象即<cl ...

  8. Python matplotlib 线图(plt.plot())

    http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D 线图 生成线图对象Line2D Bases: matplotlib.a ...

  9. python matplotlib绘制箭头 plt.annotate

    plt.annotate用法和ax.annotate一样,参照:Matplotlib中annotate详解 plt.plot([0,40], [0,40]) plt.annotate('aaaaaaa ...

最新文章

  1. error40无法打开到sql_SQL入门学习,初步认识ADO
  2. U.S.News最新美国大学排名:普林斯顿蝉联总榜第一,MIT领跑计算机,弗罗里达成新贵...
  3. 1002:输出第二个整数
  4. 关于数据可视化的方法和工具介绍
  5. STRUTS2 标签调用静态方法
  6. 想被千年后的人知道吗,快去GitHub上传代码吧!
  7. vv7无法启动显示发动机故障_发动机电控系统常见故障(发动机不能启动)的解决方法...
  8. Spring安全权限管理(Spring Security的配置使用)
  9. 共模电感适用的频率_电感基础知识入门
  10. matlab箭头梯度方向场,局部路径规划算法——人工势场法
  11. Google Play镜像站
  12. 龙之谷linux一键端1网段手机可玩,龙之谷手游一键端怎么用
  13. 移动开发平台WorkPlus | 快速实现企业移动应用集成化
  14. STM32小项目之ds18b20测温在oled上显示
  15. 从0开始搭建一个疫情地图小程序——小程序篇
  16. ESP8266 SmartConfig一键配网
  17. 2012 nba playoff 观感
  18. win10 系统下安装ubuntu实现双系统爬坑记录
  19. 关闭游戏功能界面,导致游戏闪退
  20. 象棋联机java代码_中国象棋源代码Java程序

热门文章

  1. Codepage的定义和历史
  2. 干货|对于软件产品质量的一些思考
  3. 归一化谱聚类NCUT(matlab实现)
  4. 虚拟现实技术实现理论之梦境论述
  5. arcgis定义投影报错
  6. JavaCard开发环境搭建
  7. linux 群组分类,Linux文件权限与群组修改命令详解
  8. 火了很多年,月利润3W+的暴利项目
  9. 日常英语单词 - 足球
  10. 关于《冬天时我喜欢靠近温暖的事》这首歌 (民谣在路上)