果斷收藏!python數據分析入門學習筆記(上)

目錄

一、 數據分析有關的python庫簡介

(一)numpy

(二)pandas

(三)matplotlib

(四)scipy

(五)statsmodels

(六)scikit-learn

二、 數據的導入和導出

三、 數據篩選

四、 數據描述


前言:各種和數據分析相關python庫的介紹(前言1~4摘抄自《利用python進行數據分析》) 1.Numpy:   

Numpy是python科學計算的基礎包,它提供以下功能(不限於此):     

(1)快速高效的多維數組對象ndarray     

(2)用於對數組執行元素級計算以及直接對數組執行數學運算的函數     

(3)用於讀寫硬盤上基於數組的數據集的工具     

(4)線性代數運算、傅里葉變換,以及隨機數生成     

(5)用於將C、C++、Fortran代碼集成到python的工具

2.pandas   

pandas提供了使我們能夠快速便捷地處理結構化數據的大量數據結構和函數。pandas兼具Numpy高性能的數組計算功能以及電子表格和關係型數據(如SQL)靈活的數據處理能力。它提供了複雜精細的索引功能,以便更為便捷地完成重塑、切片和切塊、聚合以及選取數據子集等操作。   

對於金融行業的用戶,pandas提供了大量適用於金融數據的高性能時間序列功能和工具。

DataFrame是pandas的一個對象,它是一個面向列的二維表結構,且含有行標和列標。   

ps.引用一段網上的話說明DataFrame的強大之處:   

Excel 2007及其以後的版本的最大行數是1048576,最大列數是16384,超過這個規模的數據Excel就會彈出個框框“此文本包含多行文本,無法放置在一個工作表中”。Pandas處理上千萬的數據是易如反掌的事情,同時隨後我們也將看到它比SQL有更強的表達能力,可以做很多複雜的操作,要寫的code也更少。 說了一大堆它的好處,要實際感觸還得動手碼代碼。

3.matplotlib   

matplotlib是最流行的用於繪製數據圖表的python庫。

4.Scipy   

Scipy是一組專門解決科學計算中各種標準問題域的包的集合。

5.statsmodels: https://github.com/statsmodels/statsmodels

6.scikit-learn: http://scikit-learn.org/stable/


二.數據導入和導出

(一)讀取csv文件

1.本地讀取

<code>import pandas as pd
df = pd.read_csv('E:\\\\tips.csv') #根據自己數據文件保存的路徑填寫(p.s. python填寫路徑時,要麼使用/,要麼使用\\\\)
#輸出:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
5 25.29 4.71 Male No Sun Dinner 4
.. ... ... ... ... ... ... ...
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
[244 rows x 7 columns]/<code>

2.網絡讀取

<code>import pandas as pd
data_url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv" #填寫url讀取
df = pd.read_csv(data_url)
#輸出同上,為了節省篇幅這兒就不粘貼了/<code>

3.read_csv詳解

功能: Read CSV (comma-separated) file into DataFrame

<code>read_csv(filepath_or_buffer, sep=',', dialect=None, compression='infer', doublequote=True, 
escapechar=None, quotechar='"', quoting=0, skipinitialspace=False, lineterminator=None,
header='infer', index_col=None, names=None, prefix=None, skiprows=None,
skipfooter=None, skip_footer=0, na_values=None, true_values=None, false_values=None,
delimiter=None, converters=None, dtype=None, usecols=None, engine=None,
delim_whitespace=False, as_recarray=False, na_filter=True, compact_ints=False,
use_unsigned=False, low_memory=True, buffer_lines=None, warn_bad_lines=True,
error_bad_lines=True, keep_default_na=True, thousands=None, comment=None,
decimal='.', parse_dates=False, keep_date_col=False, dayfirst=False, date_parser=None,
memory_map=False, float_precision=None, nrows=None, iterator=False, chunksize=None,
verbose=False, encoding=None, squeeze=False, mangle_dupe_cols=True, tupleize_cols=False,
infer_datetime_format=False, skip_blank_lines=True)/<code>

參數詳解: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

(二)讀取Mysql數據   

假設數據庫安裝在本地,用戶名為myusername,密碼為mypassword,要讀取mydb數據庫中的數據

<code>import pandas as pd
import MySQLdb
mysql_cn= MySQLdb.connect(host='localhost', port=3306,user='myusername', passwd='mypassword',
db='mydb')
df = pd.read_sql('select * from test;', con=mysql_cn)
mysql_cn.close()/<code>

上面的代碼讀取了test表中所有的數據到df中,而df的數據結構為Dataframe。

ps.MySQL教程:http://www.runoob.com/mysql/mysql-tutorial.html

(三)讀取excel文件要讀取excel文件還需要安裝xlrd模塊,pip install xlrd即可。

<code>df = pd.read_excel('E:\\\\tips.xls')/<code>

(四)數據導出到csv文件

<code>df.to_csv('E:\\\\demo.csv', encoding='utf-8', index=False) 
#index=False表示導出時去掉行名稱,如果數據中含有中文,一般encoding指定為‘utf-8’/<code>

(五)讀寫SQL數據庫

<code>import pandas as pd
import sqlite3
con = sqlite3.connect('...')
sql = '...'
df=pd.read_sql(sql,con)

#help文件
help(sqlite3.connect)
#輸出
Help on built-in function connect in module _sqlite3:

connect(...)
connect(database[, timeout, isolation_level, detect_types, factory])

Opens a connection to the SQLite database file *database*. You can use
":memory:" to open a database connection to a database that resides in
RAM instead of on disk.
#############
help(pd.read_sql)
#輸出
Help on function read_sql in module pandas.io.sql:

read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
Read SQL query or database table into a DataFrame./<code>

ps.數據庫的代碼是我直接從網絡上粘貼過來的,沒有測試過是不是可行,先貼上來。

數據庫我還在摸索中,學習心得學習筆記之類的大家可以一起分享23333~

二.提取和篩選需要的數據

(一)提取和查看相應數據 (用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)

<code>print df.head() #打印數據前五行
#輸出
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4/<code>
<code>print df.tail()  #打印數據後5行
#輸出
total_bill tip sex smoker day time size
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2/<code>
<code>print df.columns  #打印列名
#輸出
Index([u'total_bill', u'tip', u'sex', u'smoker', u'day', u'time', u'size'], dtype='object')/<code>
<code>print df.index  #打印行名
#輸出
Int64Index([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
...
234, 235, 236, 237, 238, 239, 240, 241, 242, 243],
dtype='int64', length=244)/<code>
<code>print df.ix[10:20, 0:3]  #打印10~20行前三列數據
#輸出
total_bill tip sex
10 10.27 1.71 Male
11 35.26 5.00 Female
12 15.42 1.57 Male
13 18.43 3.00 Male
14 14.83 3.02 Female
15 21.58 3.92 Male
16 10.33 1.67 Female
17 16.29 3.71 Male
18 16.97 3.50 Female
19 20.65 3.35 Male
20 17.92 4.08 Male/<code>
<code>#提取不連續行和列的數據,這個例子提取的是第1,3,5行,第2,4列的數據 

df.iloc[[1,3,5],[2,4]]
#輸出
sex day
1 Male Sun
3 Male Sun
5 Male Sun/<code>
<code>#專門提取某一個數據,這個例子提取的是第三行,第二列數據(默認從0開始算哈)
df.iat[3,2]
#輸出
'Male'/<code>
<code>print df.drop(df.columns[1, 2], axis = 1) #捨棄數據前兩列
print df.drop(df.columns[[1, 2]], axis = 0) #捨棄數據前兩行
#為了節省篇幅結果就不貼出來了哈~/<code>
<code>print df.shape #打印維度
#輸出
(244, 7)/<code>
<code>df.iloc[3] #選取第3行
#輸出1
total_bill 23.68
tip 3.31
sex Male
smoker No
day Sun
time Dinner
size 2
Name: 3, dtype: object

df.iloc[2:4] #選取第2到第3行
#輸出2
total_bill tip sex smoker day time size
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2

df.iloc[0,1] #選取第0行1列的元素
#輸出3
1.01/<code>

(二)篩選出需要的數據(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)

<code>#example:假設我們要篩選出小費大於$8的數據
df[df.tip>8]
#輸出
total_bill tip sex smoker day time size
170 50.81 10 Male Yes Sat Dinner 3
212 48.33 9 Male No Sat Dinner 4/<code>
<code>#數據篩選同樣可以用”或“和”且“作為篩選條件,比如
#1
df[(df.tip>7)|(df.total_bill>50)] #篩選出小費大於$7或總賬單大於$50的數據
#輸出
total_bill tip sex smoker day time size
23 39.42 7.58 Male No Sat Dinner 4
170 50.81 10.00 Male Yes Sat Dinner 3
212 48.33 9.00 Male No Sat Dinner 4

#2
df[(df.tip>7)&(df.total_bill>50)]#篩選出小費大於$7且總賬單大於$50的數據
#輸出
total_bill tip sex smoker day time size
170 50.81 10 Male Yes Sat Dinner 3/<code>
<code>#接上
#假如加入了篩選條件後,我們只關心day和time
df[['day','time']][(df.tip>7)|(df.total_bill>50)]
#輸出
day time
23 Sat Dinner
170 Sat Dinner
212 Sat Dinner/<code>

四.數據描述(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)

<code>print df.describe() #描述性統計 

#輸出 各指標都比較簡單就不解釋了哈
total_bill tip size
count 244.000000 244.000000 244.000000
mean 19.785943 2.998279 2.569672
std 8.902412 1.383638 0.951100
min 3.070000 1.000000 1.000000
25% 13.347500 2.000000 2.000000
50% 17.795000 2.900000 2.000000
75% 24.127500 3.562500 3.000000
max 50.810000 10.000000 6.000000/<code>

end.


關注我們吧,查看更多幹貨文章,視頻。回覆“數據”還有數據分析相關資料領取,每週更有免費直播課,有問題也可私信諮詢小編哦!


分享到:


相關文章: