数据分析day6之pandas

pandas中的时间序列

  不管在什么行业,时间序列都是一种非常重要的数据形式,很多统计数据以及数据的规律也都和时间序列有着非常重要的联系。

#时间序列
import pandas as pd
date_list =pd.date_range(start="20211230",periods=10,freq="10D")
print(date_list)
date_list1 =pd.date_range(start="20211230",end="20220209",freq="10D")
print(date_list1)

生成一段时间范围

pd.date_range(start=None, end=None, periods=None, freq='D')

startend以及freq配合能够生成startend范围内以频率freq的一组时间索引

startperiods以及freq配合能够生成从start开始的频率为freqperiods时间索引

关于频率的更多缩写

 

DataFrame中使用时间序列

index=pd.date_range("20170101",periods=10)

df = pd.DataFrame(np.random.rand(10),index=index)

回到最开始的911数据的案例中,我们可以使用pandas提供的方法把时间字符串转化为时间序列

df["timeStamp"] = pd.to_datetime(df["timeStamp"],format="")

format参数大部分情况下可以不用写,但是对于pandas无法格式化的时间字符串,我们可以使用该参数,比如包含中文

 pandas重采样

重采样:指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样

pandas提供了一个resample的方法来帮助我们实现频率转化

PeriodIndex

之前所学习的DatetimeIndex可以理解为时间戳

那么现在我们要学习的PeriodIndex可以理解为时间段

periods = pd.PeriodIndex(year=data["year"],month=data["month"],day=data["day"],hour=data["hour"],freq="H")

那么如果给这个时间段降采样呢?
data = df.set_index(periods).resample("10D").mean()

 现在我们有北上广、深圳、和沈阳5个城市空气质量数据,请绘制出5个城市的PM2.5随时间的变化情况

import pandas as pd
from matplotlib import  pyplot as plt
file_path = "./PM2.5/BeijingPM20100101_20151231.csv"

df = pd.read_csv(file_path)

#把分开的时间字符串通过periodIndex的方法转化为pandas的时间类型
period = pd.PeriodIndex(year=df["year"],month=df["month"],day=df["day"],hour=df["hour"],freq="H")
df["datetime"] = period
# print(df.head(10))

#把datetime 设置为索引
df.set_index("datetime",inplace=True)

#进行降采样
df = df.resample("7D").mean()
print(df.head())
#处理缺失数据,删除缺失数据
# print(df["PM_US Post"])

data  =df["PM_US Post"]
data_china = df["PM_Nongzhanguan"]

print(data_china.head(100))
#画图
_x = data.index
_x = [i.strftime("%Y%m%d") for i in _x]
_x_china = [i.strftime("%Y%m%d") for i in data_china.index]
print(len(_x_china),len(_x_china))
_y = data.values
_y_china = data_china.values

plt.figure(figsize=(20,8),dpi=80)

plt.plot(range(len(_x)),_y,label="US_POST",alpha=0.7)
plt.plot(range(len(_x_china)),_y_china,label="CN_POST",alpha=0.7)

plt.xticks(range(0,len(_x_china),10),list(_x_china)[::10],rotation=45)

plt.legend(loc="best")

plt.show()

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,我会尽可能详细地回答。首先,需要明确一点的是,这个问题涉及到的技术领域比较广泛,包括爬虫、数据分析、numpy和pandas等知识,因此需要有一定的基础才能进行操作。下面我将分步骤讲解具体实现方法: 1. 爬取朋友圈信息 首先需要登录微信,并且安装itchat这个库。itchat是一个基于微信协议的Python库,可以实现登录微信、发送消息、接收消息等功能。在安装完成itchat之后,可以使用以下代码登录微信: ``` import itchat itchat.auto_login(hotReload=True) ``` 登录成功之后,可以使用以下代码获取朋友圈信息: ``` friends = itchat.get_friends(update=True) for friend in friends: print(friend['NickName']) for m in itchat.get_moments(): print(m['Text']) ``` 2. 数据分析 获取到朋友圈信息之后,需要进行基本的数据分析。这里涉及到numpy和pandas两个库。numpy是Python中非常重要的一个科学计算库,它提供了高性能的多维数组对象,并且可以进行广播、数学运算、逻辑运算等操作。pandas则是建立在numpy之上的一个数据处理库,可以方便地进行数据清洗、分组、聚合等操作。下面是一些常用的numpy和pandas操作: ``` import numpy as np import pandas as pd # 创建一个numpy数组 a = np.array([1, 2, 3, 4, 5]) # 对numpy数组进行基本的数学运算 b = np.sin(a) # 创建一个pandas DataFrame df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'], 'Age': [25, 30, 35, 40, 45], 'Gender': ['Female', 'Male', 'Male', 'Male', 'Female']}) # 对pandas DataFrame进行基本的数据清洗和分析 df.dropna() # 删除缺失值 df.groupby('Gender').mean() # 按照性别分组计算平均年龄 ``` 以上是一些numpy和pandas的基本操作,可以根据实际需要进行调整。 3. 完整代码 下面是一个完整的代码示例,包括登录微信、获取朋友圈信息、数据分析等操作: ``` import itchat import pandas as pd # 登录微信 itchat.auto_login(hotReload=True) # 获取朋友列表 friends = itchat.get_friends(update=True) # 获取朋友圈信息 moments = [] for m in itchat.get_moments(): moment = {} moment['UserName'] = m['UserName'] moment['NickName'] = m['User']['NickName'] moment['Content'] = m['Content'] moment['CreateTime'] = m['CreateTime'] moments.append(moment) # 将朋友圈信息转化为pandas DataFrame df = pd.DataFrame(moments) # 对DataFrame进行基本的数据分析 df['CreateTime'] = pd.to_datetime(df['CreateTime'], unit='s') df['Year'] = df['CreateTime'].dt.year df['Month'] = df['CreateTime'].dt.month df['Day'] = df['CreateTime'].dt.day df.groupby(['Year', 'Month'])['Content'].count() # 退出微信登录 itchat.logout() ``` 以上代码可以实现登录微信、获取朋友圈信息、将信息转化为DataFrame、进行基本的数据分析等操作。需要注意的是,由于微信的反爬虫机制比较严格,因此在实际操作中需要注意不要频繁地爬取数据,以免被微信封禁账号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值