数据分析day5之pandas

数据合并之join

join:默认情况下他是把行索引相同的数据合并到一起

数据合并之merge

merge:按照指定的列把数据按照一定的方式合并到一起

 

分组和聚合

pandas中类似的分组的操作我们有很简单的方式来完成

df.groupby(by="columns_name")

grouped = df.groupby(by="columns_name")

grouped是一个DataFrameGroupBy对象,是可迭代的

grouped中的每一个元素是一个元组

元组里面是(索引(分组的值),分组之后的DataFrame

 索引和复合索引

简单的索引操作:

获取 index df.index
指定 index df.index = [' x','y ']
重新设置 index : df.reindex (list(" abcedf "))
指定某一列作为 index df.set_index (" Country",drop =False)
返回 index 的唯一值: df.set_index ("Country"). index.unique ()

Series复合索引

DataFrame复合索引

 

import pandas  as pd
from matplotlib import pyplot as plt
file_path = "./books.csv"

df = pd.read_csv(file_path)
# print(df.head(4))
# print(df.info())
# data1 = df[pd.notnull(df["original_publication_year"])]
# grouped = data1.groupby(by="original_publication_year").count()["title"]

#不同年份书的平均评分情况
#去除original_publication_year列中nan的行
data1 = df[pd.notnull(df["original_publication_year"])]
grouped = data1["average_rating"].groupby(by=data1["original_publication_year"]).mean()


# #显示所有列
# pd.set_option('display.max_columns', None)
# #显示所有行
# pd.set_option('display.max_rows', None)
# #设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth',100)

_x = grouped.index
_y = grouped.values
#画图
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)
print(len(_x))

plt.xticks(list(range(len(_x)))[::10],_x[::10].astype(int),rotation=45)
plt.show()
print(grouped)
#不同年份书的平均评分情况

 

#使用matplotlib呈现出中国每个城市的数量
# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="C:/WINDOWS/Fonts/方正粗黑宋简体.ttf")
file_path = "./starbucks_store_worldwide.csv"

df = pd.read_csv(file_path)
df = df[df["Country"]=="CN"]

#使用matplotlib呈现出中国每个城市的数量
#准备数据
data1 = df.groupby(by="City").count()["Brand"].sort_values(ascending=False)[:25]

_x = data1.index
_y = data1.values

#画图
plt.figure(figsize=(20,12),dpi=80)

# plt.bar(range(len(_x)),_y,width=0.3,color="orange")
plt.barh(range(len(_x)),_y,height=0.3,color="orange")

plt.yticks(range(len(_x)),_x,fontproperties=my_font)

plt.show()

 

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值