pandas之生成时间序列
import pandas as pd
import numpy as np
print(pd.date_range(start="20171230",end="20180110",freq="D"))
print(pd.date_range(start="2017/12/30",end="20180131",freq="10D"))
print(pd.date_range(start="2017-12-30",periods=10,freq="D"))
print(pd.date_range(start="20171230",periods=10,freq="M"))
index=pd.date_range("2017-01-01",periods=4)
df=pd.DataFrame(np.random.rand(4),index=index)
print(df)
pandas之groupby单个分组
import pandas as pd
import numpy as np
file_path="./directory.csv"
df=pd.read_csv(file_path)
print(df.head(1))
print(df.info())
print(type(df))
grouped=df.groupby(by="Country")
print(grouped)
for i in grouped:
print(i)
country_count=grouped["Brand"].count()
print(type(country_count))
print(country_count["US"])
print(country_count["CN"])
print(type(country_count["CN"]))
print(type(grouped.count()))
print(type(grouped["Brand"]))
print(grouped["Brand"])
print(country_count)
china_data=df[df["Country"]=="CN"]
grouped=china_data.groupby(by="State/Province").count()["Brand"]
print(grouped)
pandas之groupby多个分组
import pandas as pd
file_path="./directory.csv"
df=pd.read_csv(file_path)
print(type(df[["Brand"]]))
print(type(df["Brand"]))
grouped=df["Country"].groupby(by=[df["Country"],df["State/Province"]]).count()
print(grouped)
grouped1=df[["Brand"]].groupby(by=[df["Country"],df["State/Province"]]).count()
grouped2=df.groupby(by=[df["Country"],df["State/Province"]])[["Brand"]].count()
grouped3=df.groupby(by=[df["Country"],df["State/Province"]]).count()[["Brand"]]
print(grouped1,type(grouped1))
print("*"*100)
print(grouped2,type(grouped2))
print("*"*100)
print(grouped3,type(grouped3))
统计电影分类的genre的情况
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path="./IMDB-Movie-Data.csv"
df=pd.read_csv(file_path)
print(df["Genre"])
temp_list=df["Genre"].str.split(",").tolist()
genre_list=list(set([i for j in temp_list for i in j]))
zeros_df=pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)
print(zeros_df)
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()
plt.figure(figsize=(20,8),dpi=80)
_x=genre_count.index
_y=genre_count.values
plt.bar(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x)
plt.show()
pandas、matplotlib出店铺排名前10的国家
import pandas as pd
from matplotlib import pyplot as plt
file_path="./directory.csv"
df=pd.read_csv(file_path)
data1=df.groupby(by="Country").count()["Brand"].sort_values(ascending=False)[:10]
_x=data1.index
_y=data1.values
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x)),_x)
plt.xticks(range(len(_x)),_x)
plt.show()
pandas、matplotlib呈现出每个中国城市的店铺数量横着的条形统计图
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc")
file_path="./directory.csv"
df=pd.read_csv(file_path)
df=df[df["Country"]=='CN']
data1=df.groupby(by="City").count()["Brand"].sort_values(ascending=False)[:25]
_x=data1.index
_y=data1.values
plt.figure(figsize=(20,10),dpi=80)
plt.barh(range(len(_x)),_y,height=0.3,color="orange")
plt.yticks(range(len(_x)),_x,fontproperties=my_font)
plt.show()
pandas、matplotlib绘制不同年份的书的数量
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./books.csv"
df=pd.read_csv(file_path)
data1=df[pd.notnull(df["original_publication_year"])]
grouped=data1.groupby(by="original_publication_year").count()["title"]
x=grouped.index
y=grouped.values
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(x,y)
plt.show()
pandas、matplotlib统计不同年份书的平均评分的情况
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./books.csv"
df=pd.read_csv(file_path)
data1=df[pd.notnull(df["original_publication_year"])]
grouped=data1["average_rating"].groupby(by=data1["original_publication_year"]).mean()
_x=grouped.index
_y=grouped.values
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)
plt.xticks(list(range(len(_x)))[::10],_x[::10].astype(int),rotation=90)
plt.show()
grouped1=data1["average_rating"].groupby(by=data1["original_publication_year"])
for i in grouped1:
print(i)
print(type(grouped1))
911之不同月份不同类型的电话的次数的变化情况
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df = pd.read_csv("./911.csv")
df["timeStamp"] = pd.to_datetime(df["timeStamp"])
temp_list = df["title"].str.split(": ").tolist()
cate_list = [i[0] for i in temp_list]
df["cate"] = pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1)))
df.set_index("timeStamp",inplace=True)
print(df.head(1))
plt.figure(figsize=(20, 8), dpi=80)
for group_name,group_data in df.groupby(by="cate"):
count_by_month = group_data.resample("M").count()["title"]
_x = count_by_month.index
print(_x)
_y = count_by_month.values
_x = [i.strftime("%Y%m%d") for i in _x]
plt.plot(range(len(_x)), _y, label=group_name)
plt.xticks(range(len(_x)), _x, rotation=45)
plt.legend(loc="best")
plt.show()
911之不同月份电话次数的变化情况
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df=pd.read_csv("./911.csv")
df["timeStamp"]=pd.to_datetime(df["timeStamp"],format="%Y-%m-%d")
df.set_index("timeStamp",inplace=True)
print(df.head())
count_by_month=df.resample("M").count()["title"]
_x=count_by_month.index
_y=count_by_month.values
_x=[i.strftime("%Y%m%d") for i in _x]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x,rotation=45)
plt.show()
911值统计不同月份的紧急情况的次数
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df=pd.read_csv("./911.csv")
temp_list=df["title"].str.split(":").tolist()
cate_list=list([i[0] for i in temp_list])
cate_df=pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1)),columns=["cate"])
df=pd.concat([df,cate_df],axis=1)
print(df.groupby(by="cate").count()["title"])
911数据分析之统计不同类型的紧急情况的次数
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df=pd.read_csv("./911.csv")
print(df.info())
temp_list=df["title"].str.split(":").tolist()
cate_list=list(set([i[0] for i in temp_list]))
print(cate_list)
zeros_df=pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)
print(zeros_df)
for cate in cate_list:
zeros_df[cate][df["title"].str.contains(cate)]=1
sum_ret=zeros_df.sum(axis=0)
plt.figure(figsize=(20,8),dpi=80)
_x=sum_ret.index
_y=sum_ret.values
plt.bar(_x,_y,width=0.3)
plt.show()
机器学习
定义
机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。
我们人从大量的日常经验中归纳规律,当面临新的问题的时候,就可以利用以往总结的规律去分析现实状况,采取最佳策略。
从数据(大量的猫和狗的图片)中自动分析获得模型(辨别猫和狗的规律),从而使机器拥有识别猫和狗的能力。
从数据(房屋的各种信息)中自动分析获得模型(判断房屋价格的规律),从而使机器拥有预测房屋价格的能力。
数据集的构成
结构:特征值+目标值
对于每一行数据我们可以称之为样本。 有些数据集可以没有目标值:
可用数据集
Kaggle网址:https://www.kaggle.com/datasets
UCI数据集网址: http://archive.ics.uci.edu/ml/
scikit-learn网址:http://scikit-learn.org/stable/datasets/index.html#datasets
sklearn数据集
1 scikit-learn数据集API介绍 sklearn.datasets 加载获取流行数据集 datasets.load_() 获取小规模数据集,数据包含在datasets里 datasets.fetch_(data_home=None) 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
2 sklearn小数据集 sklearn.datasets.load_iris()
加载并返回鸢尾花数据集
sklearn.datasets.load_boston()
加载并返回波士顿房价数据集
3 sklearn大数据集 sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’) subset:‘train’或者’test’,‘all’,可选,选择要加载的数据集。 训练集的“训练”,测试集的“测试”,两者的“全部”
数据集划分api
sklearn.model_selection.train_test_split(arrays, *options) x 数据集的特征值 y 数据集的标签值 test_size 测试集的大小,一般为float random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。 return 测试集特征训练集特征值值,训练标签,测试标签(默认随机取)
实例:鸢尾花
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def datasets_demo():
"""
对鸢尾花数据集的演示
:return: None
"""
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
print("鸢尾花的特征值:\n", iris["data"])
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
print("x_train:\n", x_train.shape)
x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
print("如果随机数种子不一致:\n", x_train == x_train1)
print("如果随机数种子一致:\n", x_train1 == x_train2)
return None
特征工程
特征工程包含内容
特征抽取 特征预处理 特征降维
特征抽取
字典特征提取
作用:对字典数据进行特征值化
from sklearn.feature_extraction import DictVectorizer
def dict_demo():
data= [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60},
{'city': '深圳', 'temperature': 30}]
transfer=DictVectorizer(sparse=False)
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new)
print("特征名字:\n",transfer.get_feature_names())
if __name__=="__main__":
dict_demo()
文本特征抽取
from sklearn.feature_extraction.text import CountVectorizer
data=["life is short,i like python",
"life is too long,i dislike python"]
transfer=CountVectorizer(stop_words=["is","too"])
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new.toarray())
print("特征名字:\n",transfer.get_feature_names())
data1=["我 爱 北京 天安门","天安门 上 太阳 升"]
transfer1=CountVectorizer()
data_new1=transfer1.fit_transform(data1)
print("data_new1:\n",data_new1.toarray())
print("特征名字:\n",transfer1.get_feature_names())
jieba分词之中文文本提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba
text="我爱北京天安门,天安门上太阳升"
print(list(jieba.cut(text)))
a=" ".join(list(jieba.cut(text)))
print(a)
b="-".join("我是一个粉刷匠,粉刷本领强")
print(b)
def cut_word(text):
return " ".join(list(jieba.cut(text)))
def count_chinese():
data =["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new=[]
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
transfer=CountVectorizer()
data_final=transfer.fit_transform(data_new)
print("data_new:\n",data_final.toarray())
print("特征名字:\n",transfer.get_feature_names())
if __name__=="__main__":
count_chinese()
Tf-idf之文本特征抽取
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cut_word(text):
return " ".join(list(jieba.cut(text)))
def count_chinese():
data =["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new=[]
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
transfer=TfidfVectorizer()
data_final=transfer.fit_transform(data_new)
print("data_new:\n",data_final.toarray())
print("特征名字:\n",transfer.get_feature_names())
if __name__=="__main__":
count_chinese()
特征处理
归一化
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
def minmax_demo():
data=pd.read_csv("dating.csv")
data=data.iloc[:,:3]
transfer=MinMaxScaler(feature_range=[2,3])
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new)
if __name__=="__main__":
minmax_demo()
标准化
|