import pandas as pd # 读取数据到DataFrame
from scipy import stats, integrate
from warnings import filterwarnings
filterwarnings('ignore')
import urllib # 获取网络数据
import tempfile # 创建临时文件系统
import shutil # 文件操作
import zipfile # 压缩解压
temp_dir = tempfile.mkdtemp() # 建立临时目录
data_source = 'http://archive.ics.uci.edu/ml/machine-learning-databases/00275/Bike-Sharing-Dataset.zip' # 网络数据地址
zipname = temp_dir + '/Bike-Sharing-Dataset.zip' # 拼接文件和路径
try:
urllib.urlretrieve(data_source, zipname) # 获得数据
except:
urllib.request.urlretrieve(data_source, zipname) # 获得数据
zip_ref = zipfile.ZipFile(zipname, 'r') # 创建一个ZipFile对象处理压缩文件
zip_ref.extractall(temp_dir) # 解压
zip_ref.close()
daily_path = temp_dir + '/day.csv'
daily_data = pd.read_csv(daily_path) # 读取csv文件
daily_data['dteday'] = pd.to_datetime(daily_data['dteday']) # 把字符串数据传换成日期数据
drop_list = ['instant', 'season', 'yr', 'mnth', 'holiday', 'workingday', 'weathersit', 'atemp', 'hum'] # 不关注的列
daily_data.drop(drop_list, inplace = True, axis = 1) # inplace=true在对象上直接操作
shutil.rmtree(temp_dir) # 删除临时文件目录
daily_data.head() # 看一看数据哈~
%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("white")
g = sns.lmplot(x="temp", y="cnt", data=daily_data)
g = sns.lmplot(x="temp", y="cnt", data=daily_data)
g.fig.set_size_inches(14, 7)# 设置尺寸等可用matplotlib里的函数即可
g.set_axis_labels('Normalized temperature (C)', 'Check outs')
daily_data.head()
sns.distplot(daily_data["casual"],label = 'casual')# 红色类似指数衰减
sns.distplot(daily_data["cnt"], label = 'cnt')# 绿色
sns.distplot(daily_data["registered"], label = 'registered')# 蓝色类似正态分布
plt.legend()
plt.xlabel('Value')
# 要是发现有的图形显示不全,就先画那个显示不全的图形在画布上
sns.jointplot(data=daily_data, x="registered", y="casual", kind="hex").annotate(stats.pearsonr)
sns.jointplot(data=daily_data, x="registered", y="casual", kind="kde")
画了二维的kde后,可以看到人的行为模式都会固定在上面的圈圈中,有助于帮助我们找到其中究竟有怎样的共同点。
# sns.boxplot(data=daily_data, x="weekday", y="registered")
sns.violinplot(data=daily_data, x="weekday", y="registered", scale="count")
提琴图看其中的分布,可以看到每天预约租车的都基本是正态分布。
提琴图的说明:
# sns.boxplot(data=daily_data, x="weekday", y="casual")
sns.violinplot(data=daily_data, x="weekday", y="casual", scale="count")
# count, area, width
非预约租车的每天差不多都有指数衰减的趋势, 尤其是工作日。
源码获取:关注微信公众号“AI阅读知识图谱”,回复“Python数据可视化”获取已更新内容全部代码。