本文通过一个电影分类统计的案例来对python数据分析形成一个初步的理解。以下是我在写代码时记录下的一些东西。
数据来源:IMDB data from 2006 to 2016 | Kaggle
取消PyCharm在打印时数据的省略
复制下面两行代码放在最前面即可
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
将分类一栏的数据展开成一维数组
26行的temp_type_list是一个列表,每一项也是一个列表,每一个列表项存放每一部电影的分类信息。
在30行中使用两层循环将temp_type_list展开成一位数组。
对分类信息计数
首先要拿出一组数据表示这些电影有哪几种分类,这里就用到了set集合这个数据类型不重复的特性(34行)。
因为一部电影不会有两个一样的分类信息,所以在30行的type_list(统计出来的电影的所有分类信息,有重复)中直接进行每种分类的计数即可,这里定义一个函数CountItemNum(item,list)以方便后面代码使用。
38行的genre_count_list为数量的列表,与genre_list中分类一一对应。
生成数据图
使用条形图或直方图(plt.hist()),0轴为分类名,1轴为该分类的电影数量。
(因为前面使用了set集合,集合具有无序性,每一次运行的时候数据图中的数据顺序不一样,但数量对应上了,问题不大)
Code
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
def CountItemNum(item_1, list_1):
count_num = 0
for i in list_1:
if i == item_1:
count_num += 1
return count_num
movieDataFile = 'dataFiles/IMDB-Movie-Data.csv'
mov_df = pd.read_csv(movieDataFile)
print(mov_df.head(1))
temp_type_list = mov_df['Genre'].str.split(',').tolist()
print(temp_type_list)
type_list = [i for j in temp_type_list for i in j]
print(type_list)
genre_list = list(set(type_list))
print(genre_list)
genre_count_list = []
for item in genre_list:
genre_count_list.append(CountItemNum(item, type_list))
print(genre_count_list)
matFont = {
'family': 'Microsoft Yahei'
}
plt.rc('font', **matFont)
plt.figure(figsize=(20, 8), dpi=80)
plt.bar(genre_list, genre_count_list, color='pink')
plt.xticks(genre_list)
plt.show()
|