pandas中的统计方法、字符串离散化

常用方法: 

df[属性名].unique()去除对应列的重复值,并将其转换成列表可以用来去重
df[属性名].tolist()将属性列中的内容转换成列表属性列——>列表
df[属性列].str.split(分隔符)切割字符串pandas内置的str列内置的方法

现在我们有一组从2006年到2016年1000部最流行电影的数据,我们呢想知道这些电影数据中评分的平均分,导演的人数等信息,应该如何操作?

数据来源:https://www.kaggle.com/PromptCloudHQ/imdb-data

1、查看数据文件中的内容

import pandas as pd

file_path = "C:/Users/Lenovo/Desktop/IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)
print(df.head(1))
print(df.info())

2、求影评平均分、导演数

import pandas as pd

file_path = "C:/Users/Lenovo/Desktop/IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)

#获取电影平均评分
print(df["Rating"].mean())

#导演的人数
#set顾名思义是集合,里面不能包含重复的元素,接收一个list作为参数
print(len(set(df["Director"].tolist())))

3、求演员的数量

#获取演员数量
temp_actors_list = df["Actors"].str.split(", ").tolist() #列表嵌套列表
actors_list = [i for j in temp_actors_list for i in j] #双重循环拆解开嵌套链表
actors_num = len(set(actors_list))
print(actors_num)

4、电影数直方图(对连续数据的统计)

对于这一组电影数据,如果我们想知道rating、runtime的分布情况,使用直方图进行数据呈现。

import pandas as pd
from matplotlib import pyplot as plt

file_path = "C:/Users/Lenovo/Desktop/IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)
print(df.info())

#rating、runtime分布情况——>直方图

#准备数据
runtime_data = df["Runtime (Minutes)"].values
max_runtime = runtime_data.max()
min_runtime = runtime_data.min()

#计算组数
print(max_runtime, min_runtime, max_runtime - min_runtime)
num_bin = (max_runtime - min_runtime) // 5

#图形绘制
plt.figure(figsize=(20,8), dpi=80)
plt.hist(runtime_data, num_bin)
plt.xticks(range(min_runtime, max_runtime+5, 5)) #刻度设置
plt.show()

5、字符串离散化案例

对于一组电影的数据,如果我们希望统计电影分类(Genre)的情况,应该如何处理数据?

思路:重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变成1

  • 字符串转换成离散数据,使用条形图绘制具体图形(构造全为0的列表,统计各类出现的频数)

(1)构造出来的分类统计表

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

def myDeal():
    file_path = "C:/Users/Lenovo/Desktop/IMDB-Movie-Data.csv"
    df = pd.read_csv(file_path)

    #统计分类列表
    temp_list = df["Genre"].str.split(",").tolist() #[[], [], []]
    genre_list = list(set([i for j in temp_list for i in j]))

    #构造全为0的数组
    zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)
    #print(zeros_df)

    #给每个电影出现的分类位置赋为1
    for i in range(df.shape[0]):
        zeros_df.loc[i, temp_list[i]] = 1
    #print(zeros_df.head(3))

    #统计每个分类的电影的数量和
    genre_count = zeros_df.sum(axis=0)
    print(genre_count)

    #为各个分类出现的次数进行排序
    genre_count = genre_count.sort_values()
    print(genre_count)

    #绘图
    _x = genre_count.index
    _y = genre_count.values
    plt.figure(figsize=(20, 8), dpi=80)
    plt.bar(range(len(_x)), _y)
    plt.xticks(range(len(_x)), _x)
    plt.show()


if __name__ == '__main__':
    myDeal()

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值