في Python ، يمكنك العمل مع البيانات وتصورها. لا يستفيد المبرمجون من هذا فقط ، ولكن أيضًا العلماء: علماء الأحياء والفيزياء وعلماء الاجتماع. اليوم ، جنبًا إلى جنب مع
shwars ، أمينة دور
Python jumpstart لدورة AI ،
سنتحول لفترة وجيزة إلى خبراء الأرصاد الجوية ودراسة مناخ المدن الروسية. من المكتبات للتصور والعمل مع البيانات ، نستخدم Pandas و Matplotlib و Bokeh.

نقوم بالبحث في
Azure Notebooks ، النسخة السحابية من Jupyther Notebook. وبالتالي ، لبدء استخدام Python ، لا نحتاج إلى تثبيت أي شيء على جهاز الكمبيوتر الخاص بنا ويمكننا العمل مباشرة من المتصفح. تحتاج فقط إلى تسجيل الدخول باستخدام حساب Microsoft الخاص بك وإنشاء مكتبة وجهاز الكمبيوتر المحمول Python 3 الجديد. ثم يمكنك أخذ مقتطفات الشفرة من هذه المقالة والتجربة!
نحصل على البيانات
بادئ ذي بدء ، نستورد المكتبات الرئيسية التي نحتاجها.
Pandas هي مكتبة للعمل مع البيانات الجدولية ، أو ما يسمى بإطارات البيانات ، وسيسمح لنا
pyplot ببناء الرسوم البيانية.
import pandas as pd import matplotlib.pyplot as plt
من السهل العثور على بيانات المصدر على الإنترنت ، لكننا قمنا بالفعل بإعداد البيانات لك بتنسيق CSV مناسب. CSV هو تنسيق نصي يتم فيه فصل جميع الأعمدة بفواصل. ومن هنا الاسم - قيم مفصولة بفواصل.
يمكن لـ Pandas فتح ملفات CSV من قرص محلي وكذلك مباشرة من الإنترنت. البيانات نفسها تكمن في
مستودعنا على GitHub ، لذلك نحتاج فقط إلى تحديد عنوان URL الصحيح.
data = pd.read_csv("https://raw.githubusercontent.com/shwars/PythonJump/master/Data/climat_russia_cities.csv") data

قم بإعادة تسمية أعمدة الجدول بحيث يكون من الأسهل الوصول إليها بالاسم. نحتاج أيضًا إلى تحويل السلاسل إلى قيم عددية للعمل عليها. عندما نحاول القيام بذلك باستخدام الدالة
pd.to_numeric
، نجد حدوث خطأ غريب. هذا يرجع إلى حقيقة أنه بدلاً من ناقص ، يتم استخدام شرطة طويلة في النص.
data.columns=["City","Lat","Long","TempMin","TempColdest","AvgAnnual","TempWarmest","AbsMax","Precipitation"] data["TempMin"] = pd.to_numeric(data["TempMin"])
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) pandas/_libs/src/inference.pyx in pandas._libs.lib.maybe_convert_numeric() ValueError: Unable to parse string "−38.0" ... ... ... ValueError: Unable to parse string "−38.0" at position 0
وتنبع من هذه المشكلة أخلاق مهمة: عادة ما تأتي البيانات في شكل "قذر" ، وهو أمر غير ملائم للاستخدام ، ومهمة عالم البيانات هي جعل هذه البيانات في حالة جيدة.
يمكنك أن ترى أن بعض الأعمدة في جدولنا هي من نوع
object
، بدلاً من النوع الرقمي
float64
. في هذه الأعمدة ، سنستبدل الشرطة بعلامة ناقص ثم نحول الجدول بأكمله إلى تنسيق رقمي. الأعمدة التي لا يمكن تحويلها (أسماء المدن) ستظل دون تغيير (لهذا استخدمنا
errors='ignore'
الرئيسية
errors='ignore'
).
print(data.dtypes) for x in ["TempMin","TempColdest","AvgAnnual"]: data[x] = data[x].str.replace('−','-') data = data.apply(pd.to_numeric,errors='ignore') print(data.dtypes)
City object Lat float64 Long float64 TempMin object TempColdest object AvgAnnual object TempWarmest float64 AbsMax float64 Precipitation int64 dtype: object City object Lat float64 Long float64 TempMin float64 TempColdest float64 AvgAnnual float64 TempWarmest float64 AbsMax float64 Precipitation int64 dtype: object
نحن نبحث البيانات
الآن لدينا بيانات نظيفة ، يمكننا محاولة إنشاء رسوم بيانية مثيرة للاهتمام.
متوسط درجة الحرارة السنوية
على سبيل المثال ، دعنا نرى كيف يعتمد متوسط درجة الحرارة على خط العرض.
ax = data.plot(x="Lat",y="AvgAnnual",kind="Scatter") ax.set_xlabel("") ax.set_ylabel(" ")

يظهر الرسم البياني أنه كلما كان أقرب إلى خط الاستواء ، كلما كان أكثر دفئًا.
سجل المدن
الآن دعونا نلقي نظرة على المدن التي تعتبر أبطال درجة الحرارة ونرى ما إذا كان هناك ارتباط بين درجات الحرارة الدنيا والقصوى في المدينة.
ax=data.plot(x="TempMin",y="AbsMax",kind="scatter") ax.set_xlabel(" ") ax.set_ylabel(" ") ax.invert_xaxis()

كما ترون ، في هذه الحالة لا يوجد مثل هذا الارتباط. هناك مدن ذات مناخ قاري حاد ، ومدن دافئة وباردة فقط. نجد مدنًا ذات درجة حرارة قصوى منتشرة ، أي مدن ذات مناخ قاري حاد.
data['spread'] = data['TempWarmest'] - data['TempColdest'] data.nlargest(3,'spread')

هذه المرة لم نسجل ارتفاعات قياسية ، ولكن متوسطات الشهر الأكثر دفئًا وبرودة. كما هو متوقع ، أكبر مبعثر بين مدن جمهورية ساخا (ياقوتيا).
الشتاء والصيف
لمزيد من البحث ، ضع في اعتبارك المدن الواقعة داخل دائرة نصف قطرها 300 كم من موسكو. لحساب المسافة بين النقاط في خطوط الطول والعرض ، نستخدم مكتبة
geopy ، التي يجب تثبيتها أولاً باستخدام
pip install
.
!pip install geopy import geopy.distance
أضف عمودًا واحدًا إلى الجدول - المسافة إلى موسكو.
msk_coords = tuple(data.loc[data["City"]==""][["Lat","Long"]].iloc[0]) data["DistMsk"] = data.apply(lambda row : geopy.distance.distance(msk_coords,(row["Lat"],row["Long"])).km,axis=1) data.head()

نستخدم التعبير لتحديد الخطوط التي تهمنا فقط.
msk = data.loc[data['DistMsk']<300] msk

بالنسبة لهذه المدن ، نقوم ببناء جدول زمني للحد الأدنى ودرجات الحرارة السنوية والحد الأقصى.
ax=msk.plot(x="City",y=["TempColdest","AvgAnnual","TempWarmest"],kind="bar",stacked="true") ax.legend(["","",""],loc='lower right')

بشكل عام ، لم يلاحظ أي شذوذ في نطاق 300 كيلومتر حول موسكو. تقع إيفانوفو شمال باقي المدن ، وبالتالي تنخفض درجات الحرارة بعدة درجات.
العمل باستخدام البيانات الجغرافية
الآن دعنا نحاول أن نعرض على الخريطة متوسط هطول الأمطار السنوي بالرجوع إلى المدن ونرى كيف يعتمد هطول الأمطار على الموقع الجغرافي. لهذا نستخدم مكتبة تصور أخرى -
بوكيه . كما يحتاج إلى تثبيت.
ثم نحسب عمودًا آخر - حجم الدائرة ، والذي سيظهر كمية الأمطار. يتم اختيار المعامل تجريبيا.
!pip install bokeh from bokeh.io import output_file, output_notebook, show from bokeh.models import ( GMapPlot, GMapOptions, ColumnDataSource, Circle, LogColorMapper, BasicTicker, ColorBar, DataRange1d, PanTool, WheelZoomTool, BoxSelectTool, HoverTool ) from bokeh.models.mappers import ColorMapper, LinearColorMapper from bokeh.palettes import Viridis5 from bokeh.plotting import gmap
للعمل مع الخريطة ، تحتاج إلى مفتاح API لخرائط Google. يجب الحصول عليها بشكل مستقل
على الموقع .
يمكن العثور
هنا على تعليمات أكثر تفصيلاً حول استخدام بوكيه لرسم الخرائط على الخرائط
هنا وهنا .
google_key = "<INSERT YOUR KEY HERE>" data["PrecipSize"] = data["Precipitation"] / 50.0 map_options = GMapOptions(lat=msk_coords[0], lng=msk_coords[1], map_type="roadmap", zoom=4) plot = gmap(google_key,map_options=map_options) plot.title.text = " " source = ColumnDataSource(data=data) my_hover = HoverTool() my_hover.tooltips = [('', '@City'),('','@Precipitation')] plot.circle(x="Long", y="Lat", size="PrecipSize", fill_color="blue", fill_alpha=0.8, source=source) plot.add_tools(PanTool(), WheelZoomTool(), BoxSelectTool(), my_hover) output_notebook() show(plot)

كما ترون ، يحدث أكبر قدر من هطول الأمطار في المدن الساحلية. على الرغم من وجود عدد كبير من المدن حيث معدل هطول الأمطار متوسط أو حتى أقل من المستوى الوطني.
الرمز بأكمله مع التعليقات التي كتبها ديمتري Soshnikov ، يمكنك أن ترى بشكل مستقل وتشغيل
هنا .
الملخص
أظهرنا قدرات اللغة دون استخدام خوارزميات معقدة أو مكتبات محددة أو كتابة مئات الأسطر من التعليمات البرمجية. ومع ذلك ، حتى باستخدام الأدوات القياسية ، يمكنك تحليل بياناتك واستخلاص بعض النتائج.
مجموعات البيانات أبعد ما تكون عن تكوينها بشكل مثالي دائمًا ، لذلك قبل أن تبدأ في العمل مع التصور ، تحتاج إلى ترتيبها. تعتمد جودة التصور إلى حد كبير على جودة البيانات المستخدمة.
هناك عدد كبير من الأنواع المختلفة من الرسوم البيانية والرسوم البيانية ، وليس من الضروري أن تقتصر على المكتبات القياسية وحدها.
هناك
جيوبلوتليب ،
بلوتلي ،
جلد أضيق الحدود وغيرها.
إذا كنت ترغب في معرفة المزيد حول العمل مع البيانات في Python ، وكذلك التعرف على الذكاء الاصطناعي ، فإننا ندعوك إلى يوم مكثف من Binary District -
Python jumpstart for AI .